Commit 7520dc0ec49f1931bcbd35565d3ffb231b93c76d

Authored by Alexey Boroda
1 parent 6f14188b

-Grid with input in process

controllers/OrderController.php
... ... @@ -4,6 +4,7 @@
4 4  
5 5 use artweb\artbox\ecommerce\models\OrderSearch;
6 6 use Yii;
  7 + use yii\helpers\Json;
7 8 use yii\web\Controller;
8 9 use yii\filters\VerbFilter;
9 10 use yii\data\ActiveDataProvider;
... ... @@ -141,13 +142,20 @@
141 142 {
142 143 $model = new Order();
143 144  
  145 + $dataProvider = new ActiveDataProvider(
  146 + [
  147 + 'query' => $model->getProducts(),
  148 + ]
  149 + );
  150 +
144 151 if ($model->load(Yii::$app->request->post()) && $model->save()) {
145 152 return $this->redirect([ 'index' ]);
146 153 } else {
147 154 return $this->render(
148 155 'create',
149 156 [
150   - 'model' => $model,
  157 + 'model' => $model,
  158 + 'dataProvider' => $dataProvider,
151 159 ]
152 160 );
153 161 }
... ... @@ -155,15 +163,44 @@
155 163  
156 164 public function actionUpdate($id)
157 165 {
158   - $model = $this->findModel($id);
  166 + if (\Yii::$app->request->post('hasEditable'))
  167 + {
  168 + $orderProductId = \Yii::$app->request->post('editableKey');
  169 + $orderProduct = OrderProduct::findOne($orderProductId);
  170 + $out = Json::encode(['output'=>'', 'message'=>'']);
  171 +
  172 + $posted = current(\Yii::$app->request->post('OrderProduct'));
  173 + $post = ['OrderProduct' => $posted];
  174 +
  175 + if ($orderProduct->load($post))
  176 + {
  177 + $orderProduct->save();
  178 + $output = '';
  179 + if (isset($posted['count'])) {
  180 + $output = Yii::$app->formatter->asDecimal($orderProduct->count, 0);
  181 + }
  182 + $out = Json::encode(['output'=>$output, 'message'=>'']);
  183 + }
159 184  
  185 + return $out;
  186 + }
  187 +
  188 + $model = $this->findModel($id);
  189 +
  190 + $dataProvider = new ActiveDataProvider(
  191 + [
  192 + 'query' => $model->getProducts(),
  193 + ]
  194 + );
  195 +
160 196 if ($model->load(Yii::$app->request->post()) && $model->save()) {
161 197 return $this->redirect([ 'index' ]);
162 198 } else {
163 199 return $this->render(
164 200 'update',
165 201 [
166   - 'model' => $model,
  202 + 'model' => $model,
  203 + 'dataProvider' => $dataProvider,
167 204 ]
168 205 );
169 206 }
... ...
models/Order.php
... ... @@ -94,7 +94,6 @@
94 94 'declaration',
95 95 'stock',
96 96 'consignment',
97   - 'payment',
98 97 'insurance',
99 98 'amount_imposed',
100 99 'shipping_by',
... ... @@ -106,6 +105,16 @@
106 105 'string',
107 106 'max' => 255,
108 107 ],
  108 + [
  109 + [ 'payment' ],
  110 + 'in',
  111 + 'range' => [
  112 + 1,
  113 + 2,
  114 + 3,
  115 + 4,
  116 + ],
  117 + ],
109 118 ];
110 119 }
111 120  
... ... @@ -259,7 +268,7 @@
259 268 {
260 269 $session = new Session;
261 270 $session->open();
262   - $session[ 'basket' ] = null;
  271 + $session[ 'basket' ] = NULL;
263 272 }
264 273  
265 274 public function getUser()
... ...
views/order/_form.php
1 1 <?php
2 2  
3 3 use artweb\artbox\ecommerce\models\Order;
  4 + use frontend\models\OrderFrontend;
  5 + use kartik\grid\GridView;
  6 + use yii\data\ActiveDataProvider;
4 7 use yii\helpers\Html;
5 8 use yii\bootstrap\ActiveForm;
6 9 use yii\helpers\ArrayHelper;
7 10 use artweb\artbox\ecommerce\models\Delivery;
  11 + use yii\web\View;
8 12  
9   - /* @var $this yii\web\View */
10   - /* @var $model Order */
11   - /* @var $form yii\widgets\ActiveForm */
  13 + /**
  14 + * @var View $this
  15 + * @var Order $model
  16 + * @var ActiveForm $form
  17 + * @var ActiveDataProvider $dataProvider
  18 + */
12 19 ?>
13 20  
14 21 <?php $form = ActiveForm::begin(); ?>
15 22 <div class="container">
16 23 <div class="row">
  24 + <div class="form-group">
  25 + <?= Html::submitButton(
  26 + $model->isNewRecord ? 'Create' : 'Update',
  27 + [ 'class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary' ]
  28 + ) ?>
  29 + </div>
  30 + </div>
  31 + <div class="row">
17 32 <div class="col-sm-6">
18 33  
19 34  
... ... @@ -51,13 +66,7 @@
51 66  
52 67 <?= $form->field($model, 'payment')
53 68 ->dropDownList(
54   - [
55   - 'Оплатить наличными' => 'Оплатить наличными',
56   - 'Оплатить на карту Приват Банка' => 'Оплатить на карту Приват Банка',
57   - 'Оплатить по безналичному расчету' => 'Оплатить по безналичному расчету',
58   - 'Оплатить Правекс-телеграф' => 'Оплатить Правекс-телеграф',
59   - 'Наложенным платежом' => 'Наложенным платежом',
60   - ],
  69 + ArrayHelper::getColumn(OrderFrontend::PAYMENT_LIST, 'label'),
61 70 [ 'prompt' => '...' ]
62 71 ); ?>
63 72  
... ... @@ -94,13 +103,50 @@
94 103 </div>
95 104 </div>
96 105 </div>
97   -<div class="row">
98   - <div class="form-group">
99   - <?= Html::submitButton(
100   - $model->isNewRecord ? 'Create' : 'Update',
101   - [ 'class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary' ]
102   - ) ?>
  106 +
  107 +<?php ActiveForm::end(); ?>
  108 +<div class="container">
  109 + <div class="row">
  110 + <?php
  111 + echo GridView::widget(
  112 + [
  113 + 'dataProvider' => $dataProvider,
  114 + 'columns' => [
  115 + 'id',
  116 + 'product_name',
  117 + 'sku',
  118 + [
  119 + 'class' => 'kartik\grid\EditableColumn',
  120 + 'attribute' => 'count',
  121 + 'editableOptions' => [
  122 + 'header' => \Yii::t('app', 'Количество'),
  123 + 'inputType' => kartik\editable\Editable::INPUT_SPIN,
  124 + 'options' => [
  125 + 'pluginOptions' => [
  126 + 'min' => 0,
  127 + 'max' => 5000,
  128 + ],
  129 + ],
  130 + ],
  131 + 'hAlign' => 'right',
  132 + 'vAlign' => 'middle',
  133 + 'width' => '7%',
  134 + 'format' => [
  135 + 'decimal',
  136 + 2,
  137 + ],
  138 + 'pageSummary' => true,
  139 + ],
  140 + [
  141 + 'class' => 'yii\grid\ActionColumn',
  142 + 'template' => '{delete}',
  143 + ],
  144 + ],
  145 + 'responsive' => true,
  146 + 'hover' => true,
  147 + ]
  148 + );
  149 + ?>
103 150 </div>
104 151 </div>
105   -<?php ActiveForm::end(); ?>
106 152  
... ...
views/order/create.php
1 1 <?php
2   -use yii\helpers\Html;
3   -use yii\grid\GridView;
4   -use yii\bootstrap\ActiveForm;
5   -
6   -
7   -$this->title = 'Добавить товар в заказ';
8   -$this->params['breadcrumbs'][] = ['label' => 'Pages', 'url' => ['index']];
9   -$this->params['breadcrumbs'][] = $this->title;
  2 + /**
  3 + * @var Order $model
  4 + * @var ActiveDataProvider $dataProvider
  5 + * @var View $this
  6 + */
  7 + use artweb\artbox\ecommerce\models\Order;
  8 + use yii\data\ActiveDataProvider;
  9 + use yii\helpers\Html;
  10 + use yii\web\View;
  11 +
  12 + $this->title = 'Добавить товар в заказ';
  13 + $this->params[ 'breadcrumbs' ][] = [
  14 + 'label' => 'Pages',
  15 + 'url' => [ 'index' ],
  16 + ];
  17 + $this->params[ 'breadcrumbs' ][] = $this->title;
10 18 ?>
11 19  
12 20 <div class="order-create">
13 21 <h1><?= Html::encode($this->title) ?></h1>
14   -
15   - <?= $this->render('_form', [
16   - 'model' => $model,
17   - ]) ?>
  22 +
  23 + <?= $this->render(
  24 + '_form',
  25 + [
  26 + 'model' => $model,
  27 + 'dataProvider' => $dataProvider,
  28 + 'pjax' => true,
  29 + ]
  30 + ) ?>
18 31 </div>
19 32  
... ...
views/order/update.php
1 1 <?php
2 2 /**
3   - * @var Order $model
4   - * @var View $this
  3 + * @var Order $model
  4 + * @var View $this
  5 + * @var ActiveDataProvider $dataProvider
5 6 */
6 7  
7 8 use artweb\artbox\ecommerce\models\Order;
  9 + use yii\data\ActiveDataProvider;
8 10 use yii\helpers\Html;
9 11 use yii\web\View;
10 12  
11   - $this->title = 'Заказ ' . $model->id;
  13 + $this->title = 'Заказ #' . $model->id;
12 14 $this->params[ 'breadcrumbs' ][] = $this->title;
13 15 ?>
14 16 <div class="order-update">
... ... @@ -17,7 +19,8 @@
17 19 <?= $this->render(
18 20 '_form',
19 21 [
20   - 'model' => $model,
  22 + 'model' => $model,
  23 + 'dataProvider' => $dataProvider,
21 24 ]
22 25 ) ?>
23 26 </div>
24 27 \ No newline at end of file
... ...