[ 'class' => AccessControl::className(), 'rules' => [ [ 'allow' => true, 'roles' => ['@'], ] ], ], ]; } public function actionInfosProduction($date) { $production = Production::find()->where(['date'=>$date])->one() ; if($production) { $produits_dispos = ProductionProduit::findProduits($production->id) ; return json_encode([ 'produits_dispos' => $produits_dispos, 'livraison' => (int) $production->livraison ]) ; } return json_encode([]) ; } public static function initForm($commande = null) { // points de vente $points_vente = PointVente::find()->all() ; $arr_points_vente = $points_vente ; /*$arr_points_vente = array(''=>'--') ; foreach($points_vente as $pv) $arr_points_vente[$pv->id] = $pv->nom.' ('.$pv->localite.')' ;*/ // jours de production; if(date('H') >= 20) { $date = date('Y-m-d',strtotime(date('Y-m-d')) + 60*60*24) ; } else { $date = date('Y-m-d') ; } $jours_production = Production::find() ->where(['actif'=>1]) ->andWhere('date > :date') ->addParams([':date'=>$date]) ->all() ; $arr_jours_production = array(''=>'--') ; foreach($jours_production as $j) $arr_jours_production[$j->id] = date('d/m/Y',strtotime($j->date)) ; // produits $produits = Produit::find()->where(['actif'=>1])->andWhere('vrac IS NULL OR vrac = 0')->orderBy('order ASC')->all() ; $arr_produits = array() ; foreach($produits as $p) $arr_produits[] = $p ; // produits vrac $produits_vrac = Produit::find()->where(['actif'=>1, 'vrac'=>1])->orderBy('order ASC')->all() ; // produits selec $posts = Yii::$app->request->post() ; $produits_selec = [] ; if(isset($posts['Produit'])) { foreach($posts['Produit'] as $key => $quantity) { $key = (int) str_replace('produit_', '', $key) ; $p = Produit::find()->where(['id'=>$key])->one() ; if($p && $quantity) $produits_selec[$p->id]= (int) $quantity ; } } elseif(!is_null($commande)) { $produits_commande = CommandeProduit::find()->where(['id_commande'=>$commande->id])->all() ; foreach($produits_commande as $pc) { $produits_selec[$pc->id_produit]= (int) $pc->quantite ; } } $produits_dispos = [] ; $production = null ; if(!is_null($commande)) { $produits_dispos = ProductionProduit::findProduits($commande->id_production) ; $production = Production::find()->where(['id'=>$commande->id_production])->one() ; } // commandes déjà réalisées /*if(!is_null($commande)) { $commandes = Commande::find() ->where(['id_user'=> Yii::$app->user->identity->id]) ->andWhere('date > :date') ->andWhere('id != '.$commande->id) ->addParams([':date'=>date('Y-m-d')]) ->all() ; } else {*/ $commandes = Commande::find() ->where(['id_user'=> Yii::$app->user->identity->id]) //->andWhere('date > :date') //->addParams([':date'=>date('Y-m-d 00:00:00')]) ->all() ; //} return [ 'points_vente' => $arr_points_vente, 'jours_production' => $arr_jours_production, 'produits' => $produits, 'produits_selec' => $produits_selec, 'produits_dispos' => $produits_dispos, 'production' => $production, 'commandes_en_cours' => $commandes, 'produits_vrac' => $produits_vrac ] ; } public function actionIndex() { // liste des commandes $commandes = Commande::find() ->with('commandeProduits','pointVente') ->joinWith('production') ->where(['id_user'=>Yii::$app->user->id]) //->andWhere('production.date < '.) ->orderBy('production.date DESC') ->limit(40) ->all() ; // initilisation commandes foreach($commandes as $c) $c->init() ; return $this->render('index',[ 'commandes' => $commandes, 'commande_ok' => Yii::$app->getRequest()->get('commande_ok',false), 'annule_ok' => Yii::$app->getRequest()->get('annule_ok',false), 'pate_deja_petrie' => Yii::$app->getRequest()->get('pate_deja_petrie',false), ]); } public function actionCreate() { $commande = new Commande ; $posts = Yii::$app->request->post() ; if ($commande->load($posts)) { $commande = Commande::find()->where('id_production = '.$posts['Commande']['id_production'])->andWhere('id_user = '.Yii::$app->user->id)->one() ; if(!$commande) { $commande = new Commande ; $commande->load(Yii::$app->request->post()) ; $commande->id_user = Yii::$app->user->id ; $commande->date = date('Y-m-d H:i:s') ; } $this->gestionForm($commande) ; } return $this->render('create', array_merge(self::initForm(),[ 'model' => $commande, ])); } public function actionUpdate($id) { $commande = Commande::find()->where(['id'=>$id])->one(); if ($commande && $commande->load(Yii::$app->request->post())) { $commande->date_update = date('Y-m-d H:i:s') ; $this->gestionForm($commande) ; } return $this->render('update', array_merge(self::initForm($commande),[ 'model' => $commande, 'commande_introuvable' => !$commande, ])); } public function gestionForm($commande) { $posts = Yii::$app->request->post() ; $produits = array() ; $quantite_totale = 0 ; foreach($posts['Produit'] as $key => $quantity) { $key = (int) str_replace('produit_', '', $key) ; $p = Produit::find()->where(['id'=>$key])->one() ; $quantite_totale += $quantity ; if($p && $quantity) $produits[]= $p ; } // nombre de produits $err_nb_produits = false ; if(!Yii::$app->user->identity->confiance && $quantite_totale > 3) { $err_nb_produits = true ; } // date $err_date = false ; $pate_deja_petrie = false ; if(isset($commande->id_production)) { // date de commande $production = Production::find()->where(['id'=>$commande->id_production])->one() ; if(date('H') >= 20) { $date = date('Y-m-d',strtotime(date('Y-m-d')) + 60*60*24) ; } else { $date = date('Y-m-d') ; } //die($production->date.' '.$date) ; if($production->date < $date) { $err_date = true ; } // pate déjà pétrie ou non /*if(date('Y-m-d', strtotime(date('Y-m-d')) + 60*60*24*3) > $production->date && date('H', strtotime(date('Y-m-d')) + 60*60*24*3) < 20) { $pate_deja_petrie = true ; }*/ } if ($commande->validate() && count($produits) && !$err_nb_produits && !$err_date) { // sauvegarde de la commande $commande->save() ; // suppression de tous les enregistrements CommandeProduit if(!is_null($commande)) { CommandeProduit::deleteAll(['id_commande'=>$commande->id]) ; } // produits dispos $produits_dispos = ProductionProduit::findProduits($production->id) ; // sauvegarde des produits foreach($produits as $p) { // le produit doit etre dispo à la vente if(isset($produits_dispos[$p->id]) && $produits_dispos[$p->id]['actif']) { $commande_produit = new CommandeProduit() ; $commande_produit->id_commande = $commande->id ; $commande_produit->id_produit = $p->id ; $commande_produit->prix = $p->prix ; $quantite_voulue = (int) $posts['Produit']['produit_'.$p->id] ; if($quantite_voulue > $produits_dispos[$p->id]['quantite_restante'] && !$produits_dispos[$p->id]['vrac']) $quantite_voulue = $produits_dispos[$p->id]['quantite_restante'] ; $commande_produit->quantite = $quantite_voulue ; $commande_produit->save() ; } } // redirection $this->redirect(Yii::$app->urlManager->createUrl(['commande/index','commande_ok'=>true, 'pate_deja_petrie'=>$pate_deja_petrie])) ; } else { if(!count($produits)) Yii::$app->session->setFlash('error', "Vous n'avez choisi aucun produit"); if($err_nb_produits) Yii::$app->session->setFlash('error', "Vous ne pouvez pas commander plus de 3 produits"); if($err_date) Yii::$app->session->setFlash('error', "Vous ne pouvez pas commander pour cette date."); } } public function actionAnnuler($id) { $commande = Commande::find()->where(['id'=>$id])->one(); if($commande && Yii::$app->user->id == $commande->id_user) { $commande->delete() ; CommandeProduit::deleteAll(['id_commande'=>$commande->id]) ; } $this->redirect(Yii::$app->urlManager->createUrl(['commande/index','annule_ok'=>true])) ; } }