Commit ff71eeed3b9c1ccb76d72a0d91b0c2211bf34f7d

Authored by Alexey Boroda
1 parent 6649cf43

-Logs ready

models/Order.php
... ... @@ -129,24 +129,72 @@
129 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 139 public function getLogAttributes(string $attr, array $values)
133 140 {
134   - $labels = Label::find()->with('lang')->indexBy('id')->all();
135 141 if ($attr == 'deadline') {
136 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 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 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 311  
264 312 public function afterSave($insert, $changedAttributes)
265 313 {
  314 +// VarDumper::dump($changedAttributes, 10, true);die();
266 315 $data = [];
267 316 foreach ($changedAttributes as $key => $attribute) {
268 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 12 <!-- timeline item -->
13 13 <li>
14 14 <!-- timeline icon -->
15   - <i class="fa fa-tag bg-blue"></i>
  15 + <i class="fa fa-user bg-orange"></i>
16 16 <div class="timeline-item">
17 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 21 <div class="timeline-body">
22   - <table class="table table-bordered">
  22 + <table class="table table-bordered table-striped">
23 23 <tr>
24 24 <th>Поле</th>
25   - <th>с</th>
26   - <th>на</th>
  25 + <th>Старое значение</th>
  26 + <th>Новое значение</th>
27 27 </tr>
28 28 <?php
29 29 foreach (Json::decode($model->data) as $key => $item) {
... ...
views/order/index.php
... ... @@ -347,7 +347,7 @@ JS;
347 347 [
348 348 'class' => 'yii\grid\ActionColumn',
349 349 'template' => \Yii::$app->user->identity->isAdmin(
350   - ) ? '{view} {update} {delete}' : '{view} {update}',
  350 + ) ? '{history} {view} {update} {delete}' : '{view} {update}',
351 351 'buttons' => [
352 352 'update' => function($url, $model) {
353 353 return Html::a(
... ... @@ -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 9 * @var ActiveDataProvider $logData
10 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 27 <div class="order-log">
16 28 <div class="box box-default">
17 29 <div class="box-header with-border">
18 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 36 ],
37 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 48 </p>
41 49  
42 50 <div class="box box-default">
... ... @@ -54,7 +62,10 @@
54 62 'id',
55 63 'deadline',
56 64 'pay',
57   - 'reason',
  65 + [
  66 + 'label' => 'Причина',
  67 + 'value' => empty($model->reason) ? '' : Order::REASONS[$model->reason],
  68 + ],
58 69 [
59 70 'label' => 'Статус',
60 71 'value' => $model->orderLabel->lang->title,
... ...