From cb0d4cd0af7455eca561578c3bb5a075337a8f27 Mon Sep 17 00:00:00 2001 From: vladfo Date: Wed, 16 Oct 2024 15:14:11 +0300 Subject: [PATCH] =?utf8?q?=D0=97=D0=B0=D0=BA=D1=80=D1=8B=D1=82=D0=B8=D0=B5?= =?utf8?q?=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D0=B8=20=D0=BF=D0=BE=20=D0=BA?= =?utf8?q?=D0=BB=D0=B0=D1=81=D1=82=D0=B5=D1=80=D1=83=20=D0=BF=D1=80=D0=B8?= =?utf8?q?=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../crud/ClusterAdminController.php | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/erp24/controllers/crud/ClusterAdminController.php b/erp24/controllers/crud/ClusterAdminController.php index 4fbfd922..d27599f6 100644 --- a/erp24/controllers/crud/ClusterAdminController.php +++ b/erp24/controllers/crud/ClusterAdminController.php @@ -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() -- 2.39.5