Commit 17569d93090b5f11fb814197579a1c8e9a9ae80b
1 parent
44caf85a
-Order product log almost ready
-update form prettifying
Showing
12 changed files
with
507 additions
and
139 deletions
Show diff stats
1 | +<?php | |
2 | + namespace artweb\artbox\ecommerce\components; | |
3 | + | |
4 | + interface LoggerInterface | |
5 | + { | |
6 | + public static function generateData(array $changedAttributes, array $oldAttributes, bool $insert); | |
7 | + | |
8 | + public static function saveData(array $data, int $identityId, $params = []); | |
9 | + } | |
0 | 10 | \ No newline at end of file | ... | ... |
1 | +<?php | |
2 | + namespace artweb\artbox\ecommerce\components; | |
3 | + | |
4 | + use artweb\artbox\ecommerce\models\Delivery; | |
5 | + use artweb\artbox\ecommerce\models\Label; | |
6 | + use artweb\artbox\ecommerce\models\Order; | |
7 | + use artweb\artbox\ecommerce\models\OrderLabelHistory; | |
8 | + use artweb\artbox\ecommerce\models\OrderLog; | |
9 | + use artweb\artbox\ecommerce\models\OrderPayment; | |
10 | + use common\models\User; | |
11 | + use yii\base\Object; | |
12 | + use yii\helpers\Json; | |
13 | + | |
14 | + class OrderLogger extends Object implements LoggerInterface | |
15 | + { | |
16 | + /** | |
17 | + * @param array $changedAttributes | |
18 | + * @param array $oldAttributes | |
19 | + * @param bool $insert | |
20 | + * | |
21 | + * @return array | |
22 | + */ | |
23 | + public static function generateData(array $changedAttributes, array $oldAttributes, bool $insert) | |
24 | + { | |
25 | + $data = []; | |
26 | + foreach ($changedAttributes as $key => $attribute) { | |
27 | + if ($oldAttributes[ $key ] != $attribute && $key != 'updated_at') { | |
28 | + $data[ $key ] = self::getOrderLogAttributes( | |
29 | + $key, | |
30 | + [ | |
31 | + 'old' => $attribute, | |
32 | + 'new' => $oldAttributes[ $key ], | |
33 | + ] | |
34 | + ); | |
35 | + } | |
36 | + } | |
37 | + | |
38 | + return $data; | |
39 | + } | |
40 | + | |
41 | + /** | |
42 | + * @param array $data | |
43 | + * @param int $identityId | |
44 | + * @param array $params | |
45 | + */ | |
46 | + public static function saveData(array $data, int $identityId, $params = []) | |
47 | + { | |
48 | + if (!empty($data) && empty($data[ 'edit_time' ])) { | |
49 | + $log = new OrderLog(); | |
50 | + $log->order_id = (integer) $identityId; | |
51 | + $log->user_id = (integer) \Yii::$app->user->identity->id; | |
52 | + $log->data = Json::encode($data); | |
53 | + | |
54 | + $log->save(); | |
55 | + } | |
56 | + } | |
57 | + | |
58 | + /** | |
59 | + * @param array $attributes | |
60 | + * @param $label | |
61 | + * @param int $id | |
62 | + */ | |
63 | + public static function saveOrderLabelHistory(array $attributes, $label, int $id) | |
64 | + { | |
65 | + if (!empty($attributes[ 'label' ])) { | |
66 | + if ($label != (string) $attributes[ 'label' ]) { | |
67 | + $history = new OrderLabelHistory(); | |
68 | + | |
69 | + $history->label_id = (integer) $label; | |
70 | + $history->order_id = (integer) $id; | |
71 | + $history->user_id = (integer) \Yii::$app->user->identity->id; | |
72 | + | |
73 | + if ($history->save()) { | |
74 | + \Yii::$app->session->setFlash('label_update', 'Статус заказа обновлен'); | |
75 | + } | |
76 | + } | |
77 | + } | |
78 | + } | |
79 | + | |
80 | + /** | |
81 | + * @param string $attr | |
82 | + * @param array $values | |
83 | + * | |
84 | + * @return array | |
85 | + * Return array in form ['old'=>'old value ...', 'new' => 'new value ...'] | |
86 | + */ | |
87 | + protected static function getOrderLogAttributes(string $attr, array $values) | |
88 | + { | |
89 | + if ($attr == 'deadline') { | |
90 | + return [ | |
91 | + 'old' => empty($values[ 'old' ]) ? '' : date('d.m.Y', $values[ 'old' ]), | |
92 | + 'new' => empty($values[ 'new' ]) ? '' : date('d.m.Y', $values[ 'new' ]), | |
93 | + ]; | |
94 | + } elseif ($attr == 'reason') { | |
95 | + return [ | |
96 | + 'old' => empty($values[ 'old' ]) ? '' : Order::REASONS[ $values[ 'old' ] ], | |
97 | + 'new' => empty($values[ 'new' ]) ? '' : Order::REASONS[ $values[ 'new' ] ], | |
98 | + ]; | |
99 | + } elseif ($attr == 'label') { | |
100 | + $labels = Label::find() | |
101 | + ->with('lang') | |
102 | + ->indexBy('id') | |
103 | + ->all(); | |
104 | + return [ | |
105 | + 'old' => empty($values[ 'old' ]) ? '' : $labels[ $values[ 'old' ] ]->lang->title, | |
106 | + 'new' => empty($values[ 'new' ]) ? '' : $labels[ $values[ 'new' ] ]->lang->title, | |
107 | + ]; | |
108 | + } elseif ($attr == 'delivery') { | |
109 | + $deliveries = Delivery::find() | |
110 | + ->with('lang') | |
111 | + ->indexBy('id') | |
112 | + ->all(); | |
113 | + return [ | |
114 | + 'old' => empty($values[ 'old' ]) ? '' : $deliveries[ $values[ 'old' ] ]->lang->title, | |
115 | + 'new' => empty($values[ 'new' ]) ? '' : $deliveries[ $values[ 'new' ] ]->lang->title, | |
116 | + ]; | |
117 | + } elseif ($attr == 'manager_id') { | |
118 | + $users = User::find() | |
119 | + ->indexBy('id') | |
120 | + ->all(); | |
121 | + return [ | |
122 | + 'old' => empty($values[ 'old' ]) ? '' : $users[ $values[ 'old' ] ]->username, | |
123 | + 'new' => empty($values[ 'new' ]) ? '' : $users[ $values[ 'new' ] ]->username, | |
124 | + ]; | |
125 | + } elseif ($attr == 'payment') { | |
126 | + $payment = OrderPayment::find() | |
127 | + ->with('lang') | |
128 | + ->indexBy('id') | |
129 | + ->all(); | |
130 | + return [ | |
131 | + 'old' => empty($values[ 'old' ]) ? '' : $payment[ $values[ 'old' ] ]->lang->title, | |
132 | + 'new' => empty($values[ 'new' ]) ? '' : $payment[ $values[ 'new' ] ]->lang->title, | |
133 | + ]; | |
134 | + } elseif ($attr == 'shipping_by') { | |
135 | + return [ | |
136 | + 'old' => empty($values[ 'old' ]) ? '' : Order::SHIPPING_BY[ $values[ 'old' ] ][ 'label' ], | |
137 | + 'new' => empty($values[ 'new' ]) ? '' : Order::SHIPPING_BY[ $values[ 'new' ] ][ 'label' ], | |
138 | + ]; | |
139 | + } elseif ($attr == 'pay') { | |
140 | + return [ | |
141 | + 'old' => ( $values[ 'old' ] == true ) ? 'Оплачен' : 'Не оплачен', | |
142 | + 'new' => ( $values[ 'new' ] == true ) ? 'Оплачен' : 'Не оплачен', | |
143 | + ]; | |
144 | + } else { | |
145 | + return $values; | |
146 | + } | |
147 | + } | |
148 | + } | |
0 | 149 | \ No newline at end of file | ... | ... |
1 | +<?php | |
2 | + namespace artweb\artbox\ecommerce\components; | |
3 | + | |
4 | + use artweb\artbox\ecommerce\models\OrderProductLog; | |
5 | + use yii\base\Object; | |
6 | + use yii\helpers\Json; | |
7 | + | |
8 | + class OrderProductLogger extends Object implements LoggerInterface | |
9 | + { | |
10 | + /** | |
11 | + * @param array $changedAttributes | |
12 | + * @param array $oldAttributes | |
13 | + * @param bool $insert | |
14 | + * | |
15 | + * @return array | |
16 | + */ | |
17 | + public static function generateData(array $changedAttributes, array $oldAttributes, bool $insert) | |
18 | + { | |
19 | + $data = []; | |
20 | + foreach ($changedAttributes as $key => $attribute) { | |
21 | + if ($oldAttributes[ $key ] != $attribute) { | |
22 | + $data[ $key ] = [ | |
23 | + 'old' => $attribute, | |
24 | + 'new' => $oldAttributes[ $key ], | |
25 | + ]; | |
26 | + } | |
27 | + } | |
28 | + | |
29 | + return $data; | |
30 | + } | |
31 | + | |
32 | + /** | |
33 | + * @param array $data | |
34 | + * @param int $identityId | |
35 | + * @param array $params | |
36 | + */ | |
37 | + public static function saveData(array $data, int $identityId, $params = []) | |
38 | + { | |
39 | + if (!empty($data)) { | |
40 | + $log = new OrderProductLog(); | |
41 | + $log->order_product_id = (integer) $identityId; | |
42 | + $log->order_id = $params['order_id']; | |
43 | + $log->user_id = (integer) \Yii::$app->user->identity->id; | |
44 | + $log->data = Json::encode($data); | |
45 | + | |
46 | + $log->save(); | |
47 | + } | |
48 | + } | |
49 | + } | |
0 | 50 | \ No newline at end of file | ... | ... |
controllers/OrderController.php
... | ... | @@ -109,14 +109,14 @@ |
109 | 109 | public function actionView($id) |
110 | 110 | { |
111 | 111 | $model = $this->findModel($id); |
112 | - | |
112 | + | |
113 | 113 | $historyData = new ActiveDataProvider( |
114 | 114 | [ |
115 | 115 | 'query' => $model->getLabelsHistory() |
116 | 116 | ->with('order', 'label', 'user'), |
117 | 117 | ] |
118 | 118 | ); |
119 | - | |
119 | + | |
120 | 120 | $dataProvider = new ActiveDataProvider( |
121 | 121 | [ |
122 | 122 | 'query' => $model->getProducts(), |
... | ... | @@ -142,22 +142,29 @@ |
142 | 142 | public function actionLog($id) |
143 | 143 | { |
144 | 144 | $model = Order::findOne($id); |
145 | - | |
145 | + | |
146 | 146 | $logData = new ActiveDataProvider( |
147 | 147 | [ |
148 | 148 | 'query' => $model->getLogs(), |
149 | 149 | ] |
150 | 150 | ); |
151 | - | |
151 | + | |
152 | + $productLogData = new ActiveDataProvider( | |
153 | + [ | |
154 | + 'query' => $model->getProductLogs(), | |
155 | + ] | |
156 | + ); | |
157 | + | |
152 | 158 | return $this->render( |
153 | 159 | 'log', |
154 | 160 | [ |
155 | - 'model' => $model, | |
156 | - 'logData' => $logData, | |
161 | + 'model' => $model, | |
162 | + 'logData' => $logData, | |
163 | + 'productLogData' => $productLogData, | |
157 | 164 | ] |
158 | 165 | ); |
159 | 166 | } |
160 | - | |
167 | + | |
161 | 168 | public function actionDelete($id) |
162 | 169 | { |
163 | 170 | if (\Yii::$app->user->identity->isAdmin()) { |
... | ... | @@ -354,7 +361,7 @@ |
354 | 361 | } |
355 | 362 | |
356 | 363 | $model = $this->findModel($id); |
357 | - | |
364 | + | |
358 | 365 | if ($model->payment == 10) { |
359 | 366 | $model->validators->append( |
360 | 367 | new NumberValidator( |
... | ... | @@ -366,7 +373,7 @@ |
366 | 373 | ) |
367 | 374 | ); |
368 | 375 | } |
369 | - | |
376 | + | |
370 | 377 | /** |
371 | 378 | * @var User $user |
372 | 379 | */ |
... | ... | @@ -394,14 +401,14 @@ |
394 | 401 | $headers->set('Access-Control-Allow-Origin', '*'); |
395 | 402 | |
396 | 403 | if ($model->load(Yii::$app->request->post()) && $model->save()) { |
397 | - | |
404 | + | |
398 | 405 | if ($model->published != true) { |
399 | 406 | $model->published = true; |
400 | 407 | $model->save(); |
401 | 408 | /** |
402 | 409 | * @var SmsSender $sender |
403 | 410 | */ |
404 | - | |
411 | + | |
405 | 412 | $sender = \Yii::$app->sender; |
406 | 413 | $sender->send( |
407 | 414 | $model->phone, |
... | ... | @@ -413,8 +420,7 @@ |
413 | 420 | ) |
414 | 421 | ); |
415 | 422 | } |
416 | - | |
417 | - | |
423 | + | |
418 | 424 | $this->unblockOrder($model->id); |
419 | 425 | return $this->render( |
420 | 426 | 'update', |
... | ... | @@ -574,7 +580,7 @@ |
574 | 580 | $model->save(); |
575 | 581 | } |
576 | 582 | |
577 | - public function actionPublishOrder($id,$phone) | |
583 | + public function actionPublishOrder($id, $phone) | |
578 | 584 | { |
579 | 585 | $model = Order::findOne($id); |
580 | 586 | if ($model->published == true) { |
... | ... | @@ -582,23 +588,23 @@ |
582 | 588 | } |
583 | 589 | $model->published = true; |
584 | 590 | $model->save(); |
585 | - | |
591 | + | |
586 | 592 | /** |
587 | 593 | * Add order to history |
588 | 594 | */ |
589 | 595 | $history = new OrderLabelHistory(); |
590 | - | |
596 | + | |
591 | 597 | $history->label_id = (integer) $model->label; |
592 | 598 | $history->order_id = (integer) $model->id; |
593 | 599 | $history->user_id = (integer) \Yii::$app->user->identity->id; |
594 | - | |
600 | + | |
595 | 601 | $history->save(); |
596 | - | |
602 | + | |
597 | 603 | /** |
598 | 604 | * @var SmsSender $sender |
599 | 605 | */ |
600 | 606 | $sender = \Yii::$app->sender; |
601 | - if(!empty($phone)){ | |
607 | + if (!empty($phone)) { | |
602 | 608 | $sender->send( |
603 | 609 | $phone, |
604 | 610 | $this->renderPartial( |
... | ... | @@ -609,6 +615,6 @@ |
609 | 615 | ) |
610 | 616 | ); |
611 | 617 | } |
612 | - | |
618 | + | |
613 | 619 | } |
614 | 620 | } | ... | ... |
models/Order.php
1 | 1 | <?php |
2 | 2 | namespace artweb\artbox\ecommerce\models; |
3 | 3 | |
4 | + use artweb\artbox\ecommerce\components\OrderLogger; | |
4 | 5 | use artweb\artbox\models\Customer; |
5 | 6 | use common\behaviors\DefaultLabelBehavior; |
6 | 7 | use common\models\User; |
... | ... | @@ -8,8 +9,6 @@ |
8 | 9 | use yii\behaviors\TimestampBehavior; |
9 | 10 | use yii\db\ActiveRecord; |
10 | 11 | use yii\db\Query; |
11 | - use yii\helpers\Json; | |
12 | - use yii\helpers\VarDumper; | |
13 | 12 | |
14 | 13 | /** |
15 | 14 | * Class Order |
... | ... | @@ -133,75 +132,6 @@ |
133 | 132 | } |
134 | 133 | |
135 | 134 | /** |
136 | - * @param string $attr | |
137 | - * @param array $values | |
138 | - * | |
139 | - * @return array | |
140 | - * Return array in form ['old'=>'old value ...', 'new' => 'new value ...'] | |
141 | - */ | |
142 | - public function getLogAttributes(string $attr, array $values) | |
143 | - { | |
144 | - if ($attr == 'deadline') { | |
145 | - return [ | |
146 | - 'old' => empty($values[ 'old' ]) ? '' : date('d.m.Y', $values[ 'old' ]), | |
147 | - 'new' => empty($values[ 'new' ]) ? '' : date('d.m.Y', $values[ 'new' ]), | |
148 | - ]; | |
149 | - } elseif ($attr == 'reason') { | |
150 | - return [ | |
151 | - 'old' => empty($values[ 'old' ]) ? '' : self::REASONS[ $values[ 'old' ] ], | |
152 | - 'new' => empty($values[ 'new' ]) ? '' : self::REASONS[ $values[ 'new' ] ], | |
153 | - ]; | |
154 | - } elseif ($attr == 'label') { | |
155 | - $labels = Label::find() | |
156 | - ->with('lang') | |
157 | - ->indexBy('id') | |
158 | - ->all(); | |
159 | - return [ | |
160 | - 'old' => empty($values[ 'old' ]) ? '' : $labels[ $values[ 'old' ] ]->lang->title, | |
161 | - 'new' => empty($values[ 'new' ]) ? '' : $labels[ $values[ 'new' ] ]->lang->title, | |
162 | - ]; | |
163 | - } elseif ($attr == 'delivery') { | |
164 | - $deliveries = Delivery::find() | |
165 | - ->with('lang') | |
166 | - ->indexBy('id') | |
167 | - ->all(); | |
168 | - return [ | |
169 | - 'old' => empty($values[ 'old' ]) ? '' : $deliveries[ $values[ 'old' ] ]->lang->title, | |
170 | - 'new' => empty($values[ 'new' ]) ? '' : $deliveries[ $values[ 'new' ] ]->lang->title, | |
171 | - ]; | |
172 | - } elseif ($attr == 'manager_id') { | |
173 | - $users = User::find() | |
174 | - ->indexBy('id') | |
175 | - ->all(); | |
176 | - return [ | |
177 | - 'old' => empty($values[ 'old' ]) ? '' : $users[ $values[ 'old' ] ]->username, | |
178 | - 'new' => empty($values[ 'new' ]) ? '' : $users[ $values[ 'new' ] ]->username, | |
179 | - ]; | |
180 | - } elseif ($attr == 'payment') { | |
181 | - $payment = OrderPayment::find() | |
182 | - ->with('lang') | |
183 | - ->indexBy('id') | |
184 | - ->all(); | |
185 | - return [ | |
186 | - 'old' => empty($values[ 'old' ]) ? '' : $payment[ $values[ 'old' ] ]->lang->title, | |
187 | - 'new' => empty($values[ 'new' ]) ? '' : $payment[ $values[ 'new' ] ]->lang->title, | |
188 | - ]; | |
189 | - } elseif ($attr == 'shipping_by') { | |
190 | - return [ | |
191 | - 'old' => empty($values[ 'old' ]) ? '' : self::SHIPPING_BY[ $values[ 'old' ] ][ 'label' ], | |
192 | - 'new' => empty($values[ 'new' ]) ? '' : self::SHIPPING_BY[ $values[ 'new' ] ][ 'label' ], | |
193 | - ]; | |
194 | - } elseif ($attr == 'pay') { | |
195 | - return [ | |
196 | - 'old' => ( $values[ 'old' ] == true ) ? 'Оплачен' : 'Не оплачен', | |
197 | - 'new' => ( $values[ 'new' ] == true ) ? 'Оплачен' : 'Не оплачен', | |
198 | - ]; | |
199 | - } else { | |
200 | - return $values; | |
201 | - } | |
202 | - } | |
203 | - | |
204 | - /** | |
205 | 135 | * @inheritdoc |
206 | 136 | */ |
207 | 137 | public function behaviors() |
... | ... | @@ -314,41 +244,11 @@ |
314 | 244 | |
315 | 245 | public function afterSave($insert, $changedAttributes) |
316 | 246 | { |
317 | - $data = []; | |
318 | - foreach ($changedAttributes as $key => $attribute) { | |
319 | - if ($this->oldAttributes[ $key ] != $attribute && $key != 'updated_at') { | |
320 | - $data[ $key ] = $this->getLogAttributes( | |
321 | - $key, | |
322 | - [ | |
323 | - 'old' => $attribute, | |
324 | - 'new' => $this->oldAttributes[ $key ], | |
325 | - ] | |
326 | - ); | |
327 | - } | |
328 | - } | |
247 | + $data = OrderLogger::generateData($changedAttributes, $this->oldAttributes, $insert); | |
248 | + OrderLogger::saveData($data, $this->id); | |
329 | 249 | |
330 | - if (!empty($data) && empty($data[ 'edit_time' ])) { | |
331 | - $log = new OrderLog(); | |
332 | - $log->order_id = (integer) $this->id; | |
333 | - $log->user_id = (integer) \Yii::$app->user->identity->id; | |
334 | - $log->data = Json::encode($data); | |
335 | - | |
336 | - $log->save(); | |
337 | - } | |
250 | + OrderLogger::saveOrderLabelHistory($changedAttributes, $this->label, $this->id); | |
338 | 251 | |
339 | - if (!empty($changedAttributes[ 'label' ])) { | |
340 | - if ($this->label != (string) $changedAttributes[ 'label' ]) { | |
341 | - $history = new OrderLabelHistory(); | |
342 | - | |
343 | - $history->label_id = (integer) $this->label; | |
344 | - $history->order_id = (integer) $this->id; | |
345 | - $history->user_id = (integer) \Yii::$app->user->identity->id; | |
346 | - | |
347 | - if ($history->save()) { | |
348 | - \Yii::$app->session->setFlash('label_update', 'Статус заказа обновлен'); | |
349 | - } | |
350 | - } | |
351 | - } | |
352 | 252 | parent::afterSave($insert, $changedAttributes); |
353 | 253 | } |
354 | 254 | |
... | ... | @@ -504,6 +404,14 @@ |
504 | 404 | { |
505 | 405 | return $this->hasMany(OrderLog::className(), [ 'order_id' => 'id' ]); |
506 | 406 | } |
407 | + | |
408 | + /** | |
409 | + * @return \yii\db\ActiveQuery | |
410 | + */ | |
411 | + public function getProductLogs() | |
412 | + { | |
413 | + return $this->hasMany(OrderProductLog::className(), [ 'order_id' => 'id' ]); | |
414 | + } | |
507 | 415 | |
508 | 416 | /** |
509 | 417 | * If deadline is fucked up returns true, | ... | ... |
models/OrderLog.php
... | ... | @@ -66,13 +66,6 @@ |
66 | 66 | 'targetClass' => Order::className(), |
67 | 67 | 'targetAttribute' => [ 'order_id' => 'id' ], |
68 | 68 | ], |
69 | - // [ | |
70 | - // [ 'user_id' ], | |
71 | - // 'exist', | |
72 | - // 'skipOnError' => true, | |
73 | - // 'targetClass' => User::className(), | |
74 | - // 'targetAttribute' => [ 'user_id' => 'id' ], | |
75 | - // ], | |
76 | 69 | ]; |
77 | 70 | } |
78 | 71 | ... | ... |
models/OrderProduct.php
... | ... | @@ -2,6 +2,7 @@ |
2 | 2 | |
3 | 3 | namespace artweb\artbox\ecommerce\models; |
4 | 4 | |
5 | + use artweb\artbox\ecommerce\components\OrderProductLogger; | |
5 | 6 | use Yii; |
6 | 7 | use yii\db\ActiveRecord; |
7 | 8 | |
... | ... | @@ -33,11 +34,19 @@ |
33 | 34 | return 'order_product'; |
34 | 35 | } |
35 | 36 | |
37 | + public function afterSave($insert, $changedAttributes) | |
38 | + { | |
39 | + $data = OrderProductLogger::generateData($changedAttributes, $this->oldAttributes, $insert); | |
40 | + OrderProductLogger::saveData($data, $this->id, [ 'order_id' => $this->order_id ]); | |
41 | + | |
42 | + parent::afterSave($insert, $changedAttributes); | |
43 | + } | |
44 | + | |
36 | 45 | public function beforeSave($insert) |
37 | 46 | { |
38 | 47 | $this->price = $this->productVariant->price; |
39 | 48 | $this->sum_cost = $this->price * $this->count; |
40 | - return parent::beforeSave($insert); // TODO: Change the autogenerated stub | |
49 | + return parent::beforeSave($insert); | |
41 | 50 | } |
42 | 51 | |
43 | 52 | public function rules() |
... | ... | @@ -82,8 +91,8 @@ |
82 | 91 | 'product_name' => Yii::t('app', 'Наименование'), |
83 | 92 | 'name' => Yii::t('app', 'op_name'), |
84 | 93 | 'art' => Yii::t('app', 'art'), |
85 | - 'cost' => Yii::t('app', 'cost'), | |
86 | - 'count' => Yii::t('app', 'count'), | |
94 | + 'cost' => Yii::t('app', 'Сумма'), | |
95 | + 'count' => Yii::t('app', 'Количество'), | |
87 | 96 | 'sum_cost' => Yii::t('app', 'Сумма'), |
88 | 97 | 'status' => Yii::t('app', 'Статус'), |
89 | 98 | 'booking' => Yii::t('app', 'Бронь'), | ... | ... |
1 | +<?php | |
2 | + | |
3 | + namespace artweb\artbox\ecommerce\models; | |
4 | + | |
5 | + use common\models\User; | |
6 | + use Yii; | |
7 | + use yii\behaviors\TimestampBehavior; | |
8 | + use yii\db\ActiveRecord; | |
9 | + | |
10 | + /** | |
11 | + * This is the model class for table "order_product_log". | |
12 | + * | |
13 | + * @property integer $id | |
14 | + * @property integer $order_product_id | |
15 | + * @property integer $created_at | |
16 | + * @property integer $user_id | |
17 | + * @property integer $order_id | |
18 | + * @property string $data | |
19 | + * @property Order $order | |
20 | + * @property OrderProduct $orderProduct | |
21 | + * @property User $user | |
22 | + */ | |
23 | + class OrderProductLog extends ActiveRecord | |
24 | + { | |
25 | + /** | |
26 | + * @inheritdoc | |
27 | + */ | |
28 | + public static function tableName() | |
29 | + { | |
30 | + return 'order_product_log'; | |
31 | + } | |
32 | + | |
33 | + public function behaviors() | |
34 | + { | |
35 | + return [ | |
36 | + [ | |
37 | + 'class' => TimestampBehavior::className(), | |
38 | + 'updatedAtAttribute' => false, | |
39 | + ], | |
40 | + ]; | |
41 | + } | |
42 | + | |
43 | + /** | |
44 | + * @inheritdoc | |
45 | + */ | |
46 | + public function rules() | |
47 | + { | |
48 | + return [ | |
49 | + [ | |
50 | + [ | |
51 | + 'order_product_id', | |
52 | + 'created_at', | |
53 | + 'user_id', | |
54 | + 'order_id', | |
55 | + ], | |
56 | + 'integer', | |
57 | + ], | |
58 | + [ | |
59 | + [ 'data' ], | |
60 | + 'string', | |
61 | + ], | |
62 | + [ | |
63 | + [ 'order_id' ], | |
64 | + 'exist', | |
65 | + 'skipOnError' => true, | |
66 | + 'targetClass' => Order::className(), | |
67 | + 'targetAttribute' => [ 'order_id' => 'id' ], | |
68 | + ], | |
69 | + [ | |
70 | + [ 'order_product_id' ], | |
71 | + 'exist', | |
72 | + 'skipOnError' => true, | |
73 | + 'targetClass' => OrderProduct::className(), | |
74 | + 'targetAttribute' => [ 'order_product_id' => 'id' ], | |
75 | + ], | |
76 | + ]; | |
77 | + } | |
78 | + | |
79 | + /** | |
80 | + * @inheritdoc | |
81 | + */ | |
82 | + public function attributeLabels() | |
83 | + { | |
84 | + return [ | |
85 | + 'id' => Yii::t('app', 'ID'), | |
86 | + 'order_product_id' => Yii::t('app', 'Order Product ID'), | |
87 | + 'created_at' => Yii::t('app', 'Created At'), | |
88 | + 'user_id' => Yii::t('app', 'User ID'), | |
89 | + 'order_id' => Yii::t('app', 'Order ID'), | |
90 | + 'data' => Yii::t('app', 'Data'), | |
91 | + ]; | |
92 | + } | |
93 | + | |
94 | + /** | |
95 | + * @return \yii\db\ActiveQuery | |
96 | + */ | |
97 | + public function getOrder() | |
98 | + { | |
99 | + return $this->hasOne(Order::className(), [ 'id' => 'order_id' ]); | |
100 | + } | |
101 | + | |
102 | + /** | |
103 | + * @return \yii\db\ActiveQuery | |
104 | + */ | |
105 | + public function getOrderProduct() | |
106 | + { | |
107 | + return $this->hasOne(OrderProduct::className(), [ 'id' => 'order_product_id' ]); | |
108 | + } | |
109 | + | |
110 | + /** | |
111 | + * @return \yii\db\ActiveQuery | |
112 | + */ | |
113 | + public function getUser() | |
114 | + { | |
115 | + return $this->hasOne(User::className(), [ 'id' => 'user_id' ]); | |
116 | + } | |
117 | + } | ... | ... |
views/order/_form.php
... | ... | @@ -149,9 +149,25 @@ JS; |
149 | 149 | 'id' => 'main-form', |
150 | 150 | ] |
151 | 151 | ); ?> |
152 | + | |
153 | + | |
154 | +<div class="box box-default"> | |
155 | + <div class="box-header with-border"> | |
156 | + <h3 class="box-title">История</h3> | |
157 | + <div class="box-tools pull-right"> | |
158 | + <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i> | |
159 | + </button> | |
160 | + </div> | |
161 | + </div> | |
162 | + <div class="box-body"> | |
163 | + | |
164 | + | |
152 | 165 | <div class="container"> |
153 | 166 | <div class="form-group"> |
154 | 167 | <br> |
168 | + | |
169 | + | |
170 | + | |
155 | 171 | <div class="row"> |
156 | 172 | <div class="col-sm-6"> |
157 | 173 | |
... | ... | @@ -363,12 +379,28 @@ JS; |
363 | 379 | |
364 | 380 | </div> |
365 | 381 | </div> |
382 | + | |
383 | + | |
384 | + | |
366 | 385 | </div> |
367 | 386 | </div> |
368 | 387 | |
388 | + </div><!-- /.box-body --> | |
389 | +</div><!-- /.box --> | |
390 | + | |
369 | 391 | <?php ActiveForm::end(); ?> |
370 | -<br> | |
371 | -<br> | |
392 | + | |
393 | + | |
394 | +<div class="box box-default"> | |
395 | + <div class="box-header with-border"> | |
396 | + <h3 class="box-title">История</h3> | |
397 | + <div class="box-tools pull-right"> | |
398 | + <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i> | |
399 | + </button> | |
400 | + </div> | |
401 | + </div> | |
402 | + <div class="box-body"> | |
403 | + | |
372 | 404 | <div class="container"> |
373 | 405 | <div class="row"> |
374 | 406 | <?php |
... | ... | @@ -673,7 +705,16 @@ JS; |
673 | 705 | <?php ActiveForm::end(); ?> |
674 | 706 | </div> |
675 | 707 | |
708 | + | |
709 | + | |
710 | +</div> | |
711 | + | |
712 | + </div><!-- /.box-body --> | |
713 | +</div><!-- /.box --> | |
714 | + | |
715 | + | |
676 | 716 | <br> |
717 | +<div class="container"> | |
677 | 718 | <div class="row"> |
678 | 719 | <?= Html::button( |
679 | 720 | $model->isNewRecord ? \Yii::t('app', 'Создать') : \Yii::t('app', 'Сохранить'), |
... | ... | @@ -708,7 +749,6 @@ JS; |
708 | 749 | ] |
709 | 750 | ) ?> |
710 | 751 | </div> |
711 | - | |
712 | 752 | </div> |
713 | 753 | <br> |
714 | 754 | <br> | ... | ... |
1 | +<?php | |
2 | + /** | |
3 | + * @var OrderProductLog $model | |
4 | + * @var Order $order | |
5 | + */ | |
6 | + use artweb\artbox\ecommerce\models\Order; | |
7 | + use artweb\artbox\ecommerce\models\OrderProductLog; | |
8 | + use yii\helpers\Html; | |
9 | + use yii\helpers\Json; | |
10 | + | |
11 | +?> | |
12 | + | |
13 | +<!-- timeline item --> | |
14 | +<li> | |
15 | + <!-- timeline icon --> | |
16 | + <i class="fa fa-user bg-green"></i> | |
17 | + <div class="timeline-item"> | |
18 | + <span class="time"><i class="fa fa-calendar"></i> <?= Yii::$app->formatter->asDatetime($model->created_at) ?></span> | |
19 | + | |
20 | + <h3 class="timeline-header">Пользователь: <span class="text-green"><?= $model->user->username ?></span></h3> | |
21 | + | |
22 | + <div class="timeline-body"> | |
23 | + <table class="table table-bordered table-striped"> | |
24 | + <tr> | |
25 | + <th>Поле</th> | |
26 | + <th>Старое значение</th> | |
27 | + <th>Новое значение</th> | |
28 | + </tr> | |
29 | + <?php | |
30 | + foreach (Json::decode($model->data) as $key => $item) { | |
31 | + echo Html::tag( | |
32 | + 'tr', | |
33 | + Html::tag('td', $key ) . Html::tag('td', $item[ 'old' ]) . Html::tag( | |
34 | + 'td', | |
35 | + $item[ 'new' ] | |
36 | + ) | |
37 | + ); | |
38 | + } | |
39 | + ?> | |
40 | + </table> | |
41 | + </div> | |
42 | + | |
43 | + </div> | |
44 | +</li> | ... | ... |
views/order/log.php
... | ... | @@ -7,6 +7,7 @@ |
7 | 7 | /** |
8 | 8 | * @var View $this |
9 | 9 | * @var ActiveDataProvider $logData |
10 | + * @var ActiveDataProvider $productLogData | |
10 | 11 | * @var Order $model |
11 | 12 | */ |
12 | 13 | |
... | ... | @@ -25,9 +26,15 @@ |
25 | 26 | ?> |
26 | 27 | |
27 | 28 | <div class="order-log"> |
29 | + | |
28 | 30 | <div class="box box-default"> |
29 | 31 | <div class="box-header with-border"> |
30 | 32 | <h3 class="box-title">История</h3> |
33 | + <div class="box-tools pull-right"> | |
34 | + <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i> | |
35 | + </button> | |
36 | + </div> | |
37 | + </div> | |
31 | 38 | <div class="box-body"> |
32 | 39 | |
33 | 40 | <?php |
... | ... | @@ -56,4 +63,42 @@ |
56 | 63 | |
57 | 64 | </div><!-- /.box-body --> |
58 | 65 | </div><!-- /.box --> |
59 | - </div> | |
66 | + | |
67 | + <div class="box box-default"> | |
68 | + <div class="box-header with-border"> | |
69 | + <h3 class="box-title">История</h3> | |
70 | + <div class="box-tools pull-right"> | |
71 | + <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i> | |
72 | + </button> | |
73 | + </div> | |
74 | + </div> | |
75 | + <div class="box-body"> | |
76 | + | |
77 | + <?php | |
78 | + echo ListView::widget( | |
79 | + [ | |
80 | + 'dataProvider' => $productLogData, | |
81 | + 'layout' => '{items}', | |
82 | + 'itemView' => '_log_product_item', | |
83 | + 'itemOptions' => [ | |
84 | + 'tag' => false, | |
85 | + ], | |
86 | + 'options' => [ | |
87 | + 'tag' => $productLogData->totalCount == 0 ? 'div' : 'ul', | |
88 | + 'class' => $productLogData->totalCount == 0 ? 'list-view' : 'list-view timeline', | |
89 | + ], | |
90 | + 'viewParams' => [ | |
91 | + 'order' => $model, | |
92 | + ], | |
93 | + 'emptyText' => 'У этого заказа пока нет истории', | |
94 | + 'emptyTextOptions' => [ | |
95 | + 'class' => 'callout callout-info' | |
96 | + ], | |
97 | + ] | |
98 | + ); | |
99 | + ?> | |
100 | + | |
101 | + </div><!-- /.box-body --> | |
102 | + </div><!-- /.box --> | |
103 | + | |
104 | +</div> | ... | ... |
views/order/update.php