Commit ff71eeed3b9c1ccb76d72a0d91b0c2211bf34f7d

Authored by Alexey Boroda
1 parent 6649cf43

-Logs ready

@@ -129,24 +129,72 @@ @@ -129,24 +129,72 @@
129 return $result; 129 return $result;
130 } 130 }
131 131
  132 + /**
  133 + * @param string $attr
  134 + * @param array $values
  135 + *
  136 + * @return array
  137 + * Return array in form ['old'=>'old value ...', 'new' => 'new value ...']
  138 + */
132 public function getLogAttributes(string $attr, array $values) 139 public function getLogAttributes(string $attr, array $values)
133 { 140 {
134 - $labels = Label::find()->with('lang')->indexBy('id')->all();  
135 if ($attr == 'deadline') { 141 if ($attr == 'deadline') {
136 return [ 142 return [
137 - 'old' => empty($values['old']) ? '' : date('d.m.Y', $values['old']),  
138 - 'new' => empty($values['new']) ? '' : date('d.m.Y', $values['new']), 143 + 'old' => empty($values[ 'old' ]) ? '' : date('d.m.Y', $values[ 'old' ]),
  144 + 'new' => empty($values[ 'new' ]) ? '' : date('d.m.Y', $values[ 'new' ]),
  145 + ];
  146 + } elseif ($attr == 'reason') {
  147 + return [
  148 + 'old' => empty($values[ 'old' ]) ? '' : self::REASONS[ $values[ 'old' ] ],
  149 + 'new' => empty($values[ 'new' ]) ? '' : self::REASONS[ $values[ 'new' ] ],
  150 + ];
  151 + } elseif ($attr == 'label') {
  152 + $labels = Label::find()
  153 + ->with('lang')
  154 + ->indexBy('id')
  155 + ->all();
  156 + return [
  157 + 'old' => empty($values[ 'old' ]) ? '' : $labels[ $values[ 'old' ] ]->lang->title,
  158 + 'new' => empty($values[ 'new' ]) ? '' : $labels[ $values[ 'new' ] ]->lang->title,
139 ]; 159 ];
140 - } elseif ($attr = 'reason') { 160 + } elseif ($attr == 'delivery') {
  161 + $deliveries = Delivery::find()
  162 + ->with('lang')
  163 + ->indexBy('id')
  164 + ->all();
141 return [ 165 return [
142 - 'old' => empty($values['old']) ? '' : self::REASONS[$values['old']],  
143 - 'new' => empty($values['new']) ? '' : self::REASONS[$values['new']], 166 + 'old' => empty($values[ 'old' ]) ? '' : $deliveries[ $values[ 'old' ] ]->lang->title,
  167 + 'new' => empty($values[ 'new' ]) ? '' : $deliveries[ $values[ 'new' ] ]->lang->title,
144 ]; 168 ];
145 - } elseif ($attr = 'label') { 169 + } elseif ($attr == 'manager_id') {
  170 + $users = User::find()
  171 + ->indexBy('id')
  172 + ->all();
146 return [ 173 return [
147 - 'old' => empty($values['old']) ? '' : $labels[$values['old']]->lang->title,  
148 - 'new' => empty($values['new']) ? '' : $labels[$values['new']]->lang->title, 174 + 'old' => empty($values[ 'old' ]) ? '' : $users[ $values[ 'old' ] ]->username,
  175 + 'new' => empty($values[ 'new' ]) ? '' : $users[ $values[ 'new' ] ]->username,
149 ]; 176 ];
  177 + } elseif ($attr == 'payment') {
  178 + $payment = OrderPayment::find()
  179 + ->with('lang')
  180 + ->indexBy('id')
  181 + ->all();
  182 + return [
  183 + 'old' => empty($values[ 'old' ]) ? '' : $payment[ $values[ 'old' ] ]->lang->title,
  184 + 'new' => empty($values[ 'new' ]) ? '' : $payment[ $values[ 'new' ] ]->lang->title,
  185 + ];
  186 + } elseif ($attr == 'shipping_by') {
  187 + return [
  188 + 'old' => empty($values[ 'old' ]) ? '' : self::SHIPPING_BY[ $values[ 'old' ] ][ 'label' ],
  189 + 'new' => empty($values[ 'new' ]) ? '' : self::SHIPPING_BY[ $values[ 'new' ] ][ 'label' ],
  190 + ];
  191 + } elseif ($attr == 'pay') {
  192 + return [
  193 + 'old' => ($values[ 'old' ] == true) ? 'Оплачен' : 'Не оплачен',
  194 + 'new' => ($values[ 'new' ] == true) ? 'Оплачен' : 'Не оплачен',
  195 + ];
  196 + } else {
  197 + return $values;
150 } 198 }
151 } 199 }
152 200
@@ -263,13 +311,17 @@ @@ -263,13 +311,17 @@
263 311
264 public function afterSave($insert, $changedAttributes) 312 public function afterSave($insert, $changedAttributes)
265 { 313 {
  314 +// VarDumper::dump($changedAttributes, 10, true);die();
266 $data = []; 315 $data = [];
267 foreach ($changedAttributes as $key => $attribute) { 316 foreach ($changedAttributes as $key => $attribute) {
268 if ($this->oldAttributes[ $key ] != $attribute) { 317 if ($this->oldAttributes[ $key ] != $attribute) {
269 - $data[ $key ] = [  
270 - 'old' => $attribute,  
271 - 'new' => $this->oldAttributes[ $key ],  
272 - ]; 318 + $data[ $key ] = $this->getLogAttributes(
  319 + $key,
  320 + [
  321 + 'old' => $attribute,
  322 + 'new' => $this->oldAttributes[ $key ],
  323 + ]
  324 + );
273 } 325 }
274 } 326 }
275 327
views/order/_log_item.php
@@ -12,18 +12,18 @@ @@ -12,18 +12,18 @@
12 <!-- timeline item --> 12 <!-- timeline item -->
13 <li> 13 <li>
14 <!-- timeline icon --> 14 <!-- timeline icon -->
15 - <i class="fa fa-tag bg-blue"></i> 15 + <i class="fa fa-user bg-orange"></i>
16 <div class="timeline-item"> 16 <div class="timeline-item">
17 <span class="time"><i class="fa fa-calendar"></i> <?= Yii::$app->formatter->asDatetime($model->created_at) ?></span> 17 <span class="time"><i class="fa fa-calendar"></i> <?= Yii::$app->formatter->asDatetime($model->created_at) ?></span>
18 18
19 - <h3 class="timeline-header">Title</h3> 19 + <h3 class="timeline-header">Пользователь: <span class="text-orange"><?=$model->user->username?></span></h3>
20 20
21 <div class="timeline-body"> 21 <div class="timeline-body">
22 - <table class="table table-bordered"> 22 + <table class="table table-bordered table-striped">
23 <tr> 23 <tr>
24 <th>Поле</th> 24 <th>Поле</th>
25 - <th>с</th>  
26 - <th>на</th> 25 + <th>Старое значение</th>
  26 + <th>Новое значение</th>
27 </tr> 27 </tr>
28 <?php 28 <?php
29 foreach (Json::decode($model->data) as $key => $item) { 29 foreach (Json::decode($model->data) as $key => $item) {
views/order/index.php
@@ -347,7 +347,7 @@ JS; @@ -347,7 +347,7 @@ JS;
347 [ 347 [
348 'class' => 'yii\grid\ActionColumn', 348 'class' => 'yii\grid\ActionColumn',
349 'template' => \Yii::$app->user->identity->isAdmin( 349 'template' => \Yii::$app->user->identity->isAdmin(
350 - ) ? '{view} {update} {delete}' : '{view} {update}', 350 + ) ? '{history} {view} {update} {delete}' : '{view} {update}',
351 'buttons' => [ 351 'buttons' => [
352 'update' => function($url, $model) { 352 'update' => function($url, $model) {
353 return Html::a( 353 return Html::a(
@@ -359,6 +359,16 @@ JS; @@ -359,6 +359,16 @@ JS;
359 ] 359 ]
360 ); 360 );
361 }, 361 },
  362 + 'history' => function($url, $model) {
  363 + return Html::a(
  364 + Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-time' ]),
  365 + ['log', 'id' => $model->id],
  366 + [
  367 + 'target' => '_blank',
  368 + 'data-pjax' => '0',
  369 + ]
  370 + );
  371 + },
362 ], 372 ],
363 ], 373 ],
364 ], 374 ],
views/order/log.php
@@ -9,41 +9,51 @@ @@ -9,41 +9,51 @@
9 * @var ActiveDataProvider $logData 9 * @var ActiveDataProvider $logData
10 * @var Order $model 10 * @var Order $model
11 */ 11 */
12 - 12 +
  13 + $this->title = 'История заказа #' . $model->id;
  14 +
  15 + $this->params[ 'breadcrumbs' ][] = [
  16 + 'url' => yii\helpers\Url::to([ '/ecommerce/order/index' ]),
  17 + 'label' => \Yii::t('app', 'Заказы'),
  18 + ];
  19 + $this->params[ 'breadcrumbs' ][] = [
  20 + 'url' => yii\helpers\Url::to([ '/ecommerce/order/view', 'id' => $model->id ]),
  21 + 'label' => \Yii::t('app', 'Заказ #') . $model->id,
  22 + ];
  23 + $this->params[ 'breadcrumbs' ][] = $this->title;
  24 +
13 ?> 25 ?>
14 26
15 <div class="order-log"> 27 <div class="order-log">
16 <div class="box box-default"> 28 <div class="box box-default">
17 <div class="box-header with-border"> 29 <div class="box-header with-border">
18 <h3 class="box-title">История</h3> 30 <h3 class="box-title">История</h3>
19 -<!-- <div class="box-tools pull-right">-->  
20 -<!-- <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>-->  
21 -<!-- </div>-->  
22 - </div><!-- /.box-header -->  
23 - <div class="box-body"> 31 + <div class="box-body">
24 32
  33 + <?php
  34 + echo ListView::widget(
  35 + [
  36 + 'dataProvider' => $logData,
  37 + 'layout' => '{items}',
  38 + 'itemView' => '_log_item',
  39 + 'itemOptions' => [
  40 + 'tag' => false,
  41 + ],
  42 + 'options' => [
  43 + 'tag' => $logData->totalCount == 0 ? 'div' : 'ul',
  44 + 'class' => $logData->totalCount == 0 ? 'list-view' : 'list-view timeline',
  45 + ],
  46 + 'viewParams' => [
  47 + 'order' => $model,
  48 + ],
  49 + 'emptyText' => 'У этого заказа пока нет истории',
  50 + 'emptyTextOptions' => [
  51 + 'class' => 'callout callout-info'
  52 + ],
  53 + ]
  54 + );
  55 + ?>
25 56
26 - <?php  
27 - echo ListView::widget(  
28 - [  
29 - 'dataProvider' => $logData,  
30 - 'layout' => '{items}',  
31 - 'itemView' => '_log_item',  
32 - 'itemOptions' => [  
33 - 'tag' => false,  
34 - ],  
35 - 'options' => [  
36 - 'tag' => 'ul',  
37 - 'class' => 'list-view timeline',  
38 - ],  
39 - 'viewParams' => [  
40 - 'order' => $model,  
41 - ],  
42 - ]  
43 - );  
44 - ?>  
45 -  
46 -  
47 - </div><!-- /.box-body -->  
48 - </div><!-- /.box -->  
49 -</div> 57 + </div><!-- /.box-body -->
  58 + </div><!-- /.box -->
  59 + </div>
views/order/view.php
@@ -36,7 +36,15 @@ @@ -36,7 +36,15 @@
36 ], 36 ],
37 [ 'class' => 'btn btn-primary' ] 37 [ 'class' => 'btn btn-primary' ]
38 ) ?> 38 ) ?>
39 - 39 +
  40 + <?= Html::a(
  41 + 'История',
  42 + [
  43 + 'log',
  44 + 'id' => $model->id,
  45 + ],
  46 + [ 'class' => 'btn bg-orange' ]
  47 + ) ?>
40 </p> 48 </p>
41 49
42 <div class="box box-default"> 50 <div class="box box-default">
@@ -54,7 +62,10 @@ @@ -54,7 +62,10 @@
54 'id', 62 'id',
55 'deadline', 63 'deadline',
56 'pay', 64 'pay',
57 - 'reason', 65 + [
  66 + 'label' => 'Причина',
  67 + 'value' => empty($model->reason) ? '' : Order::REASONS[$model->reason],
  68 + ],
58 [ 69 [
59 'label' => 'Статус', 70 'label' => 'Статус',
60 'value' => $model->orderLabel->lang->title, 71 'value' => $model->orderLabel->lang->title,