namespace app\controllers;
use Yii;
+use yii\data\ActiveDataProvider;
use yii\helpers\ArrayHelper;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii_app\records\AdminGroup;
use yii_app\records\CityStore;
use yii_app\records\CityStoreParams;
+use yii_app\records\Cluster;
use yii_app\records\ClusterAdmin;
use yii_app\records\MatrixType;
use yii_app\records\StoreCityList;
*/
public function actionIndex()
{
- $model = !empty(Yii::$app->request->post('id'))
- ? $this->findModel(Yii::$app->request->post('id'))
- : new CityStoreParams();
-
- if ($model->load(Yii::$app->request->post())) {
- if (is_array($model->matrix_type)) {
- $model->matrix_type = implode(',', $model->matrix_type);
- }
- if ($model->validate()) {
- $model->save();
- return $this->redirect(['view', 'id' => $model->id]);
- } else {
+ $dataProvider = new ActiveDataProvider([
+ 'query' => CityStoreParams::find(),
+ 'pagination' => [
+ 'pageSize' => 20,
+ ],
+ ]);
- var_dump($model->getErrors(), $model->matrix_type);
- die();
- }
- }
- return $this->render('index');
+ return $this->render('index', [
+ 'dataProvider' => $dataProvider,
+ ]);
}
/**
* @return mixed
* @throws NotFoundHttpException
*/
- public
- function actionView($id)
+ public function actionView($id)
{
return $this->render('view', [
'model' => $this->findModel($id),
]);
}
- /**
- * Создание новой записи
- * @return mixed
- */
- public
- function actionCreate()
- {
- $model = new CityStoreParams();
-
- if ($model->load(Yii::$app->request->post()) && $model->save()) {
- return $this->redirect(['view', 'id' => $model->id]);
- }
- return $this->render('create', [
- 'model' => $model,
- ]);
- }
-
- /**
- * Обновление существующей записи
- * @param int $id
- * @return mixed
- * @throws NotFoundHttpException
- */
- public
- function actionUpdate($id)
+ public function actionUpdate()
{
- $model = $this->findModel($id);
+ $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->save()) {
- return $this->redirect(['view', 'id' => $model->id]);
+ 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()) {
+ $model->save();
+ return $this->redirect(['view', 'id' => $model->id]);
+ }
}
- return $this->render('update', [
- 'model' => $model,
- ]);
+ return $this->render('update');
}
/**
* @return CityStoreParams
* @throws NotFoundHttpException
*/
- protected
- function findModel($id)
+ protected function findModel($id)
{
if (($model = CityStoreParams::findOne($id)) !== null) {
return $model;
throw new NotFoundHttpException('The requested page does not exist.');
}
- public
- function actionEdit()
+ public function actionEdit()
{
Yii::$app->response->format = Response::FORMAT_JSON;
- $data = Yii::$app->request->post(); // Используем POST
+ $data = Yii::$app->request->post();
$addressCity = $data['address_city'] ?? '';
$addressRegion = $data['address_region'] ?? '';
$addressDistrict = $data['address_district'] ?? '';
$storeType = $data['store_type'] ?? '';
+ $territorialManager = $data['territorial_manager'] ?? '';
+ $bushChefFlorist = $data['bush_chef_florist'] ?? '';
+
+ $territorialManagerQuery = StoreDynamic::find()->andFilterWhere(['category' => 1, 'active' => 1]);
+ $bushChefFloristQuery = StoreDynamic::find()->andFilterWhere(['category' => 2, 'active' => 1]);
+
+ if ($territorialManager) {
+ $territorialManagerQuery->andFilterWhere(['value_int' => ClusterAdmin::find()
+ ->andFilterWhere(['admin_id' => $territorialManager, 'active' => 1])
+ ->select('cluster_id')
+ ->column()]);
+ }
+
+ if ($bushChefFlorist) {
+ $bushChefFloristQuery->andWhere(['value_int' => $bushChefFlorist]);
+ }
+
+ $territorialManagerStoreIds = $territorialManagerQuery->select('store_id')->column();
+ $bushChefFloristStoreIds = $bushChefFloristQuery->select('store_id')->column();
$stores = CityStore::find()
- ->andWhere(['=', 'visible', CityStore::IS_VISIBLE])
+ ->andFilterWhere([
+ 'visible' => CityStore::IS_VISIBLE,
+ 'city' => $addressCity,
+ 'district' => $addressRegion,
+ 'type' => $addressDistrict,
+ 'type' => $storeType,
+ ])
+ ->andFilterWhere(['in', 'id', $bushChefFloristStoreIds])
+ ->andFilterWhere(['in', 'id', $territorialManagerStoreIds])
->all();
return [
'showcaseVolume' => $params->showcase_volume ?? null,
'freezeArea' => $params->freeze_area ?? null,
'freezeVolume' => $params->freeze_volume ?? null,
- 'matrixType' => $params->matrix_type ?? null,
+ 'matrixType' => !empty($params->matrix_type) ? explode(',', $params->matrix_type) : null,
+ 'bushId' => $bushId,
'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'),
]
];
}
+
+ public function actionGetTerritorialManager($bushId)
+ {
+ 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;
+
+ return [
+ 'success' => true,
+ 'data' => [
+ 'territorialManagerId' => $territorialManagerId,
+ 'territorialManager' => $territorialManager,
+ ]
+ ];
+ }
}
--- /dev/null
+<?php
+
+use yii\db\Migration;
+
+/**
+ * Class m250123_164600_update_column_name
+ */
+class m250123_164600_update_column_name extends Migration
+{
+ /**
+ * {@inheritdoc}
+ */
+ public function safeUp()
+ {
+ $this->renameColumn('city_store_params', 'stores_type', 'store_type');
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function safeDown()
+ {
+ $this->renameColumn('city_store_params', 'store_type', 'stores_type');
+ }
+}
*
* @property int $id
* @property int $store_id
- * @property int|null $stores_type
+ * @property int|null $store_type
* @property string|null $address_city
* @property string|null $address_region
* @property string|null $address_district
{
return [
[['store_id'], 'required'],
- [['store_id', 'stores_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', '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'],
return [
'id' => 'ID',
'store_id' => 'ИД Магазина',
- 'stores_type' => 'Тип магазина',
+ 'store_type' => 'Тип магазина',
'address_city' => 'Город, где расположен магазин',
'address_region' => 'Регион, где расположен магазин',
'address_district' => 'Район, где расположен магазин',
public function getStore() {
return $this->hasOne(CityStore::class, ['id' => 'store_id']);
}
+
+ public function getUpdatedBy() {
+ return $this->hasOne(Admin::class, ['id' => 'updated_by']);
+ }
+
+ public function getCreatedBy() {
+ return $this->hasOne(Admin::class, ['id' => 'created_by']);
+ }
+
+ public function getTerritorialManager() {
+ return $this->hasOne(Admin::class, ['id' => 'territorial_manager']);
+ }
+
+ public function getBushChefFlorist() {
+ return $this->hasOne(Admin::class, ['id' => 'bush_chef_florist']);
+ }
+
+ public function getMatrixType() {
+ return $this->hasOne(MatrixType::class, ['id' => 'matrix_type']);
+ }
+
+ public function getStoreType() {
+ return $this->hasOne(StoreType::class, ['id' => 'store_type']);
+ }
+
+ public function getAddressRegion() {
+ return $this->hasOne(StoreCityList::class, ['id' => 'address_region']);
+ }
+
+ public function getAddressDistrict() {
+ return $this->hasOne(StoreCityList::class, ['id' => 'address_district']);
+ }
+
+ public function getAddressCity() {
+ return $this->hasOne(StoreCityList::class, ['id' => 'address_city']);
+ }
}
+++ /dev/null
-<?php
-
-use yii\helpers\Html;
-use yii\widgets\ActiveForm;
-
-/* @var $this yii\web\View */
-/* @var $model app\models\CityStoreParams */
-/* @var $form yii\widgets\ActiveForm */
-?>
-
-<div class="city-store-params-form">
-
- <?php $form = ActiveForm::begin(); ?>
-
- <?= $form->field($model, 'store_id')->textInput() ?>
-
- <?= $form->field($model, 'stores_type')->textInput() ?>
-
- <?= $form->field($model, 'address_city')->textInput() ?>
-
- <?= $form->field($model, 'address_region')->textInput() ?>
-
- <?= $form->field($model, 'address_district')->textInput() ?>
-
- <?= $form->field($model, 'territorial_manager')->textInput() ?>
-
- <?= $form->field($model, 'bush_chef_florist')->textInput() ?>
-
- <?= $form->field($model, 'store_area')->textInput() ?>
-
- <?= $form->field($model, 'showcase_volume')->textInput() ?>
-
- <?= $form->field($model, 'freeze_area')->textInput() ?>
-
- <?= $form->field($model, 'freeze_volume')->textInput() ?>
-
- <?= $form->field($model, 'matrix_type')->textInput() ?>
-
- <div class="form-group">
- <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Save', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
- </div>
-
- <?php ActiveForm::end(); ?>
-
-</div>
+++ /dev/null
-<?php
-
-use yii\helpers\Html;
-
-/* @var $this yii\web\View */
-/* @var $model app\models\CityStoreParams */
-
-$this->title = 'Create City Store Param';
-$this->params['breadcrumbs'][] = ['label' => 'City Store Params', 'url' => ['index']];
-$this->params['breadcrumbs'][] = $this->title;
-?>
-<div class="city-store-params-create">
-
- <h1><?= Html::encode($this->title) ?></h1>
-
- <?= $this->render('_form', [
- 'model' => $model,
- ]) ?>
-
-</div>
<?php
-use softark\duallistbox\DualListbox;
-use yii\helpers\ArrayHelper;
+use yii\grid\GridView;
use yii\helpers\Html;
-use yii\helpers\Url;
-use yii_app\records\Admin;
-use yii_app\records\AdminGroup;
-use yii_app\records\MatrixType;
-use yii_app\records\StoreCityList;
-use yii_app\records\StoreType;
/* @var $this yii\web\View */
/* @var $dataProvider yii\data\ActiveDataProvider */
-$this->title = 'City Store Params';
+$this->title = 'Список магазинов с настройками';
$this->params['breadcrumbs'][] = $this->title;
-
-$this->registerJsFile('/js/city-store-params/city-store-params.js', ['position' => \yii\web\View::POS_END]);
?>
-<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_region', null,
- ArrayHelper::map(StoreCityList::findAll(['type' => StoreCityList::TYPE_REGION]), 'id', 'name'),
- ['prompt' => 'Выберите регион', 'class' => 'form-select', 'id' => 'address_region']);
- ?>
- <?= Html::a('Редактировать', [
- Url::to('/store-city-list')], ['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,
- ArrayHelper::map(StoreCityList::findAll(['type' => StoreCityList::TYPE_DISTRICT]), 'id', 'name'),
- ['prompt' => 'Выберите район', 'class' => 'form-select', 'id' => 'address_district']);
- ?>
- </div>
- </div>
- <div class="col-md-2 border-end border-2">
- <div class="card p-3 bg-light shadow-sm">
- <?= Html::dropDownList('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']); ?>
- </div>
- </div>
- <div class="col-md-2 border-end border-2">
- <div class="card p-3 bg-light shadow-sm">
- <?= Html::dropDownList('territorial_manager', null,
- ArrayHelper::map(Admin::findAll(['group_id' => AdminGroup::GROUP_BUSH_DIRECTOR]), 'id', 'name_full'),
- ['prompt' => 'Выберите территориального управляющего', 'class' => 'form-select', 'id' => 'territorial_manager']);
- ?>
- </div>
- </div>
- </div>
- <div class="row mt-3">
- <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,
- ArrayHelper::map(Admin::findAll(['group_id' => \yii_app\records\AdminGroup::GROUP_BUSH_CHEF_FLORIST]), 'id', 'name_full'),
- ['prompt' => 'Выберите кустового шеф флориста', 'class' => 'form-select', 'id' => 'bush_chef_florist']);
- ?>
- </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>
- </div>
- </div>
-</div>
-<?php $form = \yii\widgets\ActiveForm::begin(); ?>
-<div class="container mt-4">
- <div class="row">
- <div class="col-md-3">
- <?= Html::dropDownList('CityStoreParams[selected_store]', null, [], [
- 'multiple' => true,
- 'size' => 16,
- 'class' => 'form-control',
- 'id' => 'selected-store',
- ]) ?>
- <?= Html::button('Редактировать', ['class' => 'btn btn-primary w-100 mt-2 py-1', 'id' => 'edit-button']); ?>
- </div>
- <div class="col-md-9">
- <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::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="col-md-2 py-6">
- <?= Html::label('Адрес', null) ?>
- </div>
- <div class="col-md-3">
- <?= Html::label('Регион'); ?>
- <?= Html::dropDownList('CityStoreParams[address_region]', null, [], ['prompt' => 'Регион', 'class' => 'form-select', 'id' => 'region']); ?>
- </div>
- <div class="col-md-3">
- <?= Html::label('Город'); ?>
- <?= Html::dropDownList('CityStoreParams[address_city]', null, [], ['prompt' => 'Город', 'class' => 'form-select', 'id' => 'city']); ?>
- </div>
- <div class="col-md-3">
- <?= Html::label('Район'); ?>
- <?= Html::dropDownList('CityStoreParams[address_district]', null, [], ['prompt' => 'Район', 'class' => 'form-select', 'id' => 'district']); ?>
- </div>
- </div>
- <div class="row">
- <div class="col-md-2">
- <?= Html::label('Территориально управляющий', null); ?>
- <?= 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>
- </div>
- <div class="row border-bottom">
- <div class="col-md-2">
- <?= Html::label('КШФ') ?>
- </div>
- <div class="col-md-9">
- <?= Html::dropDownList('CityStoreParams[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::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>
- <div class="col-md-8">
- <div class="container mt-5">
- <?= DualListbox::widget([
- 'name' => 'CityStoreParams[matrix_type]',
- 'items' => [],
- 'options' => [
- 'size' => false
- ],
- 'clientOptions' => [
- 'id' => 'matrix-type',
- 'moveOnSelect' => false,
- 'nonSelectedListLabel' => "Тип матрицы <br>" . Html::a('Редактировать', [Url::to('/matrix-type')]),
- 'selectedListLabel' => " <br><br>",
- 'showFilterInputs' => false,
- 'clearButton' => false,
- ],
- ]); ?>
- </div>
- </div>
- <div class="d-flex justify-content-end">
- <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success btn']) ?>
- </div>
- </div>
- </div>
- </div>
- <?php \yii\widgets\ActiveForm::end(); ?>
- </div>
+<div class="store-index px-3">
+
+ <h1><?= Html::encode($this->title) ?></h1>
+ <?= Html::a('Создать', ['update'], ['class' => 'btn btn-success']) ?>
+
+ <?= GridView::widget([
+ 'dataProvider' => $dataProvider,
+ 'columns' => [
+ ['class' => 'yii\grid\SerialColumn'],
+ [
+ 'attribute' => 'store_id',
+ 'value' => function ($data) {
+ return $data->store->name ?? '';
+ }
+ ],
+ [
+ 'attribute' => 'store_type',
+ 'value' => function ($data) {
+ return $data->storeType->name ?? '';
+ }
+ ],
+ [
+ 'attribute' => 'address_region',
+ 'value' => function ($data) {
+ return $data->addressRegion->name ?? '';
+ }
+ ],
+ [
+ 'attribute' => 'created_by',
+ 'value' => function ($data) {
+ return $data->updatedBy->name_full ?? '';
+ }
+ ],
+ 'created_at',
+ [
+ 'class' => 'yii\grid\ActionColumn',
+ 'template' => '{view} {delete}',
+ ]
+ ],
+ 'layout' => '{items}',
+ ]); ?>
</div>
<?php
+use kartik\select2\Select2;
+use softark\duallistbox\DualListbox;
+use yii\helpers\ArrayHelper;
use yii\helpers\Html;
+use yii\helpers\Url;
+use yii_app\records\Admin;
+use yii_app\records\AdminGroup;
+use yii_app\records\MatrixType;
+use yii_app\records\StoreCityList;
+use yii_app\records\StoreType;
/* @var $this yii\web\View */
-/* @var $model app\models\CityStoreParams */
+/* @var $dataProvider yii\data\ActiveDataProvider */
-$this->title = 'Update City Store Param: ' . $model->id;
-$this->params['breadcrumbs'][] = ['label' => 'City Store Params', 'url' => ['index']];
+$this->title = 'City Store Params';
$this->params['breadcrumbs'][] = $this->title;
+
+$this->title = "Настройка параметров магазина";
+$this->params['breadcrumbs'][] = $this->title;
+
+$this->registerJsFile('/js/city-store-params/city-store-params.js', ['position' => \yii\web\View::POS_END]);
?>
-<div class="city-store-params-update">
+<div class="container mt-4 border-bottom">
<h1><?= Html::encode($this->title) ?></h1>
+ <?= Html::a('Назад', ['index'], ['class' => 'btn btn-primary mb-3']) ?>
- <?= $this->render('_form', [
- 'model' => $model,
- ]) ?>
-
+ <div class="row">
+ <div class="col-md-2">
+ <div class="card p-3 bg-light shadow-sm">
+ <?= Html::dropDownList('address_region', null,
+ ArrayHelper::map(StoreCityList::findAll(['type' => StoreCityList::TYPE_REGION]), 'id', 'name'),
+ ['prompt' => 'Выберите регион', 'class' => 'form-select', 'id' => 'address_region']);
+ ?>
+ <?= Html::a('Редактировать', [
+ Url::to('/store-city-list')], ['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,
+ ArrayHelper::map(StoreCityList::findAll(['type' => StoreCityList::TYPE_DISTRICT]), 'id', 'name'),
+ ['prompt' => 'Выберите район', 'class' => 'form-select', 'id' => 'address_district']);
+ ?>
+ </div>
+ </div>
+ <div class="col-md-2 border-end border-2">
+ <div class="card p-3 bg-light shadow-sm">
+ <?= Html::dropDownList('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']); ?>
+ </div>
+ </div>
+ <div class="col-md-2 border-end border-2">
+ <div class="card p-3 bg-light shadow-sm">
+ <?= Html::dropDownList('territorial_manager', null,
+ ArrayHelper::map(Admin::findAll(['group_id' => AdminGroup::GROUP_BUSH_DIRECTOR]), 'id', 'name_full'),
+ ['prompt' => 'Выберите территориального управляющего', 'class' => 'form-select', 'id' => 'territorial_manager']);
+ ?>
+ </div>
+ </div>
+ </div>
+ <div class="row mt-3">
+ <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,
+ ArrayHelper::map(Admin::findAll(['group_id' => \yii_app\records\AdminGroup::GROUP_BUSH_CHEF_FLORIST]), 'id', 'name_full'),
+ ['prompt' => 'Выберите кустового шеф флориста', 'class' => 'form-select', 'id' => 'bush_chef_florist']);
+ ?>
+ </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>
+ </div>
+ </div>
+</div>
+<?php $form = \yii\widgets\ActiveForm::begin(); ?>
+<div class="container mt-4">
+ <div class="row">
+ <div class="col-md-3">
+ <?= Html::dropDownList('CityStoreParams[selected_store]', null, [], [
+ 'multiple' => true,
+ 'size' => 16,
+ 'class' => 'form-control',
+ 'id' => 'selected-store',
+ ]) ?>
+ <?= Html::button('Редактировать', ['class' => 'btn btn-primary w-100 mt-2 py-1', 'id' => 'edit-button']); ?>
+ </div>
+ <div class="col-md-9">
+ <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::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::label('Адрес', null) ?>
+ </div>
+ <div class="col-md-3">
+ <?= Html::label('Регион'); ?>
+ <?= Html::dropDownList('CityStoreParams[address_region]', null, [], ['prompt' => 'Регион', 'class' => 'form-select', 'id' => 'region']); ?>
+ </div>
+ <div class="col-md-3">
+ <?= Html::label('Город'); ?>
+ <?= Html::dropDownList('CityStoreParams[address_city]', null, [], ['prompt' => 'Город', 'class' => 'form-select', 'id' => 'city']); ?>
+ </div>
+ <div class="col-md-3">
+ <?= Html::label('Район'); ?>
+ <?= Html::dropDownList('CityStoreParams[address_district]', null, [], ['prompt' => 'Район', 'class' => 'form-select', 'id' => 'district']); ?>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-2">
+ <?= Html::label('Территориально управляющий', null); ?>
+ <?= 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>
+ </div>
+ <div class="row border-bottom">
+ <div class="col-md-2">
+ <?= Html::label('КШФ') ?>
+ </div>
+ <div class="col-md-9">
+ <?= Html::dropDownList('CityStoreParams[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::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>
+ <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>
+ <div class="d-flex justify-content-end">
+ <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?>
+ </div>
+ </div>
+ </div>
+ </div>
+ <?php \yii\widgets\ActiveForm::end(); ?>
+ </div>
</div>
use yii\helpers\Html;
use yii\widgets\DetailView;
use yii\widgets\ActiveForm;
+use yii_app\records\MatrixType;
/* @var $this yii\web\View */
/* @var $model yii_app\records\CityStoreParams */
-$this->title = "Параметры магазина: " . $model->store_id;
+$this->title = "Параметры магазина# " . $model->store_id;
$this->params['breadcrumbs'][] = ['label' => 'Параметры магазинов', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
-<div class="city-store-params-view">
+<div class="city-store-params-view px-2">
<h1><?= Html::encode($this->title) ?></h1>
+ <?= Html::a('Назад', ['index'], ['class' => 'btn btn-primary']) ?>
+ <?= Html::a('Редактировать', ['update'], ['class' => 'btn btn-warning']) ?>
- <!-- Данные о параметрах магазина -->
- <div class="panel panel-default">
+ <div class="panel panel-default mt-3">
<div class="panel-heading">Детали параметров магазина</div>
<div class="panel-body">
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
- 'store_id',
- 'stores_type',
- 'address_city',
- 'address_region',
- 'address_district',
- 'territorial_manager',
- 'bush_chef_florist',
+ [
+ 'attribute' => 'store_id',
+ 'value' => function ($data) {
+ return $data->store->name ?? '';
+ }
+ ],
+ [
+ 'attribute' => 'store_type',
+ 'value' => function ($data) {
+ return $data->storeType->name ?? '';
+ }
+ ],
+ [
+ 'attribute' => 'address_city',
+ 'value' => function ($data) {
+ return $data->addressCity->name ?? '';
+ }
+ ],
+ [
+ 'attribute' => 'address_region',
+ 'value' => function ($data) {
+ return $data->addressRegion->name ?? '';
+ }
+ ],
+ [
+ 'attribute' => 'address_district',
+ 'value' => function ($data) {
+ return $data->addressDistrict->name ?? '';
+ }
+ ],
+ [
+ 'attribute' => 'territorial_manager',
+ 'value' => function ($data) {
+ return $data->territorialManager->name_full ?? '';
+ }
+ ],
+ [
+ 'attribute' => 'bush_chef_florist',
+ 'value' => function ($data) {
+ return $data->bushChefFlorist->name_full ?? '';
+ }
+ ],
'store_area',
'showcase_volume',
'freeze_area',
'freeze_volume',
- 'matrix_type',
- 'created_by',
+ [
+ 'attribute' => 'matrix_type',
+ 'value' => function ($data) {
+ return implode(', ', MatrixType::find()
+ ->select('name')
+ ->where(['id' => explode(',', $data->matrix_type)])
+ ->column());
+ }
+ ],
+ [
+ 'attribute' => 'created_by',
+ 'value' => function ($data) {
+ return $data->updatedBy->name_full ?? '';
+ }
+ ],
'created_at',
- 'updated_by',
+ [
+ 'attribute' => 'updated_by',
+ 'value' => function ($data) {
+ return $data->updatedBy->name_full ?? '';
+ }
+ ],
'updated_at',
],
]) ?>
</div>
</div>
-
- <p>
- <?= Html::a('Редактировать', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
- <?= Html::a('Удалить', ['delete', 'id' => $model->id], [
- 'class' => 'btn btn-danger',
- 'data' => [
- 'confirm' => 'Вы уверены, что хотите удалить этот параметр магазина?',
- 'method' => 'post',
- ],
- ]) ?>
- </p>
-
</div>
$('#edit-button').on('click', function () {
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(),
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) : '');
+ $('#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);
-
- $('#store_type').val(data.type);
$('#region').val(data.region);
$('#city').val(data.city);
$('#district').val(data.district);
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);
- // Заполнение DualListbox
populateDualListbox(data.matrixTypeArray, data.matrixType); // matrixTypeArray и matrixType передаются с сервера
},
error: function (xhr, status, error) {
}
}
-// Функция для заполнения DualListbox
-function populateDualListbox(matrixTypeArray, selectedValues) {
- var $nonSelectedList = $('#bootstrap-duallistbox-nonselected-list_CityStoreParams\\[matrix_type\\]');
- var $selectedList = $('#bootstrap-duallistbox-selected-list_CityStoreParams\\[matrix_type\\]');
+function populateDualListbox(matrixTypeArray, matrixType) {
+ var select = $('#matrix-type');
+ if (!select.hasClass('select2-hidden-accessible')) {
+ select.select2({
+ placeholder: 'Выберите тип матрицы',
+ multiple: true
+ });
+ }
+ var selectData = Object.keys(matrixTypeArray).map(function (key) {
+ return {
+ id: key,
+ text: matrixTypeArray[key]
+ };
+ });
+
+ select.empty().select2({ data: selectData });
+
+ select.val(matrixType).trigger('change');
+}
+
+
+
+
- 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'); // или аналогичная функция обновления
- }
-}