]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
добавил проверку на группу пользователей и дату
authorJoySystem_v <fvv2011@gmail.com>
Fri, 23 Aug 2024 08:38:46 +0000 (11:38 +0300)
committerJoySystem_v <fvv2011@gmail.com>
Fri, 23 Aug 2024 08:38:46 +0000 (11:38 +0300)
erp24/controllers/crud/EmployeePaymentController.php
erp24/views/crud/employee-payment/view.php

index 7e3841456b59b986da0d0d090f87195569da0100..3b84eb7b93911bbddef61750ac124a19c4ae187e 100755 (executable)
@@ -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;
 
-        // Ð\9fолÑ\83Ñ\87ение Ð´Ð°Ð½Ð½Ñ\8bÑ\85 сотрудника для заголовка
+        // Ð\9fолÑ\83Ñ\87аем Ð´Ð°Ð½Ð½Ñ\8bе сотрудника для заголовка
         $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]);
     }
 
     /**
index 35f7b5154ac1a0a990ac2f16a1dd65635793e968..0716b4d5074043ed784d6a50f2d85f29d77d3fd3 100755 (executable)
@@ -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];
                 }
             ],
+
         ],
     ]) ?>