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']);
$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;
{
$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,
}
}
}
+
+
+ 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