Blame view

controllers/OrderController.php 14.9 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;
2ad65823   Alexey Boroda   -Added date range...
7
      use phpDocumentor\Reflection\Types\Null_;
e0906f08   Alexey Boroda   -Fixing existing ...
8
      use Yii;
2ad65823   Alexey Boroda   -Added date range...
9
      use yii\helpers\ArrayHelper;
7520dc0e   Alexey Boroda   -Grid with input ...
10
      use yii\helpers\Json;
e0906f08   Alexey Boroda   -Fixing existing ...
11
12
13
      use yii\web\Controller;
      use yii\filters\VerbFilter;
      use yii\data\ActiveDataProvider;
d57c8c00   Alexey Boroda   -Blocking in process
14
      use yii\web\ForbiddenHttpException;
e0906f08   Alexey Boroda   -Fixing existing ...
15
16
17
18
19
20
      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
21
      use yii\web\Response;
e0906f08   Alexey Boroda   -Fixing existing ...
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
      
      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...
104
105
106
          public function actionView($id)
          {
              $model = $this->findModel($id);
d57c8c00   Alexey Boroda   -Blocking in process
107
108
109
110
111
              $dataProvider = new ActiveDataProvider(
                  [
                      'query' => $model->getProducts(),
                  ]
              );
db3040d3   Alexey Boroda   -Order module alm...
112
113
114
115
116
117
118
119
120
              return $this->render(
                  'view',
                  [
                      'model'    => $model,
                      'products' => $dataProvider,
                  ]
              );
          }
          
e0906f08   Alexey Boroda   -Fixing existing ...
121
122
123
124
125
126
127
          public function actionPayUpdate()
          {
              $model = Order::findOne($_POST[ 'order_id' ]);
              $model->pay = $_POST[ 'pay_id' ];
              $model->save();
          }
          
2ad65823   Alexey Boroda   -Added date range...
128
          public function actionDelete($id)
e0906f08   Alexey Boroda   -Fixing existing ...
129
          {
2ad65823   Alexey Boroda   -Added date range...
130
131
132
133
134
              $model = OrderProduct::findOne($id);
              $orderId = $model->order_id;
              if ($model->delete()) {
                  return $this->actionUpdate($orderId);
              }
e0906f08   Alexey Boroda   -Fixing existing ...
135
136
137
138
          }
          
          public function actionAdd()
          {
2ad65823   Alexey Boroda   -Added date range...
139
140
141
              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
142
                  if (!empty( \Yii::$app->request->post('OrderProduct')[ 'count' ] )) {
2ad65823   Alexey Boroda   -Added date range...
143
                      $count = \Yii::$app->request->post('OrderProduct')[ 'count' ];
0893579c   Alexey Boroda   -Bug fixed
144
                  } else {
2ad65823   Alexey Boroda   -Added date range...
145
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
                      $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 ...
174
                  }
2ad65823   Alexey Boroda   -Added date range...
175
176
177
178
179
180
181
182
183
184
                  \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 ...
185
              }
e0906f08   Alexey Boroda   -Fixing existing ...
186
187
188
189
          }
          
          public function actionCreate()
          {
2ad65823   Alexey Boroda   -Added date range...
190
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
              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 ...
220
221
              $model = new Order();
              
7520dc0e   Alexey Boroda   -Grid with input ...
222
223
              $dataProvider = new ActiveDataProvider(
                  [
0893579c   Alexey Boroda   -Bug fixed
224
225
                      'query' => $model->getProducts()
                                       ->joinWith('productVariant'),
7520dc0e   Alexey Boroda   -Grid with input ...
226
227
228
                  ]
              );
              
e0906f08   Alexey Boroda   -Fixing existing ...
229
230
231
232
233
234
              if ($model->load(Yii::$app->request->post()) && $model->save()) {
                  return $this->redirect([ 'index' ]);
              } else {
                  return $this->render(
                      'create',
                      [
7520dc0e   Alexey Boroda   -Grid with input ...
235
236
                          'model'        => $model,
                          'dataProvider' => $dataProvider,
e0906f08   Alexey Boroda   -Fixing existing ...
237
238
239
240
                      ]
                  );
              }
          }
0893579c   Alexey Boroda   -Bug fixed
241
242
243
          
          public function actionPrint()
          {
54e2e678   Administrator   slider
244
              $orderId = Yii::$app->request->get("order_id");
0893579c   Alexey Boroda   -Bug fixed
245
              if (!empty( $orderId )) {
54e2e678   Administrator   slider
246
                  $order = $this->findModel($orderId);
0893579c   Alexey Boroda   -Bug fixed
247
248
249
250
251
252
                  return $this->renderPartial(
                      '@frontend/views/cabinet/order_print',
                      [
                          'order' => $order,
                      ]
                  );
54e2e678   Administrator   slider
253
254
255
              } else {
                  throw new NotFoundHttpException('The requested page does not exist.');
              }
0893579c   Alexey Boroda   -Bug fixed
256
              
54e2e678   Administrator   slider
257
          }
0893579c   Alexey Boroda   -Bug fixed
258
          
6f14188b   Alexey Boroda   -Product card fixed
259
260
          public function actionUpdate($id)
          {
2ad65823   Alexey Boroda   -Added date range...
261
              if (\Yii::$app->request->post('hasEditable')) {
7520dc0e   Alexey Boroda   -Grid with input ...
262
263
                  $orderProductId = \Yii::$app->request->post('editableKey');
                  $orderProduct = OrderProduct::findOne($orderProductId);
2ad65823   Alexey Boroda   -Added date range...
264
265
266
267
268
269
270
                  $out = Json::encode(
                      [
                          'output'  => '',
                          'message' => '',
                      ]
                  );
                  
7520dc0e   Alexey Boroda   -Grid with input ...
271
                  $posted = current(\Yii::$app->request->post('OrderProduct'));
2ad65823   Alexey Boroda   -Added date range...
272
                  $post = [ 'OrderProduct' => $posted ];
7520dc0e   Alexey Boroda   -Grid with input ...
273
                  
2ad65823   Alexey Boroda   -Added date range...
274
                  if ($orderProduct->load($post)) {
7520dc0e   Alexey Boroda   -Grid with input ...
275
276
                      $orderProduct->save();
                      $output = '';
2ad65823   Alexey Boroda   -Added date range...
277
                      if (isset( $posted[ 'count' ] )) {
7520dc0e   Alexey Boroda   -Grid with input ...
278
279
                          $output = Yii::$app->formatter->asDecimal($orderProduct->count, 0);
                      }
2ad65823   Alexey Boroda   -Added date range...
280
281
282
283
284
285
                      $out = Json::encode(
                          [
                              'output'  => $output,
                              'message' => '',
                          ]
                      );
7520dc0e   Alexey Boroda   -Grid with input ...
286
                  }
2ad65823   Alexey Boroda   -Added date range...
287
                  
7520dc0e   Alexey Boroda   -Grid with input ...
288
289
290
291
292
                  return $out;
              }
              
              $model = $this->findModel($id);
              
d57c8c00   Alexey Boroda   -Blocking in process
293
              if ($model->isBlocked() && $model->edit_id !== \Yii::$app->user->id) {
99de237f   Alexey Boroda   -Order block core...
294
295
296
                  if (!\Yii::$app->user->identity->isAdmin()) {
                      throw new ForbiddenHttpException();
                  }
d57c8c00   Alexey Boroda   -Blocking in process
297
298
              }
              
7520dc0e   Alexey Boroda   -Grid with input ...
299
300
              $dataProvider = new ActiveDataProvider(
                  [
0893579c   Alexey Boroda   -Bug fixed
301
302
                      'query' => $model->getProducts()
                                       ->joinWith('productVariant.product.brand'),
7520dc0e   Alexey Boroda   -Grid with input ...
303
304
305
                  ]
              );
              
d57c8c00   Alexey Boroda   -Blocking in process
306
307
308
309
              if (empty( $model->manager_id )) {
                  $model->manager_id = \Yii::$app->user->id;
              }
              
6f14188b   Alexey Boroda   -Product card fixed
310
              if ($model->load(Yii::$app->request->post()) && $model->save()) {
d57c8c00   Alexey Boroda   -Blocking in process
311
                  $this->unblockOrder($model->id);
6f14188b   Alexey Boroda   -Product card fixed
312
313
314
315
316
                  return $this->redirect([ 'index' ]);
              } else {
                  return $this->render(
                      'update',
                      [
7520dc0e   Alexey Boroda   -Grid with input ...
317
318
                          'model'        => $model,
                          'dataProvider' => $dataProvider,
6f14188b   Alexey Boroda   -Product card fixed
319
320
321
322
323
                      ]
                  );
              }
          }
          
2ad65823   Alexey Boroda   -Added date range...
324
          public function actionFindProduct($q = NULL, $id = NULL)
e0906f08   Alexey Boroda   -Fixing existing ...
325
          {
6f14188b   Alexey Boroda   -Product card fixed
326
              \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
2ad65823   Alexey Boroda   -Added date range...
327
328
              $out = [
                  'results' => [
0893579c   Alexey Boroda   -Bug fixed
329
330
                      'id'  => '',
                      'sku' => '',
2ad65823   Alexey Boroda   -Added date range...
331
                  ],
6f14188b   Alexey Boroda   -Product card fixed
332
              ];
2ad65823   Alexey Boroda   -Added date range...
333
              if (!is_null($q)) {
db3040d3   Alexey Boroda   -Order module alm...
334
                  $result = ProductVariant::find()//                                        ->select(
d57c8c00   Alexey Boroda   -Blocking in process
335
336
337
338
339
340
                  //                                            [
                  //                                                'id',
                  //                                                'sku',
                  //                                                'product_lang.title AS name'
                  //                                            ]
                  //                                        )
0893579c   Alexey Boroda   -Bug fixed
341
                                          ->joinWith('product.lang')
2ad65823   Alexey Boroda   -Added date range...
342
343
344
345
346
347
348
349
350
351
352
353
354
                                          ->where(
                                              [
                                                  'like',
                                                  'sku',
                                                  $q,
                                              ]
                                          )
                                          ->limit(20)
                                          ->asArray()
                                          ->all();
                  
                  $out[ 'results' ] = $result;
              }
2ad65823   Alexey Boroda   -Added date range...
355
              return $out;
e0906f08   Alexey Boroda   -Fixing existing ...
356
357
          }
          
db3040d3   Alexey Boroda   -Order module alm...
358
359
360
361
362
363
364
365
366
          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...
367
368
369
370
371
372
373
374
375
376
377
          //        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 ...
378
379
          protected function findModel($id)
          {
6f14188b   Alexey Boroda   -Product card fixed
380
              if (( $model = Order::findOne($id) ) !== NULL) {
e0906f08   Alexey Boroda   -Fixing existing ...
381
382
383
384
385
                  return $model;
              } else {
                  throw new NotFoundHttpException('The requested page does not exist.');
              }
          }
99de237f   Alexey Boroda   -Order block core...
386
387
388
389
390
391
      
          public function actionExitOrder($id)
          {
              $this->unblockOrder($id);
              return $this->redirect('index');
          }
d57c8c00   Alexey Boroda   -Blocking in process
392
393
394
395
396
397
398
399
400
401
402
          
          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...
403
404
405
                  //$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
406
                  if ($model->save()) {
99de237f   Alexey Boroda   -Order block core...
407
408
409
                      return [
                          'time' => $date,
                      ];
d57c8c00   Alexey Boroda   -Blocking in process
410
411
412
413
414
415
416
417
418
419
420
421
422
423
                  } 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 ...
424
      }