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;
*/
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',
$lastUpdates = array_fill_keys(array_column($storeData, 'cluster_id'), $earliestDateFrom);
} else {
-
$storeData = StoreDynamic::find()
->select([
'value_int AS cluster_id',
->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,
$this->syncClusterManagers();
- $this->updateStoreCluster($dynamicEntry->store_id, $newClusterId);
+
return $this->asJson(['success' => true]);
}
$this->syncClusterManagers();
- $this->updateStoreCluster($dynamicEntry->store_id);
+
Yii::$app->session->setFlash('success', 'Магазин успешно удален из куста.');
} else {
Yii::$app->session->setFlash('error', 'Не удалось удалить магазин.');
$newDynamicEntry->category = 1;
$newDynamicEntry->save(false);
- $this->updateStoreCluster($storeId,$id);
+
$this->syncClusterManagers();
Yii::$app->session->setFlash('success', 'Магазин успешно добавлен в куст.');
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])
->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.
$intervals[$store] = $storeDataRow;
}
- // Yii::info($intervals, 'application');
+
$clusterHistory = [];
$clusterSetList = [];
];
}
}
- //var_dump($clusterSetList);
+
if (!empty($clusterSetList)) {
ClusterCalendar::deleteAll(['year' => $yearPost]);
foreach ($clusterSetList as $item) {
}
}
- //var_dump($yearPost);
+
// die('stop');
return $this->redirect('view');
/* return $this->render('/cluster_link_store_edit/update', [