From: fomichev Date: Thu, 24 Oct 2024 15:04:41 +0000 (+0300) Subject: Фильтр по кустовым при создании X-Git-Tag: 1.7~228^2~25 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=e16f276b084b4a33c372b55a460bb935ca5b63f5;p=erp24_rep%2Fyii-erp24%2F.git Фильтр по кустовым при создании --- diff --git a/erp24/controllers/crud/ClusterAdminController.php b/erp24/controllers/crud/ClusterAdminController.php index 41d0b553..fbe70593 100644 --- a/erp24/controllers/crud/ClusterAdminController.php +++ b/erp24/controllers/crud/ClusterAdminController.php @@ -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,])