Commit 3bee34454a1e3929cbc5c747836491f85fe25cbd

Authored by Alexey Boroda
1 parent 44747138

-Order history ready

controllers/OrderController.php
@@ -3,19 +3,18 @@ @@ -3,19 +3,18 @@
3 namespace artweb\artbox\ecommerce\controllers; 3 namespace artweb\artbox\ecommerce\controllers;
4 4
5 use artweb\artbox\components\SmsSender; 5 use artweb\artbox\components\SmsSender;
  6 + use artweb\artbox\ecommerce\models\OrderLabelHistory;
6 use artweb\artbox\ecommerce\models\OrderSearch; 7 use artweb\artbox\ecommerce\models\OrderSearch;
7 use common\models\User; 8 use common\models\User;
8 - use phpDocumentor\Reflection\Types\Null_;  
9 use Yii; 9 use Yii;
10 use yii\data\ArrayDataProvider; 10 use yii\data\ArrayDataProvider;
11 - use yii\helpers\ArrayHelper; 11 + use yii\db\ActiveQuery;
12 use yii\helpers\Json; 12 use yii\helpers\Json;
13 use yii\helpers\VarDumper; 13 use yii\helpers\VarDumper;
14 use yii\web\Controller; 14 use yii\web\Controller;
15 use yii\filters\VerbFilter; 15 use yii\filters\VerbFilter;
16 use yii\data\ActiveDataProvider; 16 use yii\data\ActiveDataProvider;
17 use yii\web\ForbiddenHttpException; 17 use yii\web\ForbiddenHttpException;
18 - use yii\web\HttpException;  
19 use artweb\artbox\ecommerce\models\Order; 18 use artweb\artbox\ecommerce\models\Order;
20 use artweb\artbox\ecommerce\models\OrderProduct; 19 use artweb\artbox\ecommerce\models\OrderProduct;
21 use artweb\artbox\ecommerce\models\ProductVariant; 20 use artweb\artbox\ecommerce\models\ProductVariant;
@@ -107,6 +106,11 @@ @@ -107,6 +106,11 @@
107 public function actionView($id) 106 public function actionView($id)
108 { 107 {
109 $model = $this->findModel($id); 108 $model = $this->findModel($id);
  109 +
  110 + $historyData = new ActiveDataProvider([
  111 + 'query' => $model->getLabelsHistory()->with('order', 'label', 'user'),
  112 + ]);
  113 +
110 $dataProvider = new ActiveDataProvider( 114 $dataProvider = new ActiveDataProvider(
111 [ 115 [
112 'query' => $model->getProducts(), 116 'query' => $model->getProducts(),
@@ -117,6 +121,7 @@ @@ -117,6 +121,7 @@
117 [ 121 [
118 'model' => $model, 122 'model' => $model,
119 'products' => $dataProvider, 123 'products' => $dataProvider,
  124 + 'historyData' => $historyData,
120 ] 125 ]
121 ); 126 );
122 } 127 }
@@ -151,10 +156,10 @@ @@ -151,10 +156,10 @@
151 156
152 public function actionAdd() 157 public function actionAdd()
153 { 158 {
154 - if (!empty( \Yii::$app->request->post() )) { 159 + if (!empty(\Yii::$app->request->post())) {
155 $id = \Yii::$app->request->post('OrderProduct')[ 'id' ]; 160 $id = \Yii::$app->request->post('OrderProduct')[ 'id' ];
156 $order_id = \Yii::$app->request->post('OrderProduct')[ 'order_id' ]; 161 $order_id = \Yii::$app->request->post('OrderProduct')[ 'order_id' ];
157 - if (!empty( \Yii::$app->request->post('OrderProduct')[ 'count' ] )) { 162 + if (!empty(\Yii::$app->request->post('OrderProduct')[ 'count' ])) {
158 $count = \Yii::$app->request->post('OrderProduct')[ 'count' ]; 163 $count = \Yii::$app->request->post('OrderProduct')[ 'count' ];
159 } else { 164 } else {
160 $count = 1; 165 $count = 1;
@@ -174,7 +179,7 @@ @@ -174,7 +179,7 @@
174 ) 179 )
175 ->one(); 180 ->one();
176 181
177 - if (!empty( $model )) { 182 + if (!empty($model)) {
178 $model->count += $count; 183 $model->count += $count;
179 } else { 184 } else {
180 $model = new OrderProduct(); 185 $model = new OrderProduct();
@@ -219,7 +224,7 @@ @@ -219,7 +224,7 @@
219 if ($orderProduct->load($post)) { 224 if ($orderProduct->load($post)) {
220 $orderProduct->save(); 225 $orderProduct->save();
221 $output = ''; 226 $output = '';
222 - if (isset( $posted[ 'count' ] )) { 227 + if (isset($posted[ 'count' ])) {
223 $output = Yii::$app->formatter->asDecimal($orderProduct->count, 0); 228 $output = Yii::$app->formatter->asDecimal($orderProduct->count, 0);
224 } 229 }
225 $out = Json::encode( 230 $out = Json::encode(
@@ -281,7 +286,7 @@ @@ -281,7 +286,7 @@
281 return $this->renderPartial( 286 return $this->renderPartial(
282 'print', 287 'print',
283 [ 288 [
284 - 'order' => $order, 289 + 'order' => $order,
285 'dataProvider' => $dataProvider, 290 'dataProvider' => $dataProvider,
286 ] 291 ]
287 ); 292 );
@@ -307,7 +312,7 @@ @@ -307,7 +312,7 @@
307 $orderProduct->save(); 312 $orderProduct->save();
308 $orderProduct->order->totalRecount(); 313 $orderProduct->order->totalRecount();
309 $output = ''; 314 $output = '';
310 - if (isset( $posted[ 'count' ] )) { 315 + if (isset($posted[ 'count' ])) {
311 $output = Yii::$app->formatter->asDecimal($orderProduct->count, 0); 316 $output = Yii::$app->formatter->asDecimal($orderProduct->count, 0);
312 } 317 }
313 $out = Json::encode( 318 $out = Json::encode(
@@ -342,7 +347,7 @@ @@ -342,7 +347,7 @@
342 ] 347 ]
343 ); 348 );
344 349
345 - if (empty( $model->manager_id )) { 350 + if (empty($model->manager_id)) {
346 $model->manager_id = \Yii::$app->user->id; 351 $model->manager_id = \Yii::$app->user->id;
347 } 352 }
348 353
@@ -369,7 +374,7 @@ @@ -369,7 +374,7 @@
369 } 374 }
370 } 375 }
371 376
372 - public function actionFindProduct($q = null, $id = null) 377 + public function actionFindProduct($q = NULL, $id = NULL)
373 { 378 {
374 \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 379 \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
375 $out = [ 380 $out = [
@@ -428,7 +433,7 @@ @@ -428,7 +433,7 @@
428 433
429 protected function findModel($id) 434 protected function findModel($id)
430 { 435 {
431 - if (( $model = Order::findOne($id) ) !== null) { 436 + if (( $model = Order::findOne($id) ) !== NULL) {
432 return $model; 437 return $model;
433 } else { 438 } else {
434 throw new NotFoundHttpException('The requested page does not exist.'); 439 throw new NotFoundHttpException('The requested page does not exist.');
@@ -471,7 +476,7 @@ @@ -471,7 +476,7 @@
471 476
472 public function actionBlockOrder() 477 public function actionBlockOrder()
473 { 478 {
474 - if (!empty( \Yii::$app->request->post() )) { 479 + if (!empty(\Yii::$app->request->post())) {
475 \Yii::$app->response->format = Response::FORMAT_JSON; 480 \Yii::$app->response->format = Response::FORMAT_JSON;
476 481
477 $model = $this->findModel(\Yii::$app->request->post('id')); 482 $model = $this->findModel(\Yii::$app->request->post('id'));
@@ -488,7 +493,7 @@ @@ -488,7 +493,7 @@
488 if ($model->save()) { 493 if ($model->save()) {
489 return [ 494 return [
490 'time' => $date, 495 'time' => $date,
491 - 'user' => !empty( $user ) ? $user->username : '', 496 + 'user' => !empty($user) ? $user->username : '',
492 ]; 497 ];
493 } else { 498 } else {
494 return [ 499 return [
@@ -516,6 +521,18 @@ @@ -516,6 +521,18 @@
516 } 521 }
517 $model->published = true; 522 $model->published = true;
518 $model->save(); 523 $model->save();
  524 +
  525 + /**
  526 + * Add order to history
  527 + */
  528 + $history = new OrderLabelHistory();
  529 +
  530 + $history->label_id = (integer) $model->label;
  531 + $history->order_id = (integer) $model->id;
  532 + $history->user_id = (integer) \Yii::$app->user->identity->id;
  533 +
  534 + $history->save();
  535 +
519 /** 536 /**
520 * @var SmsSender $sender 537 * @var SmsSender $sender
521 */ 538 */
controllers/StatisticsController.php
@@ -69,20 +69,15 @@ @@ -69,20 +69,15 @@
69 ] 69 ]
70 ); 70 );
71 71
72 - $chartData = [];  
73 - foreach ($labelStatistics as $statistic) {  
74 - $chartData[] = $statistic[ 'sum' ];  
75 - }  
76 - $chartLabels = [];  
77 - foreach ($labelStatistics as $name => $statistic) {  
78 - $chartLabels[] = $name;  
79 - }  
80 $labelChartData = [ 72 $labelChartData = [
81 - 'labels' => $chartLabels, 73 + 'labels' => array_keys($labelStatistics),
82 'datasets' => [ 74 'datasets' => [
83 [ 75 [
84 - 'label' => 'На сумму, грн.',  
85 - 'data' => $chartData, 76 + 'label' => 'На сумму, грн.',
  77 + 'data' => ArrayHelper::getColumn($labelStatistics, 'sum', false),
  78 + 'backgroundColor' => 'rgba(255, 99, 132, 0.2)',
  79 + 'borderColor' => 'rgba(255,99,132,1)',
  80 + 'borderWidth' => 1,
86 ], 81 ],
87 ], 82 ],
88 ]; 83 ];
@@ -55,6 +55,9 @@ @@ -55,6 +55,9 @@
55 * @property string $city 55 * @property string $city
56 * @property string $deliveryString 56 * @property string $deliveryString
57 * @property boolean $published 57 * @property boolean $published
  58 + * @property Label $orderLabel
  59 + * @property Delivery $orderDelivery
  60 + * @property OrderPayment $orderPayment
58 */ 61 */
59 class Order extends ActiveRecord 62 class Order extends ActiveRecord
60 { 63 {
@@ -92,7 +95,7 @@ @@ -92,7 +95,7 @@
92 { 95 {
93 return 'order'; 96 return 'order';
94 } 97 }
95 - 98 +
96 /** 99 /**
97 * @param array $where 100 * @param array $where
98 * 101 *
@@ -113,12 +116,17 @@ @@ -113,12 +116,17 @@
113 [ 116 [
114 'reason' => $id, 117 'reason' => $id,
115 ] 118 ]
116 - )->andFilterWhere($where)->one(); 119 + )
  120 + ->andFilterWhere($where)
  121 + ->one();
117 } 122 }
118 123
119 return $result; 124 return $result;
120 } 125 }
121 126
  127 + /**
  128 + * @inheritdoc
  129 + */
122 public function behaviors() 130 public function behaviors()
123 { 131 {
124 return [ 132 return [
@@ -131,6 +139,9 @@ @@ -131,6 +139,9 @@
131 ]; 139 ];
132 } 140 }
133 141
  142 + /**
  143 + * @inheritdoc
  144 + */
134 public function rules() 145 public function rules()
135 { 146 {
136 return [ 147 return [
@@ -209,6 +220,27 @@ @@ -209,6 +220,27 @@
209 ]; 220 ];
210 } 221 }
211 222
  223 + public function afterSave($insert, $changedAttributes)
  224 + {
  225 + if (!empty($changedAttributes[ 'label' ])) {
  226 + if ($this->label != (string) $changedAttributes[ 'label' ]) {
  227 + $history = new OrderLabelHistory();
  228 +
  229 + $history->label_id = (integer) $this->label;
  230 + $history->order_id = (integer) $this->id;
  231 + $history->user_id = (integer) \Yii::$app->user->identity->id;
  232 +
  233 + if ($history->save()) {
  234 + \Yii::$app->session->setFlash('label_update', 'Статус заказа обновлен');
  235 + }
  236 + }
  237 + }
  238 + parent::afterSave($insert, $changedAttributes);
  239 + }
  240 +
  241 + /**
  242 + * @inheritdoc
  243 + */
212 public function afterFind() 244 public function afterFind()
213 { 245 {
214 parent::afterFind(); 246 parent::afterFind();
@@ -216,6 +248,9 @@ @@ -216,6 +248,9 @@
216 248
217 } 249 }
218 250
  251 + /**
  252 + * @inheritdoc
  253 + */
219 public function beforeSave($insert) 254 public function beforeSave($insert)
220 { 255 {
221 if (parent::beforeSave($insert)) { 256 if (parent::beforeSave($insert)) {
@@ -227,6 +262,9 @@ @@ -227,6 +262,9 @@
227 262
228 } 263 }
229 264
  265 + /**
  266 + * Convert some date
  267 + */
230 protected function convertDate() 268 protected function convertDate()
231 { 269 {
232 if (!empty($this->deadline)) { 270 if (!empty($this->deadline)) {
@@ -239,6 +277,9 @@ @@ -239,6 +277,9 @@
239 277
240 } 278 }
241 279
  280 + /**
  281 + * @inheritdoc
  282 + */
242 public function attributeLabels() 283 public function attributeLabels()
243 { 284 {
244 return [ 285 return [
@@ -276,6 +317,9 @@ @@ -276,6 +317,9 @@
276 ]; 317 ];
277 } 318 }
278 319
  320 + /**
  321 + * @return \yii\db\ActiveQuery
  322 + */
279 public function getUser() 323 public function getUser()
280 { 324 {
281 return $this->hasOne(Customer::className(), [ 'id' => 'user_id' ]); 325 return $this->hasOne(Customer::className(), [ 'id' => 'user_id' ]);
@@ -314,6 +358,14 @@ @@ -314,6 +358,14 @@
314 } 358 }
315 359
316 /** 360 /**
  361 + * @return \yii\db\ActiveQuery
  362 + */
  363 + public function getLabelsHistory()
  364 + {
  365 + return $this->hasMany(OrderLabelHistory::className(), [ 'order_id' => 'id' ]);
  366 + }
  367 +
  368 + /**
317 * @return string 369 * @return string
318 */ 370 */
319 public function getDeliveryString() 371 public function getDeliveryString()
@@ -345,13 +397,18 @@ @@ -345,13 +397,18 @@
345 } 397 }
346 398
347 /** 399 /**
348 - * 400 + * @return \yii\db\ActiveQuery
349 */ 401 */
350 public function getManager() 402 public function getManager()
351 { 403 {
352 return $this->hasOne(User::className(), [ 'id' => 'manager_id' ]); 404 return $this->hasOne(User::className(), [ 'id' => 'manager_id' ]);
353 } 405 }
354 406
  407 + /**
  408 + * Check if order is blocked for updating
  409 + *
  410 + * @return bool
  411 + */
355 public function isBlocked() 412 public function isBlocked()
356 { 413 {
357 if ($this->edit_id === 0) { 414 if ($this->edit_id === 0) {
@@ -365,6 +422,9 @@ @@ -365,6 +422,9 @@
365 } 422 }
366 } 423 }
367 424
  425 + /**
  426 + * If order products changed recount te total value
  427 + */
368 public function totalRecount() 428 public function totalRecount()
369 { 429 {
370 $products = $this->products; 430 $products = $this->products;
@@ -379,6 +439,9 @@ @@ -379,6 +439,9 @@
379 $this->save(); 439 $this->save();
380 } 440 }
381 441
  442 + /**
  443 + * If exit unpublished order - delete it
  444 + */
382 public function deleteUnpublished() 445 public function deleteUnpublished()
383 { 446 {
384 /** 447 /**
models/OrderLabelHistory.php 0 → 100644
  1 +<?php
  2 +
  3 + namespace artweb\artbox\ecommerce\models;
  4 +
  5 + use yii\behaviors\TimestampBehavior;
  6 + use yii\db\ActiveRecord;
  7 + use common\models\User;
  8 + use Yii;
  9 +
  10 + /**
  11 + * This is the model class for table "order_label_history".
  12 + *
  13 + * @property integer $id
  14 + * @property integer $label_id
  15 + * @property integer $order_id
  16 + * @property integer $user_id
  17 + * @property integer $created_at
  18 + * @property Order $order
  19 + * @property Label $label
  20 + * @property User $user
  21 + */
  22 + class OrderLabelHistory extends ActiveRecord
  23 + {
  24 + /**
  25 + * @inheritdoc
  26 + */
  27 + public static function tableName()
  28 + {
  29 + return 'order_label_history';
  30 + }
  31 +
  32 + /**
  33 + * @inheritdoc
  34 + */
  35 + public function behaviors()
  36 + {
  37 + return [
  38 + [
  39 + 'class' => TimestampBehavior::className(),
  40 + 'updatedAtAttribute' => false,
  41 + ],
  42 + ];
  43 + }
  44 +
  45 + /**
  46 + * @inheritdoc
  47 + */
  48 + public function rules()
  49 + {
  50 + return [
  51 + [
  52 + [
  53 + 'label_id',
  54 + 'order_id',
  55 + 'user_id',
  56 + 'created_at',
  57 + ],
  58 + 'integer',
  59 + ],
  60 + [
  61 + [ 'order_id' ],
  62 + 'exist',
  63 + 'skipOnError' => true,
  64 + 'targetClass' => Order::className(),
  65 + 'targetAttribute' => [ 'order_id' => 'id' ],
  66 + ],
  67 + [
  68 + [ 'label_id' ],
  69 + 'exist',
  70 + 'skipOnError' => true,
  71 + 'targetClass' => Label::className(),
  72 + 'targetAttribute' => [ 'label_id' => 'id' ],
  73 + ],
  74 +// [
  75 +// [ 'user_id' ],
  76 +// 'exist',
  77 +// 'skipOnError' => true,
  78 +// 'targetClass' => User::className(),
  79 +// 'targetAttribute' => [ 'user_id' => 'id' ],
  80 +// ],
  81 + ];
  82 + }
  83 +
  84 + /**
  85 + * @inheritdoc
  86 + */
  87 + public function attributeLabels()
  88 + {
  89 + return [
  90 + 'id' => Yii::t('app', 'ID'),
  91 + 'label_id' => Yii::t('app', 'Label ID'),
  92 + 'order_id' => Yii::t('app', 'Order ID'),
  93 + 'user_id' => Yii::t('app', 'User ID'),
  94 + 'created_at' => Yii::t('app', 'Created At'),
  95 + ];
  96 + }
  97 +
  98 + /**
  99 + * @return \yii\db\ActiveQuery
  100 + */
  101 + public function getOrder()
  102 + {
  103 + return $this->hasOne(Order::className(), [ 'id' => 'order_id' ]);
  104 + }
  105 +
  106 + /**
  107 + * @return \yii\db\ActiveQuery
  108 + */
  109 + public function getLabel()
  110 + {
  111 + return $this->hasOne(Label::className(), [ 'id' => 'label_id' ]);
  112 + }
  113 +
  114 + /**
  115 + * @return \yii\db\ActiveQuery
  116 + */
  117 + public function getUser()
  118 + {
  119 + return $this->hasOne(User::className(), [ 'id' => 'user_id' ]);
  120 + }
  121 + }
views/order/_timeline_item.php 0 → 100644
  1 +<?php
  2 + /**
  3 + * @var OrderLabelHistory $model
  4 + */
  5 + use artweb\artbox\ecommerce\models\OrderLabelHistory;
  6 + use yii\helpers\Html;
  7 +
  8 +?>
  9 +
  10 +<!-- timeline item -->
  11 +<li>
  12 + <!-- timeline icon -->
  13 + <i class="fa fa-tag bg-blue"></i>
  14 + <div class="timeline-item">
  15 + <span class="time"><i class="fa fa-calendar"></i> <?=Yii::$app->formatter->asDatetime($model->created_at)?></span>
  16 +
  17 + <h3 class="timeline-header"><?=$model->label->lang->title?></h3>
  18 +
  19 + <div class="timeline-body">
  20 + <?php
  21 + if (empty($model->user)) {
  22 + echo Html::tag('p', 'Поступил с сайта', ['class' => 'text-green']);
  23 + } else {
  24 + echo 'Статус присвоил: ' . Html::tag('p', $model->user->username, [
  25 + 'class' => 'text-blue'
  26 + ]);
  27 + }
  28 + ?>
  29 + </div>
  30 +
  31 + </div>
  32 +</li>
views/order/update.php
@@ -54,7 +54,18 @@ $.ajax({ @@ -54,7 +54,18 @@ $.ajax({
54 '; 54 ';
55 55
56 $this->registerJs($js, View::POS_READY); 56 $this->registerJs($js, View::POS_READY);
57 - 57 +
  58 + if (!empty(\Yii::$app->session->getFlash('label_update'))) {
  59 + $js = '
  60 +$.notify({
  61 + message: "Статус заказа обновлен"
  62 +}, {
  63 + type : "warning"
  64 +})
  65 +';
  66 + $this->registerJs($js, View::POS_READY);
  67 + }
  68 +
58 ?> 69 ?>
59 <div class="order-update"> 70 <div class="order-update">
60 <div class="container"> 71 <div class="container">
views/order/view.php
@@ -2,13 +2,18 @@ @@ -2,13 +2,18 @@
2 2
3 use artweb\artbox\ecommerce\models\Order; 3 use artweb\artbox\ecommerce\models\Order;
4 use kartik\grid\GridView; 4 use kartik\grid\GridView;
  5 + use yii\data\ActiveDataProvider;
  6 + use yii\grid\SerialColumn;
5 use yii\helpers\Html; 7 use yii\helpers\Html;
6 use yii\web\View; 8 use yii\web\View;
7 use yii\widgets\DetailView; 9 use yii\widgets\DetailView;
  10 + use yii\widgets\ListView;
8 11
9 /** 12 /**
10 - * @var View $this  
11 - * @var Order $model 13 + * @var View $this
  14 + * @var Order $model
  15 + * @var ActiveDataProvider $products
  16 + * @var ActiveDataProvider $historyData
12 */ 17 */
13 18
14 $this->title = 'Заказ #' . $model->id; 19 $this->title = 'Заказ #' . $model->id;
@@ -19,63 +24,126 @@ @@ -19,63 +24,126 @@
19 $this->params[ 'breadcrumbs' ][] = $this->title; 24 $this->params[ 'breadcrumbs' ][] = $this->title;
20 ?> 25 ?>
21 <div class="order-view"> 26 <div class="order-view">
22 -  
23 - <h1><?= Html::encode($this->title) ?></h1>  
24 -  
25 - <p>  
26 - <?= Html::a(  
27 - 'Update',  
28 - [  
29 - 'update',  
30 - 'id' => $model->id,  
31 - ],  
32 - [ 'class' => 'btn btn-primary' ]  
33 - ) ?>  
34 -  
35 - </p>  
36 -  
37 - <?= DetailView::widget(  
38 - [  
39 - 'model' => $model,  
40 - 'attributes' => [  
41 - 'id',  
42 - 'deadline',  
43 - 'pay',  
44 - 'reason',  
45 - 'label',  
46 - 'name',  
47 - 'phone',  
48 - 'email',  
49 - 'comment',  
50 - 'delivery',  
51 - 'declaration',  
52 - 'stock',  
53 - 'payment',  
54 - 'insurance',  
55 - 'city',  
56 - 'adress',  
57 - 'body',  
58 - 'check',  
59 - 'sms',  
60 - ],  
61 - ]  
62 - ) ?>  
63 -  
64 - <?php  
65 - echo GridView::widget( 27 +
  28 + <h1><?= Html::encode($this->title) ?></h1>
  29 +
  30 + <p>
  31 + <?= Html::a(
  32 + 'Обновить',
  33 + [
  34 + 'update',
  35 + 'id' => $model->id,
  36 + ],
  37 + [ 'class' => 'btn btn-primary' ]
  38 + ) ?>
  39 +
  40 + </p>
  41 +
  42 + <div class="box box-default">
  43 + <div class="box-header with-border">
  44 + <h3 class="box-title">Данные заказа</h3>
  45 + <div class="box-tools pull-right">
  46 + <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
  47 + </div><!-- /.box-tools -->
  48 + </div><!-- /.box-header -->
  49 + <div class="box-body">
  50 + <?= DetailView::widget(
66 [ 51 [
67 - 'dataProvider' => $products,  
68 - 'columns' => [ 52 + 'model' => $model,
  53 + 'attributes' => [
69 'id', 54 'id',
70 - 'product_name', 55 + 'deadline',
  56 + 'pay',
  57 + 'reason',
  58 + [
  59 + 'label' => 'Статус',
  60 + 'value' => $model->orderLabel->lang->title,
  61 + ],
71 'name', 62 'name',
72 - 'sku',  
73 - 'price',  
74 - 'count',  
75 - 'sum_cost', 63 + 'phone',
  64 + 'email',
  65 + 'comment',
  66 + [
  67 + 'label' => 'Способ доставки',
  68 + 'value' => $model->orderDelivery->lang->title,
  69 + ],
  70 + 'declaration',
  71 + 'stock',
  72 + [
  73 + 'label' => 'Способ оплаты',
  74 + 'value' => $model->orderPayment->lang->title,
  75 + ],
  76 + 'insurance',
  77 + 'city',
  78 + 'adress',
  79 + 'body',
  80 + 'check',
  81 + 'sms',
76 ], 82 ],
77 ] 83 ]
78 - );  
79 - ?> 84 + ) ?>
  85 + </div><!-- /.box-body -->
  86 + </div><!-- /.box -->
  87 +
  88 +
  89 + <div class="box box-default">
  90 + <div class="box-header with-border">
  91 + <h3 class="box-title">Товары</h3>
  92 + <div class="box-tools pull-right">
  93 + <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
  94 + </div><!-- /.box-tools -->
  95 + </div><!-- /.box-header -->
  96 + <div class="box-body">
  97 + <?php
  98 + echo GridView::widget(
  99 + [
  100 + 'dataProvider' => $products,
  101 + 'columns' => [
  102 + [
  103 + 'class' => SerialColumn::className(),
  104 + ],
  105 + 'product_name',
  106 + 'name',
  107 + 'sku',
  108 + 'price',
  109 + 'count',
  110 + 'sum_cost',
  111 + ],
  112 + ]
  113 + );
  114 + ?>
  115 + </div><!-- /.box-body -->
  116 + </div><!-- /.box -->
  117 +
  118 + <div class="box box-default">
  119 + <div class="box-header with-border">
  120 + <h3 class="box-title">История</h3>
  121 + <div class="box-tools pull-right">
  122 + <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
  123 + </div><!-- /.box-tools -->
  124 + </div><!-- /.box-header -->
  125 + <div class="box-body">
  126 +
  127 +
  128 + <?php
  129 + echo ListView::widget(
  130 + [
  131 + 'dataProvider' => $historyData,
  132 + 'layout' => '{items}',
  133 + 'itemView' => '_timeline_item',
  134 + 'itemOptions' => [
  135 + 'tag' => false,
  136 + ],
  137 + 'options' => [
  138 + 'tag' => 'ul',
  139 + 'class' => 'list-view timeline',
  140 + ],
  141 + ]
  142 + );
  143 + ?>
  144 +
  145 +
  146 + </div><!-- /.box-body -->
  147 + </div><!-- /.box -->
80 148
81 </div> 149 </div>
views/statistics/index.php
@@ -126,7 +126,7 @@ @@ -126,7 +126,7 @@
126 'clientOptions' => [ 126 'clientOptions' => [
127 'title' => [ 127 'title' => [
128 'display' => true, 128 'display' => true,
129 - 'text' => 'Custom Chart Title', 129 + 'text' => 'Статистика меток',
130 ], 130 ],
131 'scales' => [ 131 'scales' => [
132 'xAxes' => [ 132 'xAxes' => [