From 9602914e7f87f15f42e348f23af4470f6b71c78f Mon Sep 17 00:00:00 2001 From: marina Date: Thu, 23 Jan 2025 09:41:08 +0300 Subject: [PATCH] =?utf8?q?ERP-282=20=D0=9D=D1=83=D0=B6=D0=BD=D0=BE=20?= =?utf8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D1=82=D1=8C=20=D0=B8=D0=BD=D1=82?= =?utf8?q?=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=20=D0=BD=D0=B0=D1=81=D1=82?= =?utf8?q?=D1=80=D0=BE=D0=B9=D0=BA=D0=B8=20=D0=BC=D0=B0=D0=B3=D0=B0=D0=B7?= =?utf8?q?=D0=B8=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../controllers/CityStoreParamsController.php | 57 ++++++-- ...reate_matrix_type_and_store_type_table.php | 34 ----- ...reate_matrix_type_table_and_store_type.php | 43 ++++++ erp24/views/city-store-params/index.php | 73 +++++----- .../js/city-store-params/city-store-params.js | 131 +++++++----------- 5 files changed, 172 insertions(+), 166 deletions(-) delete mode 100644 erp24/migrations/m250121_132357_create_matrix_type_and_store_type_table.php create mode 100644 erp24/migrations/m250123_063531_create_matrix_type_table_and_store_type.php diff --git a/erp24/controllers/CityStoreParamsController.php b/erp24/controllers/CityStoreParamsController.php index a3803326..78436dd6 100644 --- a/erp24/controllers/CityStoreParamsController.php +++ b/erp24/controllers/CityStoreParamsController.php @@ -10,8 +10,14 @@ use yii\web\Controller; use yii\web\NotFoundHttpException; use yii\filters\VerbFilter; use yii\web\Response; +use yii_app\records\Admin; +use yii_app\records\City; use yii_app\records\CityStore; use yii_app\records\CityStoreParams; +use yii_app\records\Cluster; +use yii_app\records\ClusterAdmin; +use yii_app\records\StoreCityList; +use yii_app\records\StoreDynamic; /** * CityStoreParamsController реализует CRUD для модели CityStoreParams. @@ -122,10 +128,6 @@ class CityStoreParamsController extends Controller $addressRegion = $data['address_region'] ?? ''; $addressDistrict = $data['address_district'] ?? ''; $storeType = $data['store_type'] ?? ''; - //добавить колонки верхние - - $territorialManager = $data['territorial_manager'] ?? ''; //номер куста - $bushChefFlorist = $data['bush_chef_florist'] ?? ''; //store-dynamic categore 2 $stores = CityStore::find() ->andWhere(['=', 'visible', CityStore::IS_VISIBLE]) @@ -136,7 +138,7 @@ class CityStoreParamsController extends Controller }); } - public function getData() + public function actionGetData() { Yii::$app->response->format = Response::FORMAT_JSON; @@ -144,19 +146,46 @@ class CityStoreParamsController extends Controller $store = CityStore::findOne($storeId); - if (empty($stores)) { - return ['error' => 'Не найдено магазинов']; + if ($store === null) { + return [ + 'success' => false, + 'message' => 'Магазин не найден', + ]; } - $storeTypes = ArrayHelper::map($stores, 'id', 'store_type'); - $cities = ArrayHelper::map($stores, 'id', 'city'); - $territorialManagers = ArrayHelper::map($stores, 'id', 'territorial_manager'); + $name = $store->name; + $type = $store->type; + $region = StoreCityList::findOne($store->region)->name ?? ''; + $city = StoreCityList::findOne($store->city)->name ?? ''; + $district = StoreCityList::findOne($store->district) ?? ''; + + $bushId = StoreDynamic::findOne(['store_id' => $storeId, 'active' => 1, 'category' => 1])->value_int ?? ''; + $territorialManagerId = ClusterAdmin::findOne(['cluster_id' => $bushId])->admin_id ?? ''; + $territorialManager = empty($territorialManagerId) ? null : Admin::findOne($territorialManagerId)->name_full; + + $bushChefFloristId = StoreDynamic::findOne(['store_id' => $storeId, 'active' => 1, 'category' => 2])->value_int ?? ''; + $bushChefFlorist = empty($bushChefFloristId) ? null : Admin::findOne($bushChefFloristId)->name_full; + + $storeArea = CityStoreParams::findOne($storeId)->store_area ?? null; + $showcaseVolume = CityStoreParams::findOne($storeId)->showcase_volume ?? null; + $freezeArea = CityStoreParams::findOne($storeId)->freeze_area ?? null; + $freezeVolume = CityStoreParams::findOne($storeId)->freeze_volume ?? null; return [ - 'store_types' => $storeTypes, - 'cities' => $cities, - 'territorial_managers' => $territorialManagers, + 'success' => true, + 'data' => [ + 'name' => $name, + 'type' => $type, + 'region' => $region, + 'city' => $city, + 'district' => $district, + 'territorialManager' => $territorialManager, + 'bushChefFlorist' => $bushChefFlorist, + 'storeArea' => $storeArea, + 'showcaseVolume' => $showcaseVolume, + 'freezeArea' => $freezeArea, + 'freezeVolume' => $freezeVolume + ], ]; - } } diff --git a/erp24/migrations/m250121_132357_create_matrix_type_and_store_type_table.php b/erp24/migrations/m250121_132357_create_matrix_type_and_store_type_table.php deleted file mode 100644 index 13f06f09..00000000 --- a/erp24/migrations/m250121_132357_create_matrix_type_and_store_type_table.php +++ /dev/null @@ -1,34 +0,0 @@ -createTable('{{%matrix_type}}', [ - 'id' => $this->primaryKey(), - 'name' => $this->string(255)->comment('Название типа матрицы') - ]); - - $this->createTable('{{%store_type}}', [ - 'id' => $this->primaryKey(), - 'name' => $this->string(255)->comment('Название типа магазина') - ]); - } - - /** - * {@inheritdoc} - */ - public function safeDown() - { - $this->dropTable('{{%matrix_type}}'); - $this->dropTable('{{%store_type}}'); - } -} diff --git a/erp24/migrations/m250123_063531_create_matrix_type_table_and_store_type.php b/erp24/migrations/m250123_063531_create_matrix_type_table_and_store_type.php new file mode 100644 index 00000000..3987bf54 --- /dev/null +++ b/erp24/migrations/m250123_063531_create_matrix_type_table_and_store_type.php @@ -0,0 +1,43 @@ +createTable('{{%erp24.matrix_type}}', [ + 'id' => $this->primaryKey(), + 'name' => $this->string(255)->comment('Название типа матрицы'), + 'created_by' => $this->integer()->notNull()->comment('ИД создателя'), + 'created_at' => $this->timestamp()->notNull()->comment('Дата создания'), + 'updated_by' => $this->integer()->null()->comment('ИД редактировавшего'), + 'updated_at' => $this->timestamp()->null()->comment('Дата обновления') + ]); + + $this->createTable('{{%erp24.store_type}}', [ + 'id' => $this->primaryKey(), + 'name' => $this->string(255)->comment('Название типа магазина'), + 'created_by' => $this->integer()->notNull()->comment('ИД создателя'), + 'created_at' => $this->timestamp()->notNull()->comment('Дата создания'), + 'updated_by' => $this->integer()->null()->comment('ИД редактировавшего'), + 'updated_at' => $this->timestamp()->null()->comment('Дата обновления') + + ]); + } + + /** + * {@inheritdoc} + */ + public function safeDown() + { + $this->dropTable('{{%erp24.matrix_type}}'); + $this->dropTable('{{%erp24.store_type}}'); + } +} diff --git a/erp24/views/city-store-params/index.php b/erp24/views/city-store-params/index.php index 00892e56..1992e827 100644 --- a/erp24/views/city-store-params/index.php +++ b/erp24/views/city-store-params/index.php @@ -1,6 +1,5 @@ registerJsFile('/js/city-store-params/city-store-params.js', ['position' ?>
-
-
- StoreCityList::TYPE_CITY]), 'id', 'name'), - ['prompt' => 'Выберите город', 'class' => 'form-select', 'id' => 'address_city']); - ?> -
-
@@ -36,11 +27,21 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position' ['prompt' => 'Выберите регион', 'class' => 'form-select', 'id' => 'address_region']); ?> 'd-block mt-2 text-decoration-none']); + Url::to('/store_type')], ['class' => 'd-block mt-2 text-decoration-none']); + ?> +
+ +
+
+
+ StoreCityList::TYPE_CITY]), 'id', 'name'), + ['prompt' => 'Выберите город', 'class' => 'form-select', 'id' => 'address_city']); ?>
+
registerJsFile('/js/city-store-params/city-store-params.js', ['position'
- true, 'size' => 16, 'class' => 'form-control', - 'id' => 'selected_store', + 'id' => 'selected-store', ]) ?> + 'btn btn-primary w-100', 'id' => 'edit-button']); ?>
-
-
- +
+ + 'store-name', 'class' => 'h5']); ?>
-
- \yii_app\records\AdminGroup::GROUP_BUSH_DIRECTOR]), 'id', 'name_full'), ['prompt' => 'Тип магазина', 'class' => 'form-select']); ?> +
+ AdminGroup::GROUP_BUSH_DIRECTOR]), 'id', 'name_full'), + ['prompt' => 'Тип магазина', 'class' => 'form-select', 'id' => 'store_type']); ?> 'd-block mt-2 text-decoration-none']); ?>
- 'h5']) ?> +
- 'Город', 'class' => 'form-select']); ?> + 'Регион', 'class' => 'form-select', 'id' => 'region']); ?>
- 'Город', 'class' => 'form-select']); ?> + 'Город', 'class' => 'form-select', 'id' => 'city']); ?>
- 'Город', 'class' => 'form-select']); ?> + 'Район', 'class' => 'form-select', 'id' => 'district']); ?>
- - 'd-block mb-5 text-decoration-none']); ?> + + 'd-block mb-5 text-decoration-none']); ?>
- + 'territorial-manager', 'class' => 'h5']); ?>
- 'd-block mb-5 text-decoration-none']); ?> + 'd-block mb-5 text-decoration-none']); ?>
- 'Город', 'class' => 'form-select']); ?> + 'Кустовой шеф-флорист', 'class' => 'form-select', 'id' => 'bush-chef-florist']); ?>
- 'form-label']); ?> + 'form-label']); ?> 'store-area', 'class' => 'form-control', 'placeholder' => 'Введите число', 'oninput' => 'validateDecimal(this)' ]); ?> - 'form-label']); ?> + 'form-label']); ?> 'showcase-volume', 'class' => 'form-control', 'placeholder' => 'Введите число', 'oninput' => 'validateDecimal(this)' ]); ?> - 'form-label']); ?> + 'form-label']); ?> 'freeze-area', 'class' => 'form-control', 'placeholder' => 'Введите число', 'oninput' => 'validateDecimal(this)' @@ -183,6 +190,7 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position' 'form-label']); ?> 'freeze-volume', 'class' => 'form-control', 'placeholder' => 'Введите число', 'oninput' => 'validateDecimal(this)' @@ -194,16 +202,13 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
'matrix_type', - 'items' => \yii\helpers\ArrayHelper::map( - \yii_app\api3\modules\v1\models\Admin::findAll(['group_id' => \yii_app\records\AdminGroup::GROUP_BUSH_DIRECTOR]), - 'id', 'name_full' - ), + 'items' => [], 'options' => [ 'size' => false ], 'clientOptions' => [ 'moveOnSelect' => false, - 'nonSelectedListLabel' => "Тип матрицы
" . Html::a('Редактировать', '#'), // Перенос строки с ссылкой + 'nonSelectedListLabel' => "Тип матрицы
" . Html::a('Редактировать', '#'), 'selectedListLabel' => " 

", 'showFilterInputs' => false, 'clearButton' => false, diff --git a/erp24/web/js/city-store-params/city-store-params.js b/erp24/web/js/city-store-params/city-store-params.js index 07dd2c85..e40b8694 100644 --- a/erp24/web/js/city-store-params/city-store-params.js +++ b/erp24/web/js/city-store-params/city-store-params.js @@ -1,5 +1,4 @@ $(document).ready(function () { - // Функция для отправки данных через AJAX function sendData() { var formData = { address_city: $('#address_city').val(), @@ -16,96 +15,60 @@ $(document).ready(function () { type: 'GET', // Метод запроса data: formData, // Данные формы success: function (response) { - // Ответ от сервера (список магазинов или другие данные) - if (response && typeof response === 'object') { - // Обновляем dropdown - var options = ''; - $.each(response, function (key, value) { - options += ''; - }); + // Ответ от сервера (список магазинов или другие данные) + if (response && typeof response === 'object') { + // Обновляем dropdown + var options = ''; + $.each(response, function (key, value) { + options += ''; + }); - // Вставляем полученные опции в select с id selectedValues - $('#selected_store').html(options); + $('#selected-store').html(options); + } + }, + error: function (xhr, status, error) { + console.error("Ошибка AJAX: " + error); } - }, - error: function (xhr, status, error) { - console.error("Ошибка AJAX: " + error); - } - }); + }); } - // Отслеживаем изменения в полях формы - $('#address_city, #address_region, #address_district, #store_type, #territorial_manager, #bush_chef_florist').on('change', function () { + $('#apply-button').on('click', function () { sendData(); }); - // Также можно отправить запрос при нажатии на кнопку "Применить" - $('#apply-button').on('click', function () { - sendData(); + $('#edit-button').on('click', function () { + getData() }); + + function getData() { + var formData = { + selected_store: $('#selected-store').val(), + }; + + $.ajax({ + url: '/city-store-params/get-data', + type: 'GET', + data: formData, + success: function (response) { + var data = response.data; + $('#store_type').val(data.type); + $('#region').val(data.region); + $('#city').val(data.city); + $('#district').val(data.district); + $('#store-name').text(data.name); + $('#freeze-volume').text(data.freezeVolume); + $('#freeze-area').text(data.freezeArea); + $('#showcase-volume').text(data.showcaseVolume); + $('#store-area').text(data.storeArea); + $('#territorial-manager').text(data.territorialManager); + $('#bush-chef-florist').text(data.bushChefFlorist); + }, + error: function (xhr, status, error) { + console.error("Ошибка AJAX: " + error); + alert("Произошла ошибка при отправке данных."); + } + }); + } }); -// -// $(document).ready(function () { -// // Функция для отправки AJAX-запроса и обновления данных на форме -// function sendData() { -// // Получаем выбранные значения из select (multiple) -// var selectedValues = $('#selectedValues').val(); -// -// // Если ничего не выбрано, не отправляем запрос -// if (!selectedValues || selectedValues.length === 0) { -// return; -// } -// -// // Отправка данных через AJAX -// $.ajax({ -// url: '', // URL контроллера и экшн -// type: 'GET', // Метод запроса -// data: { selectedValues: selectedValues }, // Данные (выбранные значения) -// success: function (response) { -// // Проверяем, есть ли ошибки в ответе -// if (response.error) { -// alert(response.error); -// return; -// } -// -// // Обновляем выпадающий список store_type -// if (response.store_types) { -// var storeTypeOptions = ''; -// $.each(response.store_types, function (key, value) { -// storeTypeOptions += ''; -// }); -// $('#store_type').html(storeTypeOptions); -// } -// -// // Обновляем выпадающий список city -// if (response.cities) { -// var cityOptions = ''; -// $.each(response.cities, function (key, value) { -// cityOptions += ''; -// }); -// $('#city').html(cityOptions); -// } -// -// // Обновляем выпадающий список territorial_manager -// if (response.territorial_managers) { -// var territorialManagerOptions = ''; -// $.each(response.territorial_managers, function (key, value) { -// territorialManagerOptions += ''; -// }); -// $('#territorial_manager').html(territorialManagerOptions); -// } -// -// // В случае необходимости, вы можете обновить другие поля формы -// }, -// error: function (xhr, status, error) { -// console.error("Ошибка AJAX: " + error); -// } -// }); -// } -// -// // Отслеживаем изменения в множественном select (selectedValues[]) -// $('#selectedValues').on('change', function () { -// sendData(); // Отправляем данные на сервер при изменении -// }); -// }); + -- 2.39.5