Commit cbc8daa931526c6e9776bc139fc586064a307bd9

Authored by Alexey Boroda
1 parent 3bee3445

-Order history ready

controllers/StatisticsController.php
@@ -68,8 +68,21 @@ @@ -68,8 +68,21 @@
68 ->andFilterWhere($labelFilter), 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 'labels' => array_keys($labelStatistics), 86 'labels' => array_keys($labelStatistics),
74 'datasets' => [ 87 'datasets' => [
75 [ 88 [
@@ -81,14 +94,67 @@ @@ -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 return $this->render( 146 return $this->render(
85 'index', 147 'index',
86 [ 148 [
87 'labels' => $labels, 149 'labels' => $labels,
88 'labelStatistics' => $labelStatistics, 150 'labelStatistics' => $labelStatistics,
89 - 'rejectionStatistics' => Order::getRejectionStatistics($dateFilter), 151 + 'rejectionStatistics' => $rejectStatistics,
90 'dataProvider' => $dataProvider, 152 'dataProvider' => $dataProvider,
91 - 'labelChartData' => $labelChartData, 153 + 'labelChartData1' => $labelChartData1,
  154 + 'labelChartData2' => $labelChartData2,
  155 + 'labelChartData3' => $labelChartData3,
  156 + 'rejectChartData1' => $rejectChartData1,
  157 + 'rejectChartData2' => $rejectChartData2,
92 'dateValue' => empty($date_range) ? '' : $date_range, 158 'dateValue' => empty($date_range) ? '' : $date_range,
93 'dataLabel' => empty($label) ? false : $label, 159 'dataLabel' => empty($label) ? false : $label,
94 ] 160 ]
views/statistics/index.php
@@ -17,7 +17,11 @@ @@ -17,7 +17,11 @@
17 * @var array $labelStatistics 17 * @var array $labelStatistics
18 * @var array $rejectionStatistics 18 * @var array $rejectionStatistics
19 * @var ActiveDataProvider $dataProvider 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 * @var string $dateValue 25 * @var string $dateValue
22 * @var int | boolean $dataLabel 26 * @var int | boolean $dataLabel
23 */ 27 */
@@ -26,7 +30,7 @@ @@ -26,7 +30,7 @@
26 30
27 <div class="box box-default"> 31 <div class="box box-default">
28 <div class="box-header with-border"> 32 <div class="box-header with-border">
29 - <h3 class="box-title">Collapsable</h3> 33 + <h3 class="box-title">Поиск заказов</h3>
30 <div class="box-tools pull-right"> 34 <div class="box-tools pull-right">
31 <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button> 35 <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
32 </div><!-- /.box-tools --> 36 </div><!-- /.box-tools -->
@@ -54,9 +58,9 @@ @@ -54,9 +58,9 @@
54 <div class="col-md-6"> 58 <div class="col-md-6">
55 <?= Select2::widget( 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 $labels, 64 $labels,
61 function($model) { 65 function($model) {
62 return $model->id; 66 return $model->id;
@@ -65,18 +69,18 @@ @@ -65,18 +69,18 @@
65 return $model->lang->title; 69 return $model->lang->title;
66 } 70 }
67 ), 71 ),
68 - 'options' => [ 72 + 'options' => [
69 'placeholder' => 'Все', 73 'placeholder' => 'Все',
70 ], 74 ],
71 'pluginOptions' => [ 75 'pluginOptions' => [
72 - 'allowClear' => true, 76 + 'allowClear' => true,
73 ], 77 ],
74 ] 78 ]
75 ) ?> 79 ) ?>
76 </div> 80 </div>
77 <div class="col-md-2"> 81 <div class="col-md-2">
78 <?= Html::submitButton( 82 <?= Html::submitButton(
79 - 'Go', 83 + 'Поиск',
80 [ 84 [
81 'class' => 'btn btn-success', 85 'class' => 'btn btn-success',
82 ] 86 ]
@@ -89,7 +93,7 @@ @@ -89,7 +93,7 @@
89 93
90 <div class="box box-default"> 94 <div class="box box-default">
91 <div class="box-header with-border"> 95 <div class="box-header with-border">
92 - <h3 class="box-title">Метки, статистика за </h3> 96 + <h3 class="box-title">Метки, статистика за <?=empty($dateValue) ? 'всё время' : $dateValue ?></h3>
93 <div class="box-tools pull-right"> 97 <div class="box-tools pull-right">
94 <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button> 98 <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
95 </div><!-- /.box-tools --> 99 </div><!-- /.box-tools -->
@@ -114,37 +118,104 @@ @@ -114,37 +118,104 @@
114 ); 118 );
115 } ?> 119 } ?>
116 </table> 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 </div><!-- /.box-body --> 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 </div><!-- /.box --> 214 </div><!-- /.box -->
144 215
145 <div class="box box-default"> 216 <div class="box box-default">
146 <div class="box-header with-border"> 217 <div class="box-header with-border">
147 - <h3 class="box-title">Метки, статистика за </h3> 218 + <h3 class="box-title">Причины отказа, статистика за <?=empty($dateValue) ? 'всё время' : $dateValue ?></h3>
148 <div class="box-tools pull-right"> 219 <div class="box-tools pull-right">
149 <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button> 220 <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
150 </div><!-- /.box-tools --> 221 </div><!-- /.box-tools -->
@@ -169,77 +240,156 @@ @@ -169,77 +240,156 @@
169 ?> 240 ?>
170 </table> 241 </table>
171 </div><!-- /.box-body --> 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 -->