Commit d57c8c004b7569193dd17271644131a1370a21e1
1 parent
eb33627d
-Blocking in process
Showing
5 changed files
with
103 additions
and
9 deletions
Show diff stats
controllers/OrderController.php
| @@ -11,12 +11,14 @@ | @@ -11,12 +11,14 @@ | ||
| 11 | use yii\web\Controller; | 11 | use yii\web\Controller; |
| 12 | use yii\filters\VerbFilter; | 12 | use yii\filters\VerbFilter; |
| 13 | use yii\data\ActiveDataProvider; | 13 | use yii\data\ActiveDataProvider; |
| 14 | + use yii\web\ForbiddenHttpException; | ||
| 14 | use yii\web\HttpException; | 15 | use yii\web\HttpException; |
| 15 | use artweb\artbox\ecommerce\models\Order; | 16 | use artweb\artbox\ecommerce\models\Order; |
| 16 | use artweb\artbox\ecommerce\models\OrderProduct; | 17 | use artweb\artbox\ecommerce\models\OrderProduct; |
| 17 | use artweb\artbox\ecommerce\models\ProductVariant; | 18 | use artweb\artbox\ecommerce\models\ProductVariant; |
| 18 | use yii\web\NotFoundHttpException; | 19 | use yii\web\NotFoundHttpException; |
| 19 | use developeruz\db_rbac\behaviors\AccessBehavior; | 20 | use developeruz\db_rbac\behaviors\AccessBehavior; |
| 21 | + use yii\web\Response; | ||
| 20 | 22 | ||
| 21 | class OrderController extends Controller | 23 | class OrderController extends Controller |
| 22 | { | 24 | { |
| @@ -102,9 +104,11 @@ | @@ -102,9 +104,11 @@ | ||
| 102 | public function actionView($id) | 104 | public function actionView($id) |
| 103 | { | 105 | { |
| 104 | $model = $this->findModel($id); | 106 | $model = $this->findModel($id); |
| 105 | - $dataProvider = new ActiveDataProvider([ | ||
| 106 | - 'query' => $model->getProducts(), | ||
| 107 | - ]); | 107 | + $dataProvider = new ActiveDataProvider( |
| 108 | + [ | ||
| 109 | + 'query' => $model->getProducts(), | ||
| 110 | + ] | ||
| 111 | + ); | ||
| 108 | return $this->render( | 112 | return $this->render( |
| 109 | 'view', | 113 | 'view', |
| 110 | [ | 114 | [ |
| @@ -286,6 +290,10 @@ | @@ -286,6 +290,10 @@ | ||
| 286 | 290 | ||
| 287 | $model = $this->findModel($id); | 291 | $model = $this->findModel($id); |
| 288 | 292 | ||
| 293 | + if ($model->isBlocked() && $model->edit_id !== \Yii::$app->user->id) { | ||
| 294 | + throw new ForbiddenHttpException(); | ||
| 295 | + } | ||
| 296 | + | ||
| 289 | $dataProvider = new ActiveDataProvider( | 297 | $dataProvider = new ActiveDataProvider( |
| 290 | [ | 298 | [ |
| 291 | 'query' => $model->getProducts() | 299 | 'query' => $model->getProducts() |
| @@ -293,7 +301,12 @@ | @@ -293,7 +301,12 @@ | ||
| 293 | ] | 301 | ] |
| 294 | ); | 302 | ); |
| 295 | 303 | ||
| 304 | + if (empty( $model->manager_id )) { | ||
| 305 | + $model->manager_id = \Yii::$app->user->id; | ||
| 306 | + } | ||
| 307 | + | ||
| 296 | if ($model->load(Yii::$app->request->post()) && $model->save()) { | 308 | if ($model->load(Yii::$app->request->post()) && $model->save()) { |
| 309 | + $this->unblockOrder($model->id); | ||
| 297 | return $this->redirect([ 'index' ]); | 310 | return $this->redirect([ 'index' ]); |
| 298 | } else { | 311 | } else { |
| 299 | return $this->render( | 312 | return $this->render( |
| @@ -317,12 +330,12 @@ | @@ -317,12 +330,12 @@ | ||
| 317 | ]; | 330 | ]; |
| 318 | if (!is_null($q)) { | 331 | if (!is_null($q)) { |
| 319 | $result = ProductVariant::find()// ->select( | 332 | $result = ProductVariant::find()// ->select( |
| 320 | - // [ | ||
| 321 | - // 'id', | ||
| 322 | - // 'sku', | ||
| 323 | - // 'product_lang.title AS name' | ||
| 324 | - // ] | ||
| 325 | - // ) | 333 | + // [ |
| 334 | + // 'id', | ||
| 335 | + // 'sku', | ||
| 336 | + // 'product_lang.title AS name' | ||
| 337 | + // ] | ||
| 338 | + // ) | ||
| 326 | ->joinWith('product.lang') | 339 | ->joinWith('product.lang') |
| 327 | ->where( | 340 | ->where( |
| 328 | [ | 341 | [ |
| @@ -368,4 +381,31 @@ | @@ -368,4 +381,31 @@ | ||
| 368 | throw new NotFoundHttpException('The requested page does not exist.'); | 381 | throw new NotFoundHttpException('The requested page does not exist.'); |
| 369 | } | 382 | } |
| 370 | } | 383 | } |
| 384 | + | ||
| 385 | + public function actionBlockOrder() | ||
| 386 | + { | ||
| 387 | + if (!empty( \Yii::$app->request->post() )) { | ||
| 388 | + \Yii::$app->response->format = Response::FORMAT_JSON; | ||
| 389 | + | ||
| 390 | + $model = $this->findModel(\Yii::$app->request->post('id')); | ||
| 391 | + | ||
| 392 | + $model->edit_time = time(); | ||
| 393 | + $model->edit_id = \Yii::$app->user->id; | ||
| 394 | + | ||
| 395 | + if ($model->save()) { | ||
| 396 | + return [ 'success' => true ]; | ||
| 397 | + } else { | ||
| 398 | + return [ 'success' => false ]; | ||
| 399 | + } | ||
| 400 | + } | ||
| 401 | + } | ||
| 402 | + | ||
| 403 | + protected function unblockOrder($id) | ||
| 404 | + { | ||
| 405 | + $model = $this->findModel($id); | ||
| 406 | + | ||
| 407 | + $model->edit_time = 0; | ||
| 408 | + $model->edit_id = 0; | ||
| 409 | + $model->save(); | ||
| 410 | + } | ||
| 371 | } | 411 | } |
models/Order.php
| @@ -21,6 +21,8 @@ | @@ -21,6 +21,8 @@ | ||
| 21 | * @property string $check | 21 | * @property string $check |
| 22 | * @property string $sms | 22 | * @property string $sms |
| 23 | * @property int $id | 23 | * @property int $id |
| 24 | + * @property integer $edit_id | ||
| 25 | + * @property integer $edit_time | ||
| 24 | * @property integer $manager_id | 26 | * @property integer $manager_id |
| 25 | * @property int $user_id | 27 | * @property int $user_id |
| 26 | * @property string $name | 28 | * @property string $name |
| @@ -111,6 +113,8 @@ | @@ -111,6 +113,8 @@ | ||
| 111 | 'reason', | 113 | 'reason', |
| 112 | 'label', | 114 | 'label', |
| 113 | 'manager_id', | 115 | 'manager_id', |
| 116 | + 'edit_time', | ||
| 117 | + 'edit_id', | ||
| 114 | ], | 118 | ], |
| 115 | 'integer', | 119 | 'integer', |
| 116 | ], | 120 | ], |
| @@ -287,4 +291,18 @@ | @@ -287,4 +291,18 @@ | ||
| 287 | { | 291 | { |
| 288 | $this->hasOne(User::className(), [ 'id' => 'manager_id' ]); | 292 | $this->hasOne(User::className(), [ 'id' => 'manager_id' ]); |
| 289 | } | 293 | } |
| 294 | + | ||
| 295 | + public function isBlocked() | ||
| 296 | + { | ||
| 297 | + if ($this->edit_id === 0 ) { | ||
| 298 | + return false; | ||
| 299 | + } else { | ||
| 300 | + if ( $this->edit_time + 7200 > time()) { | ||
| 301 | + return true; | ||
| 302 | + } | ||
| 303 | + else { | ||
| 304 | + return false; | ||
| 305 | + } | ||
| 306 | + } | ||
| 307 | + } | ||
| 290 | } | 308 | } |
| 291 | \ No newline at end of file | 309 | \ No newline at end of file |
models/ProductVideo.php
views/order/_form.php
| @@ -5,6 +5,7 @@ | @@ -5,6 +5,7 @@ | ||
| 5 | use artweb\artbox\ecommerce\models\OrderPayment; | 5 | use artweb\artbox\ecommerce\models\OrderPayment; |
| 6 | use artweb\artbox\ecommerce\models\OrderProduct; | 6 | use artweb\artbox\ecommerce\models\OrderProduct; |
| 7 | use backend\models\SmsTemplate; | 7 | use backend\models\SmsTemplate; |
| 8 | + use common\models\User; | ||
| 8 | use kartik\grid\GridView; | 9 | use kartik\grid\GridView; |
| 9 | use kartik\widgets\DatePicker; | 10 | use kartik\widgets\DatePicker; |
| 10 | use kartik\widgets\Select2; | 11 | use kartik\widgets\Select2; |
| @@ -181,6 +182,22 @@ JS; | @@ -181,6 +182,22 @@ JS; | ||
| 181 | ), | 182 | ), |
| 182 | [ 'prompt' => \Yii::t('app', 'Выберите доставку ...') ] | 183 | [ 'prompt' => \Yii::t('app', 'Выберите доставку ...') ] |
| 183 | ) ?> | 184 | ) ?> |
| 185 | + | ||
| 186 | + <?php | ||
| 187 | + if (\Yii::$app->user->identity->isAdmin()) { | ||
| 188 | + echo $form->field($model, 'manager_id') | ||
| 189 | + ->dropDownList( | ||
| 190 | + ArrayHelper::map( | ||
| 191 | + User::find() | ||
| 192 | + ->asArray() | ||
| 193 | + ->all(), | ||
| 194 | + 'id', | ||
| 195 | + 'username' | ||
| 196 | + ), | ||
| 197 | + [ 'prompt' => \Yii::t('app', 'Менеджер') ] | ||
| 198 | + ) ; | ||
| 199 | + } | ||
| 200 | + ?> | ||
| 184 | 201 | ||
| 185 | </div> | 202 | </div> |
| 186 | <div class="col-sm-6"> | 203 | <div class="col-sm-6"> |
views/order/update.php
| @@ -16,6 +16,21 @@ | @@ -16,6 +16,21 @@ | ||
| 16 | 'label' => \Yii::t('app', 'Заказы'), | 16 | 'label' => \Yii::t('app', 'Заказы'), |
| 17 | ]; | 17 | ]; |
| 18 | $this->params[ 'breadcrumbs' ][] = $this->title; | 18 | $this->params[ 'breadcrumbs' ][] = $this->title; |
| 19 | + | ||
| 20 | + $js = ' | ||
| 21 | +$.ajax({ | ||
| 22 | + type: "POST", | ||
| 23 | + url: "/admin/ecommerce/order/block-order", | ||
| 24 | + data: { | ||
| 25 | + id: ' . $model->id . ' | ||
| 26 | + }, | ||
| 27 | + success: function() { | ||
| 28 | + console.log("Ura"); | ||
| 29 | + } | ||
| 30 | +});'; | ||
| 31 | + | ||
| 32 | + $this->registerJs($js, View::POS_READY); | ||
| 33 | + | ||
| 19 | ?> | 34 | ?> |
| 20 | <div class="order-update"> | 35 | <div class="order-update"> |
| 21 | <div class="container"><h1><?php echo Html::encode($this->title) ?></h1></div> | 36 | <div class="container"><h1><?php echo Html::encode($this->title) ?></h1></div> |