Commit 287e356df186852b79de35342dd66090986827a0
1 parent
2ccf4bd2
-Permissions ready - test
Showing
6 changed files
with
781 additions
and
659 deletions
Show diff stats
controllers/OrderController.php
@@ -6,6 +6,7 @@ | @@ -6,6 +6,7 @@ | ||
6 | use artweb\artbox\ecommerce\models\OrderLabelHistory; | 6 | use artweb\artbox\ecommerce\models\OrderLabelHistory; |
7 | use artweb\artbox\ecommerce\models\OrderSearch; | 7 | use artweb\artbox\ecommerce\models\OrderSearch; |
8 | use common\components\CreditHelper; | 8 | use common\components\CreditHelper; |
9 | + use common\models\Permissions; | ||
9 | use common\models\User; | 10 | use common\models\User; |
10 | use Yii; | 11 | use Yii; |
11 | use yii\data\ArrayDataProvider; | 12 | use yii\data\ArrayDataProvider; |
@@ -57,7 +58,12 @@ | @@ -57,7 +58,12 @@ | ||
57 | 58 | ||
58 | public function actionIndex() | 59 | public function actionIndex() |
59 | { | 60 | { |
61 | + /** | ||
62 | + * @var Permissions $permissions | ||
63 | + */ | ||
64 | + $permissions = \Yii::$app->user->identity->permissions; | ||
60 | $searchModel = new OrderSearch(); | 65 | $searchModel = new OrderSearch(); |
66 | + $searchModel->permissions = $permissions; | ||
61 | $dataProvider = $searchModel->search(Yii::$app->request->queryParams); | 67 | $dataProvider = $searchModel->search(Yii::$app->request->queryParams); |
62 | 68 | ||
63 | return $this->render( | 69 | return $this->render( |
@@ -65,6 +71,8 @@ | @@ -65,6 +71,8 @@ | ||
65 | [ | 71 | [ |
66 | 'dataProvider' => $dataProvider, | 72 | 'dataProvider' => $dataProvider, |
67 | 'searchModel' => $searchModel, | 73 | 'searchModel' => $searchModel, |
74 | + 'allowedLabels' => empty($permissions) ? [] : $permissions->labelsArray, | ||
75 | + 'canCreate' => empty($permissions) ? false : $permissions->create, | ||
68 | ] | 76 | ] |
69 | ); | 77 | ); |
70 | } | 78 | } |
@@ -247,6 +255,19 @@ | @@ -247,6 +255,19 @@ | ||
247 | 255 | ||
248 | public function actionCreate() | 256 | public function actionCreate() |
249 | { | 257 | { |
258 | + /** | ||
259 | + * @var Permissions $permissions | ||
260 | + */ | ||
261 | + $permissions = \Yii::$app->user->identity->permissions; | ||
262 | + | ||
263 | + if (empty($permissions)) { | ||
264 | + throw new ForbiddenHttpException(); | ||
265 | + } else { | ||
266 | + if (!$permissions->create) { | ||
267 | + throw new ForbiddenHttpException(); | ||
268 | + } | ||
269 | + } | ||
270 | + | ||
250 | if (\Yii::$app->request->post('hasEditable')) { | 271 | if (\Yii::$app->request->post('hasEditable')) { |
251 | $orderProductId = \Yii::$app->request->post('editableKey'); | 272 | $orderProductId = \Yii::$app->request->post('editableKey'); |
252 | $orderProduct = OrderProduct::findOne($orderProductId); | 273 | $orderProduct = OrderProduct::findOne($orderProductId); |
@@ -388,6 +409,14 @@ | @@ -388,6 +409,14 @@ | ||
388 | throw new ForbiddenHttpException(); | 409 | throw new ForbiddenHttpException(); |
389 | } | 410 | } |
390 | } | 411 | } |
412 | + if (!empty($user->permissions)) { | ||
413 | + $permissions = $user->permissions; | ||
414 | + if (!in_array($model->label, $user->permissions->labelsArray)) { | ||
415 | + throw new ForbiddenHttpException(); | ||
416 | + } | ||
417 | + } else { | ||
418 | + $permissions = Permissions::getDefault(); | ||
419 | + } | ||
391 | 420 | ||
392 | $dataProvider = new ActiveDataProvider( | 421 | $dataProvider = new ActiveDataProvider( |
393 | [ | 422 | [ |
@@ -432,6 +461,7 @@ | @@ -432,6 +461,7 @@ | ||
432 | [ | 461 | [ |
433 | 'model' => $model, | 462 | 'model' => $model, |
434 | 'dataProvider' => $dataProvider, | 463 | 'dataProvider' => $dataProvider, |
464 | + 'permissions' => $permissions, | ||
435 | ] | 465 | ] |
436 | ); | 466 | ); |
437 | } else { | 467 | } else { |
@@ -440,6 +470,7 @@ | @@ -440,6 +470,7 @@ | ||
440 | [ | 470 | [ |
441 | 'model' => $model, | 471 | 'model' => $model, |
442 | 'dataProvider' => $dataProvider, | 472 | 'dataProvider' => $dataProvider, |
473 | + 'permissions' => $permissions, | ||
443 | ] | 474 | ] |
444 | ); | 475 | ); |
445 | } | 476 | } |
models/Order.php
@@ -336,39 +336,38 @@ | @@ -336,39 +336,38 @@ | ||
336 | public static function attributeNames() | 336 | public static function attributeNames() |
337 | { | 337 | { |
338 | return [ | 338 | return [ |
339 | - 'name' => Yii::t('app', 'order_name'), | ||
340 | - 'phone' => Yii::t('app', 'order_phone'), | ||
341 | - 'phone2' => Yii::t('app', 'Конактный телефон 2'), | ||
342 | - 'email' => Yii::t('app', 'E-mail'), | ||
343 | - 'comment' => Yii::t('app', 'Комментарий '), | ||
344 | - 'created_at' => Yii::t('app', 'Дата добавления'), | ||
345 | - 'updated_at' => Yii::t('app', 'Дата обновления'), | ||
346 | - 'deleted_at' => Yii::t('app', 'Дата удаления'), | ||
347 | - 'deadline' => Yii::t('app', 'Дедлайн'), | ||
348 | - 'reason' => Yii::t('app', 'Причина'), | ||
349 | - 'check' => Yii::t('app', 'Чек'), | ||
350 | - 'sms' => Yii::t('app', 'СМС'), | ||
351 | - 'consignment' => Yii::t('app', 'Номер накладной'), | ||
352 | - 'manager_id' => Yii::t('app', 'Менеджер'), | ||
353 | - 'delivery_cost' => Yii::t('app', 'Стоимость доставки'), | ||
354 | - 'published' => Yii::t('app', 'Опубликован'), | ||
355 | - 'label' => Yii::t('app', 'Метка'), | ||
356 | - 'declaration' => Yii::t('app', 'Номер декларации'), | ||
357 | - 'delivery' => Yii::t('app', 'Способ доставки'), | ||
358 | - 'total' => Yii::t('app', 'Сумма'), | ||
359 | - 'adress' => Yii::t('app', 'Адрес'), | ||
360 | - 'pay' => Yii::t('app', 'Оплата'), | ||
361 | - 'body' => Yii::t('app', 'Комментарий менеджера'), | ||
362 | - 'id' => Yii::t('app', 'Номер'), | ||
363 | - 'stock' => Yii::t('app', 'Номер склада'), | ||
364 | - 'payment' => Yii::t('app', 'Способ оплаты'), | ||
365 | - 'insurance' => Yii::t('app', 'Страховка'), | ||
366 | - 'amount_imposed' => Yii::t('app', 'Сумма наложенного'), | ||
367 | - 'shipping_by' => Yii::t('app', 'Отправка за счет'), | ||
368 | - 'city' => Yii::t('app', 'Город'), | ||
369 | - 'numbercard' => Yii::t('app', '№ карточки'), | ||
370 | - 'credit_month' => Yii::t('app', 'Количество месяцев'), | ||
371 | - 'credit_sum' => Yii::t('app', 'Первоначальный взнос'), | 339 | + 'name' => Yii::t('app', 'order_name'), |
340 | + 'phone' => Yii::t('app', 'order_phone'), | ||
341 | + 'phone2' => Yii::t('app', 'Конактный телефон 2'), | ||
342 | + 'email' => Yii::t('app', 'E-mail'), | ||
343 | + 'comment' => Yii::t('app', 'Комментарий '), | ||
344 | + 'deadline' => Yii::t('app', 'Дедлайн'), | ||
345 | + 'reason' => Yii::t('app', 'Причина'), | ||
346 | + 'check' => Yii::t('app', 'Чек'), | ||
347 | + 'sms' => Yii::t('app', 'СМС'), | ||
348 | + 'consignment' => Yii::t('app', 'Номер накладной'), | ||
349 | + 'manager_id' => Yii::t('app', 'Менеджер'), | ||
350 | + 'delivery_cost' => Yii::t('app', 'Стоимость доставки'), | ||
351 | + 'label' => Yii::t('app', 'Метка'), | ||
352 | + 'declaration' => Yii::t('app', 'Номер декларации'), | ||
353 | + 'delivery' => Yii::t('app', 'Способ доставки'), | ||
354 | + 'adress' => Yii::t('app', 'Адрес'), | ||
355 | + 'pay' => Yii::t('app', 'Оплата'), | ||
356 | + 'body' => Yii::t('app', 'Комментарий менеджера'), | ||
357 | + 'stock' => Yii::t('app', 'Номер склада'), | ||
358 | + 'payment' => Yii::t('app', 'Способ оплаты'), | ||
359 | + 'insurance' => Yii::t('app', 'Страховка'), | ||
360 | + 'amount_imposed' => Yii::t('app', 'Сумма наложенного'), | ||
361 | + 'shipping_by' => Yii::t('app', 'Отправка за счет'), | ||
362 | + 'city' => Yii::t('app', 'Город'), | ||
363 | + 'numbercard' => Yii::t('app', '№ карточки'), | ||
364 | + 'send_sms' => Yii::t('app', 'Отправлять смс'), | ||
365 | + 'product_booking' => Yii::t('app', 'Бронь товара'), | ||
366 | + 'product_status' => Yii::t('app', 'Статус товара'), | ||
367 | + 'product_return' => Yii::t('app', 'Возврат товара'), | ||
368 | + 'add_product' => Yii::t('app', 'Добавить товар'), | ||
369 | + 'delete_product' => Yii::t('app', 'Удалить товар'), | ||
370 | + 'product_count' => Yii::t('app', 'Количество товара'), | ||
372 | ]; | 371 | ]; |
373 | } | 372 | } |
374 | 373 | ||
@@ -443,7 +442,7 @@ | @@ -443,7 +442,7 @@ | ||
443 | { | 442 | { |
444 | return $this->hasMany(OrderLog::className(), [ 'order_id' => 'id' ]); | 443 | return $this->hasMany(OrderLog::className(), [ 'order_id' => 'id' ]); |
445 | } | 444 | } |
446 | - | 445 | + |
447 | /** | 446 | /** |
448 | * @return \yii\db\ActiveQuery | 447 | * @return \yii\db\ActiveQuery |
449 | */ | 448 | */ |
models/OrderSearch.php
@@ -2,13 +2,15 @@ | @@ -2,13 +2,15 @@ | ||
2 | 2 | ||
3 | namespace artweb\artbox\ecommerce\models; | 3 | namespace artweb\artbox\ecommerce\models; |
4 | 4 | ||
5 | + use common\models\Permissions; | ||
5 | use yii\base\Model; | 6 | use yii\base\Model; |
6 | use yii\data\ActiveDataProvider; | 7 | use yii\data\ActiveDataProvider; |
7 | use yii\helpers\ArrayHelper; | 8 | use yii\helpers\ArrayHelper; |
8 | - use yii\helpers\VarDumper; | ||
9 | 9 | ||
10 | /** | 10 | /** |
11 | * OrderSearch represents the model behind the search form about `\artweb\artbox\ecommerce\models\Order`. | 11 | * OrderSearch represents the model behind the search form about `\artweb\artbox\ecommerce\models\Order`. |
12 | + * | ||
13 | + * @property Permissions $permissions | ||
12 | */ | 14 | */ |
13 | class OrderSearch extends Order | 15 | class OrderSearch extends Order |
14 | { | 16 | { |
@@ -17,6 +19,8 @@ | @@ -17,6 +19,8 @@ | ||
17 | public $date_range; | 19 | public $date_range; |
18 | public $sku; | 20 | public $sku; |
19 | 21 | ||
22 | + public $permissions; | ||
23 | + | ||
20 | /** | 24 | /** |
21 | * @inheritdoc | 25 | * @inheritdoc |
22 | */ | 26 | */ |
@@ -160,6 +164,14 @@ | @@ -160,6 +164,14 @@ | ||
160 | $this->declaration, | 164 | $this->declaration, |
161 | ] | 165 | ] |
162 | ); | 166 | ); |
167 | + | ||
168 | + if (!empty($this->permissions)) | ||
169 | + { | ||
170 | + $query->andFilterWhere([ | ||
171 | + 'label' => $this->permissions->labelsArray, | ||
172 | + ]); | ||
173 | + } | ||
174 | + | ||
163 | $query->andFilterWhere( | 175 | $query->andFilterWhere( |
164 | [ | 176 | [ |
165 | 'label' => $this->label, | 177 | 'label' => $this->label, |
views/order/_form.php
@@ -5,6 +5,7 @@ | @@ -5,6 +5,7 @@ | ||
5 | use artweb\artbox\ecommerce\models\OrderPayment; | 5 | use artweb\artbox\ecommerce\models\OrderPayment; |
6 | use artweb\artbox\ecommerce\models\OrderProduct; | 6 | use artweb\artbox\ecommerce\models\OrderProduct; |
7 | use backend\models\SmsTemplate; | 7 | use backend\models\SmsTemplate; |
8 | + use common\models\Permissions; | ||
8 | use common\models\User; | 9 | use common\models\User; |
9 | use kartik\grid\GridView; | 10 | use kartik\grid\GridView; |
10 | use kartik\grid\SerialColumn; | 11 | use kartik\grid\SerialColumn; |
@@ -27,6 +28,7 @@ | @@ -27,6 +28,7 @@ | ||
27 | * @var ActiveForm $form | 28 | * @var ActiveForm $form |
28 | * @var ActiveDataProvider $dataProvider | 29 | * @var ActiveDataProvider $dataProvider |
29 | * @var User $user | 30 | * @var User $user |
31 | + * @var Permissions $permissions | ||
30 | */ | 32 | */ |
31 | 33 | ||
32 | $user = \Yii::$app->user->identity; | 34 | $user = \Yii::$app->user->identity; |
@@ -160,231 +162,266 @@ JS; | @@ -160,231 +162,266 @@ JS; | ||
160 | </div> | 162 | </div> |
161 | </div> | 163 | </div> |
162 | <div class="box-body"> | 164 | <div class="box-body"> |
163 | - | ||
164 | - | ||
165 | -<div class="container"> | ||
166 | - <div class="form-group"> | ||
167 | - <br> | ||
168 | 165 | ||
169 | 166 | ||
170 | - | ||
171 | - <div class="row"> | ||
172 | - <div class="col-sm-6"> | ||
173 | - | ||
174 | - <?= $form->field($model, 'deadline') | ||
175 | - ->widget( | ||
176 | - DatePicker::className(), | ||
177 | - [ | ||
178 | - | ||
179 | - ] | ||
180 | - ) ?> | ||
181 | - | ||
182 | - <?php | ||
183 | - if ($user->isAdmin()) { | ||
184 | - echo $form->field($model, 'pay') | ||
185 | - ->widget( | ||
186 | - SwitchInput::className(), | ||
187 | - [ | ||
188 | - 'name' => 'pay', | ||
189 | - 'pluginOptions' => [ | ||
190 | - 'onText' => \Yii::t('app', 'Оплачено'), | ||
191 | - 'offText' => \Yii::t('app', 'Не оплачено'), | ||
192 | - ], | ||
193 | - ] | ||
194 | - ); | ||
195 | - } | ||
196 | - ?> | ||
197 | - | ||
198 | - <?= $form->field($model, 'reason') | ||
199 | - ->dropDownList( | ||
200 | - Order::REASONS, | ||
201 | - [ 'prompt' => 'Выберите причину' ] | ||
202 | - ) ?> | ||
203 | - | ||
204 | - <?= $form->field($model, 'label') | ||
205 | - ->dropDownList( | ||
206 | - ArrayHelper::map( | ||
207 | - Label::find() | ||
208 | - ->asArray() | ||
209 | - ->all(), | ||
210 | - 'id', | ||
211 | - 'label' | ||
212 | - ), | ||
213 | - [ 'prompt' => 'Выберите метку' ] | ||
214 | - ); ?> | ||
215 | - | ||
216 | - <?= $form->field($model, 'name') ?> | ||
217 | - | ||
218 | - <?= $form->field($model, 'phone') ?> | ||
219 | - | ||
220 | - <?= $form->field($model, 'phone2') ?> | ||
221 | - | ||
222 | - <?= $form->field($model, 'email') | ||
223 | - ->textInput([ 'readonly' => $user->isAdmin() ? false : true ]) ?> | ||
224 | - | ||
225 | - <?= $form->field( | ||
226 | - $model, | ||
227 | - 'numbercard' | ||
228 | - ) | ||
229 | - ->textInput([ 'readonly' => true ]) ?> | ||
230 | - | ||
231 | - <?= $form->field($model, 'comment') | ||
232 | - ->textarea([ 'rows' => '3' ]) ?> | ||
233 | - <?= $form->field($model, 'delivery') | ||
234 | - ->dropDownList( | ||
235 | - ArrayHelper::map( | ||
236 | - Delivery::find() | ||
237 | - ->joinWith('lang') | ||
238 | - ->asArray() | ||
239 | - ->all(), | ||
240 | - 'id', | ||
241 | - 'lang.title' | ||
242 | - ), | ||
243 | - [ 'prompt' => \Yii::t('app', 'Выберите доставку ...') ] | ||
244 | - ) ?> | ||
245 | - | ||
246 | - <?php | ||
247 | - | ||
248 | - if ($user->isAdmin()) { | ||
249 | - echo $form->field($model, 'manager_id') | ||
250 | - ->dropDownList( | ||
251 | - ArrayHelper::map( | ||
252 | - User::find() | ||
253 | - ->asArray() | ||
254 | - ->all(), | ||
255 | - 'id', | ||
256 | - 'username' | ||
257 | - ), | ||
258 | - [ 'prompt' => \Yii::t('app', 'Менеджер') ] | ||
259 | - ); | ||
260 | - } | ||
261 | - ?> | ||
262 | - | ||
263 | - <h2><?php echo \Yii::t('app', 'Отправить смс'); ?></h2> | ||
264 | - <?php | ||
265 | - echo Select2::widget( | ||
266 | - [ | ||
267 | - 'id' => 'sms-template-selector', | ||
268 | - 'name' => 'select-sms-template', | ||
269 | - 'data' => ArrayHelper::map( | ||
270 | - SmsTemplate::find() | ||
271 | - ->asArray() | ||
272 | - ->all(), | ||
273 | - 'text', | ||
274 | - 'title' | ||
275 | - ), | ||
276 | - 'options' => [ 'placeholder' => \Yii::t('app', 'Выберите шаблон') ], | ||
277 | - 'pluginOptions' => [ | ||
278 | - 'allowClear' => true, | ||
279 | - ], | ||
280 | - ] | ||
281 | - ); | ||
282 | - | ||
283 | - ?> | ||
284 | - <br> | ||
285 | - <?php | ||
286 | - echo Html::textarea( | ||
287 | - 'sms-text', | ||
288 | - '', | ||
289 | - [ | ||
290 | - 'rows' => 3, | ||
291 | - 'id' => 'sms-text-area', | ||
292 | - 'class' => 'form-control', | ||
293 | - ] | ||
294 | - ); | ||
295 | - ?> | 167 | + <div class="container"> |
168 | + <div class="form-group"> | ||
296 | <br> | 169 | <br> |
170 | + | ||
171 | + | ||
297 | <div class="row"> | 172 | <div class="row"> |
298 | - <div class="col-md-6"> | 173 | + <div class="col-sm-6"> |
174 | + | ||
175 | + <?= $form->field($model, 'deadline') | ||
176 | + ->widget( | ||
177 | + DatePicker::className(), | ||
178 | + [ | ||
179 | + 'disabled' => !$permissions->checkAttr('deadline'), | ||
180 | + ] | ||
181 | + ) ?> | ||
182 | + | ||
299 | <?php | 183 | <?php |
300 | - if ($model->isNewRecord) { | ||
301 | - echo Html::button( | ||
302 | - \Yii::t('app', 'Отправить'), | ||
303 | - [ | ||
304 | - 'class' => 'btn btn-warning disabled', | ||
305 | - ] | ||
306 | - ); | ||
307 | - } else { | ||
308 | - echo Html::button( | ||
309 | - \Yii::t('app', 'Отправить'), | ||
310 | - [ | ||
311 | - 'class' => 'btn btn-warning', | ||
312 | - 'id' => 'send-sms-action', | ||
313 | - ] | ||
314 | - ); | 184 | + if ($permissions->checkAttr('pay')) { |
185 | + echo $form->field($model, 'pay') | ||
186 | + ->widget( | ||
187 | + SwitchInput::className(), | ||
188 | + [ | ||
189 | + 'name' => 'pay', | ||
190 | + 'pluginOptions' => [ | ||
191 | + 'onText' => \Yii::t('app', 'Оплачено'), | ||
192 | + 'offText' => \Yii::t('app', 'Не оплачено'), | ||
193 | + ], | ||
194 | + ] | ||
195 | + ); | ||
315 | } | 196 | } |
316 | ?> | 197 | ?> |
317 | - </div> | ||
318 | - <div class="col-md-6"> | 198 | + |
199 | + <?= $form->field($model, 'reason') | ||
200 | + ->dropDownList( | ||
201 | + Order::REASONS, | ||
202 | + [ | ||
203 | + 'prompt' => 'Выберите причину', | ||
204 | + 'disabled' => !$permissions->checkAttr('reason'), | ||
205 | + ] | ||
206 | + ) ?> | ||
207 | + | ||
208 | + <?= $form->field($model, 'label') | ||
209 | + ->dropDownList( | ||
210 | + ArrayHelper::map( | ||
211 | + Label::find() | ||
212 | + ->asArray() | ||
213 | + ->all(), | ||
214 | + 'id', | ||
215 | + 'label' | ||
216 | + ), | ||
217 | + [ | ||
218 | + 'prompt' => 'Выберите метку', | ||
219 | + 'disabled' => !$permissions->checkAttr('label'), | ||
220 | + ] | ||
221 | + ); ?> | ||
222 | + | ||
223 | + <?= $form->field($model, 'name') | ||
224 | + ->textInput([ 'readonly' => !$permissions->checkAttr('name') ]) ?> | ||
225 | + | ||
226 | + <?= $form->field($model, 'phone') | ||
227 | + ->textInput([ 'readonly' => !$permissions->checkAttr('phone') ]) ?> | ||
228 | + | ||
229 | + <?= $form->field($model, 'phone2') | ||
230 | + ->textInput([ 'readonly' => !$permissions->checkAttr('phone2') ]) ?> | ||
231 | + | ||
232 | + <?= $form->field($model, 'email') | ||
233 | + ->textInput([ 'readonly' => !$permissions->checkAttr('email') ]) ?> | ||
234 | + | ||
235 | + <?= $form->field( | ||
236 | + $model, | ||
237 | + 'numbercard' | ||
238 | + ) | ||
239 | + ->textInput([ 'readonly' => !$permissions->checkAttr('numbercard') ]) ?> | ||
240 | + | ||
241 | + <?= $form->field($model, 'comment') | ||
242 | + ->textarea( | ||
243 | + [ | ||
244 | + 'rows' => '3', | ||
245 | + 'readonly' => !$permissions->checkAttr('comment'), | ||
246 | + ] | ||
247 | + ) ?> | ||
248 | + <?= $form->field($model, 'delivery') | ||
249 | + ->dropDownList( | ||
250 | + ArrayHelper::map( | ||
251 | + Delivery::find() | ||
252 | + ->joinWith('lang') | ||
253 | + ->asArray() | ||
254 | + ->all(), | ||
255 | + 'id', | ||
256 | + 'lang.title' | ||
257 | + ), | ||
258 | + [ | ||
259 | + 'prompt' => \Yii::t('app', 'Выберите доставку ...'), | ||
260 | + 'disabled' => !$permissions->checkAttr('delivery'), | ||
261 | + ] | ||
262 | + ) ?> | ||
263 | + | ||
264 | + <?php | ||
265 | + | ||
266 | + if (!$permissions->checkAttr('manager_id')) { | ||
267 | + echo $form->field($model, 'manager_id') | ||
268 | + ->dropDownList( | ||
269 | + ArrayHelper::map( | ||
270 | + User::find() | ||
271 | + ->asArray() | ||
272 | + ->all(), | ||
273 | + 'id', | ||
274 | + 'username' | ||
275 | + ), | ||
276 | + [ 'prompt' => \Yii::t('app', 'Менеджер') ] | ||
277 | + ); | ||
278 | + } | ||
279 | + ?> | ||
280 | + | ||
281 | + <h2><?php echo \Yii::t('app', 'Отправить смс'); ?></h2> | ||
282 | + <?php | ||
283 | + echo Select2::widget( | ||
284 | + [ | ||
285 | + 'id' => 'sms-template-selector', | ||
286 | + 'name' => 'select-sms-template', | ||
287 | + 'data' => ArrayHelper::map( | ||
288 | + SmsTemplate::find() | ||
289 | + ->asArray() | ||
290 | + ->all(), | ||
291 | + 'text', | ||
292 | + 'title' | ||
293 | + ), | ||
294 | + 'options' => [ 'placeholder' => \Yii::t('app', 'Выберите шаблон') ], | ||
295 | + 'pluginOptions' => [ | ||
296 | + 'allowClear' => true, | ||
297 | + ], | ||
298 | + ] | ||
299 | + ); | ||
300 | + | ||
301 | + ?> | ||
302 | + <br> | ||
319 | <?php | 303 | <?php |
320 | - echo Html::radioList( | ||
321 | - 'send-phone', | ||
322 | - '1', | 304 | + echo Html::textarea( |
305 | + 'sms-text', | ||
306 | + '', | ||
323 | [ | 307 | [ |
324 | - '1' => 'Первый номер', | ||
325 | - '2' => 'Второй номер', | 308 | + 'rows' => 3, |
309 | + 'id' => 'sms-text-area', | ||
310 | + 'class' => 'form-control', | ||
326 | ] | 311 | ] |
327 | ); | 312 | ); |
328 | ?> | 313 | ?> |
314 | + <br> | ||
315 | + <div class="row"> | ||
316 | + <div class="col-md-6"> | ||
317 | + <?php | ||
318 | + if (!$permissions->checkAttr('send_sms')) { | ||
319 | + echo Html::button( | ||
320 | + \Yii::t('app', 'Отправить'), | ||
321 | + [ | ||
322 | + 'class' => 'btn btn-warning disabled', | ||
323 | + ] | ||
324 | + ); | ||
325 | + } else { | ||
326 | + echo Html::button( | ||
327 | + \Yii::t('app', 'Отправить'), | ||
328 | + [ | ||
329 | + 'class' => 'btn btn-warning', | ||
330 | + 'id' => 'send-sms-action', | ||
331 | + ] | ||
332 | + ); | ||
333 | + } | ||
334 | + ?> | ||
335 | + </div> | ||
336 | + <div class="col-md-6"> | ||
337 | + <?php | ||
338 | + echo Html::radioList( | ||
339 | + 'send-phone', | ||
340 | + '1', | ||
341 | + [ | ||
342 | + '1' => 'Первый номер', | ||
343 | + '2' => 'Второй номер', | ||
344 | + ] | ||
345 | + ); | ||
346 | + ?> | ||
347 | + </div> | ||
348 | + </div> | ||
349 | + | ||
350 | + </div> | ||
351 | + <div class="col-sm-6"> | ||
352 | + | ||
353 | + <?= $form->field($model, 'declaration') | ||
354 | + ->textInput([ 'readonly' => !$permissions->checkAttr('declaration') ]) ?> | ||
355 | + | ||
356 | + <?= $form->field($model, 'stock') | ||
357 | + ->textInput([ 'readonly' => !$permissions->checkAttr('stock') ]) ?> | ||
358 | + | ||
359 | + <?= $form->field($model, 'consignment') | ||
360 | + ->textInput([ 'readonly' => !$permissions->checkAttr('consignment') ]) ?> | ||
361 | + | ||
362 | + <?= $form->field($model, 'payment') | ||
363 | + ->dropDownList( | ||
364 | + ArrayHelper::map( | ||
365 | + OrderPayment::find() | ||
366 | + ->where([ 'status' => OrderPayment::ACTIVE ]) | ||
367 | + ->asArray() | ||
368 | + ->all(), | ||
369 | + 'id', | ||
370 | + 'short' | ||
371 | + ), | ||
372 | + [ | ||
373 | + 'prompt' => 'Способ оплаты ...', | ||
374 | + 'disabled' => ( $model->payment == 10 || !$permissions->checkAttr( | ||
375 | + 'payment' | ||
376 | + ) ) ? 'disabled' : false, | ||
377 | + ] | ||
378 | + ); ?> | ||
379 | + | ||
380 | + <?= $form->field($model, 'insurance') | ||
381 | + ->textInput([ 'readonly' => !$permissions->checkAttr('insurance') ]) ?> | ||
382 | + | ||
383 | + <?= $form->field($model, 'amount_imposed') | ||
384 | + ->textInput([ 'readonly' => !$permissions->checkAttr('amount_imposed') ]) ?> | ||
385 | + | ||
386 | + <?= $form->field($model, 'shipping_by') | ||
387 | + ->dropDownList( | ||
388 | + ArrayHelper::getColumn(Order::SHIPPING_BY, 'label'), | ||
389 | + [ | ||
390 | + 'prompt' => 'Оплата доставки ...', | ||
391 | + 'disabled' => !$permissions->checkAttr('shipping_by'), | ||
392 | + ] | ||
393 | + ); ?> | ||
394 | + | ||
395 | + <?= $form->field($model, 'city') | ||
396 | + ->textInput([ 'readonly' => !$permissions->checkAttr('city') ]) ?> | ||
397 | + | ||
398 | + <?= $form->field($model, 'adress') | ||
399 | + ->textInput([ 'readonly' => !$permissions->checkAttr('adress') ]) ?> | ||
400 | + | ||
401 | + <?= $form->field($model, 'body') | ||
402 | + ->textarea( | ||
403 | + [ | ||
404 | + 'rows' => '3', | ||
405 | + 'readonly' => !$permissions->checkAttr('body'), | ||
406 | + ] | ||
407 | + ) ?> | ||
408 | + | ||
409 | + <?= $form->field($model, 'check') | ||
410 | + ->textInput([ 'readonly' => !$permissions->checkAttr('check') ]) ?> | ||
411 | + | ||
412 | + <?= $form->field($model, 'sms') | ||
413 | + ->textInput([ 'readonly' => !$permissions->checkAttr('sms') ]) ?> | ||
414 | + | ||
415 | + <?= $form->field($model, 'delivery_cost') | ||
416 | + ->textInput([ 'readonly' => !$permissions->checkAttr('delivery_cost') ]) ?> | ||
417 | + | ||
329 | </div> | 418 | </div> |
330 | </div> | 419 | </div> |
331 | 420 | ||
332 | - </div> | ||
333 | - <div class="col-sm-6"> | ||
334 | - | ||
335 | - <?= $form->field($model, 'declaration') ?> | ||
336 | - | ||
337 | - <?= $form->field($model, 'stock') ?> | ||
338 | - | ||
339 | - <?= $form->field($model, 'consignment') ?> | ||
340 | - | ||
341 | - <?= $form->field($model, 'payment') | ||
342 | - ->dropDownList( | ||
343 | - ArrayHelper::map( | ||
344 | - OrderPayment::find() | ||
345 | - ->where([ 'status' => OrderPayment::ACTIVE ]) | ||
346 | - ->asArray() | ||
347 | - ->all(), | ||
348 | - 'id', | ||
349 | - 'short' | ||
350 | - ), | ||
351 | - [ | ||
352 | - 'prompt' => 'Способ оплаты ...', | ||
353 | - 'disabled' => $model->payment == 10 ? 'disabled' : false, | ||
354 | - ] | ||
355 | - ); ?> | ||
356 | - | ||
357 | - <?= $form->field($model, 'insurance') ?> | ||
358 | - | ||
359 | - <?= $form->field($model, 'amount_imposed') ?> | ||
360 | - | ||
361 | - <?= $form->field($model, 'shipping_by') | ||
362 | - ->dropDownList( | ||
363 | - ArrayHelper::getColumn(Order::SHIPPING_BY, 'label'), | ||
364 | - [ 'prompt' => 'Оплата доставки ...' ] | ||
365 | - ); ?> | ||
366 | - | ||
367 | - <?= $form->field($model, 'city') ?> | ||
368 | - | ||
369 | - <?= $form->field($model, 'adress') ?> | ||
370 | - | ||
371 | - <?= $form->field($model, 'body') | ||
372 | - ->textarea([ 'rows' => '3' ]) ?> | ||
373 | - | ||
374 | - <?= $form->field($model, 'check') ?> | ||
375 | - | ||
376 | - <?= $form->field($model, 'sms') ?> | ||
377 | - | ||
378 | - <?= $form->field($model, 'delivery_cost') ?> | ||
379 | 421 | ||
380 | </div> | 422 | </div> |
381 | </div> | 423 | </div> |
382 | 424 | ||
383 | - | ||
384 | - | ||
385 | - </div> | ||
386 | -</div> | ||
387 | - | ||
388 | </div><!-- /.box-body --> | 425 | </div><!-- /.box-body --> |
389 | </div><!-- /.box --> | 426 | </div><!-- /.box --> |
390 | 427 | ||
@@ -401,242 +438,247 @@ JS; | @@ -401,242 +438,247 @@ JS; | ||
401 | </div> | 438 | </div> |
402 | <div class="box-body"> | 439 | <div class="box-body"> |
403 | 440 | ||
404 | -<div class="container"> | ||
405 | - <div class="row"> | ||
406 | - <?php | ||
407 | - echo GridView::widget( | ||
408 | - [ | ||
409 | - 'dataProvider' => $dataProvider, | ||
410 | - 'rowOptions' => function ($model) { | ||
411 | - if ($model->removed) { | ||
412 | - return [ 'class' => 'danger' ]; | ||
413 | - } else { | ||
414 | - return []; | ||
415 | - } | ||
416 | - }, | ||
417 | - 'layout' => '{items}{pager}', | ||
418 | - 'columns' => [ | ||
419 | - [ | ||
420 | - 'class' => SerialColumn::className(), | ||
421 | - ], | ||
422 | - 'sku', | ||
423 | - [ | ||
424 | - 'attribute' => 'product_name', | ||
425 | - 'content' => function ($model) { | ||
426 | - if (!empty( $model->product_name )) { | ||
427 | - | ||
428 | - if (empty( $model->productVariant )) { | ||
429 | - return ''; | ||
430 | - } | ||
431 | - | ||
432 | - return Html::a( | ||
433 | - StringHelper::truncate($model->product_name, 10, '...'), | ||
434 | - '#', | ||
435 | - [ | ||
436 | - 'onclick' => 'event.preventDefault();', | ||
437 | - 'data-toggle' => 'popover', | ||
438 | - 'data-placement' => 'right', | ||
439 | - 'data-html' => 'true', | ||
440 | - 'data-content' => Html::img( | ||
441 | - $model->productVariant->imageUrl, | ||
442 | - [ | ||
443 | - 'class' => 'img-rounded', | ||
444 | - ] | ||
445 | - ) . Html::tag('p', $model->product_name), | ||
446 | - ] | ||
447 | - ); | ||
448 | - } else { | ||
449 | - return ''; | ||
450 | - } | ||
451 | - }, | ||
452 | - ], | ||
453 | - [ | ||
454 | - 'attribute' => 'productVariant.product.brand.lang.title', | ||
455 | - 'label' => 'Брэнд', | ||
456 | - ], | ||
457 | - [ | ||
458 | - 'attribute' => 'productVariant.lang.title', | ||
459 | - 'label' => \Yii::t('app', 'Цвет'), | ||
460 | - 'content' => function ($model) { | ||
461 | - | ||
462 | - if (empty( $model->productVariant )) { | ||
463 | - return ''; | ||
464 | - } | ||
465 | - | ||
466 | - if (preg_match('@.*\.(png|jpg|gif)@i', $model->productVariant->lang->title)) { | ||
467 | - return ''; | ||
468 | - } else { | ||
469 | - return $model->productVariant->lang->title; | ||
470 | - } | ||
471 | - }, | ||
472 | - ], | ||
473 | - [ | ||
474 | - 'attribute' => 'productVariant.size', | ||
475 | - 'label' => 'Размер', | ||
476 | - ], | ||
477 | - 'price', | ||
478 | - [ | ||
479 | - 'class' => 'kartik\grid\EditableColumn', | ||
480 | - 'attribute' => 'count', | ||
481 | - 'editableOptions' => [ | ||
482 | - 'header' => \Yii::t('app', 'Количество'), | ||
483 | - 'inputType' => kartik\editable\Editable::INPUT_SPIN, | ||
484 | - 'options' => [ | ||
485 | - 'pluginOptions' => [ | ||
486 | - 'min' => 0, | ||
487 | - 'max' => 5000, | ||
488 | - ], | ||
489 | - ], | ||
490 | - 'pluginEvents' => [ | ||
491 | - 'editableSuccess' => 'function(event) { $.pjax.reload({container:"#order-products-grid"}); }', | ||
492 | - ], | ||
493 | - ], | ||
494 | - 'format' => [ | ||
495 | - 'decimal', | ||
496 | - 0, | ||
497 | - ], | ||
498 | - 'pageSummary' => false, | ||
499 | - ], | ||
500 | - 'sum_cost', | ||
501 | - [ | ||
502 | - 'class' => 'kartik\grid\EditableColumn', | ||
503 | - 'attribute' => 'booking', | ||
504 | - 'editableOptions' => [ | ||
505 | - 'header' => \Yii::t('app', 'Бронь'), | ||
506 | - 'inputType' => kartik\editable\Editable::INPUT_TEXT, | ||
507 | - 'options' => [ | ||
508 | - 'class' => 'booking-typeahead', | ||
509 | - 'pluginOptions' => [ | ||
510 | - 'min' => 0, | ||
511 | - 'max' => 20, | ||
512 | - ], | ||
513 | - ], | ||
514 | - 'pluginEvents' => [ | ||
515 | - 'editableSuccess' => 'function(event) { $.pjax.reload({container:"#order-products-grid"}); }', | ||
516 | - ], | ||
517 | - ], | ||
518 | - 'format' => [ | ||
519 | - 'text', | ||
520 | - ], | ||
521 | - 'pageSummary' => false, | ||
522 | - ], | ||
523 | - [ | ||
524 | - 'class' => 'kartik\grid\EditableColumn', | ||
525 | - 'attribute' => 'status', | ||
526 | - 'editableOptions' => [ | ||
527 | - 'header' => \Yii::t('app', 'Статус'), | ||
528 | - 'inputType' => kartik\editable\Editable::INPUT_TEXT, | ||
529 | - 'options' => [ | ||
530 | - 'class' => 'status-typeahead', | ||
531 | - 'pluginOptions' => [ | ||
532 | - 'min' => 0, | ||
533 | - 'max' => 20, | ||
534 | - ], | ||
535 | - ], | ||
536 | - 'pluginEvents' => [ | ||
537 | - 'editableSuccess' => 'function(event) { $.pjax.reload({container:"#order-products-grid"}); }', | ||
538 | - ], | ||
539 | - ], | ||
540 | - 'format' => [ | ||
541 | - 'text', | ||
542 | - ], | ||
543 | - 'pageSummary' => false, | ||
544 | - ], | ||
545 | - [ | ||
546 | - 'class' => 'kartik\grid\EditableColumn', | ||
547 | - 'attribute' => 'return', | ||
548 | - 'editableOptions' => [ | ||
549 | - 'header' => \Yii::t('app', 'Возврат'), | ||
550 | - 'inputType' => kartik\editable\Editable::INPUT_CHECKBOX, | ||
551 | - 'options' => [], | ||
552 | - 'pluginEvents' => [ | ||
553 | - 'editableSuccess' => 'function(event) { $.pjax.reload({container:"#order-products-grid"}); }', | ||
554 | - ], | ||
555 | - ], | ||
556 | - 'format' => [ | ||
557 | - 'boolean', | ||
558 | - ], | ||
559 | - 'pageSummary' => false, | ||
560 | - ], | ||
561 | - [ | ||
562 | - 'content' => function ($model) { | ||
563 | - | ||
564 | - if (empty( $model->productVariant )) { | ||
565 | - return '<i class="glyphicon glyphicon-remove"></i>'; | ||
566 | - } | ||
567 | - | ||
568 | - $content = '<table class="table"><tbody><tr><th>Склад</th><th>кол.</th></tr>'; | ||
569 | - foreach ($model->productVariant->variantStocks as $stock) { | ||
570 | - $content .= '<tr><td>' . $stock->stock->title . '</td><td>' . $stock->quantity . '</td></tr>'; | ||
571 | - } | ||
572 | - return Html::a( | ||
573 | - '<i class="glyphicon glyphicon-home"></i>', | ||
574 | - '#', | ||
575 | - [ | ||
576 | - 'onclick' => 'event.preventDefault();', | ||
577 | - 'data-toggle' => 'popover', | ||
578 | - 'data-placement' => 'left', | ||
579 | - 'data-html' => 'true', | ||
580 | - 'data-content' => $content . '</tbody></table>', | ||
581 | - ] | ||
582 | - ); | ||
583 | - }, | ||
584 | - ], | ||
585 | - [ | ||
586 | - 'class' => 'yii\grid\ActionColumn', | ||
587 | - 'template' => '{delete}', | ||
588 | - 'buttons' => [ | ||
589 | - 'delete' => function ($url, $product) { | ||
590 | - if ($product->removed) { | ||
591 | - return ''; | ||
592 | - } else { | ||
593 | - return Html::a( | ||
594 | - Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-trash' ]), | ||
595 | - [ | ||
596 | - 'delete-product', | ||
597 | - 'id' => $product->id, | ||
598 | - ], | ||
599 | - [ | ||
600 | - 'class' => 'delete-button', | ||
601 | - ] | ||
602 | - ); | ||
603 | - } | ||
604 | - }, | ||
605 | - ], | ||
606 | - ], | ||
607 | - ], | ||
608 | - 'responsive' => true, | ||
609 | - 'hover' => true, | ||
610 | - 'pjax' => true, | ||
611 | - 'pjaxSettings' => [ | ||
612 | - 'options' => [ | ||
613 | - 'scrollTo' => 'false', | ||
614 | - 'id' => 'order-products-grid', | ||
615 | - ], | ||
616 | - ], | ||
617 | - ] | ||
618 | - ); | ||
619 | - ?> | 441 | + <div class="container"> |
442 | + <div class="row"> | ||
443 | + <?php | ||
444 | + echo GridView::widget( | ||
445 | + [ | ||
446 | + 'dataProvider' => $dataProvider, | ||
447 | + 'rowOptions' => function($model) { | ||
448 | + if ($model->removed) { | ||
449 | + return [ 'class' => 'danger' ]; | ||
450 | + } else { | ||
451 | + return []; | ||
452 | + } | ||
453 | + }, | ||
454 | + 'layout' => '{items}{pager}', | ||
455 | + 'columns' => [ | ||
456 | + [ | ||
457 | + 'class' => SerialColumn::className(), | ||
458 | + ], | ||
459 | + 'sku', | ||
460 | + [ | ||
461 | + 'attribute' => 'product_name', | ||
462 | + 'content' => function($model) { | ||
463 | + if (!empty($model->product_name)) { | ||
464 | + | ||
465 | + if (empty($model->productVariant)) { | ||
466 | + return ''; | ||
467 | + } | ||
468 | + | ||
469 | + return Html::a( | ||
470 | + StringHelper::truncate($model->product_name, 10, '...'), | ||
471 | + '#', | ||
472 | + [ | ||
473 | + 'onclick' => 'event.preventDefault();', | ||
474 | + 'data-toggle' => 'popover', | ||
475 | + 'data-placement' => 'right', | ||
476 | + 'data-html' => 'true', | ||
477 | + 'data-content' => Html::img( | ||
478 | + $model->productVariant->imageUrl, | ||
479 | + [ | ||
480 | + 'class' => 'img-rounded', | ||
481 | + ] | ||
482 | + ) . Html::tag('p', $model->product_name), | ||
483 | + ] | ||
484 | + ); | ||
485 | + } else { | ||
486 | + return ''; | ||
487 | + } | ||
488 | + }, | ||
489 | + ], | ||
490 | + [ | ||
491 | + 'attribute' => 'productVariant.product.brand.lang.title', | ||
492 | + 'label' => 'Брэнд', | ||
493 | + ], | ||
494 | + [ | ||
495 | + 'attribute' => 'productVariant.lang.title', | ||
496 | + 'label' => \Yii::t('app', 'Цвет'), | ||
497 | + 'content' => function($model) { | ||
498 | + | ||
499 | + if (empty($model->productVariant)) { | ||
500 | + return ''; | ||
501 | + } | ||
502 | + | ||
503 | + if (preg_match('@.*\.(png|jpg|gif)@i', $model->productVariant->lang->title)) { | ||
504 | + return ''; | ||
505 | + } else { | ||
506 | + return $model->productVariant->lang->title; | ||
507 | + } | ||
508 | + }, | ||
509 | + ], | ||
510 | + [ | ||
511 | + 'attribute' => 'productVariant.size', | ||
512 | + 'label' => 'Размер', | ||
513 | + ], | ||
514 | + 'price', | ||
515 | + [ | ||
516 | + 'class' => 'kartik\grid\EditableColumn', | ||
517 | + 'attribute' => 'count', | ||
518 | + 'editableOptions' => [ | ||
519 | + 'header' => \Yii::t('app', 'Количество'), | ||
520 | + 'inputType' => kartik\editable\Editable::INPUT_SPIN, | ||
521 | + 'options' => [ | ||
522 | + 'pluginOptions' => [ | ||
523 | + 'min' => 0, | ||
524 | + 'max' => 5000, | ||
525 | + ], | ||
526 | + 'disabled' => !$permissions->checkAttr('product_count'), | ||
527 | + ], | ||
528 | + 'pluginEvents' => [ | ||
529 | + 'editableSuccess' => 'function(event) { $.pjax.reload({container:"#order-products-grid"}); }', | ||
530 | + ], | ||
531 | + ], | ||
532 | + 'format' => [ | ||
533 | + 'decimal', | ||
534 | + 0, | ||
535 | + ], | ||
536 | + 'pageSummary' => false, | ||
537 | + ], | ||
538 | + 'sum_cost', | ||
539 | + [ | ||
540 | + 'class' => 'kartik\grid\EditableColumn', | ||
541 | + 'attribute' => 'booking', | ||
542 | + 'editableOptions' => [ | ||
543 | + 'header' => \Yii::t('app', 'Бронь'), | ||
544 | + 'inputType' => kartik\editable\Editable::INPUT_TEXT, | ||
545 | + 'options' => [ | ||
546 | + 'class' => 'booking-typeahead', | ||
547 | + 'pluginOptions' => [ | ||
548 | + 'min' => 0, | ||
549 | + 'max' => 20, | ||
550 | + ], | ||
551 | + 'disabled' => !$permissions->checkAttr('product_booking'), | ||
552 | + ], | ||
553 | + 'pluginEvents' => [ | ||
554 | + 'editableSuccess' => 'function(event) { $.pjax.reload({container:"#order-products-grid"}); }', | ||
555 | + ], | ||
556 | + ], | ||
557 | + 'format' => [ | ||
558 | + 'text', | ||
559 | + ], | ||
560 | + 'pageSummary' => false, | ||
561 | + ], | ||
562 | + [ | ||
563 | + 'class' => 'kartik\grid\EditableColumn', | ||
564 | + 'attribute' => 'status', | ||
565 | + 'editableOptions' => [ | ||
566 | + 'header' => \Yii::t('app', 'Статус'), | ||
567 | + 'inputType' => kartik\editable\Editable::INPUT_TEXT, | ||
568 | + 'options' => [ | ||
569 | + 'class' => 'status-typeahead', | ||
570 | + 'pluginOptions' => [ | ||
571 | + 'min' => 0, | ||
572 | + 'max' => 20, | ||
573 | + ], | ||
574 | + 'disabled' => !$permissions->checkAttr('product_status'), | ||
575 | + ], | ||
576 | + 'pluginEvents' => [ | ||
577 | + 'editableSuccess' => 'function(event) { $.pjax.reload({container:"#order-products-grid"}); }', | ||
578 | + ], | ||
579 | + ], | ||
580 | + 'format' => [ | ||
581 | + 'text', | ||
582 | + ], | ||
583 | + 'pageSummary' => false, | ||
584 | + ], | ||
585 | + [ | ||
586 | + 'class' => 'kartik\grid\EditableColumn', | ||
587 | + 'attribute' => 'return', | ||
588 | + 'editableOptions' => [ | ||
589 | + 'header' => \Yii::t('app', 'Возврат'), | ||
590 | + 'inputType' => kartik\editable\Editable::INPUT_CHECKBOX, | ||
591 | + 'options' => [ | ||
592 | + 'disabled' => !$permissions->checkAttr('product_return'), | ||
593 | + ], | ||
594 | + 'pluginEvents' => [ | ||
595 | + 'editableSuccess' => 'function(event) { $.pjax.reload({container:"#order-products-grid"}); }', | ||
596 | + ], | ||
597 | + ], | ||
598 | + 'format' => [ | ||
599 | + 'boolean', | ||
600 | + ], | ||
601 | + 'pageSummary' => false, | ||
602 | + ], | ||
603 | + [ | ||
604 | + 'content' => function($model) { | ||
605 | + | ||
606 | + if (empty($model->productVariant)) { | ||
607 | + return '<i class="glyphicon glyphicon-remove"></i>'; | ||
608 | + } | ||
609 | + | ||
610 | + $content = '<table class="table"><tbody><tr><th>Склад</th><th>кол.</th></tr>'; | ||
611 | + foreach ($model->productVariant->variantStocks as $stock) { | ||
612 | + $content .= '<tr><td>' . $stock->stock->title . '</td><td>' . $stock->quantity . '</td></tr>'; | ||
613 | + } | ||
614 | + return Html::a( | ||
615 | + '<i class="glyphicon glyphicon-home"></i>', | ||
616 | + '#', | ||
617 | + [ | ||
618 | + 'onclick' => 'event.preventDefault();', | ||
619 | + 'data-toggle' => 'popover', | ||
620 | + 'data-placement' => 'left', | ||
621 | + 'data-html' => 'true', | ||
622 | + 'data-content' => $content . '</tbody></table>', | ||
623 | + ] | ||
624 | + ); | ||
625 | + }, | ||
626 | + ], | ||
627 | + [ | ||
628 | + 'class' => 'yii\grid\ActionColumn', | ||
629 | + 'template' => '{delete}', | ||
630 | + 'buttons' => [ | ||
631 | + 'delete' => function($url, $product) use ($permissions) { | ||
632 | + if ($product->removed || !$permissions->checkAttr('delete_product')) { | ||
633 | + return ''; | ||
634 | + } else { | ||
635 | + return Html::a( | ||
636 | + Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-trash' ]), | ||
637 | + [ | ||
638 | + 'delete-product', | ||
639 | + 'id' => $product->id, | ||
640 | + ], | ||
641 | + [ | ||
642 | + 'class' => 'delete-button', | ||
643 | + ] | ||
644 | + ); | ||
645 | + } | ||
646 | + }, | ||
647 | + ], | ||
648 | + ], | ||
649 | + ], | ||
650 | + 'responsive' => true, | ||
651 | + 'hover' => true, | ||
652 | + 'pjax' => true, | ||
653 | + 'pjaxSettings' => [ | ||
654 | + 'options' => [ | ||
655 | + 'scrollTo' => 'false', | ||
656 | + 'id' => 'order-products-grid', | ||
657 | + ], | ||
658 | + ], | ||
659 | + ] | ||
660 | + ); | ||
661 | + ?> | ||
662 | + </div> | ||
620 | </div> | 663 | </div> |
621 | -</div> | ||
622 | -<div class="container"> | ||
623 | - <?php Pjax::begin([ 'id' => 'total-cost' ]); ?> | ||
624 | - <h2>Сумма заказа : <span class="label label-success"><?php echo $model->total; ?><?php echo \Yii::t( | ||
625 | - 'app', | ||
626 | - 'грн' | ||
627 | - ) ?></span></h2> | ||
628 | - <?php Pjax::end(); ?> | ||
629 | -</div> | ||
630 | -<div class="container"> | ||
631 | - <div class="row"> | ||
632 | - <?php $newProductForm = ActiveForm::begin( | ||
633 | - [ | ||
634 | - 'action' => yii\helpers\Url::to([ 'add' ]), | ||
635 | - 'id' => 'add-product-form', | ||
636 | - ] | ||
637 | - ); | ||
638 | - $newOrderProduct = new OrderProduct(); | ||
639 | - ?> | 664 | + <div class="container"> |
665 | + <?php Pjax::begin([ 'id' => 'total-cost' ]); ?> | ||
666 | + <h2>Сумма заказа : <span class="label label-success"><?php echo $model->total; ?><?php echo \Yii::t( | ||
667 | + 'app', | ||
668 | + 'грн' | ||
669 | + ) ?></span></h2> | ||
670 | + <?php Pjax::end(); ?> | ||
671 | + </div> | ||
672 | + <div class="container"> | ||
673 | + <div class="row"> | ||
674 | + <?php $newProductForm = ActiveForm::begin( | ||
675 | + [ | ||
676 | + 'action' => yii\helpers\Url::to([ 'add' ]), | ||
677 | + 'id' => 'add-product-form', | ||
678 | + ] | ||
679 | + ); | ||
680 | + $newOrderProduct = new OrderProduct(); | ||
681 | + ?> | ||
640 | <div class="col-md-8"> | 682 | <div class="col-md-8"> |
641 | <?php echo $newProductForm->field($newOrderProduct, 'id') | 683 | <?php echo $newProductForm->field($newOrderProduct, 'id') |
642 | ->widget( | 684 | ->widget( |
@@ -691,64 +733,65 @@ JS; | @@ -691,64 +733,65 @@ JS; | ||
691 | <?php echo Html::submitButton( | 733 | <?php echo Html::submitButton( |
692 | \Yii::t('app', 'Добавить'), | 734 | \Yii::t('app', 'Добавить'), |
693 | [ | 735 | [ |
694 | - 'class' => $model->isNewRecord ? 'btn btn-primary disabled' : 'btn btn-primary', | 736 | + 'class' => ( $model->isNewRecord || !$permissions->checkAttr( |
737 | + 'add_product' | ||
738 | + ) ) ? 'btn btn-primary disabled' : 'btn btn-primary', | ||
695 | ] | 739 | ] |
696 | ) ?> | 740 | ) ?> |
697 | </div> | 741 | </div> |
698 | - <?php echo $newProductForm->field($newOrderProduct, 'order_id') | ||
699 | - ->hiddenInput( | ||
700 | - [ | ||
701 | - 'value' => $model->id, | ||
702 | - ] | ||
703 | - ) | ||
704 | - ->label(false) ?> | ||
705 | - <?php ActiveForm::end(); ?> | ||
706 | - </div> | ||
707 | - | 742 | + <?php echo $newProductForm->field($newOrderProduct, 'order_id') |
743 | + ->hiddenInput( | ||
744 | + [ | ||
745 | + 'value' => $model->id, | ||
746 | + ] | ||
747 | + ) | ||
748 | + ->label(false) ?> | ||
749 | + <?php ActiveForm::end(); ?> | ||
750 | + </div> | ||
708 | 751 | ||
709 | 752 | ||
710 | -</div> | 753 | + </div> |
711 | 754 | ||
712 | </div><!-- /.box-body --> | 755 | </div><!-- /.box-body --> |
713 | </div><!-- /.box --> | 756 | </div><!-- /.box --> |
714 | - | ||
715 | - | ||
716 | - <br> | 757 | + |
758 | + | ||
759 | +<br> | ||
717 | <div class="container"> | 760 | <div class="container"> |
718 | - <div class="row"> | ||
719 | - <?= Html::button( | ||
720 | - $model->isNewRecord ? \Yii::t('app', 'Создать') : \Yii::t('app', 'Сохранить'), | ||
721 | - [ | ||
722 | - 'class' => $model->isNewRecord ? 'btn btn-success btn-lg' : 'btn btn-primary btn-lg', | ||
723 | - 'id' => 'page-submit', | ||
724 | - ] | ||
725 | - ) ?> | ||
726 | - <?= Html::a( | ||
727 | - \Yii::t('app', 'Печать'), | ||
728 | - yii\helpers\Url::to( | ||
729 | - [ | ||
730 | - 'order/print', | ||
731 | - 'order_id' => $model->id, | ||
732 | - ] | ||
733 | - ), | ||
734 | - [ | ||
735 | - 'class' => $model->isNewRecord ? 'btn btn-info disabled btn-lg' : 'btn btn-info btn-lg', | ||
736 | - 'target' => '_blank', | ||
737 | - ] | ||
738 | - ) ?> | ||
739 | - <?= Html::a( | ||
740 | - \Yii::t('app', 'Выйти'), | ||
741 | - yii\helpers\Url::to( | ||
742 | - [ | ||
743 | - 'close-order', | ||
744 | - 'id' => $model->id, | ||
745 | - ] | ||
746 | - ), | ||
747 | - [ | ||
748 | - 'class' => $model->isNewRecord ? 'btn btn-info disabled btn-lg' : 'btn btn-info btn-lg', | ||
749 | - ] | ||
750 | - ) ?> | ||
751 | - </div> | 761 | + <div class="row"> |
762 | + <?= Html::button( | ||
763 | + $model->isNewRecord ? \Yii::t('app', 'Создать') : \Yii::t('app', 'Сохранить'), | ||
764 | + [ | ||
765 | + 'class' => $model->isNewRecord ? 'btn btn-success btn-lg' : 'btn btn-primary btn-lg', | ||
766 | + 'id' => 'page-submit', | ||
767 | + ] | ||
768 | + ) ?> | ||
769 | + <?= Html::a( | ||
770 | + \Yii::t('app', 'Печать'), | ||
771 | + yii\helpers\Url::to( | ||
772 | + [ | ||
773 | + 'order/print', | ||
774 | + 'order_id' => $model->id, | ||
775 | + ] | ||
776 | + ), | ||
777 | + [ | ||
778 | + 'class' => $model->isNewRecord ? 'btn btn-info disabled btn-lg' : 'btn btn-info btn-lg', | ||
779 | + 'target' => '_blank', | ||
780 | + ] | ||
781 | + ) ?> | ||
782 | + <?= Html::a( | ||
783 | + \Yii::t('app', 'Выйти'), | ||
784 | + yii\helpers\Url::to( | ||
785 | + [ | ||
786 | + 'close-order', | ||
787 | + 'id' => $model->id, | ||
788 | + ] | ||
789 | + ), | ||
790 | + [ | ||
791 | + 'class' => $model->isNewRecord ? 'btn btn-info disabled btn-lg' : 'btn btn-info btn-lg', | ||
792 | + ] | ||
793 | + ) ?> | ||
794 | + </div> | ||
752 | </div> | 795 | </div> |
753 | <br> | 796 | <br> |
754 | <br> | 797 | <br> |
views/order/index.php
@@ -3,6 +3,8 @@ | @@ -3,6 +3,8 @@ | ||
3 | * @var ActiveDataProvider $dataProvider | 3 | * @var ActiveDataProvider $dataProvider |
4 | * @var OrderSearch $searchModel | 4 | * @var OrderSearch $searchModel |
5 | * @var View $this | 5 | * @var View $this |
6 | + * @var array $allowedLabels | ||
7 | + * @var boolean $canCreate | ||
6 | */ | 8 | */ |
7 | 9 | ||
8 | use artweb\artbox\ecommerce\models\Delivery; | 10 | use artweb\artbox\ecommerce\models\Delivery; |
@@ -37,7 +39,10 @@ JS; | @@ -37,7 +39,10 @@ JS; | ||
37 | ?> | 39 | ?> |
38 | <h1>Заказы</h1> | 40 | <h1>Заказы</h1> |
39 | <p> | 41 | <p> |
40 | - <?= Html::a(\Yii::t('app', 'Добавить заказ'), [ 'create' ], [ 'class' => 'btn btn-success btn-lg' ]) ?> | 42 | + <?= Html::a(\Yii::t('app', 'Добавить заказ'), [ 'create' ], [ |
43 | + 'class' => $canCreate ? 'btn btn-success btn-lg' : 'btn btn-success btn-lg disabled', | ||
44 | + | ||
45 | + ]) ?> | ||
41 | </p> | 46 | </p> |
42 | <?php Pjax::begin(); ?> | 47 | <?php Pjax::begin(); ?> |
43 | <?php | 48 | <?php |
@@ -51,19 +56,19 @@ JS; | @@ -51,19 +56,19 @@ JS; | ||
51 | ?> | 56 | ?> |
52 | 57 | ||
53 | 58 | ||
54 | - | ||
55 | - | 59 | + |
60 | + | ||
56 | 61 | ||
57 | <?php | 62 | <?php |
58 | -// echo Html::button(\Yii::t('app', 'Скрыть/Показать'), [ | ||
59 | -// 'data-toggle' => 'collapse', | ||
60 | -// 'data-target' => '#search-fields', | ||
61 | -// 'class' => 'btn btn-default' | ||
62 | -//]); | ||
63 | -//?> | 63 | + // echo Html::button(\Yii::t('app', 'Скрыть/Показать'), [ |
64 | + // 'data-toggle' => 'collapse', | ||
65 | + // 'data-target' => '#search-fields', | ||
66 | + // 'class' => 'btn btn-default' | ||
67 | + //]); | ||
68 | + //?> | ||
64 | <div class="box box-primary"> | 69 | <div class="box box-primary"> |
65 | <div class="box-header with-border"> | 70 | <div class="box-header with-border"> |
66 | -<!-- <h3 class="box-title"></h3>--> | 71 | + <!-- <h3 class="box-title"></h3>--> |
67 | <?php echo Html::submitButton( | 72 | <?php echo Html::submitButton( |
68 | \Yii::t('app', 'Искать'), | 73 | \Yii::t('app', 'Искать'), |
69 | [ | 74 | [ |
@@ -74,126 +79,127 @@ JS; | @@ -74,126 +79,127 @@ JS; | ||
74 | <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button> | 79 | <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button> |
75 | </div> | 80 | </div> |
76 | </div> | 81 | </div> |
77 | - | ||
78 | -<div class="row box-body" id="search-fields"> | ||
79 | - <div class="col-md-4"> | ||
80 | - <?php | ||
81 | - echo $searchForm->field($searchModel, 'label') | ||
82 | - ->widget( | ||
83 | - Select2::className(), | ||
84 | - [ | ||
85 | - 'data' => Label::find() | ||
86 | - ->joinWith('lang') | ||
87 | - ->select( | ||
88 | - [ | ||
89 | - 'CONCAT(order_label.label,order_label_lang.title) AS name', | ||
90 | - 'id', | ||
91 | - ] | ||
92 | - ) | ||
93 | - ->indexBy('id') | ||
94 | - ->asArray() | ||
95 | - ->column(), | ||
96 | - 'options' => [ 'placeholder' => 'Выберите метки ...' ], | ||
97 | - 'pluginOptions' => [ | ||
98 | - 'allowClear' => true, | ||
99 | - 'multiple' => true, | ||
100 | - ], | ||
101 | - ] | ||
102 | - ); | ||
103 | - ?> | ||
104 | - <?php | ||
105 | - echo $searchForm->field($searchModel, 'delivery') | ||
106 | - ->widget( | ||
107 | - Select2::className(), | ||
108 | - [ | ||
109 | - 'data' => Delivery::find() | ||
110 | - ->joinWith('lang') | ||
111 | - ->select('order_delivery_lang.title, id') | ||
112 | - ->indexBy('id') | ||
113 | - ->asArray() | ||
114 | - ->column(), | ||
115 | - 'options' => [ 'placeholder' => 'Выберите способ доставки ...' ], | ||
116 | - 'pluginOptions' => [ | ||
117 | - 'allowClear' => true, | ||
118 | - 'multiple' => true, | ||
119 | - ], | ||
120 | - ] | ||
121 | - ); | ||
122 | - ?> | ||
123 | - | ||
124 | - <?php | ||
125 | - $query = new JsExpression( | ||
126 | - 'function(params) { return {q:params.term}; }' | ||
127 | - ); | ||
128 | - echo $searchForm->field($searchModel, 'sku') | ||
129 | - ->widget( | ||
130 | - Select2::className(), | ||
131 | - [ | ||
132 | - 'options' => [ 'placeholder' => 'Search for a product ...' ], | ||
133 | - 'pluginOptions' => [ | ||
134 | - 'allowClear' => true, | ||
135 | - 'minimumInputLength' => 3, | ||
136 | - 'language' => [ | ||
137 | - 'errorLoading' => new JsExpression( | ||
138 | - "function () { return 'Waiting for results...'; }" | ||
139 | - ), | ||
140 | - ], | ||
141 | - 'ajax' => [ | ||
142 | - 'url' => \yii\helpers\Url::to([ 'find-product' ]), | ||
143 | - 'dataType' => 'json', | ||
144 | - 'data' => $query, | ||
145 | - ], | ||
146 | - 'escapeMarkup' => new JsExpression( | ||
147 | - 'function (markup) { return markup; }' | ||
148 | - ), | ||
149 | - 'templateResult' => new JsExpression( | ||
150 | - 'function(data) { return data.sku; }' | ||
151 | - ), | ||
152 | - 'templateSelection' => new JsExpression( | ||
153 | - 'function (data) { | 82 | + |
83 | + <div class="row box-body" id="search-fields"> | ||
84 | + <div class="col-md-4"> | ||
85 | + <?php | ||
86 | + echo $searchForm->field($searchModel, 'label') | ||
87 | + ->widget( | ||
88 | + Select2::className(), | ||
89 | + [ | ||
90 | + 'data' => Label::find() | ||
91 | + ->joinWith('lang') | ||
92 | + ->select( | ||
93 | + [ | ||
94 | + 'CONCAT(order_label.label,order_label_lang.title) AS name', | ||
95 | + 'id', | ||
96 | + ] | ||
97 | + ) | ||
98 | + ->filterWhere([ 'id' => $allowedLabels ]) | ||
99 | + ->indexBy('id') | ||
100 | + ->asArray() | ||
101 | + ->column(), | ||
102 | + 'options' => [ 'placeholder' => 'Выберите метки ...' ], | ||
103 | + 'pluginOptions' => [ | ||
104 | + 'allowClear' => true, | ||
105 | + 'multiple' => true, | ||
106 | + ], | ||
107 | + ] | ||
108 | + ); | ||
109 | + ?> | ||
110 | + <?php | ||
111 | + echo $searchForm->field($searchModel, 'delivery') | ||
112 | + ->widget( | ||
113 | + Select2::className(), | ||
114 | + [ | ||
115 | + 'data' => Delivery::find() | ||
116 | + ->joinWith('lang') | ||
117 | + ->select('order_delivery_lang.title, id') | ||
118 | + ->indexBy('id') | ||
119 | + ->asArray() | ||
120 | + ->column(), | ||
121 | + 'options' => [ 'placeholder' => 'Выберите способ доставки ...' ], | ||
122 | + 'pluginOptions' => [ | ||
123 | + 'allowClear' => true, | ||
124 | + 'multiple' => true, | ||
125 | + ], | ||
126 | + ] | ||
127 | + ); | ||
128 | + ?> | ||
129 | + | ||
130 | + <?php | ||
131 | + $query = new JsExpression( | ||
132 | + 'function(params) { return {q:params.term}; }' | ||
133 | + ); | ||
134 | + echo $searchForm->field($searchModel, 'sku') | ||
135 | + ->widget( | ||
136 | + Select2::className(), | ||
137 | + [ | ||
138 | + 'options' => [ 'placeholder' => 'Search for a product ...' ], | ||
139 | + 'pluginOptions' => [ | ||
140 | + 'allowClear' => true, | ||
141 | + 'minimumInputLength' => 3, | ||
142 | + 'language' => [ | ||
143 | + 'errorLoading' => new JsExpression( | ||
144 | + "function () { return 'Waiting for results...'; }" | ||
145 | + ), | ||
146 | + ], | ||
147 | + 'ajax' => [ | ||
148 | + 'url' => \yii\helpers\Url::to([ 'find-product' ]), | ||
149 | + 'dataType' => 'json', | ||
150 | + 'data' => $query, | ||
151 | + ], | ||
152 | + 'escapeMarkup' => new JsExpression( | ||
153 | + 'function (markup) { return markup; }' | ||
154 | + ), | ||
155 | + 'templateResult' => new JsExpression( | ||
156 | + 'function(data) { return data.sku; }' | ||
157 | + ), | ||
158 | + 'templateSelection' => new JsExpression( | ||
159 | + 'function (data) { | ||
154 | if(data.sku == undefined) { | 160 | if(data.sku == undefined) { |
155 | return "sku"; | 161 | return "sku"; |
156 | } else { | 162 | } else { |
157 | return data.sku; | 163 | return data.sku; |
158 | } | 164 | } |
159 | }' | 165 | }' |
160 | - ), | ||
161 | - ], | ||
162 | - ] | ||
163 | - ); | ||
164 | - | ||
165 | - ?> | ||
166 | - </div> | 166 | + ), |
167 | + ], | ||
168 | + ] | ||
169 | + ); | ||
170 | + | ||
171 | + ?> | ||
172 | + </div> | ||
167 | 173 | ||
168 | 174 | ||
169 | - <div class="col-md-4"> | ||
170 | - <?= $searchForm->field($searchModel, 'manager_id') | ||
171 | - ->dropDownList( | ||
172 | - ArrayHelper::map( | ||
173 | - User::find() | ||
174 | - ->asArray() | ||
175 | - ->all(), | ||
176 | - 'id', | ||
177 | - 'username' | ||
178 | - ), | ||
179 | - [ 'prompt' => \Yii::t('app', 'Выберите менеджера ...') ] | ||
180 | - ) ?> | ||
181 | - | ||
182 | - <?= $searchForm->field($searchModel, 'email') | ||
183 | - ->textInput() ?> | 175 | + <div class="col-md-4"> |
176 | + <?= $searchForm->field($searchModel, 'manager_id') | ||
177 | + ->dropDownList( | ||
178 | + ArrayHelper::map( | ||
179 | + User::find() | ||
180 | + ->asArray() | ||
181 | + ->all(), | ||
182 | + 'id', | ||
183 | + 'username' | ||
184 | + ), | ||
185 | + [ 'prompt' => \Yii::t('app', 'Выберите менеджера ...') ] | ||
186 | + ) ?> | ||
187 | + | ||
188 | + <?= $searchForm->field($searchModel, 'email') | ||
189 | + ->textInput() ?> | ||
184 | 190 | ||
191 | + </div> | ||
192 | + <div class="col-md-4"> | ||
193 | + <?= $searchForm->field($searchModel, 'declaration') | ||
194 | + ->textInput() ?> | ||
195 | + | ||
196 | + <?= $searchForm->field($searchModel, 'consignment') | ||
197 | + ->textInput() ?> | ||
198 | + </div> | ||
185 | </div> | 199 | </div> |
186 | - <div class="col-md-4"> | ||
187 | - <?= $searchForm->field($searchModel, 'declaration') | ||
188 | - ->textInput() ?> | ||
189 | - | ||
190 | - <?= $searchForm->field($searchModel, 'consignment') | ||
191 | - ->textInput() ?> | ||
192 | - </div> | ||
193 | -</div> | ||
194 | 200 | ||
195 | </div> | 201 | </div> |
196 | - | 202 | + |
197 | <p> | 203 | <p> |
198 | <?php | 204 | <?php |
199 | echo GridView::widget( | 205 | echo GridView::widget( |
@@ -216,9 +222,29 @@ JS; | @@ -216,9 +222,29 @@ JS; | ||
216 | 'content' => function($model) { | 222 | 'content' => function($model) { |
217 | $manager = $model->manager; | 223 | $manager = $model->manager; |
218 | if (empty($manager)) { | 224 | if (empty($manager)) { |
219 | - return Html::a($model->id, ['update', 'id' => $model->id], ['target' => '_blank', 'data-pjax' => '0']); | 225 | + return Html::a( |
226 | + $model->id, | ||
227 | + [ | ||
228 | + 'update', | ||
229 | + 'id' => $model->id, | ||
230 | + ], | ||
231 | + [ | ||
232 | + 'target' => '_blank', | ||
233 | + 'data-pjax' => '0', | ||
234 | + ] | ||
235 | + ); | ||
220 | } else { | 236 | } else { |
221 | - return Html::a($model->id, ['update', 'id' => $model->id], ['target' => '_blank', 'data-pjax' => '0']) . '<br>' . $manager->username; | 237 | + return Html::a( |
238 | + $model->id, | ||
239 | + [ | ||
240 | + 'update', | ||
241 | + 'id' => $model->id, | ||
242 | + ], | ||
243 | + [ | ||
244 | + 'target' => '_blank', | ||
245 | + 'data-pjax' => '0', | ||
246 | + ] | ||
247 | + ) . '<br>' . $manager->username; | ||
222 | } | 248 | } |
223 | }, | 249 | }, |
224 | ], | 250 | ], |
@@ -279,10 +305,10 @@ JS; | @@ -279,10 +305,10 @@ JS; | ||
279 | }, | 305 | }, |
280 | ], | 306 | ], |
281 | [ | 307 | [ |
282 | - 'attribute' => 'phone', | ||
283 | - 'content' => function($model) { | ||
284 | - return $model->phone . '<br>' . $model->phone2; | ||
285 | - } | 308 | + 'attribute' => 'phone', |
309 | + 'content' => function($model) { | ||
310 | + return $model->phone . '<br>' . $model->phone2; | ||
311 | + }, | ||
286 | ], | 312 | ], |
287 | [ | 313 | [ |
288 | 'attribute' => 'adress', | 314 | 'attribute' => 'adress', |
@@ -349,22 +375,25 @@ JS; | @@ -349,22 +375,25 @@ JS; | ||
349 | 'template' => \Yii::$app->user->identity->isAdmin( | 375 | 'template' => \Yii::$app->user->identity->isAdmin( |
350 | ) ? '{history} {view} {update} {delete}' : '{view} {update}', | 376 | ) ? '{history} {view} {update} {delete}' : '{view} {update}', |
351 | 'buttons' => [ | 377 | 'buttons' => [ |
352 | - 'update' => function($url, $model) { | 378 | + 'update' => function($url, $model) { |
353 | return Html::a( | 379 | return Html::a( |
354 | Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-pencil' ]), | 380 | Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-pencil' ]), |
355 | $url, | 381 | $url, |
356 | [ | 382 | [ |
357 | - 'target' => '_blank', | ||
358 | - 'data-pjax' => '0', | 383 | + 'target' => '_blank', |
384 | + 'data-pjax' => '0', | ||
359 | ] | 385 | ] |
360 | ); | 386 | ); |
361 | }, | 387 | }, |
362 | 'history' => function($url, $model) { | 388 | 'history' => function($url, $model) { |
363 | return Html::a( | 389 | return Html::a( |
364 | Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-time' ]), | 390 | Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-time' ]), |
365 | - ['log', 'id' => $model->id], | ||
366 | [ | 391 | [ |
367 | - 'target' => '_blank', | 392 | + 'log', |
393 | + 'id' => $model->id, | ||
394 | + ], | ||
395 | + [ | ||
396 | + 'target' => '_blank', | ||
368 | 'data-pjax' => '0', | 397 | 'data-pjax' => '0', |
369 | ] | 398 | ] |
370 | ); | 399 | ); |
views/order/update.php
@@ -3,9 +3,11 @@ | @@ -3,9 +3,11 @@ | ||
3 | * @var Order $model | 3 | * @var Order $model |
4 | * @var View $this | 4 | * @var View $this |
5 | * @var ActiveDataProvider $dataProvider | 5 | * @var ActiveDataProvider $dataProvider |
6 | + * @var Permissions $permissions | ||
6 | */ | 7 | */ |
7 | 8 | ||
8 | use artweb\artbox\ecommerce\models\Order; | 9 | use artweb\artbox\ecommerce\models\Order; |
10 | + use common\models\Permissions; | ||
9 | use yii\data\ActiveDataProvider; | 11 | use yii\data\ActiveDataProvider; |
10 | use yii\helpers\Html; | 12 | use yii\helpers\Html; |
11 | use yii\web\View; | 13 | use yii\web\View; |
@@ -16,7 +18,12 @@ | @@ -16,7 +18,12 @@ | ||
16 | 'label' => \Yii::t('app', 'Заказы'), | 18 | 'label' => \Yii::t('app', 'Заказы'), |
17 | ]; | 19 | ]; |
18 | $this->params[ 'breadcrumbs' ][] = [ | 20 | $this->params[ 'breadcrumbs' ][] = [ |
19 | - 'url' => yii\helpers\Url::to([ '/ecommerce/order/view', 'id' => $model->id, ]), | 21 | + 'url' => yii\helpers\Url::to( |
22 | + [ | ||
23 | + '/ecommerce/order/view', | ||
24 | + 'id' => $model->id, | ||
25 | + ] | ||
26 | + ), | ||
20 | 'label' => \Yii::t('app', 'Заказ #') . $model->id, | 27 | 'label' => \Yii::t('app', 'Заказ #') . $model->id, |
21 | ]; | 28 | ]; |
22 | $this->params[ 'breadcrumbs' ][] = $this->title; | 29 | $this->params[ 'breadcrumbs' ][] = $this->title; |
@@ -58,18 +65,18 @@ $.ajax({ | @@ -58,18 +65,18 @@ $.ajax({ | ||
58 | '; | 65 | '; |
59 | 66 | ||
60 | $this->registerJs($js, View::POS_READY); | 67 | $this->registerJs($js, View::POS_READY); |
61 | - | 68 | + |
62 | if (!empty(\Yii::$app->session->getFlash('label_update'))) { | 69 | if (!empty(\Yii::$app->session->getFlash('label_update'))) { |
63 | - $js = ' | 70 | + $js = ' |
64 | $.notify({ | 71 | $.notify({ |
65 | message: "Статус заказа обновлен" | 72 | message: "Статус заказа обновлен" |
66 | }, { | 73 | }, { |
67 | type : "warning" | 74 | type : "warning" |
68 | }) | 75 | }) |
69 | '; | 76 | '; |
70 | - $this->registerJs($js, View::POS_READY); | 77 | + $this->registerJs($js, View::POS_READY); |
71 | } | 78 | } |
72 | - | 79 | + |
73 | ?> | 80 | ?> |
74 | <div class="order-update"> | 81 | <div class="order-update"> |
75 | <div class="container callout bg-olive"> | 82 | <div class="container callout bg-olive"> |
@@ -84,6 +91,7 @@ $.notify({ | @@ -84,6 +91,7 @@ $.notify({ | ||
84 | [ | 91 | [ |
85 | 'model' => $model, | 92 | 'model' => $model, |
86 | 'dataProvider' => $dataProvider, | 93 | 'dataProvider' => $dataProvider, |
94 | + 'permissions' => $permissions, | ||
87 | ] | 95 | ] |
88 | ) ?> | 96 | ) ?> |
89 | </div> | 97 | </div> |
90 | \ No newline at end of file | 98 | \ No newline at end of file |