Commit b6da636096ba5641aa299b6a0ccbed176bf6aef1
1 parent
0b5518db
-Order products ready
Showing
3 changed files
with
78 additions
and
26 deletions
Show diff stats
controllers/OrderController.php
... | ... | @@ -115,6 +115,27 @@ |
115 | 115 | $model = new Order(); |
116 | 116 | |
117 | 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 | 139 | return $this->redirect( |
119 | 140 | [ |
120 | 141 | 'view', | ... | ... |
controllers/OrderProductController.php
... | ... | @@ -3,6 +3,7 @@ |
3 | 3 | namespace artbox\order\controllers; |
4 | 4 | |
5 | 5 | use artbox\order\models\OrderProductSearch; |
6 | + use common\models\Variant; | |
6 | 7 | use Yii; |
7 | 8 | use artbox\order\models\OrderProduct; |
8 | 9 | use yii\helpers\Html; |
... | ... | @@ -10,6 +11,7 @@ |
10 | 11 | use yii\web\NotFoundHttpException; |
11 | 12 | use yii\filters\VerbFilter; |
12 | 13 | use yii\filters\AccessControl; |
14 | + use yii\web\Response; | |
13 | 15 | |
14 | 16 | /** |
15 | 17 | * OrderProductController implements the CRUD actions for OrderProduct model. |
... | ... | @@ -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('click', '#create-add', function(e) { |
30 | 30 | count: count |
31 | 31 | }, |
32 | 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 | 50 | JS; |
38 | 51 | |
39 | 52 | $this->registerJs($js, View::POS_READY); | ... | ... |