<?php
-namespace yii_app\controllers;
+namespace app\controllers;
use Yii;
use yii\web\Controller;
--- /dev/null
+<?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');
+ }
+}
* @property string $created_at
* @property int|null $updated_by
* @property string|null $updated_at
+ * @property int $bush_id
*/
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'],
'freeze_area' => 'Площадь холодильника',
'freeze_volume' => 'Объем холодильника',
'matrix_type' => 'Тип матрицы',
+ 'bush_id' => 'ИД куста',
'created_by' => 'ИД создателя',
'created_at' => 'Дата создания',
'updated_by' => 'ИД редактировавшего',
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">
<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]') ?>
<?= 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">
<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']); ?>
<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']); ?>
<div class="container mt-5">
<?= DualListbox::widget([
'name' => 'CityStoreParams[matrix_type]',
- 'items' => ArrayHelper::map(MatrixType::find()->all(), 'id', 'name'),
+ 'items' => [],
'options' => [
'size' => false
],
<?php
+use kartik\grid\GridView;
use yii\helpers\Html;
-use yii\widgets\GridView;
/* @var $this yii\web\View */
/* @var $storeTypes yii_app\records\StoreType[] */
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);
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);
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'); // или аналогичная функция обновления
+ }
+}