]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
ERP-282 Нужно сделать интерфейс настройки магазина
authormarina <m.zozirova@gmail.com>
Thu, 23 Jan 2025 06:41:08 +0000 (09:41 +0300)
committermarina <m.zozirova@gmail.com>
Thu, 23 Jan 2025 06:41:08 +0000 (09:41 +0300)
erp24/controllers/CityStoreParamsController.php
erp24/migrations/m250121_132357_create_matrix_type_and_store_type_table.php [deleted file]
erp24/migrations/m250123_063531_create_matrix_type_table_and_store_type.php [new file with mode: 0644]
erp24/views/city-store-params/index.php
erp24/web/js/city-store-params/city-store-params.js

index a3803326186772e2f368cef8e68083ff20bcadc1..78436dd6938c46a7aecdafbfc5575eb92195ba2d 100644 (file)
@@ -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 (file)
index 13f06f0..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-use yii\db\Migration;
-
-/**
- * Handles the creation of table `{{%matrix_type_and_store_type}}`.
- */
-class m250121_132357_create_matrix_type_and_store_type_table extends Migration
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function safeUp()
-    {
-        $this->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 (file)
index 0000000..3987bf5
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+
+use yii\db\Migration;
+
+/**
+ * Class m250123_063531_create_matrix_type_table_and_store_type
+ */
+class m250123_063531_create_matrix_type_table_and_store_type extends Migration
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function safeUp()
+    {
+        $this->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}}');
+    }
+}
index 00892e56db24391efeb9a2452858ddb36d8d2a9a..1992e82726d9f65b4151054b8a99e6210836f260 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 
-use kartik\select2\Select2;
 use softark\duallistbox\DualListbox;
 use yii\helpers\ArrayHelper;
 use yii\helpers\Html;
@@ -20,14 +19,6 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
 ?>
     <div class="container mt-4 border-bottom">
         <div class="row">
-            <div class="col-md-2">
-                <div class="card p-3 bg-light shadow-sm">
-                    <?= Html::dropDownList('address_city', null,
-                        ArrayHelper::map(StoreCityList::findAll(['type' => StoreCityList::TYPE_CITY]), 'id', 'name'),
-                        ['prompt' => 'Выберите город', 'class' => 'form-select', 'id' => 'address_city']);
-                    ?>
-                </div>
-            </div>
 
             <div class="col-md-2">
                 <div class="card p-3 bg-light shadow-sm">
@@ -36,11 +27,21 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
                         ['prompt' => 'Выберите регион', 'class' => 'form-select', 'id' => 'address_region']);
                     ?>
                     <?= Html::a('Редактировать', [
-                            Url::to('/store_type')], ['class' => 'd-block mt-2 text-decoration-none']);
+                        Url::to('/store_type')], ['class' => 'd-block mt-2 text-decoration-none']);
+                    ?>
+                </div>
+
+            </div>
+            <div class="col-md-2">
+                <div class="card p-3 bg-light shadow-sm">
+                    <?= Html::dropDownList('address_city', null,
+                        ArrayHelper::map(StoreCityList::findAll(['type' => StoreCityList::TYPE_CITY]), 'id', 'name'),
+                        ['prompt' => 'Выберите город', 'class' => 'form-select', 'id' => 'address_city']);
                     ?>
                 </div>
             </div>
 
+
             <div class="col-md-2 border-end border-2">
                 <div class="card p-3 bg-light shadow-sm">
                     <?= Html::dropDownList('address_district', null,
@@ -101,81 +102,87 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
         <div class="row">
             <div class="col-md-3">
                 <div class="form-group">
-                    <?= Html::dropDownList('selectedValues[]', null, [], [
+                    <?= Html::dropDownList('selected_store', null, [], [
                         'multiple' => true,
                         'size' => 16,
                         'class' => 'form-control',
-                        'id' => 'selected_store',
+                        'id' => 'selected-store',
                     ]) ?>
+                    <?= Html::button('Редактировать', ['class' => 'btn btn-primary w-100', 'id' => 'edit-button']); ?>
                 </div>
             </div>
             <div class="col-md-9">
                 <div class="form-group">
                     <div class="row">
-                        <div class="col-md-1"></div>
-                        <div class="col-md-3">
-                            <?= Html::label('Название'); ?>
+                        <div class="col-md-3 d-flex align-items-center gap-3">
+                            <?= Html::label('Название', null); ?>
+                            <?= Html::tag('span', null, ['id' => 'store-name', 'class' => 'h5']); ?>
                         </div>
-                        <div class="col-md-5">
-                            <?= Html::dropDownList('store_type', null, \yii\helpers\ArrayHelper::map(\yii_app\api3\modules\v1\models\Admin::findAll(['group_id' => \yii_app\records\AdminGroup::GROUP_BUSH_DIRECTOR]), 'id', 'name_full'), ['prompt' => 'Тип магазина', 'class' => 'form-select']); ?>
+                        <div class="col-md-4">
+                            <?= Html::dropDownList('store_type', null,
+                                ArrayHelper::map(Admin::findAll(['group_id' => AdminGroup::GROUP_BUSH_DIRECTOR]), 'id', 'name_full'),
+                                ['prompt' => 'Тип магазина', 'class' => 'form-select', 'id' => 'store_type']); ?>
                             <?= Html::a('Редактировать', [\yii\helpers\Url::to('/store_type')], ['class' => 'd-block mt-2 text-decoration-none']); ?>
                         </div>
                     </div>
                     <div class="row">
                         <div class="col-md-2 py-6">
-                            <?= Html::label('Адрес', null, ['class' => 'h5']) ?>
+                            <?= Html::label('Адрес', null) ?>
                         </div>
                         <div class="col-md-3">
                             <?= Html::label('Регион'); ?>
-                            <?= Html::dropDownList('city', null, [], ['prompt' => 'Город', 'class' => 'form-select']); ?>
+                            <?= Html::dropDownList('region', null, [], ['prompt' => 'Регион', 'class' => 'form-select', 'id' => 'region']); ?>
                         </div>
                         <div class="col-md-3">
                             <?= Html::label('Город'); ?>
-                            <?= Html::dropDownList('city', null, [], ['prompt' => 'Город', 'class' => 'form-select']); ?>
+                            <?= Html::dropDownList('city', null, [], ['prompt' => 'Город', 'class' => 'form-select', 'id' => 'city']); ?>
                         </div>
                         <div class="col-md-3">
                             <?= Html::label('Район'); ?>
-                            <?= Html::dropDownList('city', null, [], ['prompt' => 'Город', 'class' => 'form-select']); ?>
+                            <?= Html::dropDownList('district', null, [], ['prompt' => 'Район', 'class' => 'form-select', 'id' => 'district']); ?>
                         </div>
                     </div>
                     <div class="row">
                         <div class="col-md-2">
-                            <?= Html::label('Территориально управляющий') ?>
-                            <?= Html::a('Редактировать', [\yii\helpers\Url::to('/store_type')], ['class' => 'd-block mb-5 text-decoration-none']); ?>
+                            <?= Html::label('Территориально управляющий', null); ?>
+                            <?= Html::a('Редактировать', [Url::to('/store_type')], ['class' => 'd-block mb-5 text-decoration-none']); ?>
 
                         </div>
                         <div class="col-md-9">
-                            <?= Html::label('city'); ?>
+                            <?= Html::tag('span', null, ['id' => 'territorial-manager', 'class' => 'h5']); ?>
                         </div>
                     </div>
                     <div class="row border-bottom">
                         <div class="col-md-2">
                             <?= Html::label('КШФ') ?>
-                            <?= Html::a('Редактировать', [\yii\helpers\Url::to('/store_type')], ['class' => 'd-block mb-5 text-decoration-none']); ?>
+                            <?= Html::a('Редактировать', [Url::to('/store_type')], ['class' => 'd-block mb-5 text-decoration-none']); ?>
 
                         </div>
                         <div class="col-md-9">
-                            <?= Html::dropDownList('city', null, [], ['prompt' => 'Город', 'class' => 'form-select']); ?>
+                            <?= Html::dropDownList('bush-chef-florist', null, [], ['prompt' => 'Кустовой шеф-флорист', 'class' => 'form-select', 'id' => 'bush-chef-florist']); ?>
                         </div>
                     </div>
                     <div class="row">
                         <div class="col-md-4">
-                            <?= Html::label('Площадь(M2)', null, ['class' => 'form-label']); ?>
+                            <?= Html::label('Площадь (M2)', null, ['class' => 'form-label']); ?>
                             <?= Html::input('text', 'store_area', null, [
+                                'id' => 'store-area',
                                 'class' => 'form-control',
                                 'placeholder' => 'Введите число',
                                 'oninput' => 'validateDecimal(this)'
                             ]); ?>
 
-                            <?= Html::label('Витрина(M3)', null, ['class' => 'form-label']); ?>
+                            <?= Html::label('Витрина (M3)', null, ['class' => 'form-label']); ?>
                             <?= Html::input('text', 'showcase_volume', null, [
+                                'id' => 'showcase-volume',
                                 'class' => 'form-control',
                                 'placeholder' => 'Введите число',
                                 'oninput' => 'validateDecimal(this)'
                             ]); ?>
 
-                            <?= Html::label('Холодильник(M2)', null, ['class' => 'form-label']); ?>
+                            <?= Html::label('Холодильник (M2)', null, ['class' => 'form-label']); ?>
                             <?= Html::input('text', 'freeze_area', null, [
+                                'id' => 'freeze-area',
                                 'class' => 'form-control',
                                 'placeholder' => 'Введите число',
                                 'oninput' => 'validateDecimal(this)'
@@ -183,6 +190,7 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
 
                             <?= Html::label('Холодильник (M3)', null, ['class' => 'form-label']); ?>
                             <?= Html::input('text', 'freeze_volume', null, [
+                                'id' => 'freeze-volume',
                                 'class' => 'form-control',
                                 'placeholder' => 'Введите число',
                                 'oninput' => 'validateDecimal(this)'
@@ -194,16 +202,13 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
                             <div class="container mt-5">
                                 <?= DualListbox::widget([
                                     'name' => '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' => "Тип матрицы <br>" . Html::a('Редактировать', '#'), // Перенос строки с ссылкой
+                                        'nonSelectedListLabel' => "Тип матрицы <br>" . Html::a('Редактировать', '#'),
                                         'selectedListLabel' => "&nbsp;<br><br>",
                                         'showFilterInputs' => false,
                                         'clearButton' => false,
index 07dd2c858e35be7213a42c72a1123c9bf597058d..e40b86946bba81e436be010d341c6ace4b8f3f2a 100644 (file)
@@ -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 += '<option value="' + key + '">' + value + '</option>';
-                });
+                // Ответ от сервера (список магазинов или другие данные)
+                if (response && typeof response === 'object') {
+                    // Обновляем dropdown
+                    var options = '';
+                    $.each(response, function (key, value) {
+                        options += '<option value="' + key + '">' + value + '</option>';
+                    });
 
-                // Вставляем полученные опции в 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::to(['controller/action-edit']) ?>', // URL контроллера и экшн
-//             type: 'GET', // Метод запроса
-//             data: { selectedValues: selectedValues }, // Данные (выбранные значения)
-//         success: function (response) {
-//             // Проверяем, есть ли ошибки в ответе
-//             if (response.error) {
-//                 alert(response.error);
-//                 return;
-//             }
-//
-//             // Обновляем выпадающий список store_type
-//             if (response.store_types) {
-//                 var storeTypeOptions = '<option value="">Тип магазина</option>';
-//                 $.each(response.store_types, function (key, value) {
-//                     storeTypeOptions += '<option value="' + key + '">' + value + '</option>';
-//                 });
-//                 $('#store_type').html(storeTypeOptions);
-//             }
-//
-//             // Обновляем выпадающий список city
-//             if (response.cities) {
-//                 var cityOptions = '<option value="">Город</option>';
-//                 $.each(response.cities, function (key, value) {
-//                     cityOptions += '<option value="' + key + '">' + value + '</option>';
-//                 });
-//                 $('#city').html(cityOptions);
-//             }
-//
-//             // Обновляем выпадающий список territorial_manager
-//             if (response.territorial_managers) {
-//                 var territorialManagerOptions = '<option value="">Территориально управляющий</option>';
-//                 $.each(response.territorial_managers, function (key, value) {
-//                     territorialManagerOptions += '<option value="' + key + '">' + value + '</option>';
-//                 });
-//                 $('#territorial_manager').html(territorialManagerOptions);
-//             }
-//
-//             // В случае необходимости, вы можете обновить другие поля формы
-//         },
-//         error: function (xhr, status, error) {
-//             console.error("Ошибка AJAX: " + error);
-//         }
-//     });
-//     }
-//
-//     // Отслеживаем изменения в множественном select (selectedValues[])
-//     $('#selectedValues').on('change', function () {
-//         sendData(); // Отправляем данные на сервер при изменении
-//     });
-// });
+