From: vladfo Date: Thu, 17 Oct 2024 06:54:51 +0000 (+0300) Subject: Правки методов и привязки в cluster-link-edit X-Git-Tag: 1.7~228^2~35 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=80bf5e10294449b7eb7ab6342486215e34bd6c1e;p=erp24_rep%2Fyii-erp24%2F.git Правки методов и привязки в cluster-link-edit --- diff --git a/erp24/controllers/ClusterLinkEditController.php b/erp24/controllers/ClusterLinkEditController.php index ec403783..56a2987f 100644 --- a/erp24/controllers/ClusterLinkEditController.php +++ b/erp24/controllers/ClusterLinkEditController.php @@ -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', [ diff --git a/erp24/records/ClusterAdmin.php b/erp24/records/ClusterAdmin.php index 4fc9ec83..e43aa9b3 100644 --- a/erp24/records/ClusterAdmin.php +++ b/erp24/records/ClusterAdmin.php @@ -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']); }