Commit 287e356df186852b79de35342dd66090986827a0

Authored by Alexey Boroda
1 parent 2ccf4bd2

-Permissions ready - test

controllers/OrderController.php
... ... @@ -6,6 +6,7 @@
6 6 use artweb\artbox\ecommerce\models\OrderLabelHistory;
7 7 use artweb\artbox\ecommerce\models\OrderSearch;
8 8 use common\components\CreditHelper;
  9 + use common\models\Permissions;
9 10 use common\models\User;
10 11 use Yii;
11 12 use yii\data\ArrayDataProvider;
... ... @@ -57,7 +58,12 @@
57 58  
58 59 public function actionIndex()
59 60 {
  61 + /**
  62 + * @var Permissions $permissions
  63 + */
  64 + $permissions = \Yii::$app->user->identity->permissions;
60 65 $searchModel = new OrderSearch();
  66 + $searchModel->permissions = $permissions;
61 67 $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
62 68  
63 69 return $this->render(
... ... @@ -65,6 +71,8 @@
65 71 [
66 72 'dataProvider' => $dataProvider,
67 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 255  
248 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 271 if (\Yii::$app->request->post('hasEditable')) {
251 272 $orderProductId = \Yii::$app->request->post('editableKey');
252 273 $orderProduct = OrderProduct::findOne($orderProductId);
... ... @@ -388,6 +409,14 @@
388 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 421 $dataProvider = new ActiveDataProvider(
393 422 [
... ... @@ -432,6 +461,7 @@
432 461 [
433 462 'model' => $model,
434 463 'dataProvider' => $dataProvider,
  464 + 'permissions' => $permissions,
435 465 ]
436 466 );
437 467 } else {
... ... @@ -440,6 +470,7 @@
440 470 [
441 471 'model' => $model,
442 472 'dataProvider' => $dataProvider,
  473 + 'permissions' => $permissions,
443 474 ]
444 475 );
445 476 }
... ...
models/Order.php
... ... @@ -336,39 +336,38 @@
336 336 public static function attributeNames()
337 337 {
338 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 442 {
444 443 return $this->hasMany(OrderLog::className(), [ 'order_id' => 'id' ]);
445 444 }
446   -
  445 +
447 446 /**
448 447 * @return \yii\db\ActiveQuery
449 448 */
... ...
models/OrderSearch.php
... ... @@ -2,13 +2,15 @@
2 2  
3 3 namespace artweb\artbox\ecommerce\models;
4 4  
  5 + use common\models\Permissions;
5 6 use yii\base\Model;
6 7 use yii\data\ActiveDataProvider;
7 8 use yii\helpers\ArrayHelper;
8   - use yii\helpers\VarDumper;
9 9  
10 10 /**
11 11 * OrderSearch represents the model behind the search form about `\artweb\artbox\ecommerce\models\Order`.
  12 + *
  13 + * @property Permissions $permissions
12 14 */
13 15 class OrderSearch extends Order
14 16 {
... ... @@ -17,6 +19,8 @@
17 19 public $date_range;
18 20 public $sku;
19 21  
  22 + public $permissions;
  23 +
20 24 /**
21 25 * @inheritdoc
22 26 */
... ... @@ -160,6 +164,14 @@
160 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 175 $query->andFilterWhere(
164 176 [
165 177 'label' => $this->label,
... ...
views/order/_form.php
... ... @@ -5,6 +5,7 @@
5 5 use artweb\artbox\ecommerce\models\OrderPayment;
6 6 use artweb\artbox\ecommerce\models\OrderProduct;
7 7 use backend\models\SmsTemplate;
  8 + use common\models\Permissions;
8 9 use common\models\User;
9 10 use kartik\grid\GridView;
10 11 use kartik\grid\SerialColumn;
... ... @@ -27,6 +28,7 @@
27 28 * @var ActiveForm $form
28 29 * @var ActiveDataProvider $dataProvider
29 30 * @var User $user
  31 + * @var Permissions $permissions
30 32 */
31 33  
32 34 $user = \Yii::$app->user->identity;
... ... @@ -160,231 +162,266 @@ JS;
160 162 </div>
161 163 </div>
162 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 169 <br>
  170 +
  171 +
297 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 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 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 418 </div>
330 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 422 </div>
381 423 </div>
382 424  
383   -
384   -
385   - </div>
386   -</div>
387   -
388 425 </div><!-- /.box-body -->
389 426 </div><!-- /.box -->
390 427  
... ... @@ -401,242 +438,247 @@ JS;
401 438 </div>
402 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 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 682 <div class="col-md-8">
641 683 <?php echo $newProductForm->field($newOrderProduct, 'id')
642 684 ->widget(
... ... @@ -691,64 +733,65 @@ JS;
691 733 <?php echo Html::submitButton(
692 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 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 755 </div><!-- /.box-body -->
713 756 </div><!-- /.box -->
714   -
715   -
716   - <br>
  757 +
  758 +
  759 +<br>
717 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 795 </div>
753 796 <br>
754 797 <br>
... ...
views/order/index.php
... ... @@ -3,6 +3,8 @@
3 3 * @var ActiveDataProvider $dataProvider
4 4 * @var OrderSearch $searchModel
5 5 * @var View $this
  6 + * @var array $allowedLabels
  7 + * @var boolean $canCreate
6 8 */
7 9  
8 10 use artweb\artbox\ecommerce\models\Delivery;
... ... @@ -37,7 +39,10 @@ JS;
37 39 ?>
38 40 <h1>Заказы</h1>
39 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 46 </p>
42 47 <?php Pjax::begin(); ?>
43 48 <?php
... ... @@ -51,19 +56,19 @@ JS;
51 56 ?>
52 57  
53 58  
54   -
55   -
  59 +
  60 +
56 61  
57 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 69 <div class="box box-primary">
65 70 <div class="box-header with-border">
66   -<!-- <h3 class="box-title"></h3>-->
  71 + <!-- <h3 class="box-title"></h3>-->
67 72 <?php echo Html::submitButton(
68 73 \Yii::t('app', 'Искать'),
69 74 [
... ... @@ -74,126 +79,127 @@ JS;
74 79 <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
75 80 </div>
76 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 160 if(data.sku == undefined) {
155 161 return "sku";
156 162 } else {
157 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 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 201 </div>
196   -
  202 +
197 203 <p>
198 204 <?php
199 205 echo GridView::widget(
... ... @@ -216,9 +222,29 @@ JS;
216 222 'content' => function($model) {
217 223 $manager = $model->manager;
218 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 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 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 314 'attribute' => 'adress',
... ... @@ -349,22 +375,25 @@ JS;
349 375 'template' => \Yii::$app->user->identity->isAdmin(
350 376 ) ? '{history} {view} {update} {delete}' : '{view} {update}',
351 377 'buttons' => [
352   - 'update' => function($url, $model) {
  378 + 'update' => function($url, $model) {
353 379 return Html::a(
354 380 Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-pencil' ]),
355 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 388 'history' => function($url, $model) {
363 389 return Html::a(
364 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 397 'data-pjax' => '0',
369 398 ]
370 399 );
... ...
views/order/update.php
... ... @@ -3,9 +3,11 @@
3 3 * @var Order $model
4 4 * @var View $this
5 5 * @var ActiveDataProvider $dataProvider
  6 + * @var Permissions $permissions
6 7 */
7 8  
8 9 use artweb\artbox\ecommerce\models\Order;
  10 + use common\models\Permissions;
9 11 use yii\data\ActiveDataProvider;
10 12 use yii\helpers\Html;
11 13 use yii\web\View;
... ... @@ -16,7 +18,12 @@
16 18 'label' => \Yii::t('app', 'Заказы'),
17 19 ];
18 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 27 'label' => \Yii::t('app', 'Заказ #') . $model->id,
21 28 ];
22 29 $this->params[ 'breadcrumbs' ][] = $this->title;
... ... @@ -58,18 +65,18 @@ $.ajax({
58 65 ';
59 66  
60 67 $this->registerJs($js, View::POS_READY);
61   -
  68 +
62 69 if (!empty(\Yii::$app->session->getFlash('label_update'))) {
63   - $js = '
  70 + $js = '
64 71 $.notify({
65 72 message: "Статус заказа обновлен"
66 73 }, {
67 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 81 <div class="order-update">
75 82 <div class="container callout bg-olive">
... ... @@ -84,6 +91,7 @@ $.notify({
84 91 [
85 92 'model' => $model,
86 93 'dataProvider' => $dataProvider,
  94 + 'permissions' => $permissions,
87 95 ]
88 96 ) ?>
89 97 </div>
90 98 \ No newline at end of file
... ...