diff --git a/controllers/OrderController.php b/controllers/OrderController.php index bb87173..aa57db7 100755 --- a/controllers/OrderController.php +++ b/controllers/OrderController.php @@ -6,6 +6,7 @@ use artweb\artbox\ecommerce\models\OrderLabelHistory; use artweb\artbox\ecommerce\models\OrderSearch; use common\components\CreditHelper; + use common\models\Permissions; use common\models\User; use Yii; use yii\data\ArrayDataProvider; @@ -57,7 +58,12 @@ public function actionIndex() { + /** + * @var Permissions $permissions + */ + $permissions = \Yii::$app->user->identity->permissions; $searchModel = new OrderSearch(); + $searchModel->permissions = $permissions; $dataProvider = $searchModel->search(Yii::$app->request->queryParams); return $this->render( @@ -65,6 +71,8 @@ [ 'dataProvider' => $dataProvider, 'searchModel' => $searchModel, + 'allowedLabels' => empty($permissions) ? [] : $permissions->labelsArray, + 'canCreate' => empty($permissions) ? false : $permissions->create, ] ); } @@ -247,6 +255,19 @@ public function actionCreate() { + /** + * @var Permissions $permissions + */ + $permissions = \Yii::$app->user->identity->permissions; + + if (empty($permissions)) { + throw new ForbiddenHttpException(); + } else { + if (!$permissions->create) { + throw new ForbiddenHttpException(); + } + } + if (\Yii::$app->request->post('hasEditable')) { $orderProductId = \Yii::$app->request->post('editableKey'); $orderProduct = OrderProduct::findOne($orderProductId); @@ -388,6 +409,14 @@ throw new ForbiddenHttpException(); } } + if (!empty($user->permissions)) { + $permissions = $user->permissions; + if (!in_array($model->label, $user->permissions->labelsArray)) { + throw new ForbiddenHttpException(); + } + } else { + $permissions = Permissions::getDefault(); + } $dataProvider = new ActiveDataProvider( [ @@ -432,6 +461,7 @@ [ 'model' => $model, 'dataProvider' => $dataProvider, + 'permissions' => $permissions, ] ); } else { @@ -440,6 +470,7 @@ [ 'model' => $model, 'dataProvider' => $dataProvider, + 'permissions' => $permissions, ] ); } diff --git a/models/Order.php b/models/Order.php index 3effafa..04d207d 100755 --- a/models/Order.php +++ b/models/Order.php @@ -336,39 +336,38 @@ public static function attributeNames() { return [ - 'name' => Yii::t('app', 'order_name'), - 'phone' => Yii::t('app', 'order_phone'), - 'phone2' => Yii::t('app', 'Конактный телефон 2'), - 'email' => Yii::t('app', 'E-mail'), - 'comment' => Yii::t('app', 'Комментарий '), - 'created_at' => Yii::t('app', 'Дата добавления'), - 'updated_at' => Yii::t('app', 'Дата обновления'), - 'deleted_at' => Yii::t('app', 'Дата удаления'), - 'deadline' => Yii::t('app', 'Дедлайн'), - 'reason' => Yii::t('app', 'Причина'), - 'check' => Yii::t('app', 'Чек'), - 'sms' => Yii::t('app', 'СМС'), - 'consignment' => Yii::t('app', 'Номер накладной'), - 'manager_id' => Yii::t('app', 'Менеджер'), - 'delivery_cost' => Yii::t('app', 'Стоимость доставки'), - 'published' => Yii::t('app', 'Опубликован'), - 'label' => Yii::t('app', 'Метка'), - 'declaration' => Yii::t('app', 'Номер декларации'), - 'delivery' => Yii::t('app', 'Способ доставки'), - 'total' => Yii::t('app', 'Сумма'), - 'adress' => Yii::t('app', 'Адрес'), - 'pay' => Yii::t('app', 'Оплата'), - 'body' => Yii::t('app', 'Комментарий менеджера'), - 'id' => Yii::t('app', 'Номер'), - 'stock' => Yii::t('app', 'Номер склада'), - 'payment' => Yii::t('app', 'Способ оплаты'), - 'insurance' => Yii::t('app', 'Страховка'), - 'amount_imposed' => Yii::t('app', 'Сумма наложенного'), - 'shipping_by' => Yii::t('app', 'Отправка за счет'), - 'city' => Yii::t('app', 'Город'), - 'numbercard' => Yii::t('app', '№ карточки'), - 'credit_month' => Yii::t('app', 'Количество месяцев'), - 'credit_sum' => Yii::t('app', 'Первоначальный взнос'), + 'name' => Yii::t('app', 'order_name'), + 'phone' => Yii::t('app', 'order_phone'), + 'phone2' => Yii::t('app', 'Конактный телефон 2'), + 'email' => Yii::t('app', 'E-mail'), + 'comment' => Yii::t('app', 'Комментарий '), + 'deadline' => Yii::t('app', 'Дедлайн'), + 'reason' => Yii::t('app', 'Причина'), + 'check' => Yii::t('app', 'Чек'), + 'sms' => Yii::t('app', 'СМС'), + 'consignment' => Yii::t('app', 'Номер накладной'), + 'manager_id' => Yii::t('app', 'Менеджер'), + 'delivery_cost' => Yii::t('app', 'Стоимость доставки'), + 'label' => Yii::t('app', 'Метка'), + 'declaration' => Yii::t('app', 'Номер декларации'), + 'delivery' => Yii::t('app', 'Способ доставки'), + 'adress' => Yii::t('app', 'Адрес'), + 'pay' => Yii::t('app', 'Оплата'), + 'body' => Yii::t('app', 'Комментарий менеджера'), + 'stock' => Yii::t('app', 'Номер склада'), + 'payment' => Yii::t('app', 'Способ оплаты'), + 'insurance' => Yii::t('app', 'Страховка'), + 'amount_imposed' => Yii::t('app', 'Сумма наложенного'), + 'shipping_by' => Yii::t('app', 'Отправка за счет'), + 'city' => Yii::t('app', 'Город'), + 'numbercard' => Yii::t('app', '№ карточки'), + 'send_sms' => Yii::t('app', 'Отправлять смс'), + 'product_booking' => Yii::t('app', 'Бронь товара'), + 'product_status' => Yii::t('app', 'Статус товара'), + 'product_return' => Yii::t('app', 'Возврат товара'), + 'add_product' => Yii::t('app', 'Добавить товар'), + 'delete_product' => Yii::t('app', 'Удалить товар'), + 'product_count' => Yii::t('app', 'Количество товара'), ]; } @@ -443,7 +442,7 @@ { return $this->hasMany(OrderLog::className(), [ 'order_id' => 'id' ]); } - + /** * @return \yii\db\ActiveQuery */ diff --git a/models/OrderSearch.php b/models/OrderSearch.php index f7238cd..cd3b5ce 100755 --- a/models/OrderSearch.php +++ b/models/OrderSearch.php @@ -2,13 +2,15 @@ namespace artweb\artbox\ecommerce\models; + use common\models\Permissions; use yii\base\Model; use yii\data\ActiveDataProvider; use yii\helpers\ArrayHelper; - use yii\helpers\VarDumper; /** * OrderSearch represents the model behind the search form about `\artweb\artbox\ecommerce\models\Order`. + * + * @property Permissions $permissions */ class OrderSearch extends Order { @@ -17,6 +19,8 @@ public $date_range; public $sku; + public $permissions; + /** * @inheritdoc */ @@ -160,6 +164,14 @@ $this->declaration, ] ); + + if (!empty($this->permissions)) + { + $query->andFilterWhere([ + 'label' => $this->permissions->labelsArray, + ]); + } + $query->andFilterWhere( [ 'label' => $this->label, diff --git a/views/order/_form.php b/views/order/_form.php index 216bc8c..13e1bd9 100755 --- a/views/order/_form.php +++ b/views/order/_form.php @@ -5,6 +5,7 @@ use artweb\artbox\ecommerce\models\OrderPayment; use artweb\artbox\ecommerce\models\OrderProduct; use backend\models\SmsTemplate; + use common\models\Permissions; use common\models\User; use kartik\grid\GridView; use kartik\grid\SerialColumn; @@ -27,6 +28,7 @@ * @var ActiveForm $form * @var ActiveDataProvider $dataProvider * @var User $user + * @var Permissions $permissions */ $user = \Yii::$app->user->identity; @@ -160,231 +162,266 @@ JS;
Склад | кол. |
---|---|
' . $stock->stock->title . ' | ' . $stock->quantity . ' |
Склад | кол. |
---|---|
' . $stock->stock->title . ' | ' . $stock->quantity . ' |
- = Html::a(\Yii::t('app', 'Добавить заказ'), [ 'create' ], [ 'class' => 'btn btn-success btn-lg' ]) ?> + = Html::a(\Yii::t('app', 'Добавить заказ'), [ 'create' ], [ + 'class' => $canCreate ? 'btn btn-success btn-lg' : 'btn btn-success btn-lg disabled', + + ]) ?>
- - + + 'collapse', -// 'data-target' => '#search-fields', -// 'class' => 'btn btn-default' -//]); -//?> + // echo Html::button(\Yii::t('app', 'Скрыть/Показать'), [ + // 'data-toggle' => 'collapse', + // 'data-target' => '#search-fields', + // 'class' => 'btn btn-default' + //]); + //?>
function($model) {
$manager = $model->manager;
if (empty($manager)) {
- return Html::a($model->id, ['update', 'id' => $model->id], ['target' => '_blank', 'data-pjax' => '0']);
+ return Html::a(
+ $model->id,
+ [
+ 'update',
+ 'id' => $model->id,
+ ],
+ [
+ 'target' => '_blank',
+ 'data-pjax' => '0',
+ ]
+ );
} else {
- return Html::a($model->id, ['update', 'id' => $model->id], ['target' => '_blank', 'data-pjax' => '0']) . '
' . $manager->username;
+ return Html::a(
+ $model->id,
+ [
+ 'update',
+ 'id' => $model->id,
+ ],
+ [
+ 'target' => '_blank',
+ 'data-pjax' => '0',
+ ]
+ ) . '
' . $manager->username;
}
},
],
@@ -279,10 +305,10 @@ JS;
},
],
[
- 'attribute' => 'phone',
- 'content' => function($model) {
- return $model->phone . '
' . $model->phone2;
- }
+ 'attribute' => 'phone',
+ 'content' => function($model) {
+ return $model->phone . '
' . $model->phone2;
+ },
],
[
'attribute' => 'adress',
@@ -349,22 +375,25 @@ JS;
'template' => \Yii::$app->user->identity->isAdmin(
) ? '{history} {view} {update} {delete}' : '{view} {update}',
'buttons' => [
- 'update' => function($url, $model) {
+ 'update' => function($url, $model) {
return Html::a(
Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-pencil' ]),
$url,
[
- 'target' => '_blank',
- 'data-pjax' => '0',
+ 'target' => '_blank',
+ 'data-pjax' => '0',
]
);
},
'history' => function($url, $model) {
return Html::a(
Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-time' ]),
- ['log', 'id' => $model->id],
[
- 'target' => '_blank',
+ 'log',
+ 'id' => $model->id,
+ ],
+ [
+ 'target' => '_blank',
'data-pjax' => '0',
]
);
diff --git a/views/order/update.php b/views/order/update.php
index 41f49c1..e405c63 100755
--- a/views/order/update.php
+++ b/views/order/update.php
@@ -3,9 +3,11 @@
* @var Order $model
* @var View $this
* @var ActiveDataProvider $dataProvider
+ * @var Permissions $permissions
*/
use artweb\artbox\ecommerce\models\Order;
+ use common\models\Permissions;
use yii\data\ActiveDataProvider;
use yii\helpers\Html;
use yii\web\View;
@@ -16,7 +18,12 @@
'label' => \Yii::t('app', 'Заказы'),
];
$this->params[ 'breadcrumbs' ][] = [
- 'url' => yii\helpers\Url::to([ '/ecommerce/order/view', 'id' => $model->id, ]),
+ 'url' => yii\helpers\Url::to(
+ [
+ '/ecommerce/order/view',
+ 'id' => $model->id,
+ ]
+ ),
'label' => \Yii::t('app', 'Заказ #') . $model->id,
];
$this->params[ 'breadcrumbs' ][] = $this->title;
@@ -58,18 +65,18 @@ $.ajax({
';
$this->registerJs($js, View::POS_READY);
-
+
if (!empty(\Yii::$app->session->getFlash('label_update'))) {
- $js = '
+ $js = '
$.notify({
message: "Статус заказа обновлен"
}, {
type : "warning"
})
';
- $this->registerJs($js, View::POS_READY);
+ $this->registerJs($js, View::POS_READY);
}
-
+
?>