Blame view

models/Order.php 10.7 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',
2b29877e   Alexey Boroda   -Added time colum...
129
130
131
132
                      ],
                      'integer',
                  ],
                  [
01185786   Alexey Boroda   -Sms in process
133
134
135
136
                      [ 'total' ],
                      'double',
                  ],
                  [
2b29877e   Alexey Boroda   -Added time colum...
137
                      [
8a7e6ecf   Yarik   Namespaces
138
139
140
141
142
143
                          'phone',
                      ],
                      'required',
                  ],
                  [
                      [ 'comment' ],
bb962a6d   Alexey Boroda   -Order in process
144
                      'string',
8a7e6ecf   Yarik   Namespaces
145
146
147
148
149
150
                  ],
                  [
                      [ 'email' ],
                      'email',
                  ],
                  [
bb962a6d   Alexey Boroda   -Order in process
151
152
153
154
                      [
                          'phone',
                          'phone2',
                      ],
8a7e6ecf   Yarik   Namespaces
155
156
                      'match',
                      'pattern' => '/^\+38\(\d{3}\)\d{3}-\d{2}-\d{2}$/',
8a7e6ecf   Yarik   Namespaces
157
158
159
                  ],
                  [
                      [
ccfc5763   Alexey Boroda   -Order in process 3
160
                          'deadline',
8a7e6ecf   Yarik   Namespaces
161
                          'name',
8a7e6ecf   Yarik   Namespaces
162
163
164
165
166
                          'numbercard',
                          'body',
                          'declaration',
                          'stock',
                          'consignment',
8a7e6ecf   Yarik   Namespaces
167
168
                          'insurance',
                          'amount_imposed',
8a7e6ecf   Yarik   Namespaces
169
170
                          'city',
                          'adress',
8a7e6ecf   Yarik   Namespaces
171
                          'status',
ccfc5763   Alexey Boroda   -Order in process 3
172
173
                          'check',
                          'sms',
28b51b30   Alexey Boroda   -Order module bug...
174
                          'delivery_cost',
8a7e6ecf   Yarik   Namespaces
175
176
177
178
                      ],
                      'string',
                      'max' => 255,
                  ],
8a7e6ecf   Yarik   Namespaces
179
180
181
              ];
          }
          
ccfc5763   Alexey Boroda   -Order in process 3
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
          public function afterFind()
          {
              parent::afterFind();
              $this->deadline = !empty( $this->deadline ) ? date('d.m.Y', $this->deadline) : '';
              
          }
          
          public function beforeSave($insert)
          {
              if (parent::beforeSave($insert)) {
                  
                  $this->convertDate();
                  return true;
              }
              return false;
              
          }
          
          protected function convertDate()
          {
              if (!empty( $this->deadline )) {
                  $date = new \DateTime($this->deadline);
                  $date->format("d.m.Y");
                  $this->deadline = $date->getTimestamp();
                  
              }
              
          }
          
8a7e6ecf   Yarik   Namespaces
211
212
213
          public function attributeLabels()
          {
              return [
28b51b30   Alexey Boroda   -Order module bug...
214
215
216
217
218
219
220
221
222
223
224
225
226
227
                  'name'          => Yii::t('app', 'order_name'),
                  'phone'         => Yii::t('app', 'order_phone'),
                  'email'         => Yii::t('app', 'order_email'),
                  'comment'       => Yii::t('app', 'order_comment'),
                  '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', 'Стоимость доставки'),
eb190b1f   Alexey Boroda   -Order form add p...
228
                  'published'     => Yii::t('app', 'Опубликован'),
8a7e6ecf   Yarik   Namespaces
229
230
231
              ];
          }
          
8a7e6ecf   Yarik   Namespaces
232
233
234
235
          public function getUser()
          {
              return $this->hasOne(Customer::className(), [ 'id' => 'user_id' ]);
          }
ccfc5763   Alexey Boroda   -Order in process 3
236
          
25b21043   Administrator   add create_item t...
237
238
239
          /**
           * @return \yii\db\ActiveQuery
           */
8a7e6ecf   Yarik   Namespaces
240
241
242
243
          public function getProducts()
          {
              return $this->hasMany(OrderProduct::className(), [ 'order_id' => 'id' ]);
          }
ccfc5763   Alexey Boroda   -Order in process 3
244
          
25b21043   Administrator   add create_item t...
245
246
247
          /**
           * @return \yii\db\ActiveQuery
           */
ccfc5763   Alexey Boroda   -Order in process 3
248
249
250
          public function getOrderDelivery()
          {
              return $this->hasOne(Delivery::className(), [ 'id' => 'delivery' ]);
25b21043   Administrator   add create_item t...
251
          }
ccfc5763   Alexey Boroda   -Order in process 3
252
          
25b21043   Administrator   add create_item t...
253
254
255
          /**
           * @return \yii\db\ActiveQuery
           */
ccfc5763   Alexey Boroda   -Order in process 3
256
257
          public function getOrderLabel()
          {
ce75bc1d   Alexey Boroda   -Grid view half w...
258
              return $this->hasOne(Label::className(), [ 'id' => 'label' ]);
25b21043   Administrator   add create_item t...
259
          }
ccfc5763   Alexey Boroda   -Order in process 3
260
          
25b21043   Administrator   add create_item t...
261
262
263
          /**
           * @return \yii\db\ActiveQuery
           */
ccfc5763   Alexey Boroda   -Order in process 3
264
265
266
          public function getOrderPayment()
          {
              return $this->hasOne(OrderPayment::className(), [ 'id' => 'payment' ]);
25b21043   Administrator   add create_item t...
267
          }
ccfc5763   Alexey Boroda   -Order in process 3
268
          
25b21043   Administrator   add create_item t...
269
270
271
          /**
           * @return string
           */
ccfc5763   Alexey Boroda   -Order in process 3
272
273
274
275
276
          public function getDeliveryString()
          {
              if (!empty( $this->orderDelivery )) {
                  if (!empty( $this->orderDelivery->parent )) {
                      return $this->orderDelivery->parent->lang->title . ': ' . $this->orderDelivery->lang->title;
25b21043   Administrator   add create_item t...
277
                  } else {
fbfae870   Administrator   add create_item t...
278
                      return $this->orderDelivery->lang->title;
25b21043   Administrator   add create_item t...
279
280
281
282
283
                  }
              } else {
                  return '';
              }
          }
01185786   Alexey Boroda   -Sms in process
284
          
ce75bc1d   Alexey Boroda   -Grid view half w...
285
286
287
          /**
           * If deadline is fucked up returns true,
           * if deadline is not setted return false, like everything is ok
01185786   Alexey Boroda   -Sms in process
288
           *
ce75bc1d   Alexey Boroda   -Grid view half w...
289
290
291
292
           * @return bool
           */
          public function getWasted()
          {
01185786   Alexey Boroda   -Sms in process
293
              if (empty( $this->deadline )) {
ce75bc1d   Alexey Boroda   -Grid view half w...
294
295
                  return false;
              } else {
eb15a89c   Alexey Boroda   -Dancing with com...
296
                  return time() > strtotime($this->deadline);
ce75bc1d   Alexey Boroda   -Grid view half w...
297
298
              }
          }
01185786   Alexey Boroda   -Sms in process
299
300
301
302
303
304
          
          /**
           *
           */
          public function getManager()
          {
b0c7d586   Alexey Boroda   -Bykov fixes
305
              return $this->hasOne(User::className(), [ 'id' => 'manager_id' ]);
01185786   Alexey Boroda   -Sms in process
306
          }
d57c8c00   Alexey Boroda   -Blocking in process
307
308
309
          
          public function isBlocked()
          {
3bb55546   Alexey Boroda   -Fixing bugs
310
311
              if ($this->edit_id === 0) {
                  return false;
d57c8c00   Alexey Boroda   -Blocking in process
312
              } else {
3bb55546   Alexey Boroda   -Fixing bugs
313
                  if ($this->edit_time + 7200 > time()) {
d57c8c00   Alexey Boroda   -Blocking in process
314
                      return true;
3bb55546   Alexey Boroda   -Fixing bugs
315
                  } else {
d57c8c00   Alexey Boroda   -Blocking in process
316
317
318
319
                      return false;
                  }
              }
          }
28b51b30   Alexey Boroda   -Order module bug...
320
321
322
323
324
325
          
          public function totalRecount()
          {
              $products = $this->products;
              $newTotal = 0;
              foreach ($products as $product) {
eb190b1f   Alexey Boroda   -Order form add p...
326
327
328
                  if ($product->removed) {
                      continue;
                  }
28b51b30   Alexey Boroda   -Order module bug...
329
330
331
332
333
                  $newTotal += $product->count * $product->price;
              }
              $this->total = $newTotal;
              $this->save();
          }
eb190b1f   Alexey Boroda   -Order form add p...
334
335
336
337
338
339
340
341
342
343
344
345
346
          
          public function deleteUnpublished()
          {
              /**
               * @var OrderProduct[] $products
               */
              $products = $this->products;
              foreach ($products as $product) {
                  $product->delete();
              }
              
              $this->delete();
          }
8a7e6ecf   Yarik   Namespaces
347
      }