'data_pain' => $data_pain_noindex, | 'data_pain' => $data_pain_noindex, | ||||
]); | ]); | ||||
} | } | ||||
const TOTAUX = 13 ; | |||||
public function actionProduits($year = 0) { | |||||
if(!$year) $year = date('Y') ; | |||||
$produits = Produit::find() | |||||
->where('(vrac IS NULL OR vrac = 0)') | |||||
->andWhere(['id_etablissement' => Yii::$app->user->identity->id_etablissement]) | |||||
->orderBy('order ASC') | |||||
->all() ; | |||||
$arr_produits = [] ; | |||||
$arr_produits[self::TOTAUX] = ['max' => [], 'commandes' => []] ; | |||||
foreach($produits as $p) { | |||||
$arr_produits[self::TOTAUX]['max'][$p['nom']] = 0 ; | |||||
$arr_produits[self::TOTAUX]['commandes'][$p['nom']] = 0 ; | |||||
} | |||||
$empty = true ; | |||||
for($i = 1; $i <= 12; $i++) { | |||||
// Maximums | |||||
$res_maximums = Yii::$app->db->createCommand("SELECT produit.nom, SUM(IF(production_produit.actif,production_produit.quantite_max,0)) AS total | |||||
FROM production, production_produit, produit | |||||
WHERE production.id_etablissement = ".Yii::$app->user->identity->id_etablissement." | |||||
AND production.date >= :date_begin | |||||
AND production.date <= :date_end | |||||
AND production.id = production_produit.id_production | |||||
AND production_produit.id_produit = produit.id | |||||
GROUP BY produit.id | |||||
ORDER BY produit.nom") | |||||
->bindValue(':date_begin', date($year.'-'.str_pad($i, 2, 0, STR_PAD_LEFT).'-01')) | |||||
->bindValue(':date_end', date($year.'-'.str_pad($i, 2, 0, STR_PAD_LEFT).'-31')) | |||||
->queryAll(); | |||||
$arr_produits[$i]['max'] = $res_maximums ; | |||||
if(count($res_maximums)) $empty = false ; | |||||
foreach($res_maximums as $produit_max) { | |||||
if(!isset($arr_produits[self::TOTAUX]['max'][$produit_max['nom']])) $arr_produits[self::TOTAUX]['max'][$produit_max['nom']] = 0 ; | |||||
$arr_produits[self::TOTAUX]['max'][$produit_max['nom']] += $produit_max['total'] ; | |||||
} | |||||
// Commandés | |||||
$res_commandes = Yii::$app->db->createCommand("SELECT produit.nom, SUM(commande_produit.quantite) AS total | |||||
FROM production, commande, commande_produit, produit | |||||
WHERE production.id_etablissement = ".Yii::$app->user->identity->id_etablissement." | |||||
AND production.date >= :date_begin | |||||
AND production.date <= :date_end | |||||
AND production.id = commande.id_production | |||||
AND commande.id = commande_produit.id_commande | |||||
AND commande_produit.id_produit = produit.id | |||||
GROUP BY produit.id | |||||
ORDER BY produit.nom") | |||||
->bindValue(':date_begin', date($year.'-'.str_pad($i, 2, 0, STR_PAD_LEFT).'-01')) | |||||
->bindValue(':date_end', date($year.'-'.str_pad($i, 2, 0, STR_PAD_LEFT).'-31')) | |||||
->queryAll(); | |||||
$arr_produits[$i]['commandes'] = $res_commandes ; | |||||
if(count($res_commandes)) $empty = false ; | |||||
foreach($res_commandes as $produit_commandes) { | |||||
if(!isset($arr_produits[self::TOTAUX]['commandes'][$produit_commandes['nom']])) $arr_produits[self::TOTAUX]['commandes'][$produit_commandes['nom']] = 0 ; | |||||
$arr_produits[self::TOTAUX]['commandes'][$produit_commandes['nom']] += $produit_commandes['total'] ; | |||||
} | |||||
} | |||||
ksort($arr_produits) ; | |||||
$arr_mois = ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre','Totaux'] ; | |||||
return $this->render('produits', [ | |||||
'year' => $year, | |||||
'arr_mois' => $arr_mois, | |||||
'produits' => $produits, | |||||
'arr_produits' => $arr_produits, | |||||
'empty' => $empty | |||||
]); | |||||
} | |||||
} | } | ||||
'url' => ['/stats/index'], | 'url' => ['/stats/index'], | ||||
'visible' => !Yii::$app->user->isGuest, | 'visible' => !Yii::$app->user->isGuest, | ||||
], | ], | ||||
[ | |||||
'label' => '<span class="glyphicon glyphicon-stats"></span> Statistiques produits', | |||||
'url' => ['/stats/produits'], | |||||
'visible' => !Yii::$app->user->isGuest, | |||||
], | |||||
[ | [ | ||||
'label' => '<span class="glyphicon glyphicon-wrench"></span> Développement', | 'label' => '<span class="glyphicon glyphicon-wrench"></span> Développement', | ||||
'url' => ['/developpement/index'], | 'url' => ['/developpement/index'], |
<?php | |||||
use \backend\controllers\StatsController ; | |||||
$this->title = 'Statistiques produits' ; | |||||
$this->params['breadcrumbs'][] = 'Statistiques produits'; | |||||
?> | |||||
<div class="stats-produits"> | |||||
<h1>Statistiques produits <?= $year ?> | |||||
<div id="nav-year"> | |||||
<a class="btn btn-default" href="<?= Yii::$app->urlManager->createUrl(['stats/produits','year' => $year - 1]); ?>">< <?= ($year - 1) ?></a> | |||||
<a class="btn btn-default" href="<?= Yii::$app->urlManager->createUrl(['stats/produits','year' => $year + 1]); ?>"><?= ($year + 1) ?> ></a> | |||||
</div> | |||||
</h1> | |||||
<?php if($empty): ?> | |||||
<div class="alert alert-warning">Aucune statistique disponible pour cette période</div> | |||||
<?php else: ?> | |||||
<table id="table-stats-produits" class="table table-bordered table-hover header-fixed"> | |||||
<thead> | |||||
<tr class="mois"> | |||||
<th></th> | |||||
<?php foreach($arr_mois as $m): ?> | |||||
<th colspan="2"><?= $m; ?></th> | |||||
<?php endforeach; ?> | |||||
</tr> | |||||
<tr class="sub-head"> | |||||
<th></th> | |||||
<?php for($i=1; $i<=13; $i++): ?> | |||||
<th>Maximum</th> | |||||
<th>Commandés</th> | |||||
<?php endfor; ?> | |||||
</tr> | |||||
</thead> | |||||
<tbody> | |||||
<?php foreach($produits as $produit_current): ?> | |||||
<tr> | |||||
<td class="nom"><?= Html::encode($produit_current['nom']) ?></td> | |||||
<?php foreach($arr_produits as $mois => $arr_produit_mois): | |||||
$find_max = false ; | |||||
$find_commandes = false ; | |||||
?> | |||||
<?php if($mois != StatsController::TOTAUX): ?> | |||||
<!-- max --> | |||||
<?php foreach($arr_produit_mois['max'] as $produit): | |||||
$tooltip = 'data-toggle="tooltip" data-placement="top" data-original-title="'.Html::encode($produit_current['nom']).' / '.$arr_mois[$mois - 1] .' '. $year.' / Maximum"' ; | |||||
?> | |||||
<?php if($produit['nom'] == $produit_current['nom']): | |||||
$find_max = true ; | |||||
?> | |||||
<td class="align-center"> | |||||
<div <?= $tooltip; ?>><?= $produit['total'] ?></div> | |||||
</td> | |||||
<?php endif; ?> | |||||
<?php endforeach; ?> | |||||
<?php if(!$find_max): ?><td class="align-center"><div <?= $tooltip; ?>>0</div></td><?php endif; ?> | |||||
<!-- commandes --> | |||||
<?php foreach($arr_produit_mois['commandes'] as $produit): | |||||
$tooltip = 'data-toggle="tooltip" data-placement="top" data-original-title="'.Html::encode($produit_current['nom']).' / '. $arr_mois[$mois - 1] . ' '. $year .' / Commandés"' ; | |||||
?> | |||||
<?php if($produit['nom'] == $produit_current['nom']): | |||||
$find_commandes = true ; | |||||
?> | |||||
<td class="align-center"> | |||||
<div <?= $tooltip ?> ><?= $produit['total'] ?></div> | |||||
</td> | |||||
<?php endif; ?> | |||||
<?php endforeach; ?> | |||||
<?php if(!$find_commandes): ?><td class="align-center"><div <?= $tooltip ?> >0</div></td><?php endif; ?> | |||||
<?php else: ?> | |||||
<!-- totaux max --> | |||||
<?php foreach($arr_produits[StatsController::TOTAUX]['max'] as $nom_produit => $total_max): | |||||
$tooltip = 'data-toggle="tooltip" data-placement="top" data-original-title="'.Html::encode($produit_current['nom']).' / Total '. $year .' / Maximums"' ; | |||||
?> | |||||
<?php if($nom_produit == $produit_current['nom']): ?> | |||||
<td class="align-center"> | |||||
<div <?= $tooltip ?> ><?= $total_max ?></div> | |||||
</td> | |||||
<?php endif; ?> | |||||
<?php endforeach; ?> | |||||
<!-- totaux commandés --> | |||||
<?php foreach($arr_produits[StatsController::TOTAUX]['commandes'] as $nom_produit => $total_commandes): | |||||
$tooltip = 'data-toggle="tooltip" data-placement="top" data-original-title="'.Html::encode($produit_current['nom']).' / Total '. $year .' / Commandés"' ; | |||||
?> | |||||
<?php if($nom_produit == $produit_current['nom']): ?> | |||||
<td class="align-center"> | |||||
<div <?= $tooltip ?> ><?= $total_commandes ?></div> | |||||
</td> | |||||
<?php endif; ?> | |||||
<?php endforeach; ?> | |||||
<?php endif; ?> | |||||
<?php endforeach; ?> | |||||
</tr> | |||||
<?php endforeach; ?> | |||||
</tbody> | |||||
</table> | |||||
<?php endif; ?> | |||||
</div> |
margin-bottom: 2px; | margin-bottom: 2px; | ||||
padding: 5px 8px; | padding: 5px 8px; | ||||
} | } | ||||
/* stats */ | |||||
/* line 1349, ../sass/screen.scss */ | |||||
.stats-produits #nav-year { | |||||
float: right; | |||||
} | |||||
/* line 1354, ../sass/screen.scss */ | |||||
.stats-produits tr.mois th { | |||||
text-align: center; | |||||
} | |||||
/* line 1359, ../sass/screen.scss */ | |||||
.stats-produits tr.sub-head th { | |||||
font-weight: normal; | |||||
font-size: 12px; | |||||
} | |||||
/* line 1365, ../sass/screen.scss */ | |||||
.stats-produits td.nom { | |||||
text-transform: uppercase; | |||||
} | |||||
/* line 1369, ../sass/screen.scss */ | |||||
.stats-produits td.align-center { | |||||
text-align: center; | |||||
} |
}; | }; | ||||
function chat_tooltip() { | function chat_tooltip() { | ||||
$('[data-toggle="tooltip"]').tooltip(); | |||||
$('[data-toggle="tooltip"]').tooltip({container:'body'}); | |||||
} | } | ||||
function chat_nl2br(str, is_xhtml) { | function chat_nl2br(str, is_xhtml) { |
padding: 5px 8px ; | padding: 5px 8px ; | ||||
} | } | ||||
} | } | ||||
} | |||||
/* stats */ | |||||
.stats-produits { | |||||
#nav-year { | |||||
float: right ; | |||||
} | |||||
tr.mois { | |||||
th { | |||||
text-align: center ; | |||||
} | |||||
} | |||||
tr.sub-head { | |||||
th { | |||||
font-weight: normal ; | |||||
font-size: 12px ; | |||||
} | |||||
} | |||||
td.nom { | |||||
text-transform: uppercase ; | |||||
} | |||||
td.align-center { | |||||
text-align: center ; | |||||
} | |||||
} | } |