Browse Source

Merge branch 'feature/backend/statistiques_produits_vendus_commandes' into dev

refactoring
keun 6 years ago
parent
commit
40583510bd
7 changed files with 251 additions and 1 deletions
  1. +83
    -0
      backend/controllers/StatsController.php
  2. +5
    -0
      backend/views/layouts/main.php
  3. +110
    -0
      backend/views/stats/produits.php
  4. BIN
      backend/web/.sass-cache/2a0ffb00578c9d5a537db16d14c734a22b18f35c/screen.scssc
  5. +23
    -0
      backend/web/css/screen.css
  6. +1
    -1
      backend/web/js/lechatdesnoisettes.js
  7. +29
    -0
      backend/web/sass/screen.scss

+ 83
- 0
backend/controllers/StatsController.php View File

@@ -84,6 +84,89 @@ class StatsController extends BackendController {
'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
]);
}

}


+ 5
- 0
backend/views/layouts/main.php View File

@@ -110,6 +110,11 @@ if(!Yii::$app->user->isGuest)
'url' => ['/stats/index'],
'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',
'url' => ['/developpement/index'],

+ 110
- 0
backend/views/stats/produits.php View File

@@ -0,0 +1,110 @@
<?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]); ?>">&lt; <?= ($year - 1) ?></a>
<a class="btn btn-default" href="<?= Yii::$app->urlManager->createUrl(['stats/produits','year' => $year + 1]); ?>"><?= ($year + 1) ?> &gt;</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>

BIN
backend/web/.sass-cache/2a0ffb00578c9d5a537db16d14c734a22b18f35c/screen.scssc View File


+ 23
- 0
backend/web/css/screen.css View File

@@ -1322,3 +1322,26 @@ a:hover, a:focus, a:active {
margin-bottom: 2px;
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;
}

+ 1
- 1
backend/web/js/lechatdesnoisettes.js View File

@@ -29,7 +29,7 @@ var UrlManager = {
};

function chat_tooltip() {
$('[data-toggle="tooltip"]').tooltip();
$('[data-toggle="tooltip"]').tooltip({container:'body'});
}

function chat_nl2br(str, is_xhtml) {

+ 29
- 0
backend/web/sass/screen.scss View File

@@ -1340,4 +1340,33 @@ a {
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 ;
}
}

Loading…
Cancel
Save