Blame view

models/Order.php 12.1 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;
8a7e6ecf   Yarik   Namespaces
10
11
12
13
14
15
      
      /**
       * Class Order
       *
       * @todo    Write docs and refactor
       * @package artweb\artbox\ecommerce\models
eb190b1f   Alexey Boroda   -Order form add p...
16
17
18
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
       * @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
8a7e6ecf   Yarik   Namespaces
57
58
59
       */
      class Order extends ActiveRecord
      {
bb962a6d   Alexey Boroda   -Order in process
60
61
62
63
64
65
66
67
68
          
          const SHIPPING_BY = [
              1 => [
                  'label' => 'Отправитель',
              ],
              2 => [
                  'label' => 'Получатель',
              ],
          ];
8a7e6ecf   Yarik   Namespaces
69
          
db3040d3   Alexey Boroda   -Order module alm...
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
          const REASONS = [
              1  => 'Нет товара',
              2  => 'Нет оплаты',
              3  => 'Передумал',
              4  => ' - Купил в другом месте',
              5  => ' - Не подошли условия доставки',
              6  => ' - Не подошел срок доставки',
              7  => ' - Нет денег',
              8  => ' - Купит позже',
              9  => 'Купил в другом месте',
              10 => 'Подьедет в маг.',
              11 => 'Дубль заказа.',
              12 => 'Другое',
              13 => 'Брак',
              14 => 'Отказался от Самовывоза',
              15 => 'Не приехал за Самовывозом',
              16 => 'Отменил заказ',
              17 => 'Не берет трубку',
          ];
          
8a7e6ecf   Yarik   Namespaces
90
91
92
93
94
          public static function tableName()
          {
              return 'order';
          }
          
2b29877e   Alexey Boroda   -Added time colum...
95
96
97
98
99
100
          public function behaviors()
          {
              return [
                  [
                      'class' => TimestampBehavior::className(),
                  ],
3bb55546   Alexey Boroda   -Fixing bugs
101
102
103
                  [
                      'class' => DefaultLabelBehavior::className(),
                  ],
2b29877e   Alexey Boroda   -Added time colum...
104
105
106
              ];
          }
          
8a7e6ecf   Yarik   Namespaces
107
108
109
110
          public function rules()
          {
              return [
                  [
eb190b1f   Alexey Boroda   -Order form add p...
111
112
113
114
                      [
                          'pay',
                          'published',
                      ],
bb962a6d   Alexey Boroda   -Order in process
115
116
117
                      'boolean',
                  ],
                  [
8a7e6ecf   Yarik   Namespaces
118
                      [
e861ae92   Alexey Boroda   -Add column to pa...
119
                          'shipping_by',
2b29877e   Alexey Boroda   -Added time colum...
120
121
122
                          'created_at',
                          'updated_at',
                          'deleted_at',
ccfc5763   Alexey Boroda   -Order in process 3
123
124
125
                          'payment',
                          'reason',
                          'label',
01185786   Alexey Boroda   -Sms in process
126
                          'manager_id',
d57c8c00   Alexey Boroda   -Blocking in process
127
128
                          'edit_time',
                          'edit_id',
622a985a   Alexey Boroda   -Feed in process
129
                          'delivery',
2b29877e   Alexey Boroda   -Added time colum...
130
131
132
133
                      ],
                      'integer',
                  ],
                  [
01185786   Alexey Boroda   -Sms in process
134
135
136
137
                      [ 'total' ],
                      'double',
                  ],
                  [
2b29877e   Alexey Boroda   -Added time colum...
138
                      [
8a7e6ecf   Yarik   Namespaces
139
140
141
142
143
                          'phone',
                      ],
                      'required',
                  ],
                  [
6035d2b4   Yarik   Order body length
144
145
146
147
                      [
                          'comment',
                          'body',
                      ],
bb962a6d   Alexey Boroda   -Order in process
148
                      'string',
8a7e6ecf   Yarik   Namespaces
149
150
151
152
153
154
                  ],
                  [
                      [ 'email' ],
                      'email',
                  ],
                  [
bb962a6d   Alexey Boroda   -Order in process
155
156
157
158
                      [
                          'phone',
                          'phone2',
                      ],
8a7e6ecf   Yarik   Namespaces
159
160
                      'match',
                      'pattern' => '/^\+38\(\d{3}\)\d{3}-\d{2}-\d{2}$/',
8a7e6ecf   Yarik   Namespaces
161
162
163
                  ],
                  [
                      [
ccfc5763   Alexey Boroda   -Order in process 3
164
                          'deadline',
8a7e6ecf   Yarik   Namespaces
165
                          'name',
8a7e6ecf   Yarik   Namespaces
166
                          'numbercard',
8a7e6ecf   Yarik   Namespaces
167
168
169
                          'declaration',
                          'stock',
                          'consignment',
8a7e6ecf   Yarik   Namespaces
170
171
                          'insurance',
                          'amount_imposed',
8a7e6ecf   Yarik   Namespaces
172
173
                          'city',
                          'adress',
8a7e6ecf   Yarik   Namespaces
174
                          'status',
ccfc5763   Alexey Boroda   -Order in process 3
175
176
                          'check',
                          'sms',
28b51b30   Alexey Boroda   -Order module bug...
177
                          'delivery_cost',
8a7e6ecf   Yarik   Namespaces
178
179
180
181
                      ],
                      'string',
                      'max' => 255,
                  ],
8a7e6ecf   Yarik   Namespaces
182
183
184
              ];
          }
          
ccfc5763   Alexey Boroda   -Order in process 3
185
186
187
          public function afterFind()
          {
              parent::afterFind();
6035d2b4   Yarik   Order body length
188
              $this->deadline = !empty( $this->deadline ) ? date('d.m.Y', $this->deadline) : '';
ccfc5763   Alexey Boroda   -Order in process 3
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
              
          }
          
          public function beforeSave($insert)
          {
              if (parent::beforeSave($insert)) {
                  
                  $this->convertDate();
                  return true;
              }
              return false;
              
          }
          
          protected function convertDate()
          {
6035d2b4   Yarik   Order body length
205
              if (!empty( $this->deadline )) {
db0c93ce   Alexey Boroda   -Timestamp problem
206
                  $date = new \DateTime();
48fb8190   Alexey Boroda   -Timestamp proble...
207
                  $date->setTimestamp(strtotime($this->deadline));
ccfc5763   Alexey Boroda   -Order in process 3
208
209
210
211
212
213
214
                  $date->format("d.m.Y");
                  $this->deadline = $date->getTimestamp();
                  
              }
              
          }
          
8a7e6ecf   Yarik   Namespaces
215
216
217
          public function attributeLabels()
          {
              return [
43127bab   Alexey Boroda   -Order translatio...
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
                  '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', '№ карточки'),
8a7e6ecf   Yarik   Namespaces
249
250
251
              ];
          }
          
8a7e6ecf   Yarik   Namespaces
252
253
254
255
          public function getUser()
          {
              return $this->hasOne(Customer::className(), [ 'id' => 'user_id' ]);
          }
ccfc5763   Alexey Boroda   -Order in process 3
256
          
25b21043   Administrator   add create_item t...
257
258
259
          /**
           * @return \yii\db\ActiveQuery
           */
8a7e6ecf   Yarik   Namespaces
260
261
262
263
          public function getProducts()
          {
              return $this->hasMany(OrderProduct::className(), [ 'order_id' => 'id' ]);
          }
ccfc5763   Alexey Boroda   -Order in process 3
264
          
25b21043   Administrator   add create_item t...
265
266
267
          /**
           * @return \yii\db\ActiveQuery
           */
ccfc5763   Alexey Boroda   -Order in process 3
268
269
270
          public function getOrderDelivery()
          {
              return $this->hasOne(Delivery::className(), [ 'id' => 'delivery' ]);
25b21043   Administrator   add create_item t...
271
          }
ccfc5763   Alexey Boroda   -Order in process 3
272
          
25b21043   Administrator   add create_item t...
273
274
275
          /**
           * @return \yii\db\ActiveQuery
           */
ccfc5763   Alexey Boroda   -Order in process 3
276
277
          public function getOrderLabel()
          {
ce75bc1d   Alexey Boroda   -Grid view half w...
278
              return $this->hasOne(Label::className(), [ 'id' => 'label' ]);
25b21043   Administrator   add create_item t...
279
          }
ccfc5763   Alexey Boroda   -Order in process 3
280
          
25b21043   Administrator   add create_item t...
281
282
283
          /**
           * @return \yii\db\ActiveQuery
           */
ccfc5763   Alexey Boroda   -Order in process 3
284
285
286
          public function getOrderPayment()
          {
              return $this->hasOne(OrderPayment::className(), [ 'id' => 'payment' ]);
25b21043   Administrator   add create_item t...
287
          }
ccfc5763   Alexey Boroda   -Order in process 3
288
          
25b21043   Administrator   add create_item t...
289
290
291
          /**
           * @return string
           */
ccfc5763   Alexey Boroda   -Order in process 3
292
293
          public function getDeliveryString()
          {
6035d2b4   Yarik   Order body length
294
295
              if (!empty( $this->orderDelivery )) {
                  if (!empty( $this->orderDelivery->parent )) {
ccfc5763   Alexey Boroda   -Order in process 3
296
                      return $this->orderDelivery->parent->lang->title . ': ' . $this->orderDelivery->lang->title;
25b21043   Administrator   add create_item t...
297
                  } else {
fbfae870   Administrator   add create_item t...
298
                      return $this->orderDelivery->lang->title;
25b21043   Administrator   add create_item t...
299
300
301
302
303
                  }
              } else {
                  return '';
              }
          }
01185786   Alexey Boroda   -Sms in process
304
          
ce75bc1d   Alexey Boroda   -Grid view half w...
305
306
307
          /**
           * If deadline is fucked up returns true,
           * if deadline is not setted return false, like everything is ok
01185786   Alexey Boroda   -Sms in process
308
           *
ce75bc1d   Alexey Boroda   -Grid view half w...
309
310
311
312
           * @return bool
           */
          public function getWasted()
          {
6035d2b4   Yarik   Order body length
313
              if (empty( $this->deadline )) {
ce75bc1d   Alexey Boroda   -Grid view half w...
314
315
                  return false;
              } else {
eb15a89c   Alexey Boroda   -Dancing with com...
316
                  return time() > strtotime($this->deadline);
ce75bc1d   Alexey Boroda   -Grid view half w...
317
318
              }
          }
01185786   Alexey Boroda   -Sms in process
319
320
321
322
323
324
          
          /**
           *
           */
          public function getManager()
          {
b0c7d586   Alexey Boroda   -Bykov fixes
325
              return $this->hasOne(User::className(), [ 'id' => 'manager_id' ]);
01185786   Alexey Boroda   -Sms in process
326
          }
d57c8c00   Alexey Boroda   -Blocking in process
327
328
329
          
          public function isBlocked()
          {
3bb55546   Alexey Boroda   -Fixing bugs
330
331
              if ($this->edit_id === 0) {
                  return false;
d57c8c00   Alexey Boroda   -Blocking in process
332
              } else {
3bb55546   Alexey Boroda   -Fixing bugs
333
                  if ($this->edit_time + 7200 > time()) {
d57c8c00   Alexey Boroda   -Blocking in process
334
                      return true;
3bb55546   Alexey Boroda   -Fixing bugs
335
                  } else {
d57c8c00   Alexey Boroda   -Blocking in process
336
337
338
339
                      return false;
                  }
              }
          }
28b51b30   Alexey Boroda   -Order module bug...
340
341
342
343
344
345
          
          public function totalRecount()
          {
              $products = $this->products;
              $newTotal = 0;
              foreach ($products as $product) {
eb190b1f   Alexey Boroda   -Order form add p...
346
347
348
                  if ($product->removed) {
                      continue;
                  }
28b51b30   Alexey Boroda   -Order module bug...
349
350
351
352
353
                  $newTotal += $product->count * $product->price;
              }
              $this->total = $newTotal;
              $this->save();
          }
eb190b1f   Alexey Boroda   -Order form add p...
354
355
356
357
358
359
360
361
362
363
364
365
366
          
          public function deleteUnpublished()
          {
              /**
               * @var OrderProduct[] $products
               */
              $products = $this->products;
              foreach ($products as $product) {
                  $product->delete();
              }
              
              $this->delete();
          }
8a7e6ecf   Yarik   Namespaces
367
      }