]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
ERP-397: фикс пустых дропдаунов руководства и актуализация комбо после сохранения
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 3 Jun 2026 09:43:40 +0000 (12:43 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 3 Jun 2026 09:43:40 +0000 (12:43 +0300)
- Контроллер: дропдауны КШФ и тер.управляющего всегда включают текущего
  назначенного сотрудника (orWhere id), даже если его group_id изменился
- JS: после сохранения перезагружаем STORES с сервера вместо ручного патча,
  чтобы комбо-список гарантированно отражал актуальный статус из БД

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
erp24/controllers/CityStoreManagementController.php
erp24/web/js/city-store-management/city-store-management.js

index e4b0e81731919d112d92c46572c747f193ff535f..85b0bef2992fe29a85526da15bda4fb09061e702 100644 (file)
@@ -165,8 +165,20 @@ class CityStoreManagementController extends Controller
                 'cityArray'              => ArrayHelper::map(StoreCityList::findAll(['type' => StoreCityList::TYPE_CITY]), 'id', 'name'),
                 'districtArray'          => ArrayHelper::map(StoreCityList::findAll(['type' => StoreCityList::TYPE_DISTRICT]), 'id', 'name'),
                 'matrixTypeArray'        => ArrayHelper::map(MatrixType::find()->all(), 'id', 'name'),
-                'bushChefFloristArray'   => ArrayHelper::map(Admin::findAll(['group_id' => AdminGroup::GROUP_BUSH_CHEF_FLORIST]), 'id', 'name'),
-                'territorialManagerArray' => ArrayHelper::map(Admin::findAll(['group_id' => AdminGroup::GROUP_BUSH_DIRECTOR]), 'id', 'name_full'),
+                'bushChefFloristArray'   => (static function () use ($bushChefFloristDyn): array {
+                    $q = Admin::find()->where(['group_id' => AdminGroup::GROUP_BUSH_CHEF_FLORIST]);
+                    if ($bushChefFloristDyn?->value_int) {
+                        $q->orWhere(['id' => $bushChefFloristDyn->value_int]);
+                    }
+                    return ArrayHelper::map($q->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
+                })(),
+                'territorialManagerArray' => (static function () use ($terrManagerDyn): array {
+                    $q = Admin::find()->where(['group_id' => AdminGroup::GROUP_BUSH_DIRECTOR]);
+                    if ($terrManagerDyn?->value_int) {
+                        $q->orWhere(['id' => $terrManagerDyn->value_int]);
+                    }
+                    return ArrayHelper::map($q->orderBy(['name_full' => SORT_ASC])->all(), 'id', 'name_full');
+                })(),
 
                 // assortment labels (StoreDynamic category 5)
                 'labelIds'    => $labelIds,
index 6d4db81b5943da3d7c06c4667a50f4e32832a786..4b869fdf7e6d1dc695c192965cb8b871c8358962 100644 (file)
@@ -543,13 +543,16 @@ function saveChanges() {
         if (allOk) {
             toast('Сохранено', 'ok');
             clearDirty();
-            var si = STORES.findIndex(function (s) { return s.id === D.id; });
-            if (si !== -1) {
-                STORES[si].isActive = !!csParams.is_active;
-                STORES[si].name = csStore.name || STORES[si].name;
-            }
-            renderComboList(document.getElementById('storeSearchInput').value || '');
-            loadStore(D.id);
+            var savedId = D.id;
+            fetch(CSM_URLS.getStores)
+                .then(function (r) { return r.json(); })
+                .then(function (resp) {
+                    if (resp.success) {
+                        STORES = resp.data;
+                        renderComboList(document.getElementById('storeSearchInput').value || '');
+                    }
+                });
+            loadStore(savedId);
         } else {
             var errs = results.filter(function (r) { return r && !r.success; }).map(function (r) { return r.message; }).join('; ');
             toast('Ошибка: ' + errs, 'err');