Commit b6da636096ba5641aa299b6a0ccbed176bf6aef1

Authored by Alexey Boroda
1 parent 0b5518db

-Order products ready

controllers/OrderController.php
@@ -115,6 +115,27 @@ @@ -115,6 +115,27 @@
115 $model = new Order(); 115 $model = new Order();
116 116
117 if ($model->load(Yii::$app->request->post()) && $model->save()) { 117 if ($model->load(Yii::$app->request->post()) && $model->save()) {
  118 + if (!empty(\Yii::$app->request->post('Product'))) {
  119 + foreach (\Yii::$app->request->post('Product') as $id => $count) {
  120 + /**
  121 + * @var Variant $variant
  122 + */
  123 + $variant = Variant::findOne($id);
  124 + if ($variant) {
  125 + $orderProduct = new OrderProduct(
  126 + [
  127 + 'variant_id' => $variant->id,
  128 + 'order_id' => $model->id,
  129 + 'sku' => $variant->sku,
  130 + 'price' => $variant->price,
  131 + 'count' => $count,
  132 + ]
  133 + );
  134 + $orderProduct->save();
  135 + }
  136 + }
  137 + }
  138 +
118 return $this->redirect( 139 return $this->redirect(
119 [ 140 [
120 'view', 141 'view',
controllers/OrderProductController.php
@@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3 namespace artbox\order\controllers; 3 namespace artbox\order\controllers;
4 4
5 use artbox\order\models\OrderProductSearch; 5 use artbox\order\models\OrderProductSearch;
  6 + use common\models\Variant;
6 use Yii; 7 use Yii;
7 use artbox\order\models\OrderProduct; 8 use artbox\order\models\OrderProduct;
8 use yii\helpers\Html; 9 use yii\helpers\Html;
@@ -10,6 +11,7 @@ @@ -10,6 +11,7 @@
10 use yii\web\NotFoundHttpException; 11 use yii\web\NotFoundHttpException;
11 use yii\filters\VerbFilter; 12 use yii\filters\VerbFilter;
12 use yii\filters\AccessControl; 13 use yii\filters\AccessControl;
  14 + use yii\web\Response;
13 15
14 /** 16 /**
15 * OrderProductController implements the CRUD actions for OrderProduct model. 17 * OrderProductController implements the CRUD actions for OrderProduct model.
@@ -173,31 +175,47 @@ @@ -173,31 +175,47 @@
173 } 175 }
174 } 176 }
175 177
176 - public function actionAdd(int $variant_id, int $count = 1) 178 + public function actionAdd($variant_id, $count)
177 { 179 {
178 -  
179 - $result = '<div class="row">  
180 - <div class="col-md-8">';  
181 -  
182 - $result .= '</div>  
183 - <div class="col-md-3">';  
184 - $result .= Html::textInput(  
185 - 'Product[11994]',  
186 - 1,  
187 - [  
188 - 'class' => 'form-control',  
189 - ]  
190 - );  
191 - $result .= '</div>  
192 -<div class="col-md-1">';  
193 - $result .= Html::a(  
194 - '<i class="fa fa-trash"></i>',  
195 - '#',  
196 - [  
197 - 'class' => 'btn btn-primary',  
198 - ]  
199 - );  
200 - $result .= '</div>  
201 -</div>'; 180 + \Yii::$app->response->format = Response::FORMAT_JSON;
  181 +
  182 + /**
  183 + * @var Variant $variant
  184 + */
  185 + $variant = Variant::find()
  186 + ->where([ 'id' => $variant_id ])
  187 + ->with('product.lang')
  188 + ->one();
  189 +
  190 + if ($variant) {
  191 + $result = '<div id="' . $variant->id . '" class="row"><div class="col-md-8">';
  192 + $result .= $variant->product->lang->title . ' (' . $variant->sku . ')';
  193 + $result .= '</div><div class="col-md-3">';
  194 + $result .= Html::input(
  195 + 'number',
  196 + 'Product[' . $variant->id . ']',
  197 + empty($count) ? 1 : $count,
  198 + [
  199 + 'class' => 'form-control count-input',
  200 + ]
  201 + );
  202 + $result .= '</div><div class="col-md-1">';
  203 + $result .= Html::a(
  204 + '<i class="fa fa-trash"></i>',
  205 + '#',
  206 + [
  207 + 'class' => 'btn btn-primary delete-product-row',
  208 + ]
  209 + );
  210 + $result .= '</div></div>';
  211 + } else {
  212 + $result = '';
  213 + }
  214 +
  215 + return [
  216 + 'row' => $result,
  217 + 'id' => empty($variant) ? 0 : $variant->id,
  218 + 'count' => empty($count) ? 1 : intval($count),
  219 + ];
202 } 220 }
203 } 221 }
views/order/_form.php
@@ -30,10 +30,23 @@ $(document).on(&#39;click&#39;, &#39;#create-add&#39;, function(e) { @@ -30,10 +30,23 @@ $(document).on(&#39;click&#39;, &#39;#create-add&#39;, function(e) {
30 count: count 30 count: count
31 }, 31 },
32 success: function(data) { 32 success: function(data) {
33 - console.log(data); 33 + if (data.id != 0) {
  34 + var row = $('#products #' + data.id);
  35 + if (row.length !== 0) {
  36 + row.find('.count-input').val(function(i, oldVal) {
  37 + return parseInt(oldVal, 10) + data.count;
  38 + });
  39 + } else {
  40 + $('#products').append(data.row);
  41 + }
  42 + }
34 } 43 }
35 }); 44 });
36 }); 45 });
  46 +$(document).on('click', '.delete-product-row', function(e) {
  47 + e.preventDefault();
  48 + $(this).parent().parent().remove();
  49 +})
37 JS; 50 JS;
38 51
39 $this->registerJs($js, View::POS_READY); 52 $this->registerJs($js, View::POS_READY);