Blame view

controllers/StatisticsController.php 7.13 KB
1ac35977   Alexey Boroda   -Staistics started
1
2
3
4
  <?php

      

      namespace artweb\artbox\ecommerce\controllers;

      

c130fad8   Alexey Boroda   -Yml fix
5
6
      use artweb\artbox\ecommerce\models\Label;

      use artweb\artbox\ecommerce\models\Order;

29257441   Alexey Boroda   -Manager filter o...
7
      use common\models\User;

ee0e1df5   Alexey Boroda   -Statistics half ...
8
      use yii\data\ActiveDataProvider;

c130fad8   Alexey Boroda   -Yml fix
9
10
      use yii\helpers\ArrayHelper;

      use yii\helpers\VarDumper;

1ac35977   Alexey Boroda   -Staistics started
11
12
      use yii\web\Controller;

      

1ac35977   Alexey Boroda   -Staistics started
13
14
      class StatisticsController extends Controller

      {

29257441   Alexey Boroda   -Manager filter o...
15
          public function actionIndex($date_range = NULL, $label = NULL, $manager = NULL)

1ac35977   Alexey Boroda   -Staistics started
16
          {

c130fad8   Alexey Boroda   -Yml fix
17
18
19
20
21
22
              /**

               * Get a dates range

               */

              if (!empty($date_range)) {

                  $arr = [];

                  preg_match('@(.*)\s:\s(.*)@', $date_range, $arr);

44747138   Alexey Boroda   -Default statisti...
23
24
25
26
27
28
                  $dateFilter = [

                      'between',

                      'created_at',

                      strtotime($arr[ 1 ]),

                      strtotime($arr[ 2 ]),

                  ];

c130fad8   Alexey Boroda   -Yml fix
29
              } else {

ee0e1df5   Alexey Boroda   -Statistics half ...
30
                  $dateFilter = [];

c130fad8   Alexey Boroda   -Yml fix
31
              }

c130fad8   Alexey Boroda   -Yml fix
32
33
              

              if (!empty($label)) {

44747138   Alexey Boroda   -Default statisti...
34
                  $labelFilter = [ 'label' => $label ];

ee0e1df5   Alexey Boroda   -Statistics half ...
35
36
              } else {

                  $labelFilter = [];

c130fad8   Alexey Boroda   -Yml fix
37
              }

29257441   Alexey Boroda   -Manager filter o...
38
39
40
41
42
43
      

              if (!empty($manager)) {

                  $managerFilter = [ 'manager_id' => $manager ];

              } else {

                  $managerFilter = [];

              }

c130fad8   Alexey Boroda   -Yml fix
44
              

ee0e1df5   Alexey Boroda   -Statistics half ...
45
46
47
48
49
50
              /**

               * Get labels

               */

              $labels = Label::find()

                             ->with('lang')

                             ->all();

29257441   Alexey Boroda   -Manager filter o...
51
52
53
54
55
56
      

              /**

               * Get user

               */

              $managers = User::find()

                              ->all();

ee0e1df5   Alexey Boroda   -Statistics half ...
57
58
59
60
61
62
              

              /**

               * Generate statistics

               */

              $labelStatistics = ArrayHelper::map(

                  $labels,

29257441   Alexey Boroda   -Manager filter o...
63
                  function(Label $model) {

ee0e1df5   Alexey Boroda   -Statistics half ...
64
65
                      return $model->lang->title;

                  },

29257441   Alexey Boroda   -Manager filter o...
66
67
                  function(Label $model) use ($dateFilter, $managerFilter) {

                      return $model->getStatistics($dateFilter, $managerFilter);

44747138   Alexey Boroda   -Default statisti...
68
                  }

ee0e1df5   Alexey Boroda   -Statistics half ...
69
              );

29257441   Alexey Boroda   -Manager filter o...
70
71
72
73
      

              /**

               * Data provider for table

               */

44747138   Alexey Boroda   -Default statisti...
74
75
76
77
              $dataProvider = new ActiveDataProvider(

                  [

                      'query' => Order::find()

                                      ->filterWhere($dateFilter)

29257441   Alexey Boroda   -Manager filter o...
78
                          ->andFilterWhere($managerFilter)

44747138   Alexey Boroda   -Default statisti...
79
80
81
                                      ->andFilterWhere($labelFilter),

                  ]

              );

cbc8daa9   Alexey Boroda   -Order history ready
82
      

29257441   Alexey Boroda   -Manager filter o...
83
84
85
              /**

               * Creating charts data

               */

cbc8daa9   Alexey Boroda   -Order history ready
86
87
88
89
90
91
92
93
94
95
96
97
              $labelChartData1 = [

                  'labels'   => array_keys($labelStatistics),

                  'datasets' => [

                      [

                          'label'           => 'Заказов, шт.',

                          'data'            => ArrayHelper::getColumn($labelStatistics, 'count', false),

                          'backgroundColor' => 'rgba(54, 162, 235, 0.2)',

                          'borderColor'     => 'rgba(54, 162, 235, 1)',

                          'borderWidth'     => 1,

                      ],

                  ],

              ];

ee0e1df5   Alexey Boroda   -Statistics half ...
98
              

cbc8daa9   Alexey Boroda   -Order history ready
99
              $labelChartData2 = [

3bee3445   Alexey Boroda   -Order history ready
100
                  'labels'   => array_keys($labelStatistics),

44747138   Alexey Boroda   -Default statisti...
101
102
                  'datasets' => [

                      [

3bee3445   Alexey Boroda   -Order history ready
103
104
105
106
107
                          'label'           => 'На сумму, грн.',

                          'data'            => ArrayHelper::getColumn($labelStatistics, 'sum', false),

                          'backgroundColor' => 'rgba(255, 99, 132, 0.2)',

                          'borderColor'     => 'rgba(255,99,132,1)',

                          'borderWidth'     => 1,

44747138   Alexey Boroda   -Default statisti...
108
109
110
                      ],

                  ],

              ];

29257441   Alexey Boroda   -Manager filter o...
111
              

cbc8daa9   Alexey Boroda   -Order history ready
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
              $labelChartData3 = [

                  'labels'   => array_keys($labelStatistics),

                  'datasets' => [

                      [

                          'label'           => 'Заказано товаров, шт.',

                          'data'            => ArrayHelper::getColumn($labelStatistics, 'products', false),

                          'backgroundColor' => 'rgba(255, 206, 86, 0.2)',

                          'borderColor'     => 'rgba(255, 206, 86, 1)',

                          'borderWidth'     => 1,

                      ],

                      [

                          'label'           => 'Уникальных товаров, шт.',

                          'data'            => ArrayHelper::getColumn($labelStatistics, 'unique', false),

                          'backgroundColor' => 'rgba(75, 192, 192, 0.2)',

                          'borderColor'     => 'rgba(75, 192, 192, 1)',

                          'borderWidth'     => 1,

                      ],

                  ],

              ];

      

29257441   Alexey Boroda   -Manager filter o...
132
133
134
135
136
137
138
139
              /**

               * Getting rejection statistics

               */

              $rejectStatistics = Order::getRejectionStatistics($dateFilter, $managerFilter);

      

              /**

               * Charts data for rejects

               */

cbc8daa9   Alexey Boroda   -Order history ready
140
141
142
143
144
145
146
147
148
149
150
151
              $rejectChartData1 = [

                  'labels'   => array_keys($rejectStatistics),

                  'datasets' => [

                      [

                          'label'           => 'Заказов, шт.',

                          'data'            => ArrayHelper::getColumn($rejectStatistics, 'count', false),

                          'backgroundColor' => 'rgba(153, 102, 255, 0.2)',

                          'borderColor'     => 'rgba(153, 102, 255, 1)',

                          'borderWidth'     => 1,

                      ],

                  ],

              ];

29257441   Alexey Boroda   -Manager filter o...
152
              

cbc8daa9   Alexey Boroda   -Order history ready
153
154
155
156
157
158
159
160
161
162
163
164
165
              $rejectChartData2 = [

                  'labels'   => array_keys($rejectStatistics),

                  'datasets' => [

                      [

                          'label'           => 'На сумму, грн.',

                          'data'            => ArrayHelper::getColumn($rejectStatistics, 'sum', false),

                          'backgroundColor' => 'rgba(255, 159, 64, 0.2)',

                          'borderColor'     => 'rgba(255, 159, 64, 1)',

                          'borderWidth'     => 1,

                      ],

                  ],

              ];

              

c130fad8   Alexey Boroda   -Yml fix
166
167
168
              return $this->render(

                  'index',

                  [

44747138   Alexey Boroda   -Default statisti...
169
                      'labels'              => $labels,

29257441   Alexey Boroda   -Manager filter o...
170
                      'managers'            => $managers,

44747138   Alexey Boroda   -Default statisti...
171
                      'labelStatistics'     => $labelStatistics,

cbc8daa9   Alexey Boroda   -Order history ready
172
                      'rejectionStatistics' => $rejectStatistics,

44747138   Alexey Boroda   -Default statisti...
173
                      'dataProvider'        => $dataProvider,

29257441   Alexey Boroda   -Manager filter o...
174
175
176
177
178
                      'labelChartData1'     => $labelChartData1,

                      'labelChartData2'     => $labelChartData2,

                      'labelChartData3'     => $labelChartData3,

                      'rejectChartData1'    => $rejectChartData1,

                      'rejectChartData2'    => $rejectChartData2,

44747138   Alexey Boroda   -Default statisti...
179
180
                      'dateValue'           => empty($date_range) ? '' : $date_range,

                      'dataLabel'           => empty($label) ? false : $label,

29257441   Alexey Boroda   -Manager filter o...
181
                      'dataManager'           => empty($manager) ? false : $manager,

c130fad8   Alexey Boroda   -Yml fix
182
183
                  ]

              );

1ac35977   Alexey Boroda   -Staistics started
184
185
          }

      }