$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()