]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Синхронизация при добавлении или смене
authorvladfo <fvv2011@gmail.com>
Thu, 17 Oct 2024 11:19:01 +0000 (14:19 +0300)
committervladfo <fvv2011@gmail.com>
Thu, 17 Oct 2024 11:19:01 +0000 (14:19 +0300)
erp24/controllers/ClusterLinkEditController.php
erp24/controllers/crud/ClusterAdminController.php
erp24/services/ClusterManagerService.php [new file with mode: 0644]
erp24/views/crud/cluster-admin/_form.php

index 56a2987f96c332405e0f41eb1afe67704fe1406d..c1c578ff510f217d316487f80e359aa48eb39754 100644 (file)
@@ -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.
index d27599f61dfa7e84043c239360faa537649413e8..77667ecc46af6298c9d25064266a8c1e61c7f682 100644 (file)
@@ -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 (file)
index 0000000..a900c68
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+
+namespace yii_app\services;
+
+use Yii;
+use yii\helpers\ArrayHelper;
+use yii_app\records\Admin;
+use yii_app\records\ClusterAdmin;
+use yii_app\records\StoreDynamic;
+
+class ClusterManagerService
+{
+    /**
+     * Синхронизация менеджеров с кластерами
+     *
+     * @param int|null $clusterId
+     * @param int|null $adminId
+     *
+     * Если $clusterId и $adminId переданы, обновляем только конкретного менеджера для кластера.
+     * Если нет, работаем со всеми кластерами как раньше.
+     */
+    public static function syncClusterManagers($clusterId = null, $adminId = null)
+    {
+        // Получение всех менеджеров группы "Кустовой директор"
+        $clusterManagers = Admin::find()
+            ->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
index e9f0bef9ca20f3a464032b150d88e32604bd657f..8f7898d58dc60a744c0f2f1206543fc12130def8 100644 (file)
@@ -47,11 +47,11 @@ use yii_app\records\ClusterAdmin;
         <?php if (in_array($user->group_id , [81])): ?>
             <!-- Поля для группы 81 -->
             <?= $form->field($model, 'date_start')->input('date', [
-                'value' => date('Y-m-d'),
+                'value' => $model->date_start ?? date('Y-m-d'),
             ]) ?>
 
             <?= $form->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')),
             ]) ?>
         <?php else: ?>
             <!-- Скрытые поля для других пользователей, чтобы сохранить значение по умолчанию -->