Commit 7520dc0ec49f1931bcbd35565d3ffb231b93c76d
1 parent
6f14188b
-Grid with input in process
Showing
5 changed files
with
146 additions
and
38 deletions
Show diff stats
controllers/OrderController.php
| @@ -4,6 +4,7 @@ | @@ -4,6 +4,7 @@ | ||
| 4 | 4 | ||
| 5 | use artweb\artbox\ecommerce\models\OrderSearch; | 5 | use artweb\artbox\ecommerce\models\OrderSearch; |
| 6 | use Yii; | 6 | use Yii; |
| 7 | + use yii\helpers\Json; | ||
| 7 | use yii\web\Controller; | 8 | use yii\web\Controller; |
| 8 | use yii\filters\VerbFilter; | 9 | use yii\filters\VerbFilter; |
| 9 | use yii\data\ActiveDataProvider; | 10 | use yii\data\ActiveDataProvider; |
| @@ -141,13 +142,20 @@ | @@ -141,13 +142,20 @@ | ||
| 141 | { | 142 | { |
| 142 | $model = new Order(); | 143 | $model = new Order(); |
| 143 | 144 | ||
| 145 | + $dataProvider = new ActiveDataProvider( | ||
| 146 | + [ | ||
| 147 | + 'query' => $model->getProducts(), | ||
| 148 | + ] | ||
| 149 | + ); | ||
| 150 | + | ||
| 144 | if ($model->load(Yii::$app->request->post()) && $model->save()) { | 151 | if ($model->load(Yii::$app->request->post()) && $model->save()) { |
| 145 | return $this->redirect([ 'index' ]); | 152 | return $this->redirect([ 'index' ]); |
| 146 | } else { | 153 | } else { |
| 147 | return $this->render( | 154 | return $this->render( |
| 148 | 'create', | 155 | 'create', |
| 149 | [ | 156 | [ |
| 150 | - 'model' => $model, | 157 | + 'model' => $model, |
| 158 | + 'dataProvider' => $dataProvider, | ||
| 151 | ] | 159 | ] |
| 152 | ); | 160 | ); |
| 153 | } | 161 | } |
| @@ -155,15 +163,44 @@ | @@ -155,15 +163,44 @@ | ||
| 155 | 163 | ||
| 156 | public function actionUpdate($id) | 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 | if ($model->load(Yii::$app->request->post()) && $model->save()) { | 196 | if ($model->load(Yii::$app->request->post()) && $model->save()) { |
| 161 | return $this->redirect([ 'index' ]); | 197 | return $this->redirect([ 'index' ]); |
| 162 | } else { | 198 | } else { |
| 163 | return $this->render( | 199 | return $this->render( |
| 164 | 'update', | 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,7 +94,6 @@ | ||
| 94 | 'declaration', | 94 | 'declaration', |
| 95 | 'stock', | 95 | 'stock', |
| 96 | 'consignment', | 96 | 'consignment', |
| 97 | - 'payment', | ||
| 98 | 'insurance', | 97 | 'insurance', |
| 99 | 'amount_imposed', | 98 | 'amount_imposed', |
| 100 | 'shipping_by', | 99 | 'shipping_by', |
| @@ -106,6 +105,16 @@ | @@ -106,6 +105,16 @@ | ||
| 106 | 'string', | 105 | 'string', |
| 107 | 'max' => 255, | 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,7 +268,7 @@ | ||
| 259 | { | 268 | { |
| 260 | $session = new Session; | 269 | $session = new Session; |
| 261 | $session->open(); | 270 | $session->open(); |
| 262 | - $session[ 'basket' ] = null; | 271 | + $session[ 'basket' ] = NULL; |
| 263 | } | 272 | } |
| 264 | 273 | ||
| 265 | public function getUser() | 274 | public function getUser() |
views/order/_form.php
| 1 | <?php | 1 | <?php |
| 2 | 2 | ||
| 3 | use artweb\artbox\ecommerce\models\Order; | 3 | use artweb\artbox\ecommerce\models\Order; |
| 4 | + use frontend\models\OrderFrontend; | ||
| 5 | + use kartik\grid\GridView; | ||
| 6 | + use yii\data\ActiveDataProvider; | ||
| 4 | use yii\helpers\Html; | 7 | use yii\helpers\Html; |
| 5 | use yii\bootstrap\ActiveForm; | 8 | use yii\bootstrap\ActiveForm; |
| 6 | use yii\helpers\ArrayHelper; | 9 | use yii\helpers\ArrayHelper; |
| 7 | use artweb\artbox\ecommerce\models\Delivery; | 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 | <?php $form = ActiveForm::begin(); ?> | 21 | <?php $form = ActiveForm::begin(); ?> |
| 15 | <div class="container"> | 22 | <div class="container"> |
| 16 | <div class="row"> | 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 | <div class="col-sm-6"> | 32 | <div class="col-sm-6"> |
| 18 | 33 | ||
| 19 | 34 | ||
| @@ -51,13 +66,7 @@ | @@ -51,13 +66,7 @@ | ||
| 51 | 66 | ||
| 52 | <?= $form->field($model, 'payment') | 67 | <?= $form->field($model, 'payment') |
| 53 | ->dropDownList( | 68 | ->dropDownList( |
| 54 | - [ | ||
| 55 | - 'Оплатить наличными' => 'Оплатить наличными', | ||
| 56 | - 'Оплатить на карту Приват Банка' => 'Оплатить на карту Приват Банка', | ||
| 57 | - 'Оплатить по безналичному расчету' => 'Оплатить по безналичному расчету', | ||
| 58 | - 'Оплатить Правекс-телеграф' => 'Оплатить Правекс-телеграф', | ||
| 59 | - 'Наложенным платежом' => 'Наложенным платежом', | ||
| 60 | - ], | 69 | + ArrayHelper::getColumn(OrderFrontend::PAYMENT_LIST, 'label'), |
| 61 | [ 'prompt' => '...' ] | 70 | [ 'prompt' => '...' ] |
| 62 | ); ?> | 71 | ); ?> |
| 63 | 72 | ||
| @@ -94,13 +103,50 @@ | @@ -94,13 +103,50 @@ | ||
| 94 | </div> | 103 | </div> |
| 95 | </div> | 104 | </div> |
| 96 | </div> | 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 | </div> | 150 | </div> |
| 104 | </div> | 151 | </div> |
| 105 | -<?php ActiveForm::end(); ?> | ||
| 106 | 152 |
views/order/create.php
| 1 | <?php | 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 | <div class="order-create"> | 20 | <div class="order-create"> |
| 13 | <h1><?= Html::encode($this->title) ?></h1> | 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 | </div> | 31 | </div> |
| 19 | 32 |
views/order/update.php
| 1 | <?php | 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 | use artweb\artbox\ecommerce\models\Order; | 8 | use artweb\artbox\ecommerce\models\Order; |
| 9 | + use yii\data\ActiveDataProvider; | ||
| 8 | use yii\helpers\Html; | 10 | use yii\helpers\Html; |
| 9 | use yii\web\View; | 11 | use yii\web\View; |
| 10 | 12 | ||
| 11 | - $this->title = 'Заказ №' . $model->id; | 13 | + $this->title = 'Заказ #' . $model->id; |
| 12 | $this->params[ 'breadcrumbs' ][] = $this->title; | 14 | $this->params[ 'breadcrumbs' ][] = $this->title; |
| 13 | ?> | 15 | ?> |
| 14 | <div class="order-update"> | 16 | <div class="order-update"> |
| @@ -17,7 +19,8 @@ | @@ -17,7 +19,8 @@ | ||
| 17 | <?= $this->render( | 19 | <?= $this->render( |
| 18 | '_form', | 20 | '_form', |
| 19 | [ | 21 | [ |
| 20 | - 'model' => $model, | 22 | + 'model' => $model, |
| 23 | + 'dataProvider' => $dataProvider, | ||
| 21 | ] | 24 | ] |
| 22 | ) ?> | 25 | ) ?> |
| 23 | </div> | 26 | </div> |
| 24 | \ No newline at end of file | 27 | \ No newline at end of file |