Blame view

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