]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Правки методов и привязки в cluster-link-edit
authorvladfo <fvv2011@gmail.com>
Thu, 17 Oct 2024 06:54:51 +0000 (09:54 +0300)
committervladfo <fvv2011@gmail.com>
Thu, 17 Oct 2024 06:54:51 +0000 (09:54 +0300)
erp24/controllers/ClusterLinkEditController.php
erp24/records/ClusterAdmin.php

index ec403783b4fe6579a15a89c3cd2f798e17ac44db..56a2987f96c332405e0f41eb1afe67704fe1406d 100644 (file)
@@ -11,6 +11,7 @@ use yii_app\helpers\DateHelper;
 use yii_app\records\Admin;
 use yii_app\records\CityStore;
 use yii_app\records\Cluster;
+use yii_app\records\ClusterAdmin;
 use yii_app\records\ClusterCalendar;
 
 use yii_app\records\ClusterSearch;
@@ -84,29 +85,22 @@ class ClusterLinkEditController extends Controller
      */
     public function actionIndex()
     {
-
         $searchModel = new ClusterSearch();
         $dataProvider = $searchModel->search($this->request->queryParams);
 
-
-        $clusterManagers = Admin::find()
-            ->select(['name', 'id', 'store_arr'])
+        // Получение всех менеджеров группы "Кустовой директор"
+     /*   $clusterManagers = Admin::find()
+            ->select(['name', 'id'])
             ->where(['group_id' => 7, 'group_name' => 'Кустовой директор'])
             ->indexBy('id')
-            ->all();
-
+            ->all();*/
 
         $currentDate = Yii::$app->request->get('ClusterSearch')['date'] ?? date('Y-m-d H:i:s');
 
-
         $earliestDateFrom = '2023-05-19 00:00:00';
-
-
         $specialDate = '2024-09-12 00:00:00';
 
-
         if (strtotime($currentDate) < strtotime($earliestDateFrom)) {
-
             $storeData = StoreDynamic::find()
                 ->select([
                     'value_int AS cluster_id',
@@ -123,7 +117,6 @@ class ClusterLinkEditController extends Controller
 
             $lastUpdates = array_fill_keys(array_column($storeData, 'cluster_id'), $earliestDateFrom);
         } else {
-
             $storeData = StoreDynamic::find()
                 ->select([
                     'value_int AS cluster_id',
@@ -140,64 +133,38 @@ class ClusterLinkEditController extends Controller
                 ->all();
 
             $lastUpdates = ArrayHelper::map($storeData, 'cluster_id', 'last_update');
-
         }
 
-
-        $storeLists = ArrayHelper::map($storeData, 'cluster_id', 'stores');  // List of stores for each cluster
+        $storeLists = ArrayHelper::map($storeData, 'cluster_id', 'stores');
         $storeCounts = ArrayHelper::map($storeData, 'cluster_id', 'store_count');
 
-
-
+        // Логика получения менеджеров по открытым привязкам (date_end = '2100-01-01')
         $clusterToManager = [];
-        $matchedManagers = [];
-
 
         foreach ($storeData as $store) {
             $clusterId = $store['cluster_id'];
-            $storeIds = explode(',', $store['stores']);
-            $assignedManager = null;
-
-            foreach ($clusterManagers as $manager) {
-                if (!empty($manager->store_arr)) {
-                    $managerStores = explode(',', $manager->store_arr);
-                    $intersection = array_intersect($storeIds, $managerStores);
 
+            // Поиск открытой привязки (где date_end = '2100-01-01')
+            $clusterAdmin = ClusterAdmin::find()
+                ->where(['cluster_id' => $clusterId, 'date_end' => '2100-01-01'])
+                ->one();
 
-                    if (count($intersection) >= count($storeIds) / 2) {
-                        $assignedManager = $manager->name;
-                        $matchedManagers[] = $manager->id;
-                        break;
-                    }
-                }
+            if ($clusterAdmin) {
+                // Если найдена привязка, берем имя менеджера
+                $assignedManager = $clusterAdmin->admin->name ?? 'Не назначен';
+              //  $assignedManager = $clusterManagers[$clusterAdmin->admin_id]->name ?? 'Не назначен';
+            } else {
+                // Если привязка не найдена
+                $assignedManager = 'Не назначен';
             }
 
-
-            $clusterToManager[$clusterId] = $assignedManager ?? 'Не назначен';
-        }
-
-
-        $unassignedClusters = array_filter($clusterToManager, function ($manager) {
-            return $manager === 'Не назначен';
-        });
-
-        $unassignedManagers = array_filter($clusterManagers, function ($manager) use ($matchedManagers) {
-            return !in_array($manager->id, $matchedManagers);
-        });
-
-
-        if (count($unassignedClusters) === 1 && count($unassignedManagers) === 1) {
-            $unassignedClusterId = array_key_first($unassignedClusters);
-            $unassignedManager = reset($unassignedManagers);
-            $clusterToManager[$unassignedClusterId] = $unassignedManager->name;
+            $clusterToManager[$clusterId] = $assignedManager;
         }
 
-
-
         return $this->render('/cluster_link_edit/index', [
             'searchModel' => $searchModel,
             'dataProvider' => $dataProvider,
-            'clusterManagers' => $clusterManagers,
+           // 'clusterManagers' => $clusterManagers,
             'storeCounts' => $storeCounts,
             'lastUpdates' => $lastUpdates,
             'storeLists' => $storeLists,
@@ -393,7 +360,7 @@ class ClusterLinkEditController extends Controller
 
 
             $this->syncClusterManagers();
-            $this->updateStoreCluster($dynamicEntry->store_id, $newClusterId);
+
             return $this->asJson(['success' => true]);
         }
 
@@ -419,7 +386,7 @@ class ClusterLinkEditController extends Controller
 
 
             $this->syncClusterManagers();
-            $this->updateStoreCluster($dynamicEntry->store_id);
+
             Yii::$app->session->setFlash('success', 'Магазин успешно удален из куста.');
         } else {
             Yii::$app->session->setFlash('error', 'Не удалось удалить магазин.');
@@ -459,7 +426,7 @@ class ClusterLinkEditController extends Controller
         $newDynamicEntry->category = 1;
         $newDynamicEntry->save(false);
 
-        $this->updateStoreCluster($storeId,$id);
+
         $this->syncClusterManagers();
 
         Yii::$app->session->setFlash('success', 'Магазин успешно добавлен в куст.');
@@ -469,14 +436,14 @@ class ClusterLinkEditController extends Controller
 
     protected function syncClusterManagers()
     {
-        // Retrieve cluster managers
+
         $clusterManagers = Admin::find()
             ->select(['id', 'store_arr', 'store_arr_guid'])
             ->where(['group_id' => 7, 'group_name' => 'Кустовой директор'])
             ->indexBy('id')
             ->all();
 
-        // Retrieve store data from StoreDynamic
+
         $storeData = StoreDynamic::find()
             ->select(['value_int AS cluster_id', "string_agg(store_id::text, ',') AS stores"])
             ->where(['active' => 1])
@@ -484,61 +451,48 @@ class ClusterLinkEditController extends Controller
             ->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));
 
-            foreach ($clusterManagers as $manager) {
-                if (!empty($manager->store_arr)) {
-                    $managerStores = explode(',', $manager->store_arr);
-                    $intersection = array_intersect($storeIds, $managerStores);
+            // Ищем привязку менеджера к кластеру с открытой датой (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 (count($intersection) >= count($storeIds) / 2) {
+                // Проверяем, существует ли этот менеджер в списке
+                if (isset($clusterManagers[$managerId])) {
+                    $manager = $clusterManagers[$managerId];
 
-                        $manager->store_arr = implode(',', $storeIds);
-                        $manager->store_arr_guid = implode(',', $exportGuids);
+                    // Обновляем данные о магазинах и 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__);
-                        }
+                    // Сохраняем изменения
+                    if ($manager->save(false)) {
+                        Yii::debug("Пользователь {$manager->id} успешно обновлен", __METHOD__);
+                    } else {
+                        Yii::debug("Не получилось обновить пользователя {$manager->id}", __METHOD__);
                     }
                 }
+            } else {
+                Yii::debug("Менеджер для кластера $clusterId не найден", __METHOD__);
             }
         }
     }
 
-    protected function updateStoreCluster($storeId, $clusterId = 0)
-    {
-
-        $storeRecord = CityStore::findOne(['id' => $storeId]);
-
-        if (!$storeRecord) {
-            return false;
-        }
 
 
-        $storeRecord->cluster_id = $clusterId;
-
-
-        if ($storeRecord->save(false)) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
 
     /**
      * Updates an existing Cluster model.
@@ -673,7 +627,7 @@ class ClusterLinkEditController extends Controller
                 $intervals[$store] = $storeDataRow;
             }
 
-           // Yii::info($intervals, 'application');
+
             $clusterHistory = [];
             $clusterSetList = [];
 
@@ -700,7 +654,7 @@ class ClusterLinkEditController extends Controller
                     ];
                 }
             }
-            //var_dump($clusterSetList);
+
             if (!empty($clusterSetList)) {
                 ClusterCalendar::deleteAll(['year' => $yearPost]);
                 foreach ($clusterSetList as $item) {
@@ -726,7 +680,7 @@ class ClusterLinkEditController extends Controller
 
                 }
             }
-            //var_dump($yearPost);
+
 //            die('stop');
             return $this->redirect('view');
            /* return $this->render('/cluster_link_store_edit/update', [
index 4fc9ec83806baacece25c381c23fd6ec4912810d..e43aa9b32d5439273537e53ef55ec6e93deda539 100644 (file)
@@ -3,6 +3,7 @@
 namespace yii_app\records;
 
 use Yii;
+use yii\db\ActiveQuery;
 
 /**
  * This is the model class for table "cluster_admin".
@@ -57,7 +58,7 @@ class ClusterAdmin extends \yii\db\ActiveRecord
         return $this->hasOne(Cluster::class, ['id' => 'cluster_id']);
     }
 
-    public function getAdmin()
+    public function getAdmin(): ActiveQuery
     {
         return $this->hasOne(Admin::class, ['id' => 'admin_id']);
     }