From: JoySystem_v Date: Fri, 23 Aug 2024 08:38:46 +0000 (+0300) Subject: добавил проверку на группу пользователей и дату X-Git-Tag: 1.5~20^2~18 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=9053709c8b1b883fc1e79882a2c10707ff08b5df;p=erp24_rep%2Fyii-erp24%2F.git добавил проверку на группу пользователей и дату --- diff --git a/erp24/controllers/crud/EmployeePaymentController.php b/erp24/controllers/crud/EmployeePaymentController.php index 7e384145..3b84eb7b 100755 --- a/erp24/controllers/crud/EmployeePaymentController.php +++ b/erp24/controllers/crud/EmployeePaymentController.php @@ -2,6 +2,7 @@ namespace yii_app\controllers\crud; +use Yii; use yii\data\ActiveDataProvider; use yii_app\records\Admin; use yii_app\records\EmployeePayment; @@ -59,24 +60,35 @@ class EmployeePaymentController extends Controller */ public function actionView($id) { + // Получаем текущий месяц и год + $currentMonth = date('m'); + $currentYear = date('Y'); - $dataProvider = new ActiveDataProvider([ - 'query' => EmployeePayment::find()->where(['admin_id' => $id]), - ]); + // Проверяем, сколько записей у сотрудника за текущий месяц + $hasMultipleRecords = EmployeePayment::find() + ->where(['admin_id' => $id]) + ->andWhere(['EXTRACT(MONTH FROM date)' => $currentMonth, 'EXTRACT(YEAR FROM date)' => $currentYear]) + ->count() > 1; - // Получение данных сотрудника для заголовка + // Получаем данные сотрудника для заголовка $admin = Admin::findOne($id); if (!$admin) { throw new NotFoundHttpException("Сотрудник не найден"); } + $dataProvider = new ActiveDataProvider([ + 'query' => EmployeePayment::find()->where(['admin_id' => $id]), + ]); + return $this->render('view', [ 'admin' => $admin, 'dataProvider' => $dataProvider, + 'hasMultipleRecords' => $hasMultipleRecords, ]); } + /** * Creates a new EmployeePayment model. * If creation is successful, the browser will be redirected to the 'view' page. @@ -115,6 +127,12 @@ class EmployeePaymentController extends Controller public function actionUpdate($id) { $model = $this->findModel($id); + $admin = Yii::$app->user->identity; + + // Проверка на group_id и дату записи + if ($admin->group_id != 81 && date('Y-m') !== date('Y-m', strtotime($model->date))) { + throw new \yii\web\ForbiddenHttpException('Редактирование разрешено только для записей текущего месяца.'); + } if ($this->request->isPost && $model->load($this->request->post()) && $model->save()) { return $this->redirect(['view', 'id' => $model->admin_id]); @@ -135,12 +153,26 @@ class EmployeePaymentController extends Controller public function actionDelete($id) { $model = $this->findModel($id); - $admin_id = $model->admin_id; + $admin = Yii::$app->user->identity; + $adminId = $model->admin_id; + + // Проверка на group_id и дату записи + if ($admin->group_id != 81) { + // Проверка, разрешено ли удаление записи текущего месяца + if (date('Y-m') !== date('Y-m', strtotime($model->date))) { + throw new \yii\web\ForbiddenHttpException('Удаление разрешено только для записей текущего месяца.'); + } + + // Проверка, чтобы осталась хотя бы одна запись после удаления + $remainingRecords = EmployeePayment::find()->where(['admin_id' => $adminId])->count(); + if ($remainingRecords <= 1) { + throw new \yii\web\ForbiddenHttpException('Нельзя удалить последнюю запись. Должна остаться хотя бы одна запись.'); + } + } $model->delete(); - // Редирект на страницу просмотра сотрудника после удаления записи - return $this->redirect(['view', 'id' => $admin_id]); + return $this->redirect(['view', 'id' => $adminId]); } /** diff --git a/erp24/views/crud/employee-payment/view.php b/erp24/views/crud/employee-payment/view.php index 35f7b515..0716b4d5 100755 --- a/erp24/views/crud/employee-payment/view.php +++ b/erp24/views/crud/employee-payment/view.php @@ -7,6 +7,7 @@ use yii\widgets\DetailView; /* @var $this yii\web\View */ /* @var $admin yii_app\records\Admin */ /* @var $dataProvider yii\data\ActiveDataProvider */ +/* @var $hasMultipleRecords boolean */ $this->title = $admin->name . ' - ' . $admin->adminGroup->name; $this->params['breadcrumbs'][] = ['label' => 'Оклады', 'url' => ['index']]; @@ -43,11 +44,30 @@ $this->params['breadcrumbs'][] = $this->title; 'creator.name:text:Правило создал', [ 'class' => 'yii\grid\ActionColumn', - 'template' => ' {update} {delete}', + 'template' => '{update} {delete}', + 'visibleButtons' => [ + 'update' => function ($model) use ($admin) { + // Если пользователь в группе с group_id = 81, разрешить редактирование для всех периодов + if ($admin->group_id == 81) { + return true; + } + // Для остальных пользователей разрешено редактирование только записей текущего месяца + return date('Y-m') === date('Y-m', strtotime($model->date)); + }, + 'delete' => function ($model) use ($admin, $hasMultipleRecords) { + // Если пользователь в группе с group_id = 81, разрешить удаление для всех периодов + if ($admin->group_id == 81) { + return true; + } + // Разрешить удаление только для записей текущего месяца, если их больше одной + return $hasMultipleRecords && date('Y-m') === date('Y-m', strtotime($model->date)); + }, + ], 'urlCreator' => function ($action, $model, $key, $index, $column) use ($admin) { return [$action, 'id' => $model->id, 'admin_id' => $admin->id]; } ], + ], ]) ?>