Blame view

controllers/OrderController.php 18.3 KB
e0906f08   Alexey Boroda   -Fixing existing ...
1
2
3
4
  <?php
      
      namespace artweb\artbox\ecommerce\controllers;
      
db3040d3   Alexey Boroda   -Order module alm...
5
      use artweb\artbox\components\SmsSender;
e0906f08   Alexey Boroda   -Fixing existing ...
6
      use artweb\artbox\ecommerce\models\OrderSearch;
1f2fdc61   Alexey Boroda   -Product carousel...
7
      use common\models\User;
2ad65823   Alexey Boroda   -Added date range...
8
      use phpDocumentor\Reflection\Types\Null_;
e0906f08   Alexey Boroda   -Fixing existing ...
9
      use Yii;
2ad65823   Alexey Boroda   -Added date range...
10
      use yii\helpers\ArrayHelper;
7520dc0e   Alexey Boroda   -Grid with input ...
11
      use yii\helpers\Json;
e0906f08   Alexey Boroda   -Fixing existing ...
12
13
14
      use yii\web\Controller;
      use yii\filters\VerbFilter;
      use yii\data\ActiveDataProvider;
d57c8c00   Alexey Boroda   -Blocking in process
15
      use yii\web\ForbiddenHttpException;
e0906f08   Alexey Boroda   -Fixing existing ...
16
17
18
19
20
21
      use yii\web\HttpException;
      use artweb\artbox\ecommerce\models\Order;
      use artweb\artbox\ecommerce\models\OrderProduct;
      use artweb\artbox\ecommerce\models\ProductVariant;
      use yii\web\NotFoundHttpException;
      use developeruz\db_rbac\behaviors\AccessBehavior;
d57c8c00   Alexey Boroda   -Blocking in process
22
      use yii\web\Response;
e0906f08   Alexey Boroda   -Fixing existing ...
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
      
      class OrderController extends Controller
      {
          /**
           * @inheritdoc
           */
          public function behaviors()
          {
              return [
                  'access' => [
                      'class' => AccessBehavior::className(),
                      'rules' => [
                          'site' => [
                              [
                                  'actions' => [
                                      'login',
                                      'error',
                                  ],
                                  'allow'   => true,
                              ],
                          ],
                      ],
                  ],
                  'verbs'  => [
                      'class'   => VerbFilter::className(),
                      'actions' => [
                          'delete' => [ 'POST' ],
                      ],
                  ],
              ];
          }
          
          public function actionIndex()
          {
              $searchModel = new OrderSearch();
              $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
              
              return $this->render(
                  'index',
                  [
                      'dataProvider' => $dataProvider,
                      'searchModel'  => $searchModel,
                  ]
              );
          }
          
          public function actionShow($id)
          {
              
              $model = $this->findModel((int) $id);
              $dataProvider = new ActiveDataProvider(
                  [
                      'query'      => OrderProduct::find()
                                                  ->where([ 'order_id' => (int) $id ]),
                      'pagination' => [
                          'pageSize' => 20,
                      ],
                  ]
              );
              if ($model->load(Yii::$app->request->post()) && $model->save()) {
                  return $this->redirect([ 'index' ]);
              } else {
                  $model_orderproduct = new OrderProduct();
                  
                  return $this->renderAjax(
                      'show',
                      [
                          'model'              => $model,
                          'model_orderproduct' => $model_orderproduct,
                          'dataProvider'       => $dataProvider,
                      ]
                  );
              }
          }
          
          public function actionLabelUpdate()
          {
              $model = Order::findOne($_POST[ 'order_id' ]);
              $model->label = $_POST[ 'label_id' ];
              $model->save();
          }
          
db3040d3   Alexey Boroda   -Order module alm...
105
106
107
          public function actionView($id)
          {
              $model = $this->findModel($id);
d57c8c00   Alexey Boroda   -Blocking in process
108
109
110
111
112
              $dataProvider = new ActiveDataProvider(
                  [
                      'query' => $model->getProducts(),
                  ]
              );
db3040d3   Alexey Boroda   -Order module alm...
113
114
115
116
117
118
119
120
121
              return $this->render(
                  'view',
                  [
                      'model'    => $model,
                      'products' => $dataProvider,
                  ]
              );
          }
          
e0906f08   Alexey Boroda   -Fixing existing ...
122
123
124
125
126
127
128
          public function actionPayUpdate()
          {
              $model = Order::findOne($_POST[ 'order_id' ]);
              $model->pay = $_POST[ 'pay_id' ];
              $model->save();
          }
          
2ad65823   Alexey Boroda   -Added date range...
129
          public function actionDelete($id)
e0906f08   Alexey Boroda   -Fixing existing ...
130
          {
3e703aac   Alexey Boroda   -Order form fixes
131
132
133
134
135
136
137
138
              if (\Yii::$app->user->identity->isAdmin()) {
                  $this->findModel($id)
                       ->delete();
              }
              
              return $this->redirect([ 'index' ]);
          }
          
42883b83   Alexey Boroda   -Order form beta ...
139
140
141
142
143
144
145
146
147
148
          //        public function actionDeleteProduct($id)
          //        {
          //            $model = OrderProduct::findOne($id);
          //            $model->removed = true;
          //            $orderId = $model->order_id;
          //            if ($model->save()) {
          //                $model->order->totalRecount();
          //                return $this->actionUpdate($orderId);
          //            }
          //        }
e0906f08   Alexey Boroda   -Fixing existing ...
149
150
151
          
          public function actionAdd()
          {
52c27888   Alexey Boroda   -Order module tas...
152
              if (!empty(\Yii::$app->request->post())) {
2ad65823   Alexey Boroda   -Added date range...
153
154
                  $id = \Yii::$app->request->post('OrderProduct')[ 'id' ];
                  $order_id = \Yii::$app->request->post('OrderProduct')[ 'order_id' ];
52c27888   Alexey Boroda   -Order module tas...
155
                  if (!empty(\Yii::$app->request->post('OrderProduct')[ 'count' ])) {
2ad65823   Alexey Boroda   -Added date range...
156
                      $count = \Yii::$app->request->post('OrderProduct')[ 'count' ];
0893579c   Alexey Boroda   -Bug fixed
157
                  } else {
2ad65823   Alexey Boroda   -Added date range...
158
159
160
                      $count = 1;
                  }
                  $productVariant = ProductVariant::findOne($id);
eb190b1f   Alexey Boroda   -Order form add p...
161
                  
2ad65823   Alexey Boroda   -Added date range...
162
163
164
165
166
167
168
169
170
171
172
173
174
                  $model = OrderProduct::find()
                                       ->where(
                                           [
                                               'order_id' => $order_id,
                                           ]
                                       )
                                       ->andWhere(
                                           [
                                               'product_variant_id' => $id,
                                           ]
                                       )
                                       ->one();
                  
52c27888   Alexey Boroda   -Order module tas...
175
                  if (!empty($model)) {
2ad65823   Alexey Boroda   -Added date range...
176
177
178
179
180
181
182
183
184
185
186
                      $model->count += $count;
                  } else {
                      $model = new OrderProduct();
                      
                      $model->order_id = $order_id;
                      $model->product_variant_id = $productVariant->id;
                      $model->product_name = $productVariant->product->lang->title;
                      $model->name = $productVariant->lang->title;
                      $model->sku = $productVariant->sku;
                      $model->price = $productVariant->price;
                      $model->count = $count;
e0906f08   Alexey Boroda   -Fixing existing ...
187
                  }
2ad65823   Alexey Boroda   -Added date range...
188
189
190
                  \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
                  
                  if ($model->save()) {
28b51b30   Alexey Boroda   -Order module bug...
191
                      $model->order->totalRecount();
2ad65823   Alexey Boroda   -Added date range...
192
193
194
195
196
197
198
                      return [ 'status' => 'success' ];
                  } else {
                      return [ 'status' => 'fail' ];
                  }
                  
              } else {
                  throw new NotFoundHttpException();
e0906f08   Alexey Boroda   -Fixing existing ...
199
              }
e0906f08   Alexey Boroda   -Fixing existing ...
200
201
202
203
          }
          
          public function actionCreate()
          {
2ad65823   Alexey Boroda   -Added date range...
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
              if (\Yii::$app->request->post('hasEditable')) {
                  $orderProductId = \Yii::$app->request->post('editableKey');
                  $orderProduct = OrderProduct::findOne($orderProductId);
                  $out = Json::encode(
                      [
                          'output'  => '',
                          'message' => '',
                      ]
                  );
                  
                  $posted = current(\Yii::$app->request->post('OrderProduct'));
                  $post = [ 'OrderProduct' => $posted ];
                  
                  if ($orderProduct->load($post)) {
                      $orderProduct->save();
                      $output = '';
52c27888   Alexey Boroda   -Order module tas...
220
                      if (isset($posted[ 'count' ])) {
2ad65823   Alexey Boroda   -Added date range...
221
222
223
224
225
226
227
228
229
230
231
232
233
                          $output = Yii::$app->formatter->asDecimal($orderProduct->count, 0);
                      }
                      $out = Json::encode(
                          [
                              'output'  => $output,
                              'message' => '',
                          ]
                      );
                  }
                  
                  return $out;
              }
              
e0906f08   Alexey Boroda   -Fixing existing ...
234
              $model = new Order();
b0c7d586   Alexey Boroda   -Bykov fixes
235
236
              $model->phone = '+38(000)000-00-00';
              $model->name = \Yii::t('app', 'Новый заказ');
eb190b1f   Alexey Boroda   -Order form add p...
237
              $model->published = false;
b0c7d586   Alexey Boroda   -Bykov fixes
238
              $model->save();
e0906f08   Alexey Boroda   -Fixing existing ...
239
              
7c536875   Yarik   Sms send
240
241
242
243
244
245
              return $this->redirect(
                  [
                      'update',
                      'id' => $model->id,
                  ]
              );
4ee1bc37   Alexey Boroda   -Before dev
246
              
7520dc0e   Alexey Boroda   -Grid with input ...
247
248
              $dataProvider = new ActiveDataProvider(
                  [
0893579c   Alexey Boroda   -Bug fixed
249
250
                      'query' => $model->getProducts()
                                       ->joinWith('productVariant'),
7520dc0e   Alexey Boroda   -Grid with input ...
251
252
253
                  ]
              );
              
e0906f08   Alexey Boroda   -Fixing existing ...
254
              if ($model->load(Yii::$app->request->post()) && $model->save()) {
eb190b1f   Alexey Boroda   -Order form add p...
255
256
                  $model->published = true;
                  $model->save();
e0906f08   Alexey Boroda   -Fixing existing ...
257
258
259
260
261
                  return $this->redirect([ 'index' ]);
              } else {
                  return $this->render(
                      'create',
                      [
7520dc0e   Alexey Boroda   -Grid with input ...
262
263
                          'model'        => $model,
                          'dataProvider' => $dataProvider,
e0906f08   Alexey Boroda   -Fixing existing ...
264
265
266
267
                      ]
                  );
              }
          }
0893579c   Alexey Boroda   -Bug fixed
268
269
270
          
          public function actionPrint()
          {
54e2e678   Administrator   slider
271
              $orderId = Yii::$app->request->get("order_id");
52c27888   Alexey Boroda   -Order module tas...
272
              if (!empty($orderId)) {
54e2e678   Administrator   slider
273
                  $order = $this->findModel($orderId);
0893579c   Alexey Boroda   -Bug fixed
274
275
276
277
278
279
                  return $this->renderPartial(
                      '@frontend/views/cabinet/order_print',
                      [
                          'order' => $order,
                      ]
                  );
54e2e678   Administrator   slider
280
281
282
              } else {
                  throw new NotFoundHttpException('The requested page does not exist.');
              }
0893579c   Alexey Boroda   -Bug fixed
283
              
54e2e678   Administrator   slider
284
          }
0893579c   Alexey Boroda   -Bug fixed
285
          
6f14188b   Alexey Boroda   -Product card fixed
286
287
          public function actionUpdate($id)
          {
2ad65823   Alexey Boroda   -Added date range...
288
              if (\Yii::$app->request->post('hasEditable')) {
7520dc0e   Alexey Boroda   -Grid with input ...
289
290
                  $orderProductId = \Yii::$app->request->post('editableKey');
                  $orderProduct = OrderProduct::findOne($orderProductId);
2ad65823   Alexey Boroda   -Added date range...
291
292
293
294
295
296
297
                  $out = Json::encode(
                      [
                          'output'  => '',
                          'message' => '',
                      ]
                  );
                  
7520dc0e   Alexey Boroda   -Grid with input ...
298
                  $posted = current(\Yii::$app->request->post('OrderProduct'));
2ad65823   Alexey Boroda   -Added date range...
299
                  $post = [ 'OrderProduct' => $posted ];
7520dc0e   Alexey Boroda   -Grid with input ...
300
                  
2ad65823   Alexey Boroda   -Added date range...
301
                  if ($orderProduct->load($post)) {
7520dc0e   Alexey Boroda   -Grid with input ...
302
                      $orderProduct->save();
793ad526   Alexey Boroda   -Brain fuck! with...
303
                      $orderProduct->order->totalRecount();
7520dc0e   Alexey Boroda   -Grid with input ...
304
                      $output = '';
52c27888   Alexey Boroda   -Order module tas...
305
                      if (isset($posted[ 'count' ])) {
7520dc0e   Alexey Boroda   -Grid with input ...
306
307
                          $output = Yii::$app->formatter->asDecimal($orderProduct->count, 0);
                      }
2ad65823   Alexey Boroda   -Added date range...
308
309
310
311
312
313
                      $out = Json::encode(
                          [
                              'output'  => $output,
                              'message' => '',
                          ]
                      );
7520dc0e   Alexey Boroda   -Grid with input ...
314
                  }
2ad65823   Alexey Boroda   -Added date range...
315
                  
7520dc0e   Alexey Boroda   -Grid with input ...
316
317
318
319
                  return $out;
              }
              
              $model = $this->findModel($id);
e861ae92   Alexey Boroda   -Add column to pa...
320
              
1f2fdc61   Alexey Boroda   -Product carousel...
321
322
323
324
              /**
               * @var User $user
               */
              $user = \Yii::$app->user->identity;
d57c8c00   Alexey Boroda   -Blocking in process
325
              if ($model->isBlocked() && $model->edit_id !== \Yii::$app->user->id) {
1f2fdc61   Alexey Boroda   -Product carousel...
326
                  if (!$user->isAdmin()) {
99de237f   Alexey Boroda   -Order block core...
327
328
                      throw new ForbiddenHttpException();
                  }
d57c8c00   Alexey Boroda   -Blocking in process
329
330
              }
              
7520dc0e   Alexey Boroda   -Grid with input ...
331
332
              $dataProvider = new ActiveDataProvider(
                  [
0893579c   Alexey Boroda   -Bug fixed
333
                      'query' => $model->getProducts()
42883b83   Alexey Boroda   -Order form beta ...
334
335
                                       ->joinWith('productVariant.product.brand')
                                       ->with('productVariant.variantStocks'),
52c27888   Alexey Boroda   -Order module tas...
336
                      'sort'  => [ 'defaultOrder' => [ 'id' => SORT_ASC ] ],
7520dc0e   Alexey Boroda   -Grid with input ...
337
338
339
                  ]
              );
              
52c27888   Alexey Boroda   -Order module tas...
340
              if (empty($model->manager_id)) {
d57c8c00   Alexey Boroda   -Blocking in process
341
342
343
                  $model->manager_id = \Yii::$app->user->id;
              }
              
793ad526   Alexey Boroda   -Brain fuck! with...
344
345
346
              $headers = \Yii::$app->response->headers;
              $headers->set('Access-Control-Allow-Origin', '*');
              
6f14188b   Alexey Boroda   -Product card fixed
347
              if ($model->load(Yii::$app->request->post()) && $model->save()) {
d57c8c00   Alexey Boroda   -Blocking in process
348
                  $this->unblockOrder($model->id);
b0c7d586   Alexey Boroda   -Bykov fixes
349
350
351
352
353
354
355
                  return $this->render(
                      'update',
                      [
                          'model'        => $model,
                          'dataProvider' => $dataProvider,
                      ]
                  );
6f14188b   Alexey Boroda   -Product card fixed
356
357
358
359
              } else {
                  return $this->render(
                      'update',
                      [
7520dc0e   Alexey Boroda   -Grid with input ...
360
361
                          'model'        => $model,
                          'dataProvider' => $dataProvider,
6f14188b   Alexey Boroda   -Product card fixed
362
363
364
365
366
                      ]
                  );
              }
          }
          
52c27888   Alexey Boroda   -Order module tas...
367
          public function actionFindProduct($q = NULL, $id = NULL)
e0906f08   Alexey Boroda   -Fixing existing ...
368
          {
6f14188b   Alexey Boroda   -Product card fixed
369
              \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
2ad65823   Alexey Boroda   -Added date range...
370
371
              $out = [
                  'results' => [
0893579c   Alexey Boroda   -Bug fixed
372
373
                      'id'  => '',
                      'sku' => '',
2ad65823   Alexey Boroda   -Added date range...
374
                  ],
6f14188b   Alexey Boroda   -Product card fixed
375
              ];
2ad65823   Alexey Boroda   -Added date range...
376
              if (!is_null($q)) {
db3040d3   Alexey Boroda   -Order module alm...
377
                  $result = ProductVariant::find()//                                        ->select(
d57c8c00   Alexey Boroda   -Blocking in process
378
379
380
381
382
383
                  //                                            [
                  //                                                'id',
                  //                                                'sku',
                  //                                                'product_lang.title AS name'
                  //                                            ]
                  //                                        )
0893579c   Alexey Boroda   -Bug fixed
384
                                          ->joinWith('product.lang')
2ad65823   Alexey Boroda   -Added date range...
385
386
387
388
389
390
391
392
393
394
395
396
397
                                          ->where(
                                              [
                                                  'like',
                                                  'sku',
                                                  $q,
                                              ]
                                          )
                                          ->limit(20)
                                          ->asArray()
                                          ->all();
                  
                  $out[ 'results' ] = $result;
              }
2ad65823   Alexey Boroda   -Added date range...
398
              return $out;
e0906f08   Alexey Boroda   -Fixing existing ...
399
400
          }
          
db3040d3   Alexey Boroda   -Order module alm...
401
402
403
404
405
406
407
408
409
          public function actionSendSms()
          {
              $phone = \Yii::$app->request->post('phone');
              $content = \Yii::$app->request->post('content');
              $sender = \Yii::$app->sender;
              $result = $sender->send($phone, $content);
              return $phone . $content . $result;
          }
          
42883b83   Alexey Boroda   -Order form beta ...
410
411
412
413
414
415
416
417
418
419
420
421
422
          public function actionDeleteProduct($id, $order_id)
          {
              $model = OrderProduct::findOne($id);
              $model->removed = true;
              $model->save();
              $order = Order::findOne($order_id);
              $order->totalRecount();
              \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
              return [
                  'status' => 'success',
                  'id'     => $id,
              ];
          }
2ad65823   Alexey Boroda   -Added date range...
423
          
e0906f08   Alexey Boroda   -Fixing existing ...
424
425
          protected function findModel($id)
          {
52c27888   Alexey Boroda   -Order module tas...
426
              if (( $model = Order::findOne($id) ) !== NULL) {
e0906f08   Alexey Boroda   -Fixing existing ...
427
428
429
430
431
                  return $model;
              } else {
                  throw new NotFoundHttpException('The requested page does not exist.');
              }
          }
e861ae92   Alexey Boroda   -Add column to pa...
432
          
793ad526   Alexey Boroda   -Brain fuck! with...
433
          public function actionExitOrder()
99de237f   Alexey Boroda   -Order block core...
434
          {
eb190b1f   Alexey Boroda   -Order form add p...
435
              try {
793ad526   Alexey Boroda   -Brain fuck! with...
436
                  $model = Order::findOne(\Yii::$app->request->post('id'));
eb190b1f   Alexey Boroda   -Order form add p...
437
438
439
              } catch (NotFoundHttpException $e) {
                  return $this->redirect('index');
              }
b0c7d586   Alexey Boroda   -Bykov fixes
440
              if ($model->edit_id == \Yii::$app->user->id) {
793ad526   Alexey Boroda   -Brain fuck! with...
441
                  $this->unblockOrder(\Yii::$app->request->post('id'));
b0c7d586   Alexey Boroda   -Bykov fixes
442
              }
eb190b1f   Alexey Boroda   -Order form add p...
443
444
445
446
              
              if (!$model->published) {
                  $model->deleteUnpublished();
              }
793ad526   Alexey Boroda   -Brain fuck! with...
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
  //            return $this->redirect('index');
          }
      
          public function actionCloseOrder($id)
          {
              try {
                  $model = Order::findOne($id);
              } catch (NotFoundHttpException $e) {
                  return $this->redirect('index');
              }
              if ($model->edit_id == \Yii::$app->user->id) {
                  $this->unblockOrder($id);
              }
          
              if (!$model->published) {
                  $model->deleteUnpublished();
              }
                          return $this->redirect('index');
99de237f   Alexey Boroda   -Order block core...
465
          }
d57c8c00   Alexey Boroda   -Blocking in process
466
467
468
          
          public function actionBlockOrder()
          {
52c27888   Alexey Boroda   -Order module tas...
469
              if (!empty(\Yii::$app->request->post())) {
d57c8c00   Alexey Boroda   -Blocking in process
470
471
472
473
                  \Yii::$app->response->format = Response::FORMAT_JSON;
                  
                  $model = $this->findModel(\Yii::$app->request->post('id'));
                  
b0c7d586   Alexey Boroda   -Bykov fixes
474
475
476
                  $user = User::find()
                              ->where([ 'id' => $model->edit_id ])
                              ->one();
d57c8c00   Alexey Boroda   -Blocking in process
477
478
479
                  $model->edit_time = time();
                  $model->edit_id = \Yii::$app->user->id;
                  
99de237f   Alexey Boroda   -Order block core...
480
481
482
                  //$date = new \DateTime("NOW"/*date('D, d M Y H:i:s', $model->edit_time)*/, new \DateTimeZone('Europe/Kiev'));
                  $date = \Yii::$app->formatter->asDatetime($model->edit_time + 7200, 'php:G : i');
                  
d57c8c00   Alexey Boroda   -Blocking in process
483
                  if ($model->save()) {
99de237f   Alexey Boroda   -Order block core...
484
485
                      return [
                          'time' => $date,
52c27888   Alexey Boroda   -Order module tas...
486
                          'user' => !empty($user) ? $user->username : '',
99de237f   Alexey Boroda   -Order block core...
487
                      ];
d57c8c00   Alexey Boroda   -Blocking in process
488
                  } else {
e861ae92   Alexey Boroda   -Add column to pa...
489
490
491
492
                      return [
                          'success' => false,
                          'errors'  => $model->errors,
                      ];
d57c8c00   Alexey Boroda   -Blocking in process
493
494
495
496
497
498
499
500
501
502
503
504
                  }
              }
          }
          
          protected function unblockOrder($id)
          {
              $model = $this->findModel($id);
              
              $model->edit_time = 0;
              $model->edit_id = 0;
              $model->save();
          }
f36d238b   Alexey Boroda   -Order publish fi...
505
          
7c536875   Yarik   Sms send
506
507
          public function actionPublishOrder($id)
          {
f36d238b   Alexey Boroda   -Order publish fi...
508
              $model = Order::findOne($id);
00a6457b   Alexey Boroda   -Sms bug fixed
509
510
511
              if ($model->published == true) {
                  exit;
              }
f36d238b   Alexey Boroda   -Order publish fi...
512
513
              $model->published = true;
              $model->save();
7c536875   Yarik   Sms send
514
515
516
517
518
519
520
521
522
523
524
525
526
              /**
               * @var SmsSender $sender
               */
              $sender = \Yii::$app->sender;
              $sender->send(
                  $model->phone,
                  $this->renderPartial(
                      '@common/mail/smsorder',
                      [
                          'order_id' => $model->id,
                      ]
                  )
              );
f36d238b   Alexey Boroda   -Order publish fi...
527
          }
e0906f08   Alexey Boroda   -Fixing existing ...
528
      }