Blame view

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