<?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 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->getUserModule()
                                ->getAuthorizationChecker()
                                ->isGrantedAsAdministrator($this->getUserCurrent());
                        }
                    ]
                ],
            ],
        ];
    }

    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()
    {
        $orderModule = $this->getOrderModule();
        $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[] = $orderModule->countGlobalOrdersByDateAndOrigin($date);
        }

        return $this->render('customer_orders', [
            'dataLabels' => $dataLabels,
            'data' => $data,
        ]);
    }

    public function actionMatomo()
    {
        return $this->render('matomo');
    }
}

?>