@@ -426,7 +426,7 @@ class OrderController extends BackendController | |||
$distribution = $distributionManager->findOneDistribution($date); | |||
$selectedProductsArray = $productDistributionManager->findProductDistributionsByDistribution($distribution); | |||
$productsArray = $productManager->findProducts(); | |||
$ordersArray = $orderManager->findOrdersByDate($date); | |||
$ordersArray = $orderManager->findOrdersByDistributionDate($date); | |||
$pointsSaleArray = $pointSaleManager->findPointSales(); | |||
foreach ($pointsSaleArray as $pointSale) { |
@@ -0,0 +1,94 @@ | |||
<?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. | |||
*/ | |||
namespace backend\controllers; | |||
use common\helpers\GlobalParam; | |||
use yii\filters\AccessControl; | |||
use Yii; | |||
use DateTime; | |||
use DateInterval; | |||
use DatePeriod; | |||
class StatsAdminController extends BackendController | |||
{ | |||
public function behaviors() | |||
{ | |||
return [ | |||
'access' => [ | |||
'class' => AccessControl::class, | |||
'rules' => [ | |||
[ | |||
'allow' => true, | |||
'roles' => ['@'], | |||
'matchCallback' => function ($rule, $action) { | |||
return $this->isUserCurrentAdmin(); | |||
} | |||
] | |||
], | |||
], | |||
]; | |||
} | |||
public function actionIndex() | |||
{ | |||
$orderManager = $this->getOrderManager(); | |||
$data = []; | |||
$dataLabels = []; | |||
$dateStart = date('Y-m-d', time() - 60 * 60 * 24 * 30); | |||
$dateEnd = date('Y-m-d', time() + 60 * 60 * 24); | |||
$start = new DateTime($dateStart); | |||
$interval = new DateInterval('P1D'); | |||
$end = new DateTime($dateEnd); | |||
$period = new DatePeriod($start, $interval, $end); | |||
foreach ($period as $date) { | |||
$dateFormat = date('d/m/Y', $date->getTimestamp()); | |||
$dataLabels[] = $dateFormat; | |||
$data[] = $orderManager->countOrdersByDateAndOrigin($date); | |||
} | |||
return $this->render('index', [ | |||
'dataLabels' => $dataLabels, | |||
'data' => $data, | |||
]); | |||
} | |||
} | |||
?> |
@@ -119,6 +119,7 @@ $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' => '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()], |
@@ -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') ; | |||
$this->addBreadcrumb('Statistiques') ; | |||
?> | |||
<?= ChartJs::widget([ | |||
'type' => 'line', | |||
'options' => [ | |||
'height' => 400, | |||
'width' => 1100 | |||
], | |||
'data' => [ | |||
'labels' => $dataLabels, | |||
'datasets' => [ | |||
[ | |||
'label' => 'Nombre de commandes clients', | |||
'backgroundColor' => "rgb(255,127,0,0.5)", | |||
'borderColor' => "rgb(255,127,0,1)", | |||
'pointBackgroundColor' => "rgb(255,127,0,1)", | |||
'pointStrokeColor' => "#fff", | |||
'data' => $data | |||
] | |||
] | |||
] | |||
]); | |||
?> |
@@ -75,7 +75,15 @@ class OrderRepository extends AbstractRepository | |||
->findOne(); | |||
} | |||
public function findOrdersByDate(string $date): array | |||
public function countOrdersByDateAndOrigin(\DateTime $date, string $origin = Order::ORIGIN_USER) | |||
{ | |||
return $this->createDefaultQuery() | |||
->filterByDate($date) | |||
->filterByOrigin($origin) | |||
->count(); | |||
} | |||
public function findOrdersByDistributionDate(string $date): array | |||
{ | |||
return $this->createDefaultQuery() | |||
->filterByDistributionDate($date) |
@@ -22,6 +22,22 @@ class OrderRepositoryQuery extends AbstractRepositoryQuery | |||
return $this; | |||
} | |||
public function filterByOrigin(string $origin) | |||
{ | |||
$this->andWhere(['origin' => $origin]); | |||
return $this; | |||
} | |||
public function filterByDate(\DateTime $date) | |||
{ | |||
$this | |||
->andWhere('`order`.date >= \'' .$date->format('Y-m-d 00:00:00').'\'') | |||
->andWhere('`order`.date <= \'' .$date->format('Y-m-d 23:59:59').'\''); | |||
return $this; | |||
} | |||
public function filterByDistributionDate(string $date): self | |||
{ | |||
$this->andWhere(['distribution.date' => $date]); |