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

index 5224912473dadbfde1f0e0617e9a9091062768e7..d4462f641679a7514c101e25f3a59e966c617704 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-namespace yii_app\controllers;
+namespace app\controllers;
 
 use Yii;
 use yii\web\Controller;
diff --git a/erp24/migrations/m250123_141638_add_new_column_city_store_params.php b/erp24/migrations/m250123_141638_add_new_column_city_store_params.php
new file mode 100644 (file)
index 0000000..40f1650
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+
+use yii\db\Migration;
+
+/**
+ * Class m250123_141638_add_new_column_city_store_params
+ */
+class m250123_141638_add_new_column_city_store_params extends Migration
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function safeUp()
+    {
+        $this->addColumn('city_store_params', 'bush_id', $this->integer()->comment('ID куста'));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function safeDown()
+    {
+        $this->dropColumn('city_store_params', 'bush_id');
+    }
+}
index d57008d318d01a991f48a14f7177b241f2e502cc..c6a1ba5fd70bf23778b340ba15735af46eac8fdb 100644 (file)
@@ -29,6 +29,7 @@ use yii\filters\VerbFilter;
  * @property string $created_at
  * @property int|null $updated_by
  * @property string|null $updated_at
+ * @property int $bush_id
  */
 class CityStoreParams extends ActiveRecord
 {
@@ -64,7 +65,7 @@ class CityStoreParams extends ActiveRecord
     {
         return [
             [['store_id'], 'required'],
-            [['store_id', 'stores_type', 'territorial_manager', 'bush_chef_florist', 'created_by', 'updated_by'], 'integer'],
+            [['store_id', 'stores_type', 'territorial_manager', 'bush_chef_florist', 'created_by', 'updated_by', 'bush_id'], 'integer'],
             [['store_area', 'showcase_volume', 'freeze_area', 'freeze_volume'], 'number'],
             [['created_at', 'updated_at'], 'safe'],
             [['address_city', 'address_region', 'address_district', 'matrix_type'], 'string'],
@@ -90,6 +91,7 @@ class CityStoreParams extends ActiveRecord
             'freeze_area' => 'Площадь холодильника',
             'freeze_volume' => 'Объем холодильника',
             'matrix_type' => 'Тип матрицы',
+            'bush_id' => 'ИД куста',
             'created_by' => 'ИД создателя',
             'created_at' => 'Дата создания',
             'updated_by' => 'ИД редактировавшего',
index a92efd2f1ab3747cc26a6cb149344234d9f715f8..fc19d56b528b2edec1473c18625c305aed746376 100644 (file)
@@ -53,7 +53,7 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
                     ArrayHelper::map(StoreType::find()->all(), 'id', 'name'),
                     ['prompt' => 'Выберите тип магазина', 'class' => 'form-select', 'id' => 'store_type']);
                 ?>
-                <?= Html::a('Редактировать', [\yii\helpers\Url::to('/store_type')], ['class' => 'd-block mt-2 text-decoration-none']); ?>
+                <?= Html::a('Редактировать', [\yii\helpers\Url::to('/store-type')], ['class' => 'd-block mt-2 text-decoration-none']); ?>
             </div>
         </div>
         <div class="col-md-2 border-end border-2">
@@ -100,7 +100,7 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
         <div class="col-md-9">
             <div class="form-group">
                 <div class="row">
-                    <div class="col-md-3 d-flex align-items-center gap-3">
+                    <div class="col-md-4 d-flex align-items-center gap-3">
                         <?= Html::hiddenInput('CityStoreParams[id]') ?>
                         <?= Html::hiddenInput('CityStoreParams[store_id]') ?>
                         <?= Html::hiddenInput('CityStoreParams[territorial_manager]') ?>
@@ -108,10 +108,11 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
                         <?= Html::tag('span', null, ['id' => 'store-name', 'class' => 'h5']); ?>
                     </div>
                     <div class="col-md-4">
-                        <?= Html::dropDownList('CityStoreParams[store_type]', null,
-                            ArrayHelper::map(StoreType::find()->all(), 'id', 'name'),
-                            ['prompt' => 'Тип магазина', 'class' => 'form-select', 'id' => 'store-type']); ?>
-                        <?= Html::a('Редактировать', [\yii\helpers\Url::to('/store_type')], ['class' => 'd-block mt-2 text-decoration-none']); ?>
+                        <?= Html::dropDownList('CityStoreParams[store_type]', null, [], ['prompt' => 'Тип магазина', 'class' => 'form-select', 'id' => 'store-type']); ?>
+                        <?= Html::a('Редактировать', [Url::to('/store-type')], ['class' => 'd-block mt-2 text-decoration-none']); ?>
+                    </div>
+                    <div class="col-md-3">
+                        <?= Html::dropDownList('CityStoreParams[bush_id]', null, [], ['prompt' => 'Номер куста', 'class' => 'form-select', 'id' => 'store-type']); ?>
                     </div>
                 </div>
                 <div class="row">
@@ -134,7 +135,7 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
                 <div class="row">
                     <div class="col-md-2">
                         <?= Html::label('Территориально управляющий', null); ?>
-                        <?= Html::a('Редактировать', [Url::to('/store_type')], ['class' => 'd-block mb-5 text-decoration-none']); ?>
+                        <?= Html::a('Редактировать', [Url::to('/crud/cluster-admin/')], ['class' => 'd-block mb-5 text-decoration-none']); ?>
                     </div>
                     <div class="col-md-9">
                         <?= Html::tag('span', null, ['id' => 'territorial-manager', 'class' => 'h5']); ?>
@@ -143,7 +144,6 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
                 <div class="row border-bottom">
                     <div class="col-md-2">
                         <?= Html::label('КШФ') ?>
-                        <?= Html::a('Редактировать', [Url::to('/store_type')], ['class' => 'd-block mb-5 text-decoration-none']); ?>
                     </div>
                     <div class="col-md-9">
                         <?= Html::dropDownList('CityStoreParams[bush_chef_florist]', null, [], ['prompt' => 'Кустовой шеф-флорист', 'class' => 'form-select', 'id' => 'bush-chef-florist']); ?>
@@ -184,7 +184,7 @@ $this->registerJsFile('/js/city-store-params/city-store-params.js', ['position'
                         <div class="container mt-5">
                             <?= DualListbox::widget([
                                 'name' => 'CityStoreParams[matrix_type]',
-                                'items' => ArrayHelper::map(MatrixType::find()->all(), 'id', 'name'),
+                                'items' => [],
                                 'options' => [
                                     'size' => false
                                 ],
index 43c91e1e2b1fa9ca7f17aefb0abcff63eb77c688..009b8595e2aaeae77ac74542505c625be2a8442d 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
+use kartik\grid\GridView;
 use yii\helpers\Html;
-use yii\widgets\GridView;
 
 /* @var $this yii\web\View */
 /* @var $storeTypes yii_app\records\StoreType[] */
index cb246fea4515039ac992250df9d7f49f66b6452e..df5ec9c9cc5fe27353607cecb6c49b538fbc37d4 100644 (file)
@@ -43,16 +43,14 @@ function getData() {
         success: function (response) {
             var data = response.data;
 
+            // Заполнение других полей
             $('#store-area').val(data.storeArea);
             $('#showcase-volume').val(data.showcaseVolume);
             $('#freeze-area').val(data.freezeArea);
             $('#freeze-volume').val(data.freezeVolume);
-
             $('#store-name').text(data.name);
-
             $('#territorial-manager').text(data.territorialManagerId ? getNameFromArray(data.territorialManagerId, data.bushChefFloristArray) : '');
             $('#bush-chef-florist').text(data.bushChefFloristId ? getNameFromArray(data.bushChefFloristId, data.bushChefFloristArray) : '');
-
             $('input[name="CityStoreParams[id]"]').val(data.id);
             $('input[name="CityStoreParams[store_id]"]').val(data.storeId);
             $('input[name="CityStoreParams[territorial_manager]"]').val(data.territorialManagerId);
@@ -68,7 +66,9 @@ function getData() {
             populateSelect('#city', data.cityArray, data.city);
             populateSelect('#district', data.districtArray, data.district);
             populateSelect('#bush-chef-florist', data.bushChefFloristArray, data.bushChefFloristId);
-            populateSelect('#matrix-type', data.matrixTypeArray);
+
+            // Заполнение DualListbox
+            populateDualListbox(data.matrixTypeArray, data.matrixType); // matrixTypeArray и matrixType передаются с сервера
         },
         error: function (xhr, status, error) {
             console.error("Ошибка AJAX: " + error);
@@ -101,3 +101,37 @@ function populateSelect(selector, values, selectedValue = null) {
         select.val(selectedValue);
     }
 }
+
+// Функция для заполнения DualListbox
+function populateDualListbox(matrixTypeArray, selectedValues) {
+    var $nonSelectedList = $('#bootstrap-duallistbox-nonselected-list_CityStoreParams\\[matrix_type\\]');
+    var $selectedList = $('#bootstrap-duallistbox-selected-list_CityStoreParams\\[matrix_type\\]');
+
+    console.log("Matrix Type Array:", matrixTypeArray); // Отладка
+    console.log("Selected Values:", selectedValues); // Отладка
+
+    // Очистить оба списка
+    $nonSelectedList.empty();
+    $selectedList.empty();
+
+    // Заполняем список невыбранных значений (non-selected list)
+    $.each(matrixTypeArray, function (key, value) {
+        $nonSelectedList.append('<option value="' + key + '">' + value + '</option>');
+    });
+
+    // Если есть выбранные значения, добавляем их в список выбранных (selected list)
+    if (selectedValues && selectedValues.length > 0) {
+        selectedValues.forEach(function (selectedId) {
+            $selectedList.append('<option value="' + selectedId + '">' + matrixTypeArray[selectedId] + '</option>');
+        });
+    }
+
+    // Обновляем состояние виджета, вызываем trigger и возможно init для перерисовки
+    $nonSelectedList.trigger('change');
+    $selectedList.trigger('change');
+
+    // Повторно инициализируем виджет DualListbox, если это необходимо
+    if (typeof $('#matrix-type').bootstrapDualListbox === 'function') {
+        $('#matrix-type').bootstrapDualListbox('refresh'); // или аналогичная функция обновления
+    }
+}