Blame view

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