Commit d57c8c004b7569193dd17271644131a1370a21e1

Authored by Alexey Boroda
1 parent eb33627d

-Blocking in process

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 }
@@ -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
@@ -42,6 +42,10 @@ @@ -42,6 +42,10 @@
42 'max' => 255, 42 'max' => 255,
43 ], 43 ],
44 [ 44 [
  45 + ['url'],
  46 + 'required',
  47 + ],
  48 + [
45 [ 'product_id' ], 49 [ 'product_id' ],
46 'exist', 50 'exist',
47 'skipOnError' => true, 51 'skipOnError' => true,
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>