Blame view

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