]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Фильтр по кустовым при создании
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 24 Oct 2024 15:04:41 +0000 (18:04 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 24 Oct 2024 15:04:41 +0000 (18:04 +0300)
erp24/controllers/crud/ClusterAdminController.php

index 41d0b5531c1954293a2db786a19b8075f5369353..fbe70593559c7e2ad0bb18a191d02bd426a94fbe 100644 (file)
@@ -127,6 +127,19 @@ class ClusterAdminController extends Controller
         $model = new ClusterAdmin();
 
 
+        $activeAdminIds = ClusterAdmin::find()
+            ->select('admin_id')
+            ->where(['active' => 1])
+            ->column();
+
+
+        $admins = ArrayHelper::map(Admin::find()
+            ->select(['id', 'name'])
+            ->where(['NOT IN', 'id', $activeAdminIds])
+            ->andWhere(['IN', 'group_id', [7]])
+            ->all(), 'id', 'name');
+
+
         $cluster = Cluster::findOne($cluster_id);
         if (!$cluster) {
             throw new NotFoundHttpException('Кластер не найден.');
@@ -135,6 +148,64 @@ class ClusterAdminController extends Controller
         if ($this->request->isPost && $model->load($this->request->post())) {
             $model->cluster_id = $cluster_id;
 
+            // Проверка на активные записи для данного admin_id
+            if ($model->admin_id) {
+                // Если активность = 1
+                if ($model->active == 1) {
+                    $existingActiveRecords = ClusterAdmin::find()
+                        ->where(['admin_id' => $model->admin_id, 'active' => 1])
+                        ->andWhere(['!=', 'cluster_id', $model->cluster_id])
+                        ->all();
+
+                    if (!empty($existingActiveRecords)) {
+                        $conflictCluster = $existingActiveRecords[0]; // Берем первую конфликтующую запись
+                        Yii::$app->session->setFlash('error', 'Этот пользователь ' . $admins[$model->admin_id] . ' уже привязан к кластеру ' . $conflictCluster->cluster_id . ' с активным статусом.');
+                        return $this->redirect(['create', 'cluster_id' => $cluster_id]);
+                    }
+
+                    // Проверка на конфликт с неактивными записями
+                    $existingInactiveRecords = ClusterAdmin::find()
+                        ->where(['admin_id' => $model->admin_id, 'active' => 0])
+                        ->andWhere(['!=', 'cluster_id', $model->cluster_id])
+                        ->all();
+
+                    foreach ($existingInactiveRecords as $record) {
+                        $modelStart = strtotime($model->date_start);
+                        $recordStart = strtotime($record->date_start);
+                        $recordEnd = strtotime($record->date_end);
+
+                        if ($modelStart < $recordStart && $modelStart < $recordEnd) {
+                            Yii::$app->session->setFlash('error', 'Ошибка: активная запись для ' . $admins[$model->admin_id] . ' не может начинаться раньше, чем неактивная запись (' . $record->date_start . ' - ' . $record->date_end . ') для другого кластера.');
+                            return $this->redirect(['create', 'cluster_id' => $cluster_id]);
+                        }
+                    }
+                }
+
+                // Если активность = 0
+                if ($model->active == 0) {
+                    $existingInactiveRecords = ClusterAdmin::find()
+                        ->where(['admin_id' => $model->admin_id, 'active' => 0])
+                        ->andWhere(['!=', 'cluster_id', $model->cluster_id])
+                        ->all();
+
+                    foreach ($existingInactiveRecords as $record) {
+                        $modelStart = strtotime($model->date_start);
+                        $modelEnd = strtotime($model->date_end);
+                        $recordStart = strtotime($record->date_start);
+                        $recordEnd = strtotime($record->date_end);
+
+                        if (
+                            ($modelStart > $recordStart && $modelStart < $recordEnd) ||  // Начало новой записи внутри существующей
+                            ($modelEnd > $recordStart && $modelEnd < $recordEnd) ||      // Конец новой записи внутри существующей
+                            ($modelStart <= $recordStart && $modelEnd >= $recordEnd)     // Новая запись полностью охватывает существующую
+                        ) {
+                            Yii::$app->session->setFlash('error', 'Пересечение дат с записью от ' . $record->date_start . ' до ' . $record->date_end . ' для другого кластера.');
+                            return $this->redirect(['create', 'cluster_id' => $cluster_id]);
+                        }
+                    }
+                }
+            }
+
             // Ищем активную запись для данного кластера
             $existingRecord = ClusterAdmin::find()
                 ->where(['cluster_id' => $model->cluster_id, 'active' => 1])
@@ -152,9 +223,7 @@ class ClusterAdminController extends Controller
                 }
             }
 
-
-
-
+            // Сохраняем новую запись
             if ($model->save()) {
                 ClusterManagerService::syncClusterManagers($model->cluster_id, $model->admin_id);
                 Yii::$app->session->setFlash('success', 'Новая запись успешно создана, предыдущая была закрыта.');
@@ -164,13 +233,10 @@ class ClusterAdminController extends Controller
             }
         }
 
-        $admins = ArrayHelper::map(Admin::find()
-            ->select(['id', 'name'])
-            ->where(['IN', 'group_id', [7]])
-            ->all(), 'id', 'name');
 
-        $user = Yii::$app->user->identity;
 
+        $user = Yii::$app->user->identity;
+        $model->active = 1;
         return $this->render('create', [
             'model' => $model,
             'cluster' => $cluster,
@@ -236,7 +302,7 @@ class ClusterAdminController extends Controller
 
                 }
 
-                // Если активность = 0
+
                 if ($model->active == 0) {
                     $existingInactiveRecords = ClusterAdmin::find()
                         ->where(['admin_id' => $model->admin_id,])