Commit b6da636096ba5641aa299b6a0ccbed176bf6aef1

Authored by Alexey Boroda
1 parent 0b5518db

-Order products ready

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(&#39;click&#39;, &#39;#create-add&#39;, 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);
... ...