Browse Source

Tableau de bord : afficher la liste des boulangeries liées à l'utilisateur

prodstable
keun 8 years ago
parent
commit
509f9d8418
5 changed files with 316 additions and 311 deletions
  1. +10
    -0
      common/models/User.php
  2. +1
    -0
      console/migrations/m161020_072119_champs_boulangerie.php
  3. +290
    -300
      frontend/controllers/CommandeController.php
  4. +14
    -10
      frontend/views/commande/index.php
  5. +1
    -1
      frontend/views/layouts/main.php

+ 10
- 0
common/models/User.php View File

@@ -232,4 +232,14 @@ class User extends ActiveRecord implements IdentityInterface
return $this->is_boulanger ;
}
public function getBoulangeriesFavoris()
{
return (new \yii\db\Query())
->select('*')
->from(['user_boulangerie','user'])
->where('user_boulangerie.id_boulangerie = user.id')
->andWhere(['user_boulangerie.id_user' => $this->id])
->all();
}
}

+ 1
- 0
console/migrations/m161020_072119_champs_boulangerie.php View File

@@ -1,5 +1,6 @@
<?php

use yii\db\Schema;
use yii\db\Migration;

class m161020_072119_champs_boulangerie extends Migration

+ 290
- 300
frontend/controllers/CommandeController.php View File

@@ -3,315 +3,305 @@
namespace frontend\controllers;

use common\models\ProductionProduit;

use common\models\CommandeProduit;

use Yii;
use yii\filters\AccessControl;
use common\models\Commande ;
use common\models\PointVente ;
use common\models\Production ;
use common\models\Produit ;

class CommandeController extends \yii\web\Controller
{
public function behaviors()
{
return [
'access' => [
'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,
]));
use common\models\Commande;
use common\models\PointVente;
use common\models\Production;
use common\models\Produit;

class CommandeController extends \yii\web\Controller {

public function behaviors() {
return [
'access' => [
'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 boulangeries
$boulangeries = Yii::$app->user->identity->getBoulangeriesFavoris();

// 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),
'boulangeries' => $boulangeries
]);
}

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 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.");
}
$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])) ;
$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]));
}

}

+ 14
- 10
frontend/views/commande/index.php View File

@@ -9,18 +9,22 @@ $this->title = 'Commande' ;

<div id="index-commande">

<h1 class="title-systeme-commande"><img class="icon" src="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/order.png" alt="" /> Commandes</h1>
<h1 class="title-systeme-commande"><img class="icon" src="<?php echo Yii::$app->urlManager->getBaseUrl(); ?>/img/order.png" alt="" /> Tableau de bord</h1>

<div class="accueil">
<!--<div id="message-fermeture">
<div class="line1"><span>Le Chat des Noisettes</span> est actuellement <strong class="ferme">fermé</strong> pour cause de travaux.</div>
<div class="line2">La réouverture aura lieu dès que possible ! Plus de renseignements au <strong>06 37 02 72 20</strong></div>
</div>-->
<h2>Boulangeries</h2>
<?php if(count($boulangeries)): ?>
<ul>
<?php foreach($boulangeries as $b): ?>
<li><?php echo Html::encode($b['nom_magasin']); ?></li>
<?php endforeach; ?>
</ul>
<?php else: ?>
<div class="alert alert-info">Aucune boulangerie</div>
<?php endif; ?>

<!--<div class="accueil">
<a class="btn btn-primary btn-lg" href="<?php echo Yii::$app->urlManager->createUrl(['commande/create']); ?>">Passer une commande</a>
</div>
</div>-->

<h2>Historique</h2>
<?php if(count($commandes)): ?>

+ 1
- 1
frontend/views/layouts/main.php View File

@@ -44,8 +44,8 @@ AppAsset::register($this);
<nav class="">
<ul class="nav nav-pills">
<?php if(!Yii::$app->user->isGuest): ?>
<li><a <?php if(Yii::$app->controller->id == 'commande' && Yii::$app->controller->action->id == 'index'): ?>class="active" <?php endif; ?>href="<?php echo Yii::$app->urlManager->createUrl('commande/index') ; ?>"><span class="glyphicon glyphicon-th-list"></span> Tableau de bord</a></li>
<li><a <?php if(Yii::$app->controller->id == 'commande' && Yii::$app->controller->action->id == 'create'): ?>class="active" <?php endif; ?>href="<?php echo Yii::$app->urlManager->createUrl('commande/create') ; ?>"><span class="glyphicon glyphicon-plus"></span> Commander</a></li>
<li><a <?php if(Yii::$app->controller->id == 'commande' && Yii::$app->controller->action->id == 'index'): ?>class="active" <?php endif; ?>href="<?php echo Yii::$app->urlManager->createUrl('commande/index') ; ?>"><span class="glyphicon glyphicon-th-list"></span> Historique</a></li>
<li><a <?php if(Yii::$app->controller->id == 'user' && Yii::$app->controller->action->id == 'update'): ?>class="active" <?php endif; ?>href="<?php echo Yii::$app->urlManager->createUrl('user/update') ; ?>"><span class="glyphicon glyphicon-user"></span> Profil</a></li>
<li><a id="link-logout" href="<?php echo Yii::$app->urlManager->createUrl('site/logout') ; ?>"><span class="glyphicon glyphicon-off"></span> Déconnexion<!-- <span class="nom">(<?php echo Html::encode(Yii::$app->user->identity->prenom .' '. substr(strtoupper(Yii::$app->user->identity->nom), 0, 1).'.') ; ?>)</span>--></a></li>
<?php if(Yii::$app->user->identity->isBoulanger()): ?><li><a class="" id="link-espace-boulanger" href="../../backend/web/"><span class="glyphicon glyphicon-grain"></span> Espace boulanger</a></li><?php endif; ?>

Loading…
Cancel
Save