[ '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) { // etablissements $etablissements = Yii::$app->user->identity->getEtablissementsFavoris() ; $id_etablissement = Yii::$app->request->get('id_etablissement', 0) ; // points de vente $points_vente = PointVente::find() ->where(['id_etablissement'=>$id_etablissement]) ->all(); $arr_points_vente = $points_vente; // 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') ->andWhere(['id_etablissement'=>$id_etablissement]) ->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, 'id_etablissement' => $id_etablissement]) ->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) && $commande->id_production) { $produits_dispos = ProductionProduit::findProduits($commande->id_production); $production = Production::find()->where(['id' => $commande->id_production])->one(); } $commandes = Commande::find() ->where(['id_user' => Yii::$app->user->identity->id]) ->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, 'etablissements' => $etablissements, 'id_etablissement' => $id_etablissement, ]; } public function actionIndex() { $model_form_etablissement = new AddEtablissementForm() ; if($model_form_etablissement->load(Yii::$app->request->post()) && $model_form_etablissement->validate()) { $model_form_etablissement->add() ; $model_form_etablissement->id_etablissement = 0 ; } // liste des etablissements $etablissements = Yii::$app->user->identity->getEtablissementsFavoris(); // liste des boulangeries disponibles $etablissements_dispos = Etablissement::find() ->orderby('code_postal, ville ASC') ->all() ; $departements = Departements::get() ; $data_etablissements_dispos = [] ; $options_etablissements_dispos = [] ; foreach($etablissements_dispos as $e) { if(!key_exists('d'. substr($e['code_postal'], 0, 2), $data_etablissements_dispos)) { $data_etablissements_dispos['d'. substr($e['code_postal'], 0, 2)] = ''.$departements[substr($e['code_postal'], 0, 2)].'' ; $options_etablissements_dispos['d'. substr($e['code_postal'], 0, 2)] = ['disabled' => true] ; } $data_etablissements_dispos[$e['id']] = Html::encode($e['nom']).' - '.Html::encode($e['code_postal']).' '.Html::encode($e['ville']) ; } // liste des commandes $commandes = Commande::find() ->with('commandeProduits', 'pointVente') ->joinWith('production','production.etablissement') ->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), 'etablissements' => $etablissements, 'model_form_etablissement' => $model_form_etablissement, 'data_etablissements_dispos' => $data_etablissements_dispos, 'options_etablissements_dispos' => $options_etablissements_dispos, ]); } public function actionRemoveEtablissement($id = 0) { $user_etablissement = UserEtablissement::find() ->where(['id_etablissement'=>$id, 'id_user' => Yii::$app->user->identity->id]) ->one() ; $user_etablissement->delete() ; $this->redirect(['commande/index']) ; } 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($commande), [ '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'); } if ($production->date < $date) { $err_date = 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])); } }