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.
$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])
});
}
- public function getData()
+ public function actionGetData()
{
Yii::$app->response->format = Response::FORMAT_JSON;
$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
+ ],
];
-
}
}
+++ /dev/null
-<?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}}');
- }
-}
--- /dev/null
+<?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}}');
+ }
+}
<?php
-use kartik\select2\Select2;
use softark\duallistbox\DualListbox;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
?>
<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">
['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,
<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)'
<?= Html::label('Холодильник (M3)', null, ['class' => 'form-label']); ?>
<?= Html::input('text', 'freeze_volume', null, [
+ 'id' => 'freeze-volume',
'class' => 'form-control',
'placeholder' => 'Введите число',
'oninput' => 'validateDecimal(this)'
<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' => " <br><br>",
'showFilterInputs' => false,
'clearButton' => false,
$(document).ready(function () {
- // Функция для отправки данных через AJAX
function sendData() {
var formData = {
address_city: $('#address_city').val(),
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(); // Отправляем данные на сервер при изменении
-// });
-// });
+