Commit cbc8daa931526c6e9776bc139fc586064a307bd9

Authored by Alexey Boroda
1 parent 3bee3445

-Order history ready

controllers/StatisticsController.php
... ... @@ -68,8 +68,21 @@
68 68 ->andFilterWhere($labelFilter),
69 69 ]
70 70 );
  71 +
  72 + $labelChartData1 = [
  73 + 'labels' => array_keys($labelStatistics),
  74 + 'datasets' => [
  75 + [
  76 + 'label' => 'Заказов, шт.',
  77 + 'data' => ArrayHelper::getColumn($labelStatistics, 'count', false),
  78 + 'backgroundColor' => 'rgba(54, 162, 235, 0.2)',
  79 + 'borderColor' => 'rgba(54, 162, 235, 1)',
  80 + 'borderWidth' => 1,
  81 + ],
  82 + ],
  83 + ];
71 84  
72   - $labelChartData = [
  85 + $labelChartData2 = [
73 86 'labels' => array_keys($labelStatistics),
74 87 'datasets' => [
75 88 [
... ... @@ -81,14 +94,67 @@
81 94 ],
82 95 ],
83 96 ];
  97 +
  98 + $labelChartData3 = [
  99 + 'labels' => array_keys($labelStatistics),
  100 + 'datasets' => [
  101 + [
  102 + 'label' => 'Заказано товаров, шт.',
  103 + 'data' => ArrayHelper::getColumn($labelStatistics, 'products', false),
  104 + 'backgroundColor' => 'rgba(255, 206, 86, 0.2)',
  105 + 'borderColor' => 'rgba(255, 206, 86, 1)',
  106 + 'borderWidth' => 1,
  107 + ],
  108 + [
  109 + 'label' => 'Уникальных товаров, шт.',
  110 + 'data' => ArrayHelper::getColumn($labelStatistics, 'unique', false),
  111 + 'backgroundColor' => 'rgba(75, 192, 192, 0.2)',
  112 + 'borderColor' => 'rgba(75, 192, 192, 1)',
  113 + 'borderWidth' => 1,
  114 + ],
  115 + ],
  116 + ];
  117 +
  118 + $rejectStatistics = Order::getRejectionStatistics($dateFilter);
  119 +
  120 + $rejectChartData1 = [
  121 + 'labels' => array_keys($rejectStatistics),
  122 + 'datasets' => [
  123 + [
  124 + 'label' => 'Заказов, шт.',
  125 + 'data' => ArrayHelper::getColumn($rejectStatistics, 'count', false),
  126 + 'backgroundColor' => 'rgba(153, 102, 255, 0.2)',
  127 + 'borderColor' => 'rgba(153, 102, 255, 1)',
  128 + 'borderWidth' => 1,
  129 + ],
  130 + ],
  131 + ];
  132 +
  133 + $rejectChartData2 = [
  134 + 'labels' => array_keys($rejectStatistics),
  135 + 'datasets' => [
  136 + [
  137 + 'label' => 'На сумму, грн.',
  138 + 'data' => ArrayHelper::getColumn($rejectStatistics, 'sum', false),
  139 + 'backgroundColor' => 'rgba(255, 159, 64, 0.2)',
  140 + 'borderColor' => 'rgba(255, 159, 64, 1)',
  141 + 'borderWidth' => 1,
  142 + ],
  143 + ],
  144 + ];
  145 +
84 146 return $this->render(
85 147 'index',
86 148 [
87 149 'labels' => $labels,
88 150 'labelStatistics' => $labelStatistics,
89   - 'rejectionStatistics' => Order::getRejectionStatistics($dateFilter),
  151 + 'rejectionStatistics' => $rejectStatistics,
90 152 'dataProvider' => $dataProvider,
91   - 'labelChartData' => $labelChartData,
  153 + 'labelChartData1' => $labelChartData1,
  154 + 'labelChartData2' => $labelChartData2,
  155 + 'labelChartData3' => $labelChartData3,
  156 + 'rejectChartData1' => $rejectChartData1,
  157 + 'rejectChartData2' => $rejectChartData2,
92 158 'dateValue' => empty($date_range) ? '' : $date_range,
93 159 'dataLabel' => empty($label) ? false : $label,
94 160 ]
... ...
views/statistics/index.php
... ... @@ -17,7 +17,11 @@
17 17 * @var array $labelStatistics
18 18 * @var array $rejectionStatistics
19 19 * @var ActiveDataProvider $dataProvider
20   - * @var array $labelChartData
  20 + * @var array $labelChartData1
  21 + * @var array $labelChartData2
  22 + * @var array $labelChartData3
  23 + * @var array $rejectChartData1
  24 + * @var array $rejectChartData2
21 25 * @var string $dateValue
22 26 * @var int | boolean $dataLabel
23 27 */
... ... @@ -26,7 +30,7 @@
26 30  
27 31 <div class="box box-default">
28 32 <div class="box-header with-border">
29   - <h3 class="box-title">Collapsable</h3>
  33 + <h3 class="box-title">Поиск заказов</h3>
30 34 <div class="box-tools pull-right">
31 35 <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
32 36 </div><!-- /.box-tools -->
... ... @@ -54,9 +58,9 @@
54 58 <div class="col-md-6">
55 59 <?= Select2::widget(
56 60 [
57   - 'name' => 'label',
58   - 'value' => $dataLabel,
59   - 'data' => ArrayHelper::map(
  61 + 'name' => 'label',
  62 + 'value' => $dataLabel,
  63 + 'data' => ArrayHelper::map(
60 64 $labels,
61 65 function($model) {
62 66 return $model->id;
... ... @@ -65,18 +69,18 @@
65 69 return $model->lang->title;
66 70 }
67 71 ),
68   - 'options' => [
  72 + 'options' => [
69 73 'placeholder' => 'Все',
70 74 ],
71 75 'pluginOptions' => [
72   - 'allowClear' => true,
  76 + 'allowClear' => true,
73 77 ],
74 78 ]
75 79 ) ?>
76 80 </div>
77 81 <div class="col-md-2">
78 82 <?= Html::submitButton(
79   - 'Go',
  83 + 'Поиск',
80 84 [
81 85 'class' => 'btn btn-success',
82 86 ]
... ... @@ -89,7 +93,7 @@
89 93  
90 94 <div class="box box-default">
91 95 <div class="box-header with-border">
92   - <h3 class="box-title">Метки, статистика за </h3>
  96 + <h3 class="box-title">Метки, статистика за <?=empty($dateValue) ? 'всё время' : $dateValue ?></h3>
93 97 <div class="box-tools pull-right">
94 98 <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
95 99 </div><!-- /.box-tools -->
... ... @@ -114,37 +118,104 @@
114 118 );
115 119 } ?>
116 120 </table>
117   -
118   - <?= ChartJs::widget(
119   - [
120   - 'type' => 'bar',
121   - 'options' => [
122   - 'height' => 200,
123   - 'width' => 600,
124   - ],
125   - 'data' => $labelChartData,
126   - 'clientOptions' => [
127   - 'title' => [
128   - 'display' => true,
129   - 'text' => 'Статистика меток',
130   - ],
131   - 'scales' => [
132   - 'xAxes' => [
133   - [
134   - 'display' => false,
135   - ],
136   - ],
137   - ],
138   - ],
139   - ]
140   - ); ?>
141   -
142 121 </div><!-- /.box-body -->
  122 +
  123 + <div class="box-footer">
  124 + <div class="nav-tabs-custom">
  125 +
  126 + <!-- Nav tabs -->
  127 + <ul class="nav nav-tabs" role="tablist">
  128 + <li role="presentation" class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="tab">Заказы</a></li>
  129 + <li role="presentation"><a href="#profile" aria-controls="profile" role="tab" data-toggle="tab">Сумма</a></li>
  130 + <li role="presentation"><a href="#messages" aria-controls="messages" role="tab" data-toggle="tab">Товары</a></li>
  131 + </ul>
  132 +
  133 + <!-- Tab panes -->
  134 + <div class="tab-content">
  135 + <div role="tabpanel" class="tab-pane active" id="home">
  136 + <?= ChartJs::widget(
  137 + [
  138 + 'type' => 'bar',
  139 + 'options' => [
  140 + 'height' => 200,
  141 + 'width' => 600,
  142 + ],
  143 + 'data' => $labelChartData1,
  144 + 'clientOptions' => [
  145 + 'title' => [
  146 + 'display' => true,
  147 + 'text' => 'Статистика меток',
  148 + ],
  149 + 'scales' => [
  150 + 'xAxes' => [
  151 + [
  152 + 'display' => false,
  153 + ],
  154 + ],
  155 + ],
  156 + ],
  157 + ]
  158 + ); ?>
  159 + </div>
  160 + <div role="tabpanel" class="tab-pane" id="profile">
  161 + <?= ChartJs::widget(
  162 + [
  163 + 'type' => 'bar',
  164 + 'options' => [
  165 + 'height' => 200,
  166 + 'width' => 600,
  167 + ],
  168 + 'data' => $labelChartData2,
  169 + 'clientOptions' => [
  170 + 'title' => [
  171 + 'display' => true,
  172 + 'text' => 'Статистика меток',
  173 + ],
  174 + 'scales' => [
  175 + 'xAxes' => [
  176 + [
  177 + 'display' => false,
  178 + ],
  179 + ],
  180 + ],
  181 + ],
  182 + ]
  183 + ); ?>
  184 + </div>
  185 + <div role="tabpanel" class="tab-pane" id="messages">
  186 + <?= ChartJs::widget(
  187 + [
  188 + 'type' => 'bar',
  189 + 'options' => [
  190 + 'height' => 200,
  191 + 'width' => 600,
  192 + ],
  193 + 'data' => $labelChartData3,
  194 + 'clientOptions' => [
  195 + 'title' => [
  196 + 'display' => true,
  197 + 'text' => 'Статистика меток',
  198 + ],
  199 + 'scales' => [
  200 + 'xAxes' => [
  201 + [
  202 + 'display' => false,
  203 + ],
  204 + ],
  205 + ],
  206 + ],
  207 + ]
  208 + ); ?>
  209 + </div>
  210 + </div>
  211 +
  212 + </div>
  213 + </div>
143 214 </div><!-- /.box -->
144 215  
145 216 <div class="box box-default">
146 217 <div class="box-header with-border">
147   - <h3 class="box-title">Метки, статистика за </h3>
  218 + <h3 class="box-title">Причины отказа, статистика за <?=empty($dateValue) ? 'всё время' : $dateValue ?></h3>
148 219 <div class="box-tools pull-right">
149 220 <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
150 221 </div><!-- /.box-tools -->
... ... @@ -169,77 +240,156 @@
169 240 ?>
170 241 </table>
171 242 </div><!-- /.box-body -->
172   -</div><!-- /.box -->
  243 +
  244 + <div class="box-footer">
  245 + <div class="nav-tabs-custom">
173 246  
174   -<?= GridView::widget(
175   - [
176   - 'dataProvider' => $dataProvider,
177   - 'columns' => [
178   - 'id',
179   - 'created_at:datetime',
180   - 'name',
181   - 'city',
182   - [
183   - 'attribute' => 'orderLabel.label',
184   - 'label' => 'Метка',
185   - ],
186   - 'total',
187   - [
188   - 'attribute' => 'reason',
189   - 'content' => function($model) {
190   - /**
191   - * @var Order $model
192   - */
193   - if (empty($model->reason)) {
194   - return '';
195   - } else {
196   - return Order::REASONS[ $model->reason ];
197   - }
198   - },
199   - ],
200   - [
201   - 'attribute' => 'manager.username',
202   - 'label' => 'Менеджер',
203   - ],
204   - [
205   - 'attribute' => 'body',
206   - 'content' => function($model) {
207   - /**
208   - * @var Order $model
209   - */
210   - if (empty($model->body)) {
211   - return '';
212   - } else {
213   - return Html::a(
214   - StringHelper::truncate($model->body, 10, '...'),
215   - '#',
216   - [
217   - 'data-toggle' => 'tooltip',
218   - 'title' => $model->body,
219   - 'onclick' => 'event.preventDefault();',
220   - ]
221   - );
222   - }
223   - },
224   - ],
225   - [
226   - 'content' => function($model) {
227   - /**
228   - * @var Order $model
229   - */
230   - return Html::a(
231   - Html::tag('i', '', [ 'class' => 'glyphicon glyphicon-eye-open' ]),
232   - [
233   - '/ecommerce/order/view',
234   - 'id' => $model->id,
  247 + <!-- Nav tabs -->
  248 + <ul class="nav nav-tabs" role="tablist">
  249 + <li role="presentation" class="active"><a href="#count" aria-controls="count" role="tab" data-toggle="tab">Заказы</a></li>
  250 + <li role="presentation"><a href="#sum" aria-controls="sum" role="tab" data-toggle="tab">Сумма</a></li>
  251 + </ul>
  252 +
  253 + <!-- Tab panes -->
  254 + <div class="tab-content">
  255 + <div role="tabpanel" class="tab-pane active" id="count">
  256 + <?= ChartJs::widget(
  257 + [
  258 + 'type' => 'bar',
  259 + 'options' => [
  260 + 'height' => 200,
  261 + 'width' => 600,
  262 + ],
  263 + 'data' => $rejectChartData1,
  264 + 'clientOptions' => [
  265 + 'title' => [
  266 + 'display' => true,
  267 + 'text' => 'Статистика отказов',
  268 + ],
  269 + 'scales' => [
  270 + 'xAxes' => [
  271 + [
  272 + 'display' => false,
  273 + ],
  274 + ],
  275 + ],
  276 + ],
  277 + ]
  278 + ); ?>
  279 + </div>
  280 + <div role="tabpanel" class="tab-pane" id="sum">
  281 + <?= ChartJs::widget(
  282 + [
  283 + 'type' => 'bar',
  284 + 'options' => [
  285 + 'height' => 200,
  286 + 'width' => 600,
  287 + ],
  288 + 'data' => $rejectChartData2,
  289 + 'clientOptions' => [
  290 + 'title' => [
  291 + 'display' => true,
  292 + 'text' => 'Статистика отказов',
235 293 ],
236   - [
237   - 'target' => '_blank',
238   - 'data-pjax' => '0',
239   - ]
240   - );
241   - },
242   - ],
243   - ],
244   - ]
245   -) ?>
  294 + 'scales' => [
  295 + 'xAxes' => [
  296 + [
  297 + 'display' => false,
  298 + ],
  299 + ],
  300 + ],
  301 + ],
  302 + ]
  303 + ); ?>
  304 + </div>
  305 + </div>
  306 +
  307 + </div>
  308 + </div>
  309 +
  310 +</div><!-- /.box -->
  311 +
  312 +
  313 +<div class="box box-default">
  314 + <div class="box-header with-border">
  315 + <h3 class="box-title">Заказы</h3>
  316 + <div class="box-tools pull-right">
  317 + <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
  318 + </div><!-- /.box-tools -->
  319 + </div><!-- /.box-header -->
  320 + <div class="box-body table-responsive">
  321 + <?= GridView::widget(
  322 + [
  323 + 'dataProvider' => $dataProvider,
  324 + 'columns' => [
  325 + 'id',
  326 + 'created_at:datetime',
  327 + 'name',
  328 + 'city',
  329 + [
  330 + 'attribute' => 'orderLabel.label',
  331 + 'label' => 'Метка',
  332 + ],
  333 + 'total',
  334 + [
  335 + 'attribute' => 'reason',
  336 + 'content' => function($model) {
  337 + /**
  338 + * @var Order $model
  339 + */
  340 + if (empty($model->reason)) {
  341 + return '';
  342 + } else {
  343 + return Order::REASONS[ $model->reason ];
  344 + }
  345 + },
  346 + ],
  347 + [
  348 + 'attribute' => 'manager.username',
  349 + 'label' => 'Менеджер',
  350 + ],
  351 + [
  352 + 'attribute' => 'body',
  353 + 'content' => function($model) {
  354 + /**
  355 + * @var Order $model
  356 + */
  357 + if (empty($model->body)) {
  358 + return '';
  359 + } else {
  360 + return Html::a(
  361 + StringHelper::truncate($model->body, 10, '...'),
  362 + '#',
  363 + [
  364 + 'data-toggle' => 'tooltip',
  365 + 'title' => $model->body,
  366 + 'onclick' => 'event.preventDefault();',
  367 + ]
  368 + );
  369 + }
  370 + },
  371 + ],
  372 + [
  373 + 'content' => function($model) {
  374 + /**
  375 + * @var Order $model
  376 + */
  377 + return Html::a(
  378 + Html::tag('i', '', [ 'class' => 'glyphicon glyphicon-eye-open' ]),
  379 + [
  380 + '/ecommerce/order/view',
  381 + 'id' => $model->id,
  382 + ],
  383 + [
  384 + 'target' => '_blank',
  385 + 'data-pjax' => '0',
  386 + ]
  387 + );
  388 + },
  389 + ],
  390 + ],
  391 + ]
  392 + ) ?>
  393 +
  394 + </div><!-- /.box-body -->
  395 +</div><!-- /.box -->
... ...