]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Закрытие записи по кластеру при добавлении
authorvladfo <fvv2011@gmail.com>
Wed, 16 Oct 2024 12:14:11 +0000 (15:14 +0300)
committervladfo <fvv2011@gmail.com>
Wed, 16 Oct 2024 12:14:11 +0000 (15:14 +0300)
erp24/controllers/crud/ClusterAdminController.php

index 4fbfd922a6ac91257852442dc34cf9403cfb4674..d27599f61dfa7e84043c239360faa537649413e8 100644 (file)
@@ -78,31 +78,36 @@ class ClusterAdminController extends Controller
         $model = new ClusterAdmin();
 
         if ($this->request->isPost && $model->load($this->request->post())) {
-            // Проверка на существование записи с такими же cluster_id и admin_id и date_end > текущей даты
+            // Проверка на существование записи с такими же cluster_id и date_end >= текущей даты или date_end = '2100-01-01'
             $existingRecord = ClusterAdmin::find()
-                ->where(['cluster_id' => $model->cluster_id, 'admin_id' => $model->admin_id])
-                ->andWhere(['>', 'date_end', date('Y-m-d')])
+                ->where(['cluster_id' => $model->cluster_id])
+                ->andWhere(['or', ['>=', 'date_end', date('Y-m-d')], ['date_end' => '2100-01-01']])
                 ->one();
 
             if ($existingRecord) {
-                Yii::$app->session->setFlash('error', 'Запись с таким кустом и кустовым уже существует и ещё актуальна.');
-            } else {
-                // Проверка на пересечение дат
-                $overlappingRecord = ClusterAdmin::find()
-                    ->where(['cluster_id' => $model->cluster_id, 'admin_id' => $model->admin_id])
-                    ->andWhere(['<=', 'date_start', $model->date_start])
-                    ->andWhere(['>=', 'date_end', $model->date_start])
-                    ->one();
-
-                if ($overlappingRecord) {
-                    Yii::$app->session->setFlash('error', 'Дата начала пересекается с существующей записью.');
+                // Обновляем дату окончания для текущей записи на текущую дату
+                $existingRecord->date_end = date('Y-m-d');
+                if (!$existingRecord->save()) {
+                    Yii::$app->session->setFlash('error', 'Ошибка при обновлении существующей записи.');
+                    return $this->redirect(['create']);
+                }
+
+                // Создаём новую запись для cluster_id и admin_id
+                $model->date_start = date('Y-m-d'); // Опционально установить текущую дату как начало новой привязки
+                if ($model->save()) {
+                    Yii::$app->session->setFlash('success', 'Новая запись успешно создана, предыдущая была закрыта.');
+                    return $this->redirect(['view', 'id' => $model->id]);
                 } else {
-                    if ($model->save()) {
-                        return $this->redirect(['view', 'id' => $model->id]);
-                    }
+                    Yii::$app->session->setFlash('error', 'Ошибка при создании новой записи.');
+                }
+            } else {
+                // Если такой записи нет, просто создаем новую
+                if ($model->save()) {
+                    return $this->redirect(['view', 'id' => $model->id]);
                 }
             }
         }
+
         // Получение данных для выпадающих списков
         $clusters = ArrayHelper::map(Cluster::find()->all(), 'id', 'name');
         $admins = ArrayHelper::map(Admin::find()