@@ -38,7 +38,6 @@ | |||
namespace backend\controllers; | |||
use common\helpers\GlobalParam; | |||
use yii\filters\AccessControl; | |||
use Yii; | |||
use DateTime; | |||
@@ -65,7 +64,52 @@ class StatsAdminController extends BackendController | |||
]; | |||
} | |||
public function actionIndex() | |||
public function actionTurnover() | |||
{ | |||
$data = []; | |||
$dataLabels = []; | |||
$dateStart = date('Y-m-d', time() - 60 * 60 * 24 * 365); | |||
$dateEnd = date('Y-m-d', time() + 60 * 60 * 24 * 31); | |||
$start = new DateTime($dateStart); | |||
$interval = new DateInterval('P1M'); | |||
$end = new DateTime($dateEnd); | |||
$period = new DatePeriod($start, $interval, $end); | |||
foreach ($period as $date) { | |||
$month = date('m/Y', $date->getTimestamp()); | |||
$dataLabels[] = $month; | |||
$res = Yii::$app->db->createCommand("SELECT SUM(product_order.price * product_order.quantity) AS total | |||
FROM `order`, product_order, distribution | |||
WHERE `order`.id_distribution = distribution.id | |||
AND `order`.id = product_order.id_order | |||
AND distribution.date >= :date_start | |||
AND distribution.date <= :date_end | |||
") | |||
->bindValue(':date_start', date('Y-m-', $date->getTimestamp()) . '01') | |||
->bindValue(':date_end', date('Y-m-', $date->getTimestamp()) . '31') | |||
->queryOne(); | |||
if ($res['total']) { | |||
$data[$month] = $res['total']; | |||
} else { | |||
$data[$month] = 0; | |||
} | |||
} | |||
$dataNoIndex = []; | |||
foreach ($data as $key => $val) { | |||
$dataNoIndex[] = round($val, 2); | |||
} | |||
return $this->render('turnover', [ | |||
'dataLabels' => $dataLabels, | |||
'data' => $dataNoIndex, | |||
]); | |||
} | |||
public function actionCustomerOrders() | |||
{ | |||
$orderManager = $this->getOrderManager(); | |||
$data = []; | |||
@@ -83,7 +127,7 @@ class StatsAdminController extends BackendController | |||
$data[] = $orderManager->countGlobalOrdersByDateAndOrigin($date); | |||
} | |||
return $this->render('index', [ | |||
return $this->render('customer_orders', [ | |||
'dataLabels' => $dataLabels, | |||
'data' => $data, | |||
]); |
@@ -119,7 +119,16 @@ $userManager = $this->getUserManager(); | |||
['label' => 'Administration', 'options' => ['class' => 'header'], 'visible' => $userManager->isCurrentAdmin()], | |||
['label' => 'Producteurs', 'icon' => 'th-list', 'url' => ['/producer-admin/index'], 'visible' => $userManager->isCurrentAdmin()], | |||
['label' => 'Statistiques', 'icon' => 'line-chart', 'url' => ['/stats-admin/index'], 'visible' => $userManager->isCurrentAdmin()], | |||
[ | |||
'label' => 'Statistiques', | |||
'icon' => 'line-chart', | |||
'url' => ['/stats-admin/turnover'], | |||
'items' => [ | |||
['label' => 'Chiffre d\'affaire', 'icon' => 'line-chart', 'url' => ['/stats-admin/turnover'], 'visible' => $userManager->isCurrentAdmin()], | |||
['label' => 'Commandes clients', 'icon' => 'calendar', 'url' => ['/stats-admin/customer-orders'], 'visible' => $userManager->isCurrentAdmin()], | |||
], | |||
], | |||
['label' => 'Tranches de prix', 'icon' => 'eur', 'url' => ['/producer-price-range-admin/index'], 'visible' => $userManager->isCurrentAdmin()], | |||
['label' => 'Taxes', 'icon' => 'eur', 'url' => ['/tax-rate-admin/index'], 'visible' => $userManager->isCurrentAdmin()], | |||
['label' => 'Communiquer', 'icon' => 'bullhorn', 'url' => ['/communicate-admin/index'], 'visible' => $userManager->isCurrentAdmin()], |
@@ -38,8 +38,8 @@ termes. | |||
use dosamigos\chartjs\ChartJs; | |||
$this->setTitle('Statistiques') ; | |||
$this->addBreadcrumb('Statistiques') ; | |||
$this->setTitle('Statistiques commandes clients') ; | |||
$this->addBreadcrumb('Statistiques commandes clients') ; | |||
?> | |||
@@ -0,0 +1,67 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.net | |||
Ce logiciel est un programme informatique servant à aider les producteurs | |||
à distribuer leur production en circuits courts. | |||
Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||
respectant les principes de diffusion des logiciels libres. Vous pouvez | |||
utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||
sur le site "http://www.cecill.info". | |||
En contrepartie de l'accessibilité au code source et des droits de copie, | |||
de modification et de redistribution accordés par cette licence, il n'est | |||
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||
seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||
titulaire des droits patrimoniaux et les concédants successifs. | |||
A cet égard l'attention de l'utilisateur est attirée sur les risques | |||
associés au chargement, à l'utilisation, à la modification et/ou au | |||
développement et à la reproduction du logiciel par l'utilisateur étant | |||
donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||
manipuler et qui le réserve donc à des développeurs et des professionnels | |||
avertis possédant des connaissances informatiques approfondies. Les | |||
utilisateurs sont donc invités à charger et tester l'adéquation du | |||
logiciel à leurs besoins dans des conditions permettant d'assurer la | |||
sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||
pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||
termes. | |||
*/ | |||
use dosamigos\chartjs\ChartJs; | |||
$this->setTitle('Statistiques (chiffres d\'affaires)') ; | |||
$this->addBreadcrumb('Statistiques (chiffres d\'affaires)') ; | |||
?> | |||
<?= ChartJs::widget([ | |||
'type' => 'line', | |||
'options' => [ | |||
'height' => 400, | |||
'width' => 1100 | |||
], | |||
'data' => [ | |||
'labels' => $dataLabels, | |||
'datasets' => [ | |||
[ | |||
'label' => 'Chiffre d\'affaires', | |||
'backgroundColor' => "rgb(255,127,0,0.5)", | |||
'borderColor' => "rgb(255,127,0,1)", | |||
'pointBackgroundColor' => "rgb(255,127,0,1)", | |||
'pointStrokeColor' => "#fff", | |||
'data' => $data | |||
] | |||
] | |||
] | |||
]); | |||
?> |
@@ -1599,61 +1599,69 @@ body.skin-black .main-header .navbar .nav li.producer-menu .label { | |||
top: -2px; | |||
left: 0px; | |||
} | |||
/* line 87, ../sass/_adminlte.scss */ | |||
/* line 85, ../sass/_adminlte.scss */ | |||
body.skin-black .main-header .navbar .nav li.producer-menu #link-display-producers-offline { | |||
color: #FF7F00; | |||
} | |||
/* line 89, ../sass/_adminlte.scss */ | |||
body.skin-black .main-header .navbar .nav li.producer-menu .offline { | |||
display: none; | |||
} | |||
/* line 95, ../sass/_adminlte.scss */ | |||
body.skin-black .sidebar-menu > li.active > a { | |||
border-color: #FF7F00; | |||
} | |||
/* line 91, ../sass/_adminlte.scss */ | |||
/* line 99, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper { | |||
background-color: #f5f5f5; | |||
} | |||
/* line 94, ../sass/_adminlte.scss */ | |||
/* line 102, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .content-header { | |||
background-color: #F5F5F5; | |||
padding-bottom: 15px; | |||
border-bottom: solid 1px #e0e0e0; | |||
border-top: solid 1px #e0e0e0; | |||
} | |||
/* line 100, ../sass/_adminlte.scss */ | |||
/* line 108, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .content-header .btn { | |||
padding: 3px 6px; | |||
font-size: 10px; | |||
font-family: Arial; | |||
text-transform: uppercase; | |||
} | |||
/* line 107, ../sass/_adminlte.scss */ | |||
/* line 115, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .content-header h1 { | |||
font-family: "highvoltageregular"; | |||
} | |||
/* line 114, ../sass/_adminlte.scss */ | |||
/* line 122, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper a { | |||
color: #FF7F00; | |||
} | |||
/* line 118, ../sass/_adminlte.scss */ | |||
/* line 126, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .btn { | |||
color: white; | |||
} | |||
/* line 122, ../sass/_adminlte.scss */ | |||
/* line 130, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .btn-default { | |||
color: #333; | |||
background-color: white; | |||
} | |||
/* line 127, ../sass/_adminlte.scss */ | |||
/* line 135, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .btn-primary { | |||
background-color: #FF7F00; | |||
color: white; | |||
border-color: #FF7F00; | |||
} | |||
/* line 134, ../sass/_adminlte.scss */ | |||
/* line 142, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .alert a { | |||
color: white; | |||
} | |||
/* line 137, ../sass/_adminlte.scss */ | |||
/* line 145, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .alert a.btn { | |||
color: #333; | |||
text-decoration: none; | |||
} | |||
/* line 142, ../sass/_adminlte.scss */ | |||
/* line 150, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .alert .close { | |||
font-size: 30px; | |||
position: relative; | |||
@@ -1662,89 +1670,89 @@ body.skin-black .content-wrapper .alert .close { | |||
color: white; | |||
opacity: 0.6; | |||
} | |||
/* line 150, ../sass/_adminlte.scss */ | |||
/* line 158, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .alert .close:hover { | |||
opacity: 1; | |||
} | |||
/* line 157, ../sass/_adminlte.scss */ | |||
/* line 165, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .callout h4 .fa { | |||
margin-right: 7px; | |||
} | |||
/* line 160, ../sass/_adminlte.scss */ | |||
/* line 168, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .callout a { | |||
color: white; | |||
} | |||
/* line 163, ../sass/_adminlte.scss */ | |||
/* line 171, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .callout .btn { | |||
color: #333; | |||
text-decoration: none; | |||
} | |||
/* line 170, ../sass/_adminlte.scss */ | |||
/* line 178, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .table th { | |||
font-size: 13px; | |||
} | |||
/* line 173, ../sass/_adminlte.scss */ | |||
/* line 181, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .table th.column-actions, body.skin-black .content-wrapper .table td.column-actions { | |||
width: 150px; | |||
text-align: right; | |||
} | |||
/* line 177, ../sass/_adminlte.scss */ | |||
/* line 185, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .table td.text-small, body.skin-black .content-wrapper .table th.text-small { | |||
font-size: 12px; | |||
} | |||
/* line 182, ../sass/_adminlte.scss */ | |||
/* line 190, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .pagination > .active > a, body.skin-black .content-wrapper .pagination > .active > span, body.skin-black .content-wrapper .pagination > .active > a:hover, body.skin-black .content-wrapper .pagination > .active > span:hover, body.skin-black .content-wrapper .pagination > .active > a:focus, body.skin-black .content-wrapper .pagination > .active > span:focus { | |||
background-color: #FF7F00; | |||
border: solid 1px #FF7F00; | |||
color: white; | |||
} | |||
/* line 187, ../sass/_adminlte.scss */ | |||
/* line 195, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .pagination > li > a, body.skin-black .content-wrapper .pagination > li > span { | |||
color: #FF7F00; | |||
} | |||
/* line 189, ../sass/_adminlte.scss */ | |||
/* line 197, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .pagination > li > a:hover, body.skin-black .content-wrapper .pagination > li > span:hover { | |||
color: #cc6600; | |||
} | |||
/* line 194, ../sass/_adminlte.scss */ | |||
/* line 202, ../sass/_adminlte.scss */ | |||
body.skin-black .content-wrapper .submenu { | |||
margin-bottom: 25px; | |||
} | |||
/* line 200, ../sass/_adminlte.scss */ | |||
/* line 208, ../sass/_adminlte.scss */ | |||
body.skin-black .main-footer a { | |||
color: #FF7F00; | |||
} | |||
/* line 206, ../sass/_adminlte.scss */ | |||
/* line 214, ../sass/_adminlte.scss */ | |||
body.login-page { | |||
background: none; | |||
background-color: white; | |||
} | |||
/* line 210, ../sass/_adminlte.scss */ | |||
/* line 218, ../sass/_adminlte.scss */ | |||
body.login-page .login-box .login-logo { | |||
text-align: center; | |||
font-family: "comfortaalight"; | |||
} | |||
/* line 213, ../sass/_adminlte.scss */ | |||
/* line 221, ../sass/_adminlte.scss */ | |||
body.login-page .login-box .login-logo img { | |||
width: 50px; | |||
} | |||
/* line 218, ../sass/_adminlte.scss */ | |||
/* line 226, ../sass/_adminlte.scss */ | |||
body.login-page .login-box .login-box-body .btn-primary { | |||
background-color: #FF7F00; | |||
border-color: #FF7F00; | |||
padding: 5px 10px; | |||
} | |||
/* line 223, ../sass/_adminlte.scss */ | |||
/* line 231, ../sass/_adminlte.scss */ | |||
body.login-page .login-box .login-box-body .btn-primary:active { | |||
background-color: #ff8c1a; | |||
border-color: #FF7F00; | |||
} | |||
/* line 229, ../sass/_adminlte.scss */ | |||
/* line 237, ../sass/_adminlte.scss */ | |||
body.login-page .login-box .login-box-body a { | |||
color: #FF7F00; | |||
} | |||
/* line 231, ../sass/_adminlte.scss */ | |||
/* line 239, ../sass/_adminlte.scss */ | |||
body.login-page .login-box .login-box-body a:hover { | |||
color: #ff8c1a; | |||
} |
@@ -50,6 +50,7 @@ $(document).ready(function () { | |||
opendistrib_user_index(); | |||
opendistrib_menu_treeview(); | |||
opendistrib_select2(); | |||
opendistrib_dropdown_producers(); | |||
}); | |||
var UrlManager = { | |||
@@ -62,6 +63,14 @@ var UrlManager = { | |||
} | |||
}; | |||
function opendistrib_dropdown_producers() { | |||
$('#link-display-producers-offline').click(function() { | |||
$(this).hide(); | |||
$('.producer-menu .offline').show(); | |||
return false; | |||
}); | |||
} | |||
function opendistrib_popover() { | |||
$('button[data-toggle=popover], a[data-toggle=popover]').popover(); | |||
} |
@@ -80,7 +80,15 @@ body.skin-black { | |||
position: relative ; | |||
top: -2px ; | |||
left: 0px ; | |||
} | |||
} | |||
#link-display-producers-offline { | |||
color: $color1; | |||
} | |||
.offline { | |||
display: none; | |||
} | |||
} | |||
} | |||