]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Удаление списка магазинов
authorvladfo <fvv2011@gmail.com>
Thu, 17 Oct 2024 11:46:46 +0000 (14:46 +0300)
committervladfo <fvv2011@gmail.com>
Thu, 17 Oct 2024 11:46:46 +0000 (14:46 +0300)
erp24/controllers/crud/ClusterAdminController.php
erp24/services/ClusterManagerService.php

index 77667ecc46af6298c9d25064266a8c1e61c7f682..d917c713f0f65443a8f9922dbba6688b884132c2 100644 (file)
@@ -88,6 +88,8 @@ class ClusterAdminController extends Controller
             if ($existingRecord) {
                 // Обновляем дату окончания для текущей записи на текущую дату
                 $existingRecord->date_end = date('Y-m-d');
+
+                ClusterManagerService::clearClusterManagerStores($existingRecord->cluster_id, $existingRecord->admin_id);
                 if (!$existingRecord->save()) {
                     Yii::$app->session->setFlash('error', 'Ошибка при обновлении существующей записи.');
                     return $this->redirect(['create']);
@@ -115,7 +117,7 @@ class ClusterAdminController extends Controller
         $clusters = ArrayHelper::map(Cluster::find()->all(), 'id', 'name');
         $admins = ArrayHelper::map(Admin::find()
             ->select(['id', 'name'])
-            ->where(['NOT IN', 'group_id', [-1, 1000]]) // Исключаем сотрудников с group_id = -1 и group_id = 1000
+            ->where(['IN', 'group_id', [7]]) // Только кустовые директора
             ->all(), 'id', 'name');
 
         $user = Yii::$app->user->identity;
@@ -139,18 +141,39 @@ class ClusterAdminController extends Controller
     {
         $model = $this->findModel($id);
 
-        if ($this->request->isPost && $model->load($this->request->post()) && $model->save()) {
-            return $this->redirect(['view', 'id' => $model->id]);
-        }
 
+        // Сохраним оригинальные значения до изменения
+        $originalClusterId = $model->cluster_id;
+        $originalAdminId = $model->admin_id;
+
+        if ($this->request->isPost && $model->load($this->request->post())) {
+            // Если запись успешно обновлена
+            if ($model->save()) {
+                // Проверяем, изменились ли cluster_id или admin_id
+                if ($originalClusterId != $model->cluster_id || $originalAdminId != $model->admin_id) {
+                    // Очищаем старую привязку менеджера к магазину
+                    ClusterManagerService::clearClusterManagerStores($originalClusterId, $originalAdminId);
+
+                    // Синхронизируем новую привязку
+                    ClusterManagerService::syncClusterManagers($model->cluster_id, $model->admin_id);
+                }
+
+                // Перенаправляем на страницу просмотра
+                return $this->redirect(['view', 'id' => $model->id]);
+            } else {
+                Yii::$app->session->setFlash('error', 'Ошибка при сохранении данных.');
+            }
+        }
 
         // Получение данных для выпадающих списков
         $clusters = ArrayHelper::map(Cluster::find()->all(), 'id', 'name');
         $admins = ArrayHelper::map(Admin::find()
             ->select(['id', 'name'])
-            ->where(['NOT IN', 'group_id', [-1, 1000]]) // Исключаем сотрудников с group_id = -1 и group_id = 1000
+            ->where(['IN', 'group_id', [7]]) // Только кустовые директора
             ->all(), 'id', 'name');
+
         $user = Yii::$app->user->identity;
+
         return $this->render('update', [
             'model' => $model,
             'clusters' => $clusters,
index a900c68aa8553cb9c434fe9ce4b0dd495f45134e..2e8409a5124b57c26e9d6c42496dff5cb73e67ca 100644 (file)
@@ -80,4 +80,69 @@ class ClusterManagerService
             }
         }
     }
+
+
+    public static function clearClusterManagerStores($clusterId, $adminId)
+    {
+
+        $clusterAdmin = ClusterAdmin::find()
+            ->where(['cluster_id' => $clusterId, 'admin_id' => $adminId, 'date_end' => '2100-01-01'])
+            ->one();
+
+        if (!$clusterAdmin) {
+            Yii::debug("Привязка для кластера $clusterId и администратора $adminId не найдена или уже закрыта.", __METHOD__);
+            return false;
+        }
+
+
+        $manager = Admin::findOne($adminId);
+        if (!$manager) {
+            Yii::debug("Менеджер с ID $adminId не найден.", __METHOD__);
+            return false;
+        }
+
+
+        $clusterStores = StoreDynamic::find()
+            ->select(['value_int AS cluster_id', "string_agg(store_id::text, ',') AS stores"])
+            ->where(['active' => 1, 'value_int' => $clusterId])
+            ->groupBy('value_int')
+            ->asArray()
+            ->one();
+
+        if (!$clusterStores) {
+            Yii::debug("Магазины для кластера $clusterId не найдены.", __METHOD__);
+            return false;
+        }
+
+        $clusterStoreIds = explode(',', $clusterStores['stores']);
+
+        // Текущий список магазинов у менеджера
+        $managerStores = explode(',', $manager->store_arr);
+
+        // Удаляем из списка менеджера магазины, которые пересекаются с магазинами кластера
+        $newStoreArr = array_diff($managerStores, $clusterStoreIds);
+
+        // Обновляем поля store_arr и store_arr_guid
+        $manager->store_arr = implode(',', $newStoreArr);
+
+        // Получим экспортные GUID магазинов для удаления
+        $entityCityStore = ExportImportService::getEntityByType('city_store');
+        $exportCityStore = ArrayHelper::map($entityCityStore, 'entity_id', 'export_val');
+        $exportGuidsToRemove = array_intersect_key($exportCityStore, array_flip($clusterStoreIds));
+
+        // Обновляем store_arr_guid у менеджера, исключая пересекающиеся магазины
+        $managerGuids = explode(',', $manager->store_arr_guid);
+        $newStoreGuids = array_diff($managerGuids, $exportGuidsToRemove);
+        $manager->store_arr_guid = implode(',', $newStoreGuids);
+
+        // Сохраняем изменения
+        if ($manager->save(false)) {
+            Yii::debug("Пользователь {$manager->id} успешно обновлен после удаления магазинов.", __METHOD__);
+            return true;
+        } else {
+            Yii::debug("Не удалось обновить пользователя {$manager->id} при удалении магазинов.", __METHOD__);
+            return false;
+        }
+    }
+
 }
\ No newline at end of file