StatisticsController.php 2.45 KB
<?php
    
    namespace artweb\artbox\ecommerce\controllers;
    
    use artweb\artbox\ecommerce\models\Label;
    use artweb\artbox\ecommerce\models\Order;
    use yii\data\ActiveDataProvider;
    use yii\helpers\ArrayHelper;
    use yii\helpers\VarDumper;
    use yii\web\Controller;
    
    class StatisticsController extends Controller
    {
        public function actionIndex($date_range = NULL, $label = NULL)
        {
            /**
             * Get a dates range
             */
            if (!empty($date_range)) {
                $arr = [];
                preg_match('@(.*)\s:\s(.*)@', $date_range, $arr);
                $dateFilter =    [
                        'between',
                        'created_at',
                        strtotime($arr[1]),
                        strtotime($arr[2]),
                    ];
            } else {
                $dateFilter = [];
            }
            
            if (!empty($label)) {
                $labelFilter = ['label' => $label];
            } else {
                $labelFilter = [];
            }
            
            /**
             * Get labels
             */
            $labels = Label::find()
                           ->with('lang')
                           ->all();
            
            /**
             * Generate statistics
             */
            $labelStatistics = ArrayHelper::map(
                $labels,
                function($model) {
                    /**
                     * @var Label $model
                     */
                    return $model->lang->title;
                },
                function($model) use ($dateFilter) {
                    /**
                     * @var Label $model
                     */
                    return $model->getStatistics($dateFilter);}
            );
            
            $dataProvider = new ActiveDataProvider([
                'query' => Order::find()->filterWhere($dateFilter)->andFilterWhere($labelFilter),
                                                   ]);
            
            return $this->render(
                'index',
                [
                    'labels' => $labels,
                    'labelStatistics' => $labelStatistics,
                    'rejectionStatistics' => Order::getRejectionStatistics($dateFilter),
                    'dataProvider' => $dataProvider,
                ]
            );
        }
    }