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, | ... | ... |