Blame view

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