use yii\filters\VerbFilter;
use yii_app\records\PlanStore;
use yii_app\records\StoreDynamic;
+use yii_app\services\ClusterManagerService;
use yii_app\services\ExportImportService;
/**
$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');
$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 = 'Не назначен';
}
->all();
}
- //var_dump($stores);
+
$clustersList = ArrayHelper::map(Cluster::find()->all(), 'id', 'name');
$newDynamicEntry->save(false);
- $this->syncClusterManagers();
+ ClusterManagerService::syncClusterManagers();
return $this->asJson(['success' => true]);
}
$dynamicEntry->save(false);
- $this->syncClusterManagers();
+ ClusterManagerService::syncClusterManagers();
Yii::$app->session->setFlash('success', 'Магазин успешно удален из куста.');
} else {
$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.
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.
parent::behaviors(),
[
'verbs' => [
- 'class' => VerbFilter::className(),
+ 'class' => VerbFilter::class,
'actions' => [
'delete' => ['POST'],
],
// Создаём новую запись для 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 {
} else {
// Если такой записи нет, просто создаем новую
if ($model->save()) {
+ ClusterManagerService::syncClusterManagers($model->cluster_id, $model->admin_id);
return $this->redirect(['view', 'id' => $model->id]);
}
}
--- /dev/null
+<?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
<?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: ?>
<!-- Скрытые поля для других пользователей, чтобы сохранить значение по умолчанию -->