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