Commit ff71eeed3b9c1ccb76d72a0d91b0c2211bf34f7d
1 parent
6649cf43
-Logs ready
Showing
5 changed files
with
134 additions
and
51 deletions
Show diff stats
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, | ... | ... |