public function actionIndex()
{
- $model = !empty(Yii::$app->request->post()['CityStoreParams']['id'])
- ? $this->findModel(Yii::$app->request->post()['CityStoreParams']['id'])
- : new CityStoreParams();
-
- if ($model->load(Yii::$app->request->post())) {
- $model->matrix_type = is_array($model->matrix_type) ? implode(',', $model->matrix_type) : $model->matrix_type;
+ $flash = 'info';
+ $value = 'Для редактирования необходимо выбрать магазин!';
+ if (Yii::$app->request->post()) {
+ $model = !empty(Yii::$app->request->post()['CityStoreParams']['id'])
+ ? $this->findModel(Yii::$app->request->post()['CityStoreParams']['id'])
+ : new CityStoreParams();
+
+ if ($model->load(Yii::$app->request->post())) {
+ $model->matrix_type = is_array($model->matrix_type) ? implode(',', $model->matrix_type) : $model->matrix_type;
+ }
+
+ if ($model->validate()) {
+ if ($model->save()) {
+ $flash = 'success';
+ $value = 'Новая запись успешно создана.';
+ $selected_store = $model->id;
+ }
+ } else {
+ $flash = 'danger';
+ $value = 'Ошибка при сохранении: ' . implode('. ', array_map(function ($error) {
+ return is_array($error) ? implode(', ', $error) : $error;
+ }, $model->getErrors()));
+
+ }
}
- if ($model->validate()) {
- $model->save();
- return $this->redirect(['view', 'id' => $model->id]);
- }
+ Yii::$app->session->setFlash($flash, $value);
- return $this->render('index');
+ return $this->render('index', [
+ 'select_store' => $selected_store ?? null,
+ 'flash' => $flash
+ ]);
}
/**
if (!$store) return ['success' => false, 'message' => 'Магазин не найден'];
$bushId = StoreDynamic::findOne(['store_id' => $storeId, 'category' => 1, 'active' => 1])->value_int ?? null;
- $territorialManagerId = ClusterAdmin::findOne(['active' => 1, 'cluster_id' => $bushId])->admin_id ?? null;
return [
'success' => true,
'region' => $params->address_region ?? $store->region ?? null,
'city' => $params->address_city ?? $store->city ?? null,
'district' => $params->address_district ?? $store->district ?? null,
- 'territorialManagerId' => $territorialManagerId,
- 'territorialManager' => !empty($territorialManagerId) ? Admin::findOne($territorialManagerId)->name_full : null,
+ 'territorialManager' => $params->territorial_manager ?? StoreDynamic::findOne(['active' => 1, 'category' => 3])->value_int ?? null,
'bushChefFloristId' => $params->bush_chef_florist ?? StoreDynamic::findOne(['store_id' => $storeId, 'active' => 1, 'category' => 2])->value_int ?? null,
'storeArea' => $params->store_area ?? null,
'showcaseVolume' => $params->showcase_volume ?? null,
'freezeArea' => $params->freeze_area ?? null,
'freezeVolume' => $params->freeze_volume ?? null,
'matrixType' => !empty($params->matrix_type) ? explode(',', $params->matrix_type) : null,
- 'bushId' => $bushId,
+ 'territorialManagerArray' => ArrayHelper::map(Admin::findAll(['id' => StoreDynamic::find()->andWhere(['category' => 3, 'active' => 1])->select('value_int')->column()]), 'id', 'name'),
'storeTypeArray' => ArrayHelper::map(StoreType::find()->all(), 'id', 'name'),
- 'bushArray' => ArrayHelper::map(Cluster::find()->all(), 'id', 'name'),
'regionArray' => ArrayHelper::map(StoreCityList::findAll(['type' => StoreCityList::TYPE_REGION]), 'id', 'name'),
'cityArray' => ArrayHelper::map(StoreCityList::findAll(['type' => StoreCityList::TYPE_CITY]), 'id', 'name'),
'districtArray' => ArrayHelper::map(StoreCityList::findAll(['type' => StoreCityList::TYPE_DISTRICT]), 'id', 'name'),
{
Yii::$app->response->format = Response::FORMAT_JSON;
- // Используем POST для получения bushId
$territorialManagerId = ClusterAdmin::findOne(['cluster_id' => $bushId])->admin_id ?? null;
$territorialManager = Admin::findOne($territorialManagerId)->name_full ?? null;
* @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', 'store_type', 'territorial_manager', 'bush_chef_florist', 'created_by', 'updated_by', 'bush_id'], 'integer'],
+ [['store_id', 'store_type', 'territorial_manager', 'bush_chef_florist', 'created_by', 'updated_by'], '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' => 'ИД редактировавшего',
public function getAddressCity() {
return $this->hasOne(StoreCityList::class, ['id' => 'address_city']);
}
-
- public function getBush() {
- return $this->hasOne(ClusterAdmin::class, ['id' => 'bush_id']);
- }
}
<div class="col-md-2"></div>
<div class="col-md-2"></div>
<div class="col-md-2"></div>
+ <div class="col-md-2"></div>
<div class="col-md-2 border-end border-2">
<div class="card p-3 bg-light shadow-sm">
<?= Html::dropDownList('bush_chef_florist', null,
?>
</div>
</div>
- <div class="col-md-2"></div>
<div class="col-md-2 d-flex justify-content-center align-items-center">
<div class="card p-45 bg-light shadow-sm w-100">
<?= Html::button('Применить', ['class' => 'btn btn-primary w-100', 'id' => 'apply-button']); ?>
<div class="container mt-4">
<div class="row">
<div class="col-md-3">
- <?= Html::dropDownList('CityStoreParams[selected_store]', null,
+ <?= Html::dropDownList('selected_store', $select_store,
ArrayHelper::map(CityStore::find()->where(['visible' => CityStore::IS_VISIBLE])->orderBy('id')->all(), 'id', function ($store) {
return $store->id . ' ' . $store->name;
}),
<?= Html::button('Редактировать', ['class' => 'btn btn-primary w-100 mt-2 py-1', 'id' => 'edit-button']); ?>
</div>
<div class="col-md-9">
+ <?php if (Yii::$app->session->hasFlash($flash)): ?>
+ <?= Html::tag('div', Yii::$app->session->getFlash($flash), [
+ 'class' => 'alert text-center alert-' . Html::encode($flash),
+ ]) ?>
+ <?php endif; ?>
<div class="form-group">
<div class="row">
<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::label('Название', null); ?>
<?= Html::tag('span', null, ['id' => 'store-name', 'class' => 'h5']); ?>
</div>
<div class="col-md-4">
+ <?= Html::label('Тип магазина', null); ?>
<?= 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' => 'bush-id']); ?>
- </div>
</div>
<div class="row">
<div class="col-md-2 py-6">
<?= 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']); ?>
+ <?= Html::dropDownList('CityStoreParams[territorial_manager]', null, [], ['prompt' => 'Территориально управляющий', 'class' => 'form-select', 'id' => 'territorial-manager']); ?>
</div>
</div>
- <div class="row border-bottom">
+ <div class="row border-bottom pb-2">
<div class="col-md-2">
<?= Html::label('КШФ') ?>
</div>
</div>
</div>
<div class="row">
- <div class="col-md-4">
- <?= Html::label('Площадь (M2)', null, ['class' => 'form-label']); ?>
- <?= Html::input('text', 'CityStoreParams[store_area]', null, [
- 'id' => 'store-area',
- 'class' => 'form-control',
- 'placeholder' => 'Введите число',
- 'oninput' => 'validateDecimal(this)'
- ]); ?>
-
- <?= Html::label('Витрина (M3)', null, ['class' => 'form-label']); ?>
- <?= Html::input('text', 'CityStoreParams[showcase_volume]', null, [
- 'id' => 'showcase-volume',
- 'class' => 'form-control',
- 'placeholder' => 'Введите число',
- 'oninput' => 'validateDecimal(this)'
- ]); ?>
-
- <?= Html::label('Холодильник (M2)', null, ['class' => 'form-label']); ?>
- <?= Html::input('text', 'CityStoreParams[freeze_area]', null, [
- 'id' => 'freeze-area',
- 'class' => 'form-control',
- 'placeholder' => 'Введите число',
- 'oninput' => 'validateDecimal(this)'
- ]); ?>
-
- <?= Html::label('Холодильник (M3)', null, ['class' => 'form-label']); ?>
- <?= Html::input('text', 'CityStoreParams[freeze_volume]', null, [
- 'id' => 'freeze-volume',
- 'class' => 'form-control',
- 'placeholder' => 'Введите число',
- 'oninput' => 'validateDecimal(this)'
- ]); ?>
+ <div class="col-md-6">
+ <?= Html::label('Параметры', null, ['class' => 'fs-6 pt-3']); ?>
+ </div>
+ <div class="col-md-6">
+ <?= Html::label('Тип матрицы', null, ['class' => 'fs-6 pt-3 mb-1']); ?>
+ <?= Html::a('Редактировать', [Url::to('/matrix-type')], ['class' => 'd-block text-decoration-none']); ?>
</div>
- <div class="col-md-8">
- <div class="container mt-5">
- <?= Html::label('Тип матрицы') ?>
- <?= Html::a('Редактировать', [Url::to('/matrix-type')], ['class' => 'd-block mb-5 text-decoration-none']); ?>
- <?= Select2::widget([
- 'name' => 'CityStoreParams[matrix_type]',
- 'data' => [],
- 'language' => 'ru-RU',
- 'options' => [
- 'id' => 'matrix-type',
- 'placeholder' => 'Выберите тип матрицы',
- 'multiple' => true,
- ],
- ]); ?>
+ </div>
+ <div class="row">
+ <div class="col-md-6">
+ <div class="row py-1">
+ <div class="col-md-4">
+ <?= Html::label('Площадь (M2)', null, ['class' => ['pt-2']]); ?>
+ </div>
+ <div class="col-md-5">
+ <?= Html::input('text', 'CityStoreParams[store_area]', null, [
+ 'id' => 'store-area',
+ 'class' => 'form-control',
+ 'placeholder' => 'Введите число',
+ 'oninput' => 'validateDecimal(this)'
+ ]); ?>
+ </div>
+ </div>
+ <div class="row py-1">
+ <div class="col-md-4">
+ <?= Html::label('Витрина (M3)', null, ['class' => ['pt-2']]); ?>
+ </div>
+ <div class="col-md-5">
+ <?= Html::input('text', 'CityStoreParams[showcase_volume]', null, [
+ 'id' => 'showcase-volume',
+ 'class' => 'form-control',
+ 'placeholder' => 'Введите число',
+ 'oninput' => 'validateDecimal(this)'
+ ]); ?>
+ </div>
+ </div>
+ <div class="row py-1">
+ <div class="col-md-4">
+ <?= Html::label('Холодильник (M2)', null, ['class' => ['pt-2']]); ?>
+ </div>
+ <div class="col-md-5">
+ <?= Html::input('text', 'CityStoreParams[freeze_area]', null, [
+ 'id' => 'freeze-area',
+ 'class' => 'form-control',
+ 'placeholder' => 'Введите число',
+ 'oninput' => 'validateDecimal(this)'
+ ]); ?>
+ </div>
+ </div>
+ <div class="row py-1">
+ <div class="col-md-4">
+ <?= Html::label('Холодильник (M3)', null, ['class' => ['pt-2']]); ?>
+ </div>
+ <div class="col-md-5">
+ <?= Html::input('text', 'CityStoreParams[freeze_volume]', null, [
+ 'id' => 'freeze-volume',
+ 'class' => 'form-control',
+ 'placeholder' => 'Введите число',
+ 'oninput' => 'validateDecimal(this)'
+ ]); ?>
+ </div>
</div>
</div>
- <div class="d-flex justify-content-end">
- <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?>
+ <div class="col-md-4">
+ <?= Select2::widget([
+ 'name' => 'CityStoreParams[matrix_type]',
+ 'data' => [],
+ 'language' => 'ru-RU',
+ 'options' => [
+ 'id' => 'matrix-type',
+ 'placeholder' => 'Выберите тип матрицы',
+ 'multiple' => true,
+ ],
+ ]); ?>
</div>
</div>
+ <div class="d-flex justify-content-end">
+ <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success d-none px-8', 'id' => 'save-button']) ?>
+ </div>
</div>
</div>
- <?php \yii\widgets\ActiveForm::end(); ?>
</div>
+ <?php \yii\widgets\ActiveForm::end(); ?>
</div>
getData()
});
-$('#bush-id').on('change', function () {
- var bushId = $(this).val(); // Получаем значение выбранного bushId
-
- $.ajax({
- url: '/city-store-params/get-territorial-manager',
- type: 'GET',
- data: { bushId: bushId }, // Передаем bushId как часть массива
- success: function (response) {
- var data = response.data;
-
- $('#territorial-manager').text(data.territorialManager);
- $('input[name="CityStoreParams[territorial_manager]"]').val(data.territorialManagerId);
- },
- error: function (xhr, status, error) {
- console.error("Ошибка AJAX: " + error);
- alert("Произошла ошибка при отправке данных.");
- }
- });
-});
-
function getData() {
var formData = {
selected_store: $('#selected-store').val(),
$('#showcase-volume').val(data.showcaseVolume);
$('#freeze-area').val(data.freezeArea);
$('#freeze-volume').val(data.freezeVolume);
- $('#store-name').text(data.name);$('#bush-chef-florist').text(data.bushChefFloristId ? getNameFromArray(data.bushChefFloristId, data.bushChefFloristArray) : '');
+ $('#store-name').text(data.name);
+ $('#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);
$('#region').val(data.region);
$('#city').val(data.city);
$('#district').val(data.district);
$('#territorial-manager').text(data.territorialManager);
- populateSelect('#store-type', data.storeTypeArray, data.type);
- populateSelect('#region', data.regionArray, data.region);
- populateSelect('#city', data.cityArray, data.city);
- populateSelect('#district', data.districtArray, data.district);
- populateSelect('#bush-chef-florist', data.bushChefFloristArray, data.bushChefFloristId);
- populateSelect('#bush-id', data.bushArray, data.bushId);
+ populateSelect('#store-type', data.storeTypeArray, data.type, 'Тип магазина');
+ populateSelect('#region', data.regionArray, data.region, 'Регион');
+ populateSelect('#city', data.cityArray, data.city, 'Город');
+ populateSelect('#district', data.districtArray, data.district, 'Район');
+ populateSelect('#bush-chef-florist', data.bushChefFloristArray, data.bushChefFloristId, 'Кустовой шеф-флорист');
+ populateSelect('#territorial-manager', data.territorialManagerArray, data.territorialManager, 'Территориально управляющий');
+ populateDualListbox(data.matrixTypeArray, data.matrixType);
- populateDualListbox(data.matrixTypeArray, data.matrixType); // matrixTypeArray и matrixType передаются с сервера
+ $('#save-button').removeClass('d-none');
},
error: function (xhr, status, error) {
console.error("Ошибка AJAX: " + error);
return array[id] || '';
}
-function populateSelect(selector, values, selectedValue = null) {
+function populateSelect(selector, values, selectedValue = null, defaultText = 'Выберите значение') {
var select = $(selector);
select.empty();
select.append($('<option>', {
value: '',
- text: 'Выберите значение',
+ text: defaultText,
}));
$.each(values, function (key, value) {
var select = $('#matrix-type');
if (!select.hasClass('select2-hidden-accessible')) {
select.select2({
- placeholder: 'Ð\92Ñ\8bбеÑ\80иÑ\82е Ñ\82ип матрицы',
+ placeholder: 'Тип матрицы',
multiple: true
});
}
};
});
- select.empty().select2({ data: selectData });
-
+ select.empty().select2({data: selectData});
select.val(matrixType).trigger('change');
}
}
+$(document).ready(function () {
+ var selectedValues = $('#selected-store').val();
+ if (selectedValues && selectedValues.length > 0) {
+ $('#edit-button').click();
+ }
+ $('#text-info').text('Для редактирования выберите магазин!').addClass('text-danger')
+})