From 195218c90ee30d1426e10d9e854ccfe928019394 Mon Sep 17 00:00:00 2001 From: vladfo Date: Thu, 17 Oct 2024 14:19:01 +0300 Subject: [PATCH] =?utf8?q?=20=D0=A1=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD?= =?utf8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B8=20?= =?utf8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B8=20?= =?utf8?q?=D0=B8=D0=BB=D0=B8=20=D1=81=D0=BC=D0=B5=D0=BD=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../controllers/ClusterLinkEditController.php | 84 +++---------------- .../crud/ClusterAdminController.php | 5 +- erp24/services/ClusterManagerService.php | 83 ++++++++++++++++++ erp24/views/crud/cluster-admin/_form.php | 4 +- 4 files changed, 99 insertions(+), 77 deletions(-) create mode 100644 erp24/services/ClusterManagerService.php diff --git a/erp24/controllers/ClusterLinkEditController.php b/erp24/controllers/ClusterLinkEditController.php index 56a2987f..c1c578ff 100644 --- a/erp24/controllers/ClusterLinkEditController.php +++ b/erp24/controllers/ClusterLinkEditController.php @@ -20,6 +20,7 @@ use yii\web\NotFoundHttpException; use yii\filters\VerbFilter; use yii_app\records\PlanStore; use yii_app\records\StoreDynamic; +use yii_app\services\ClusterManagerService; use yii_app\services\ExportImportService; /** @@ -88,12 +89,6 @@ class ClusterLinkEditController extends Controller $searchModel = new ClusterSearch(); $dataProvider = $searchModel->search($this->request->queryParams); - // Получение всех менеджеров группы "Кустовой директор" - /* $clusterManagers = Admin::find() - ->select(['name', 'id']) - ->where(['group_id' => 7, 'group_name' => 'Кустовой директор']) - ->indexBy('id') - ->all();*/ $currentDate = Yii::$app->request->get('ClusterSearch')['date'] ?? date('Y-m-d H:i:s'); @@ -138,23 +133,23 @@ class ClusterLinkEditController extends Controller $storeLists = ArrayHelper::map($storeData, 'cluster_id', 'stores'); $storeCounts = ArrayHelper::map($storeData, 'cluster_id', 'store_count'); - // Логика получения менеджеров по открытым привязкам (date_end = '2100-01-01') + $clusterToManager = []; foreach ($storeData as $store) { $clusterId = $store['cluster_id']; - // Поиск открытой привязки (где date_end = '2100-01-01') + $clusterAdmin = ClusterAdmin::find() ->where(['cluster_id' => $clusterId, 'date_end' => '2100-01-01']) ->one(); if ($clusterAdmin) { - // Если найдена привязка, берем имя менеджера + $assignedManager = $clusterAdmin->admin->name ?? 'Не назначен'; - // $assignedManager = $clusterManagers[$clusterAdmin->admin_id]->name ?? 'Не назначен'; + } else { - // Если привязка не найдена + $assignedManager = 'Не назначен'; } @@ -289,7 +284,7 @@ class ClusterLinkEditController extends Controller ->all(); } - //var_dump($stores); + $clustersList = ArrayHelper::map(Cluster::find()->all(), 'id', 'name'); @@ -359,7 +354,7 @@ class ClusterLinkEditController extends Controller $newDynamicEntry->save(false); - $this->syncClusterManagers(); + ClusterManagerService::syncClusterManagers(); return $this->asJson(['success' => true]); } @@ -385,7 +380,7 @@ class ClusterLinkEditController extends Controller $dynamicEntry->save(false); - $this->syncClusterManagers(); + ClusterManagerService::syncClusterManagers(); Yii::$app->session->setFlash('success', 'Магазин успешно удален из куста.'); } else { @@ -427,72 +422,13 @@ class ClusterLinkEditController extends Controller $newDynamicEntry->save(false); - $this->syncClusterManagers(); + ClusterManagerService::syncClusterManagers(); Yii::$app->session->setFlash('success', 'Магазин успешно добавлен в куст.'); return $this->redirect(['view-all', 'id' => $id]); } - protected function syncClusterManagers() - { - - $clusterManagers = Admin::find() - ->select(['id', 'store_arr', 'store_arr_guid']) - ->where(['group_id' => 7, 'group_name' => 'Кустовой директор']) - ->indexBy('id') - ->all(); - - - $storeData = StoreDynamic::find() - ->select(['value_int AS cluster_id', "string_agg(store_id::text, ',') AS stores"]) - ->where(['active' => 1]) - ->groupBy('value_int') - ->asArray() - ->all(); - - $storeLists = ArrayHelper::map($storeData, 'cluster_id', 'stores'); - - // Получаем данные для экспорта city_store - $entityCityStore = ExportImportService::getEntityByType('city_store'); - $exportCityStore = ArrayHelper::map($entityCityStore, 'entity_id', 'export_val'); - - foreach ($storeLists as $clusterId => $stores) { - // Разделяем магазины на массив - $storeIds = explode(',', $stores); - $exportGuids = array_intersect_key($exportCityStore, array_flip($storeIds)); - - // Ищем привязку менеджера к кластеру с открытой датой (date_end = '2100-01-01') - $clusterAdmin = ClusterAdmin::find() - ->where(['cluster_id' => $clusterId, 'date_end' => '2100-01-01']) - ->one(); - - if ($clusterAdmin) { - $managerId = $clusterAdmin->admin_id; - - // Проверяем, существует ли этот менеджер в списке - if (isset($clusterManagers[$managerId])) { - $manager = $clusterManagers[$managerId]; - - // Обновляем данные о магазинах и GUID - $manager->store_arr = implode(',', $storeIds); - $manager->store_arr_guid = implode(',', $exportGuids); - - // Сохраняем изменения - if ($manager->save(false)) { - Yii::debug("Пользователь {$manager->id} успешно обновлен", __METHOD__); - } else { - Yii::debug("Не получилось обновить пользователя {$manager->id}", __METHOD__); - } - } - } else { - Yii::debug("Менеджер для кластера $clusterId не найден", __METHOD__); - } - } - } - - - /** * Updates an existing Cluster model. diff --git a/erp24/controllers/crud/ClusterAdminController.php b/erp24/controllers/crud/ClusterAdminController.php index d27599f6..77667ecc 100644 --- a/erp24/controllers/crud/ClusterAdminController.php +++ b/erp24/controllers/crud/ClusterAdminController.php @@ -11,6 +11,7 @@ use yii_app\records\ClusterAdminSearch; use yii\web\Controller; use yii\web\NotFoundHttpException; use yii\filters\VerbFilter; +use yii_app\services\ClusterManagerService; /** * ClusterAdminController implements the CRUD actions for ClusterAdmin model. @@ -26,7 +27,7 @@ class ClusterAdminController extends Controller parent::behaviors(), [ 'verbs' => [ - 'class' => VerbFilter::className(), + 'class' => VerbFilter::class, 'actions' => [ 'delete' => ['POST'], ], @@ -95,6 +96,7 @@ class ClusterAdminController extends Controller // Создаём новую запись для cluster_id и admin_id $model->date_start = date('Y-m-d'); // Опционально установить текущую дату как начало новой привязки if ($model->save()) { + ClusterManagerService::syncClusterManagers($model->cluster_id, $model->admin_id); Yii::$app->session->setFlash('success', 'Новая запись успешно создана, предыдущая была закрыта.'); return $this->redirect(['view', 'id' => $model->id]); } else { @@ -103,6 +105,7 @@ class ClusterAdminController extends Controller } else { // Если такой записи нет, просто создаем новую if ($model->save()) { + ClusterManagerService::syncClusterManagers($model->cluster_id, $model->admin_id); return $this->redirect(['view', 'id' => $model->id]); } } diff --git a/erp24/services/ClusterManagerService.php b/erp24/services/ClusterManagerService.php new file mode 100644 index 00000000..a900c68a --- /dev/null +++ b/erp24/services/ClusterManagerService.php @@ -0,0 +1,83 @@ +select(['id', 'store_arr', 'store_arr_guid']) + ->where(['group_id' => 7, 'group_name' => 'Кустовой директор']) + ->indexBy('id') + ->all(); + + // Получение данных о кластерах + $storeDataQuery = StoreDynamic::find() + ->select(['value_int AS cluster_id', "string_agg(store_id::text, ',') AS stores"]) + ->where(['active' => 1]) + ->groupBy('value_int') + ->asArray(); + + // Если передан clusterId, фильтруем данные по нему + if ($clusterId) { + $storeDataQuery->andWhere(['value_int' => $clusterId]); + } + + $storeData = $storeDataQuery->all(); + $storeLists = ArrayHelper::map($storeData, 'cluster_id', 'stores'); + + // Получаем данные для экспорта city_store + $entityCityStore = ExportImportService::getEntityByType('city_store'); + $exportCityStore = ArrayHelper::map($entityCityStore, 'entity_id', 'export_val'); + + foreach ($storeLists as $clusterId => $stores) { + // Разделяем магазины на массив + $storeIds = explode(',', $stores); + $exportGuids = array_intersect_key($exportCityStore, array_flip($storeIds)); + + // Ищем привязку менеджера к кластеру с открытой датой (date_end = '2100-01-01') + $clusterAdmin = ClusterAdmin::find() + ->where(['cluster_id' => $clusterId, 'date_end' => '2100-01-01']) + ->one(); + + if ($clusterAdmin && (!$adminId || $clusterAdmin->admin_id == $adminId)) { + $managerId = $clusterAdmin->admin_id; + + // Проверяем, существует ли этот менеджер в списке + if (isset($clusterManagers[$managerId])) { + $manager = $clusterManagers[$managerId]; + + // Обновляем данные о магазинах и GUID + $manager->store_arr = implode(',', $storeIds); + $manager->store_arr_guid = implode(',', $exportGuids); + + // Сохраняем изменения + if ($manager->save(false)) { + Yii::debug("Пользователь {$manager->id} успешно обновлен", __METHOD__); + } else { + Yii::debug("Не получилось обновить пользователя {$manager->id}", __METHOD__); + } + } + } else { + Yii::debug("Менеджер для кластера $clusterId не найден", __METHOD__); + } + } + } +} \ No newline at end of file diff --git a/erp24/views/crud/cluster-admin/_form.php b/erp24/views/crud/cluster-admin/_form.php index e9f0bef9..8f7898d5 100644 --- a/erp24/views/crud/cluster-admin/_form.php +++ b/erp24/views/crud/cluster-admin/_form.php @@ -47,11 +47,11 @@ use yii_app\records\ClusterAdmin; group_id , [81])): ?> field($model, 'date_start')->input('date', [ - 'value' => date('Y-m-d'), + 'value' => $model->date_start ?? date('Y-m-d'), ]) ?> field($model, 'date_end')->input('date', [ - 'value' => date('Y-m-d', strtotime('2100-01-01')), + 'value' => $model->date_end ?? date('Y-m-d', strtotime('2100-01-01')), ]) ?> -- 2.39.5