Blame view

controllers/OrderController.php 16.1 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
139
140
              if (\Yii::$app->user->identity->isAdmin()) {
                  $this->findModel($id)
                       ->delete();
              }
              
              return $this->redirect([ 'index' ]);
          }
          
          public function actionDeleteProduct($id)
          {
2ad65823   Alexey Boroda   -Added date range...
141
              $model = OrderProduct::findOne($id);
28b51b30   Alexey Boroda   -Order module bug...
142
              $model->removed = true;
2ad65823   Alexey Boroda   -Added date range...
143
              $orderId = $model->order_id;
28b51b30   Alexey Boroda   -Order module bug...
144
145
              if ($model->save()) {
                  $model->order->totalRecount();
2ad65823   Alexey Boroda   -Added date range...
146
147
                  return $this->actionUpdate($orderId);
              }
e0906f08   Alexey Boroda   -Fixing existing ...
148
149
150
151
          }
          
          public function actionAdd()
          {
2ad65823   Alexey Boroda   -Added date range...
152
153
154
              if (!empty( \Yii::$app->request->post() )) {
                  $id = \Yii::$app->request->post('OrderProduct')[ 'id' ];
                  $order_id = \Yii::$app->request->post('OrderProduct')[ 'order_id' ];
0893579c   Alexey Boroda   -Bug fixed
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);
28b51b30   Alexey Boroda   -Order module bug...
161
               
2ad65823   Alexey Boroda   -Added date range...
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
                  $model = OrderProduct::find()
                                       ->where(
                                           [
                                               'order_id' => $order_id,
                                           ]
                                       )
                                       ->andWhere(
                                           [
                                               'product_variant_id' => $id,
                                           ]
                                       )
                                       ->one();
                  
                  if (!empty( $model )) {
                      $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
220
221
222
223
224
225
226
227
228
229
230
231
232
233
              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 = '';
                      if (isset( $posted[ 'count' ] )) {
                          $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
237
              $model->phone = '+38(000)000-00-00';
              $model->name = \Yii::t('app', 'Новый заказ');
              $model->save();
e0906f08   Alexey Boroda   -Fixing existing ...
238
              
7520dc0e   Alexey Boroda   -Grid with input ...
239
240
              $dataProvider = new ActiveDataProvider(
                  [
0893579c   Alexey Boroda   -Bug fixed
241
242
                      'query' => $model->getProducts()
                                       ->joinWith('productVariant'),
7520dc0e   Alexey Boroda   -Grid with input ...
243
244
245
                  ]
              );
              
e0906f08   Alexey Boroda   -Fixing existing ...
246
247
248
249
250
251
              if ($model->load(Yii::$app->request->post()) && $model->save()) {
                  return $this->redirect([ 'index' ]);
              } else {
                  return $this->render(
                      'create',
                      [
7520dc0e   Alexey Boroda   -Grid with input ...
252
253
                          'model'        => $model,
                          'dataProvider' => $dataProvider,
e0906f08   Alexey Boroda   -Fixing existing ...
254
255
256
257
                      ]
                  );
              }
          }
0893579c   Alexey Boroda   -Bug fixed
258
259
260
          
          public function actionPrint()
          {
54e2e678   Administrator   slider
261
              $orderId = Yii::$app->request->get("order_id");
0893579c   Alexey Boroda   -Bug fixed
262
              if (!empty( $orderId )) {
54e2e678   Administrator   slider
263
                  $order = $this->findModel($orderId);
0893579c   Alexey Boroda   -Bug fixed
264
265
266
267
268
269
                  return $this->renderPartial(
                      '@frontend/views/cabinet/order_print',
                      [
                          'order' => $order,
                      ]
                  );
54e2e678   Administrator   slider
270
271
272
              } else {
                  throw new NotFoundHttpException('The requested page does not exist.');
              }
0893579c   Alexey Boroda   -Bug fixed
273
              
54e2e678   Administrator   slider
274
          }
0893579c   Alexey Boroda   -Bug fixed
275
          
6f14188b   Alexey Boroda   -Product card fixed
276
277
          public function actionUpdate($id)
          {
2ad65823   Alexey Boroda   -Added date range...
278
              if (\Yii::$app->request->post('hasEditable')) {
7520dc0e   Alexey Boroda   -Grid with input ...
279
280
                  $orderProductId = \Yii::$app->request->post('editableKey');
                  $orderProduct = OrderProduct::findOne($orderProductId);
2ad65823   Alexey Boroda   -Added date range...
281
282
283
284
285
286
287
                  $out = Json::encode(
                      [
                          'output'  => '',
                          'message' => '',
                      ]
                  );
                  
7520dc0e   Alexey Boroda   -Grid with input ...
288
                  $posted = current(\Yii::$app->request->post('OrderProduct'));
2ad65823   Alexey Boroda   -Added date range...
289
                  $post = [ 'OrderProduct' => $posted ];
7520dc0e   Alexey Boroda   -Grid with input ...
290
                  
2ad65823   Alexey Boroda   -Added date range...
291
                  if ($orderProduct->load($post)) {
7520dc0e   Alexey Boroda   -Grid with input ...
292
293
                      $orderProduct->save();
                      $output = '';
2ad65823   Alexey Boroda   -Added date range...
294
                      if (isset( $posted[ 'count' ] )) {
7520dc0e   Alexey Boroda   -Grid with input ...
295
296
                          $output = Yii::$app->formatter->asDecimal($orderProduct->count, 0);
                      }
2ad65823   Alexey Boroda   -Added date range...
297
298
299
300
301
302
                      $out = Json::encode(
                          [
                              'output'  => $output,
                              'message' => '',
                          ]
                      );
7520dc0e   Alexey Boroda   -Grid with input ...
303
                  }
2ad65823   Alexey Boroda   -Added date range...
304
                  
7520dc0e   Alexey Boroda   -Grid with input ...
305
306
307
308
                  return $out;
              }
              
              $model = $this->findModel($id);
e861ae92   Alexey Boroda   -Add column to pa...
309
              
1f2fdc61   Alexey Boroda   -Product carousel...
310
311
312
313
              /**
               * @var User $user
               */
              $user = \Yii::$app->user->identity;
d57c8c00   Alexey Boroda   -Blocking in process
314
              if ($model->isBlocked() && $model->edit_id !== \Yii::$app->user->id) {
1f2fdc61   Alexey Boroda   -Product carousel...
315
                  if (!$user->isAdmin()) {
99de237f   Alexey Boroda   -Order block core...
316
317
                      throw new ForbiddenHttpException();
                  }
d57c8c00   Alexey Boroda   -Blocking in process
318
319
              }
              
7520dc0e   Alexey Boroda   -Grid with input ...
320
321
              $dataProvider = new ActiveDataProvider(
                  [
0893579c   Alexey Boroda   -Bug fixed
322
323
                      'query' => $model->getProducts()
                                       ->joinWith('productVariant.product.brand'),
7520dc0e   Alexey Boroda   -Grid with input ...
324
325
326
                  ]
              );
              
d57c8c00   Alexey Boroda   -Blocking in process
327
328
329
330
              if (empty( $model->manager_id )) {
                  $model->manager_id = \Yii::$app->user->id;
              }
              
6f14188b   Alexey Boroda   -Product card fixed
331
              if ($model->load(Yii::$app->request->post()) && $model->save()) {
d57c8c00   Alexey Boroda   -Blocking in process
332
                  $this->unblockOrder($model->id);
b0c7d586   Alexey Boroda   -Bykov fixes
333
334
335
336
337
338
339
                  return $this->render(
                      'update',
                      [
                          'model'        => $model,
                          'dataProvider' => $dataProvider,
                      ]
                  );
6f14188b   Alexey Boroda   -Product card fixed
340
341
342
343
              } else {
                  return $this->render(
                      'update',
                      [
7520dc0e   Alexey Boroda   -Grid with input ...
344
345
                          'model'        => $model,
                          'dataProvider' => $dataProvider,
6f14188b   Alexey Boroda   -Product card fixed
346
347
348
349
350
                      ]
                  );
              }
          }
          
2ad65823   Alexey Boroda   -Added date range...
351
          public function actionFindProduct($q = NULL, $id = NULL)
e0906f08   Alexey Boroda   -Fixing existing ...
352
          {
6f14188b   Alexey Boroda   -Product card fixed
353
              \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
2ad65823   Alexey Boroda   -Added date range...
354
355
              $out = [
                  'results' => [
0893579c   Alexey Boroda   -Bug fixed
356
357
                      'id'  => '',
                      'sku' => '',
2ad65823   Alexey Boroda   -Added date range...
358
                  ],
6f14188b   Alexey Boroda   -Product card fixed
359
              ];
2ad65823   Alexey Boroda   -Added date range...
360
              if (!is_null($q)) {
db3040d3   Alexey Boroda   -Order module alm...
361
                  $result = ProductVariant::find()//                                        ->select(
d57c8c00   Alexey Boroda   -Blocking in process
362
363
364
365
366
367
                  //                                            [
                  //                                                'id',
                  //                                                'sku',
                  //                                                'product_lang.title AS name'
                  //                                            ]
                  //                                        )
0893579c   Alexey Boroda   -Bug fixed
368
                                          ->joinWith('product.lang')
2ad65823   Alexey Boroda   -Added date range...
369
370
371
372
373
374
375
376
377
378
379
380
381
                                          ->where(
                                              [
                                                  'like',
                                                  'sku',
                                                  $q,
                                              ]
                                          )
                                          ->limit(20)
                                          ->asArray()
                                          ->all();
                  
                  $out[ 'results' ] = $result;
              }
2ad65823   Alexey Boroda   -Added date range...
382
              return $out;
e0906f08   Alexey Boroda   -Fixing existing ...
383
384
          }
          
db3040d3   Alexey Boroda   -Order module alm...
385
386
387
388
389
390
391
392
393
          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;
          }
          
2ad65823   Alexey Boroda   -Added date range...
394
395
396
397
398
399
400
401
402
403
404
          //        public function actionDeleteProduct($id, $order_id)
          //        {
          //            $model = OrderProduct::findOne($id);
          //            $model->delete();
          //            \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
          //            return [
          //                'result' => 'success',
          //                'id'     => $id,
          //            ];
          //        }
          
e0906f08   Alexey Boroda   -Fixing existing ...
405
406
          protected function findModel($id)
          {
6f14188b   Alexey Boroda   -Product card fixed
407
              if (( $model = Order::findOne($id) ) !== NULL) {
e0906f08   Alexey Boroda   -Fixing existing ...
408
409
410
411
412
                  return $model;
              } else {
                  throw new NotFoundHttpException('The requested page does not exist.');
              }
          }
e861ae92   Alexey Boroda   -Add column to pa...
413
          
99de237f   Alexey Boroda   -Order block core...
414
415
          public function actionExitOrder($id)
          {
b0c7d586   Alexey Boroda   -Bykov fixes
416
417
418
419
              $model = $this->findModel($id);
              if ($model->edit_id == \Yii::$app->user->id) {
                  $this->unblockOrder($id);
              }
99de237f   Alexey Boroda   -Order block core...
420
421
              return $this->redirect('index');
          }
d57c8c00   Alexey Boroda   -Blocking in process
422
423
424
425
426
427
428
429
          
          public function actionBlockOrder()
          {
              if (!empty( \Yii::$app->request->post() )) {
                  \Yii::$app->response->format = Response::FORMAT_JSON;
                  
                  $model = $this->findModel(\Yii::$app->request->post('id'));
                  
b0c7d586   Alexey Boroda   -Bykov fixes
430
431
432
                  $user = User::find()
                              ->where([ 'id' => $model->edit_id ])
                              ->one();
d57c8c00   Alexey Boroda   -Blocking in process
433
434
435
                  $model->edit_time = time();
                  $model->edit_id = \Yii::$app->user->id;
                  
99de237f   Alexey Boroda   -Order block core...
436
437
438
                  //$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
439
                  if ($model->save()) {
99de237f   Alexey Boroda   -Order block core...
440
441
                      return [
                          'time' => $date,
b0c7d586   Alexey Boroda   -Bykov fixes
442
                          'user' => !empty( $user ) ? $user->username : '',
99de237f   Alexey Boroda   -Order block core...
443
                      ];
d57c8c00   Alexey Boroda   -Blocking in process
444
                  } else {
e861ae92   Alexey Boroda   -Add column to pa...
445
446
447
448
                      return [
                          'success' => false,
                          'errors'  => $model->errors,
                      ];
d57c8c00   Alexey Boroda   -Blocking in process
449
450
451
452
453
454
455
456
457
458
459
460
                  }
              }
          }
          
          protected function unblockOrder($id)
          {
              $model = $this->findModel($id);
              
              $model->edit_time = 0;
              $model->edit_id = 0;
              $model->save();
          }
e0906f08   Alexey Boroda   -Fixing existing ...
461
      }