Blame view

models/Order.php 20.2 KB
8a7e6ecf   Yarik   Namespaces
1
2
3
4
  <?php
      namespace artweb\artbox\ecommerce\models;
      
      use artweb\artbox\models\Customer;
3bb55546   Alexey Boroda   -Fixing bugs
5
      use common\behaviors\DefaultLabelBehavior;
01185786   Alexey Boroda   -Sms in process
6
      use common\models\User;
8a7e6ecf   Yarik   Namespaces
7
      use Yii;
2b29877e   Alexey Boroda   -Added time colum...
8
      use yii\behaviors\TimestampBehavior;
8a7e6ecf   Yarik   Namespaces
9
      use yii\db\ActiveRecord;
ee0e1df5   Alexey Boroda   -Statistics half ...
10
      use yii\db\Query;
d3406983   Alexey Boroda   -Order history ha...
11
12
      use yii\helpers\Json;
      use yii\helpers\VarDumper;
8a7e6ecf   Yarik   Namespaces
13
14
15
16
17
18
      
      /**
       * Class Order
       *
       * @todo    Write docs and refactor
       * @package artweb\artbox\ecommerce\models
eb190b1f   Alexey Boroda   -Order form add p...
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
       * @property OrderProduct[] $products
       * @property integer        $created_at
       * @property integer        $updated_at
       * @property integer        $deleted_at
       * @property integer        $deadline
       * @property boolean        $wasted
       * @property string         $delivery_cost
       * @property integer        $reason
       * @property string         $check
       * @property string         $sms
       * @property int            $id
       * @property integer        $edit_id
       * @property integer        $edit_time
       * @property integer        $manager_id
       * @property int            $user_id
       * @property string         $name
       * @property string         $phone
       * @property string         $phone2
       * @property string         $email
       * @property string         $adress
       * @property string         $body
       * @property double         $total
       * @property string         $date_time
       * @property string         $date_dedline
       * @property string         $reserve
       * @property string         $status
       * @property string         $comment
       * @property int            $label
       * @property int            $pay
       * @property int            $numbercard
       * @property int            $delivery
       * @property string         $declaration
       * @property string         $stock
       * @property string         $consignment
       * @property string         $payment
       * @property string         $insurance
       * @property double         $amount_imposed
       * @property string         $shipping_by
       * @property string         $city
       * @property string         $deliveryString
       * @property boolean        $published
3bee3445   Alexey Boroda   -Order history ready
60
61
62
       * @property Label          $orderLabel
       * @property Delivery       $orderDelivery
       * @property OrderPayment   $orderPayment
d3406983   Alexey Boroda   -Order history ha...
63
       * @property OrderLog[]     $logs
93a0cd0b   Yarik   Credits
64
65
       * @property float          $credit_sum
       * @property int            $credit_month
2f4b4e77   Alexey Boroda   -Statistics expor...
66
       * @property User           $manager
8a7e6ecf   Yarik   Namespaces
67
68
69
       */
      class Order extends ActiveRecord
      {
bb962a6d   Alexey Boroda   -Order in process
70
71
72
73
74
75
76
77
78
          
          const SHIPPING_BY = [
              1 => [
                  'label' => 'Отправитель',
              ],
              2 => [
                  'label' => 'Получатель',
              ],
          ];
8a7e6ecf   Yarik   Namespaces
79
          
db3040d3   Alexey Boroda   -Order module alm...
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
          const REASONS = [
              1  => 'Нет товара',
              2  => 'Нет оплаты',
              3  => 'Передумал',
              4  => ' - Купил в другом месте',
              5  => ' - Не подошли условия доставки',
              6  => ' - Не подошел срок доставки',
              7  => ' - Нет денег',
              8  => ' - Купит позже',
              9  => 'Купил в другом месте',
              10 => 'Подьедет в маг.',
              11 => 'Дубль заказа.',
              12 => 'Другое',
              13 => 'Брак',
              14 => 'Отказался от Самовывоза',
              15 => 'Не приехал за Самовывозом',
              16 => 'Отменил заказ',
              17 => 'Не берет трубку',
          ];
          
8a7e6ecf   Yarik   Namespaces
100
101
102
103
          public static function tableName()
          {
              return 'order';
          }
3bee3445   Alexey Boroda   -Order history ready
104
          
ee0e1df5   Alexey Boroda   -Statistics half ...
105
          /**
29257441   Alexey Boroda   -Manager filter o...
106
107
           * @param array $date
           * @param array $manager
ee0e1df5   Alexey Boroda   -Statistics half ...
108
109
110
           *
           * @return array
           */
29257441   Alexey Boroda   -Manager filter o...
111
          public static function getRejectionStatistics(array $date = [], array $manager = [])
ee0e1df5   Alexey Boroda   -Statistics half ...
112
113
114
115
116
117
118
119
120
121
122
123
124
125
          {
              $result = [];
              foreach (self::REASONS as $id => $reason) {
                  $result[ $reason ] = ( new Query() )->select(
                      [
                          'sum'   => 'SUM(total)',
                          'count' => 'COUNT(*)',
                      ]
                  )
                                                      ->from(self::tableName())
                                                      ->where(
                                                          [
                                                              'reason' => $id,
                                                          ]
3bee3445   Alexey Boroda   -Order history ready
126
                                                      )
29257441   Alexey Boroda   -Manager filter o...
127
128
                                                      ->andFilterWhere($date)
                                                      ->andFilterWhere($manager)
3bee3445   Alexey Boroda   -Order history ready
129
                                                      ->one();
ee0e1df5   Alexey Boroda   -Statistics half ...
130
131
132
133
              }
              
              return $result;
          }
8a7e6ecf   Yarik   Namespaces
134
          
ff71eeed   Alexey Boroda   -Logs ready
135
136
137
138
139
140
141
          /**
           * @param string $attr
           * @param array  $values
           *
           * @return array
           * Return array in form ['old'=>'old value ...', 'new' => 'new value ...']
           */
d3406983   Alexey Boroda   -Order history ha...
142
143
          public function getLogAttributes(string $attr, array $values)
          {
d3406983   Alexey Boroda   -Order history ha...
144
145
              if ($attr == 'deadline') {
                  return [
ff71eeed   Alexey Boroda   -Logs ready
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
                      'old' => empty($values[ 'old' ]) ? '' : date('d.m.Y', $values[ 'old' ]),
                      'new' => empty($values[ 'new' ]) ? '' : date('d.m.Y', $values[ 'new' ]),
                  ];
              } elseif ($attr == 'reason') {
                  return [
                      'old' => empty($values[ 'old' ]) ? '' : self::REASONS[ $values[ 'old' ] ],
                      'new' => empty($values[ 'new' ]) ? '' : self::REASONS[ $values[ 'new' ] ],
                  ];
              } elseif ($attr == 'label') {
                  $labels = Label::find()
                                 ->with('lang')
                                 ->indexBy('id')
                                 ->all();
                  return [
                      'old' => empty($values[ 'old' ]) ? '' : $labels[ $values[ 'old' ] ]->lang->title,
                      'new' => empty($values[ 'new' ]) ? '' : $labels[ $values[ 'new' ] ]->lang->title,
                  ];
              } elseif ($attr == 'delivery') {
                  $deliveries = Delivery::find()
                                        ->with('lang')
                                        ->indexBy('id')
                                        ->all();
                  return [
                      'old' => empty($values[ 'old' ]) ? '' : $deliveries[ $values[ 'old' ] ]->lang->title,
                      'new' => empty($values[ 'new' ]) ? '' : $deliveries[ $values[ 'new' ] ]->lang->title,
                  ];
              } elseif ($attr == 'manager_id') {
                  $users = User::find()
                               ->indexBy('id')
                               ->all();
                  return [
                      'old' => empty($values[ 'old' ]) ? '' : $users[ $values[ 'old' ] ]->username,
                      'new' => empty($values[ 'new' ]) ? '' : $users[ $values[ 'new' ] ]->username,
                  ];
              } elseif ($attr == 'payment') {
                  $payment = OrderPayment::find()
                                         ->with('lang')
                                         ->indexBy('id')
                                         ->all();
                  return [
                      'old' => empty($values[ 'old' ]) ? '' : $payment[ $values[ 'old' ] ]->lang->title,
                      'new' => empty($values[ 'new' ]) ? '' : $payment[ $values[ 'new' ] ]->lang->title,
6649cf43   Alexey Boroda   -Otp and logging
188
                  ];
ff71eeed   Alexey Boroda   -Logs ready
189
              } elseif ($attr == 'shipping_by') {
6649cf43   Alexey Boroda   -Otp and logging
190
                  return [
ff71eeed   Alexey Boroda   -Logs ready
191
192
                      'old' => empty($values[ 'old' ]) ? '' : self::SHIPPING_BY[ $values[ 'old' ] ][ 'label' ],
                      'new' => empty($values[ 'new' ]) ? '' : self::SHIPPING_BY[ $values[ 'new' ] ][ 'label' ],
6649cf43   Alexey Boroda   -Otp and logging
193
                  ];
ff71eeed   Alexey Boroda   -Logs ready
194
              } elseif ($attr == 'pay') {
6649cf43   Alexey Boroda   -Otp and logging
195
                  return [
29257441   Alexey Boroda   -Manager filter o...
196
197
                      'old' => ( $values[ 'old' ] == true ) ? 'Оплачен' : 'Не оплачен',
                      'new' => ( $values[ 'new' ] == true ) ? 'Оплачен' : 'Не оплачен',
d3406983   Alexey Boroda   -Order history ha...
198
                  ];
ff71eeed   Alexey Boroda   -Logs ready
199
200
              } else {
                  return $values;
d3406983   Alexey Boroda   -Order history ha...
201
202
203
              }
          }
          
3bee3445   Alexey Boroda   -Order history ready
204
205
206
          /**
           * @inheritdoc
           */
2b29877e   Alexey Boroda   -Added time colum...
207
208
209
210
211
212
          public function behaviors()
          {
              return [
                  [
                      'class' => TimestampBehavior::className(),
                  ],
3bb55546   Alexey Boroda   -Fixing bugs
213
214
215
                  [
                      'class' => DefaultLabelBehavior::className(),
                  ],
2b29877e   Alexey Boroda   -Added time colum...
216
217
218
              ];
          }
          
3bee3445   Alexey Boroda   -Order history ready
219
220
221
          /**
           * @inheritdoc
           */
8a7e6ecf   Yarik   Namespaces
222
223
224
225
          public function rules()
          {
              return [
                  [
eb190b1f   Alexey Boroda   -Order form add p...
226
227
228
229
                      [
                          'pay',
                          'published',
                      ],
bb962a6d   Alexey Boroda   -Order in process
230
231
232
                      'boolean',
                  ],
                  [
8a7e6ecf   Yarik   Namespaces
233
                      [
e861ae92   Alexey Boroda   -Add column to pa...
234
                          'shipping_by',
2b29877e   Alexey Boroda   -Added time colum...
235
236
237
                          'created_at',
                          'updated_at',
                          'deleted_at',
ccfc5763   Alexey Boroda   -Order in process 3
238
239
240
                          'payment',
                          'reason',
                          'label',
01185786   Alexey Boroda   -Sms in process
241
                          'manager_id',
d57c8c00   Alexey Boroda   -Blocking in process
242
243
                          'edit_time',
                          'edit_id',
622a985a   Alexey Boroda   -Feed in process
244
                          'delivery',
2b29877e   Alexey Boroda   -Added time colum...
245
246
247
248
                      ],
                      'integer',
                  ],
                  [
01185786   Alexey Boroda   -Sms in process
249
250
251
252
                      [ 'total' ],
                      'double',
                  ],
                  [
2b29877e   Alexey Boroda   -Added time colum...
253
                      [
8a7e6ecf   Yarik   Namespaces
254
255
256
257
258
                          'phone',
                      ],
                      'required',
                  ],
                  [
6035d2b4   Yarik   Order body length
259
260
261
262
                      [
                          'comment',
                          'body',
                      ],
bb962a6d   Alexey Boroda   -Order in process
263
                      'string',
8a7e6ecf   Yarik   Namespaces
264
265
266
267
268
269
                  ],
                  [
                      [ 'email' ],
                      'email',
                  ],
                  [
bb962a6d   Alexey Boroda   -Order in process
270
271
272
273
                      [
                          'phone',
                          'phone2',
                      ],
8a7e6ecf   Yarik   Namespaces
274
275
                      'match',
                      'pattern' => '/^\+38\(\d{3}\)\d{3}-\d{2}-\d{2}$/',
8a7e6ecf   Yarik   Namespaces
276
277
278
                  ],
                  [
                      [
93a0cd0b   Yarik   Credits
279
280
281
282
283
284
285
286
287
288
289
                          'credit_month',
                      ],
                      'integer',
                      'min' => 3,
                      'max' => 36,
                  ],
                  [
                      [
                          'credit_sum',
                      ],
                      'number',
03c7b7bc   Yarik   Credit v2
290
                      'min' => 0,
93a0cd0b   Yarik   Credits
291
292
293
                  ],
                  [
                      [
ccfc5763   Alexey Boroda   -Order in process 3
294
                          'deadline',
8a7e6ecf   Yarik   Namespaces
295
                          'name',
8a7e6ecf   Yarik   Namespaces
296
                          'numbercard',
8a7e6ecf   Yarik   Namespaces
297
298
299
                          'declaration',
                          'stock',
                          'consignment',
8a7e6ecf   Yarik   Namespaces
300
301
                          'insurance',
                          'amount_imposed',
8a7e6ecf   Yarik   Namespaces
302
303
                          'city',
                          'adress',
8a7e6ecf   Yarik   Namespaces
304
                          'status',
ccfc5763   Alexey Boroda   -Order in process 3
305
306
                          'check',
                          'sms',
28b51b30   Alexey Boroda   -Order module bug...
307
                          'delivery_cost',
8a7e6ecf   Yarik   Namespaces
308
309
310
311
                      ],
                      'string',
                      'max' => 255,
                  ],
8a7e6ecf   Yarik   Namespaces
312
313
314
              ];
          }
          
3bee3445   Alexey Boroda   -Order history ready
315
316
          public function afterSave($insert, $changedAttributes)
          {
d3406983   Alexey Boroda   -Order history ha...
317
318
              $data = [];
              foreach ($changedAttributes as $key => $attribute) {
d8203a8c   Alexey Boroda   -Updated at bug fix
319
                  if ($this->oldAttributes[ $key ] != $attribute && $key != 'updated_at') {
ff71eeed   Alexey Boroda   -Logs ready
320
321
322
323
324
325
326
                      $data[ $key ] = $this->getLogAttributes(
                          $key,
                          [
                              'old' => $attribute,
                              'new' => $this->oldAttributes[ $key ],
                          ]
                      );
d3406983   Alexey Boroda   -Order history ha...
327
328
329
330
331
332
333
334
335
336
337
338
                  }
              }
              
              if (!empty($data) && empty($data[ 'edit_time' ])) {
                  $log = new OrderLog();
                  $log->order_id = (integer) $this->id;
                  $log->user_id = (integer) \Yii::$app->user->identity->id;
                  $log->data = Json::encode($data);
                  
                  $log->save();
              }
              
3bee3445   Alexey Boroda   -Order history ready
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
              if (!empty($changedAttributes[ 'label' ])) {
                  if ($this->label != (string) $changedAttributes[ 'label' ]) {
                      $history = new OrderLabelHistory();
                      
                      $history->label_id = (integer) $this->label;
                      $history->order_id = (integer) $this->id;
                      $history->user_id = (integer) \Yii::$app->user->identity->id;
                      
                      if ($history->save()) {
                          \Yii::$app->session->setFlash('label_update', 'Статус заказа обновлен');
                      }
                  }
              }
              parent::afterSave($insert, $changedAttributes);
          }
          
          /**
           * @inheritdoc
           */
ccfc5763   Alexey Boroda   -Order in process 3
358
359
360
          public function afterFind()
          {
              parent::afterFind();
ee0e1df5   Alexey Boroda   -Statistics half ...
361
              $this->deadline = !empty($this->deadline) ? date('d.m.Y', $this->deadline) : '';
ccfc5763   Alexey Boroda   -Order in process 3
362
363
364
              
          }
          
3bee3445   Alexey Boroda   -Order history ready
365
366
367
          /**
           * @inheritdoc
           */
ccfc5763   Alexey Boroda   -Order in process 3
368
369
370
371
372
373
374
375
376
377
378
          public function beforeSave($insert)
          {
              if (parent::beforeSave($insert)) {
                  
                  $this->convertDate();
                  return true;
              }
              return false;
              
          }
          
3bee3445   Alexey Boroda   -Order history ready
379
380
381
          /**
           * Convert some date
           */
ccfc5763   Alexey Boroda   -Order in process 3
382
383
          protected function convertDate()
          {
ee0e1df5   Alexey Boroda   -Statistics half ...
384
              if (!empty($this->deadline)) {
db0c93ce   Alexey Boroda   -Timestamp problem
385
                  $date = new \DateTime();
48fb8190   Alexey Boroda   -Timestamp proble...
386
                  $date->setTimestamp(strtotime($this->deadline));
ccfc5763   Alexey Boroda   -Order in process 3
387
388
389
390
391
392
393
                  $date->format("d.m.Y");
                  $this->deadline = $date->getTimestamp();
                  
              }
              
          }
          
3bee3445   Alexey Boroda   -Order history ready
394
395
396
          /**
           * @inheritdoc
           */
8a7e6ecf   Yarik   Namespaces
397
398
399
          public function attributeLabels()
          {
              return [
43127bab   Alexey Boroda   -Order translatio...
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
                  'name'           => Yii::t('app', 'order_name'),
                  'phone'          => Yii::t('app', 'order_phone'),
                  'phone2'         => Yii::t('app', 'Конактный телефон 2'),
                  'email'          => Yii::t('app', 'E-mail'),
                  'comment'        => Yii::t('app', 'Комментарий '),
                  'created_at'     => Yii::t('app', 'Дата добавления'),
                  'updated_at'     => Yii::t('app', 'Дата обновления'),
                  'deleted_at'     => Yii::t('app', 'Дата удаления'),
                  'deadline'       => Yii::t('app', 'Дедлайн'),
                  'reason'         => Yii::t('app', 'Причина'),
                  'check'          => Yii::t('app', 'Чек'),
                  'sms'            => Yii::t('app', 'СМС'),
                  'consignment'    => Yii::t('app', 'Номер накладной'),
                  'manager_id'     => Yii::t('app', 'Менеджер'),
                  'delivery_cost'  => Yii::t('app', 'Стоимость доставки'),
                  'published'      => Yii::t('app', 'Опубликован'),
                  'label'          => Yii::t('app', 'Метка'),
                  'declaration'    => Yii::t('app', 'Номер декларации'),
                  'delivery'       => Yii::t('app', 'Способ доставки'),
                  'total'          => Yii::t('app', 'Сумма'),
                  'adress'         => Yii::t('app', 'Адрес'),
                  'pay'            => Yii::t('app', 'Оплата'),
                  'body'           => Yii::t('app', 'Комментарий менеджера'),
                  'id'             => Yii::t('app', 'Номер'),
                  'stock'          => Yii::t('app', 'Номер склада'),
                  'payment'        => Yii::t('app', 'Способ оплаты'),
                  'insurance'      => Yii::t('app', 'Страховка'),
                  'amount_imposed' => Yii::t('app', 'Сумма наложенного'),
                  'shipping_by'    => Yii::t('app', 'Отправка за счет'),
                  'city'           => Yii::t('app', 'Город'),
                  'numbercard'     => Yii::t('app', '№ карточки'),
93a0cd0b   Yarik   Credits
431
                  'credit_month'   => Yii::t('app', 'Количество месяцев'),
03c7b7bc   Yarik   Credit v2
432
                  'credit_sum'     => Yii::t('app', 'Первоначальный взнос'),
8a7e6ecf   Yarik   Namespaces
433
434
435
              ];
          }
          
3bee3445   Alexey Boroda   -Order history ready
436
437
438
          /**
           * @return \yii\db\ActiveQuery
           */
8a7e6ecf   Yarik   Namespaces
439
440
441
442
          public function getUser()
          {
              return $this->hasOne(Customer::className(), [ 'id' => 'user_id' ]);
          }
ccfc5763   Alexey Boroda   -Order in process 3
443
          
25b21043   Administrator   add create_item t...
444
445
446
          /**
           * @return \yii\db\ActiveQuery
           */
8a7e6ecf   Yarik   Namespaces
447
448
449
450
          public function getProducts()
          {
              return $this->hasMany(OrderProduct::className(), [ 'order_id' => 'id' ]);
          }
ccfc5763   Alexey Boroda   -Order in process 3
451
          
25b21043   Administrator   add create_item t...
452
453
454
          /**
           * @return \yii\db\ActiveQuery
           */
ccfc5763   Alexey Boroda   -Order in process 3
455
456
457
          public function getOrderDelivery()
          {
              return $this->hasOne(Delivery::className(), [ 'id' => 'delivery' ]);
25b21043   Administrator   add create_item t...
458
          }
ccfc5763   Alexey Boroda   -Order in process 3
459
          
25b21043   Administrator   add create_item t...
460
461
462
          /**
           * @return \yii\db\ActiveQuery
           */
ccfc5763   Alexey Boroda   -Order in process 3
463
464
          public function getOrderLabel()
          {
ce75bc1d   Alexey Boroda   -Grid view half w...
465
              return $this->hasOne(Label::className(), [ 'id' => 'label' ]);
25b21043   Administrator   add create_item t...
466
          }
ccfc5763   Alexey Boroda   -Order in process 3
467
          
25b21043   Administrator   add create_item t...
468
469
470
          /**
           * @return \yii\db\ActiveQuery
           */
ccfc5763   Alexey Boroda   -Order in process 3
471
472
473
          public function getOrderPayment()
          {
              return $this->hasOne(OrderPayment::className(), [ 'id' => 'payment' ]);
25b21043   Administrator   add create_item t...
474
          }
ccfc5763   Alexey Boroda   -Order in process 3
475
          
25b21043   Administrator   add create_item t...
476
          /**
3bee3445   Alexey Boroda   -Order history ready
477
478
479
480
481
482
483
484
           * @return \yii\db\ActiveQuery
           */
          public function getLabelsHistory()
          {
              return $this->hasMany(OrderLabelHistory::className(), [ 'order_id' => 'id' ]);
          }
          
          /**
25b21043   Administrator   add create_item t...
485
486
           * @return string
           */
ccfc5763   Alexey Boroda   -Order in process 3
487
488
          public function getDeliveryString()
          {
ee0e1df5   Alexey Boroda   -Statistics half ...
489
490
              if (!empty($this->orderDelivery)) {
                  if (!empty($this->orderDelivery->parent)) {
ccfc5763   Alexey Boroda   -Order in process 3
491
                      return $this->orderDelivery->parent->lang->title . ': ' . $this->orderDelivery->lang->title;
25b21043   Administrator   add create_item t...
492
                  } else {
fbfae870   Administrator   add create_item t...
493
                      return $this->orderDelivery->lang->title;
25b21043   Administrator   add create_item t...
494
495
496
497
498
                  }
              } else {
                  return '';
              }
          }
01185786   Alexey Boroda   -Sms in process
499
          
ce75bc1d   Alexey Boroda   -Grid view half w...
500
          /**
d3406983   Alexey Boroda   -Order history ha...
501
502
503
504
505
506
507
508
           * @return \yii\db\ActiveQuery
           */
          public function getLogs()
          {
              return $this->hasMany(OrderLog::className(), [ 'order_id' => 'id' ]);
          }
          
          /**
ce75bc1d   Alexey Boroda   -Grid view half w...
509
510
           * If deadline is fucked up returns true,
           * if deadline is not setted return false, like everything is ok
01185786   Alexey Boroda   -Sms in process
511
           *
ce75bc1d   Alexey Boroda   -Grid view half w...
512
513
514
515
           * @return bool
           */
          public function getWasted()
          {
ee0e1df5   Alexey Boroda   -Statistics half ...
516
              if (empty($this->deadline)) {
ce75bc1d   Alexey Boroda   -Grid view half w...
517
518
                  return false;
              } else {
eb15a89c   Alexey Boroda   -Dancing with com...
519
                  return time() > strtotime($this->deadline);
ce75bc1d   Alexey Boroda   -Grid view half w...
520
521
              }
          }
01185786   Alexey Boroda   -Sms in process
522
523
          
          /**
3bee3445   Alexey Boroda   -Order history ready
524
           * @return \yii\db\ActiveQuery
01185786   Alexey Boroda   -Sms in process
525
526
527
           */
          public function getManager()
          {
b0c7d586   Alexey Boroda   -Bykov fixes
528
              return $this->hasOne(User::className(), [ 'id' => 'manager_id' ]);
01185786   Alexey Boroda   -Sms in process
529
          }
d57c8c00   Alexey Boroda   -Blocking in process
530
          
3bee3445   Alexey Boroda   -Order history ready
531
532
533
534
535
          /**
           * Check if order is blocked for updating
           *
           * @return bool
           */
d57c8c00   Alexey Boroda   -Blocking in process
536
537
          public function isBlocked()
          {
3bb55546   Alexey Boroda   -Fixing bugs
538
539
              if ($this->edit_id === 0) {
                  return false;
d57c8c00   Alexey Boroda   -Blocking in process
540
              } else {
3bb55546   Alexey Boroda   -Fixing bugs
541
                  if ($this->edit_time + 7200 > time()) {
d57c8c00   Alexey Boroda   -Blocking in process
542
                      return true;
3bb55546   Alexey Boroda   -Fixing bugs
543
                  } else {
d57c8c00   Alexey Boroda   -Blocking in process
544
545
546
547
                      return false;
                  }
              }
          }
28b51b30   Alexey Boroda   -Order module bug...
548
          
3bee3445   Alexey Boroda   -Order history ready
549
550
551
          /**
           * If order products changed recount te total value
           */
28b51b30   Alexey Boroda   -Order module bug...
552
553
554
555
556
          public function totalRecount()
          {
              $products = $this->products;
              $newTotal = 0;
              foreach ($products as $product) {
eb190b1f   Alexey Boroda   -Order form add p...
557
558
559
                  if ($product->removed) {
                      continue;
                  }
28b51b30   Alexey Boroda   -Order module bug...
560
561
562
563
564
                  $newTotal += $product->count * $product->price;
              }
              $this->total = $newTotal;
              $this->save();
          }
eb190b1f   Alexey Boroda   -Order form add p...
565
          
3bee3445   Alexey Boroda   -Order history ready
566
567
568
          /**
           * If exit unpublished order - delete it
           */
eb190b1f   Alexey Boroda   -Order form add p...
569
570
571
572
573
574
575
576
577
578
579
580
          public function deleteUnpublished()
          {
              /**
               * @var OrderProduct[] $products
               */
              $products = $this->products;
              foreach ($products as $product) {
                  $product->delete();
              }
              
              $this->delete();
          }
8a7e6ecf   Yarik   Namespaces
581
      }