*/
public function actionIndex()
{
- $searchModel = new ClusterAdminSearch();
- $dataProvider = $searchModel->search($this->request->queryParams);
+ // Получаем все кусты из таблицы Cluster
+ $clusters = Cluster::find()->asArray()->all();
+
+ // Получаем все записи из таблицы ClusterAdmin
+ $clusterAdmins = ClusterAdmin::find()
+ ->with(['admin', 'cluster'])
+ ->asArray()
+ ->all();
+
+ // Создаем массив для сопоставления кустов и их статуса
+ $clusterMapping = [];
+ foreach ($clusters as $cluster) {
+ $clusterMapping[$cluster['id']] = [
+ 'name' => $cluster['name'],
+ 'admin' => null,
+ 'status' => 'Нет записей',
+ 'hasActive' => false,
+ 'hasAny' => false,
+ ];
+
+ // Проверяем наличие записей и активных записей для данного куста
+ foreach ($clusterAdmins as $adminRecord) {
+ if ($adminRecord['cluster_id'] == $cluster['id']) {
+ $clusterMapping[$cluster['id']]['hasAny'] = true;
+
+ if ($adminRecord['active'] == 1) {
+ $clusterMapping[$cluster['id']]['admin'] = $adminRecord['admin']['name'] . ' (' . $adminRecord['admin_id'] . ')';
+ $clusterMapping[$cluster['id']]['status'] = 'Активная запись';
+ $clusterMapping[$cluster['id']]['hasActive'] = true;
+ break;
+ }
+ }
+ }
+
+
+ if (!$clusterMapping[$cluster['id']]['hasActive'] && $clusterMapping[$cluster['id']]['hasAny']) {
+ $clusterMapping[$cluster['id']]['status'] = 'Нет активных записей';
+ }
+ }
- $user = Yii::$app->user->identity;
return $this->render('index', [
- 'searchModel' => $searchModel,
- 'dataProvider' => $dataProvider,
- 'user' => $user,
+ 'clusterMapping' => $clusterMapping,
]);
}
public function actionView($id)
{
$user = Yii::$app->user->identity;
+
+ // Ищем кластер по его ID
+ $cluster = Cluster::findOne($id);
+ if (!$cluster) {
+ throw new NotFoundHttpException('Кластер не найден.');
+ }
+
+ // Находим все записи для данного кластера
+ $clusterAdmins = ClusterAdmin::find()
+ ->where(['cluster_id' => $id])
+ ->with(['admin'])
+ ->all();
+
return $this->render('view', [
- 'model' => $this->findModel($id),
+ 'cluster' => $cluster,
+ 'clusterAdmins' => $clusterAdmins,
'user' => $user,
]);
}
* If creation is successful, the browser will be redirected to the 'view' page.
* @return string|\yii\web\Response
*/
- public function actionCreate()
+ public function actionCreate($cluster_id)
{
$model = new ClusterAdmin();
+ // Проверяем, существует ли указанный кластер
+ $cluster = Cluster::findOne($cluster_id);
+ if (!$cluster) {
+ throw new NotFoundHttpException('Кластер не найден.');
+ }
+
if ($this->request->isPost && $model->load($this->request->post())) {
- // Проверка на существование записи с такими же cluster_id и date_end >= текущей даты или date_end = '2100-01-01'
+ $model->cluster_id = $cluster_id; // Устанавливаем cluster_id
+
+ // Ищем активную запись для данного кластера
$existingRecord = ClusterAdmin::find()
- ->where(['cluster_id' => $model->cluster_id])
- ->andWhere(['or', ['>=', 'date_end', date('Y-m-d')], ['date_end' => '2100-01-01']])
+ ->where(['cluster_id' => $model->cluster_id, 'active' => 1])
->one();
if ($existingRecord) {
- // Обновляем дату окончания для текущей записи на текущую дату
+ // Отключаем активность у старой записи
+ $existingRecord->active = 0;
$existingRecord->date_end = date('Y-m-d');
ClusterManagerService::clearClusterManagerStores($existingRecord->cluster_id, $existingRecord->admin_id);
if (!$existingRecord->save()) {
Yii::$app->session->setFlash('error', 'Ошибка при обновлении существующей записи.');
- return $this->redirect(['create']);
+ return $this->redirect(['create', 'cluster_id' => $cluster_id]);
}
+ }
- // Создаём новую запись для cluster_id и admin_id
- $model->date_start = date('Y-m-d'); // Опционально установить текущую дату как начало новой привязки
- if ($model->save()) {
- ClusterManagerService::syncClusterManagers($model->cluster_id, $model->admin_id);
- Yii::$app->session->setFlash('success', 'Новая запись успешно создана, предыдущая была закрыта.');
- return $this->redirect(['view', 'id' => $model->id]);
- } else {
- Yii::$app->session->setFlash('error', 'Ошибка при создании новой записи.');
- }
+ // Устанавливаем дату начала для новой записи и включаем активность
+ $model->date_start = date('Y-m-d');
+ $model->active = 1;
+
+ if ($model->save()) {
+ ClusterManagerService::syncClusterManagers($model->cluster_id, $model->admin_id);
+ Yii::$app->session->setFlash('success', 'Новая запись успешно создана, предыдущая была закрыта.');
+ return $this->redirect(['view', 'id' => $cluster_id]);
} else {
- // Если такой записи нет, просто создаем новую
- if ($model->save()) {
- ClusterManagerService::syncClusterManagers($model->cluster_id, $model->admin_id);
- return $this->redirect(['view', 'id' => $model->id]);
- }
+ Yii::$app->session->setFlash('error', 'Ошибка при создании новой записи.');
}
}
- // Получение данных для выпадающих списков
- $clusters = ArrayHelper::map(Cluster::find()->all(), 'id', 'name');
$admins = ArrayHelper::map(Admin::find()
->select(['id', 'name'])
- ->where(['IN', 'group_id', [7]]) // Только кустовые директора
+ ->where(['IN', 'group_id', [7]])
->all(), 'id', 'name');
$user = Yii::$app->user->identity;
return $this->render('create', [
'model' => $model,
- 'clusters' => $clusters,
+ 'cluster' => $cluster,
'admins' => $admins,
'user' => $user,
]);
$model = $this->findModel($id);
- // Сохраним оригинальные значения до изменения
- $originalClusterId = $model->cluster_id;
- $originalAdminId = $model->admin_id;
+ $cluster = Cluster::findOne($model->cluster_id);
+ if (!$cluster) {
+ throw new NotFoundHttpException('Кластер не найден.');
+ }
if ($this->request->isPost && $model->load($this->request->post())) {
- // Если запись успешно обновлена
if ($model->save()) {
- // Проверяем, изменились ли cluster_id или admin_id
- if ($originalClusterId != $model->cluster_id || $originalAdminId != $model->admin_id) {
- // Очищаем старую привязку менеджера к магазину
- ClusterManagerService::clearClusterManagerStores($originalClusterId, $originalAdminId);
-
- // Синхронизируем новую привязку
- ClusterManagerService::syncClusterManagers($model->cluster_id, $model->admin_id);
- }
-
- // Перенаправляем на страницу просмотра
- return $this->redirect(['view', 'id' => $model->id]);
+ Yii::$app->session->setFlash('success', 'Запись успешно обновлена.');
+ return $this->redirect(['view', 'id' => $model->cluster_id]);
} else {
Yii::$app->session->setFlash('error', 'Ошибка при сохранении данных.');
}
}
- // Получение данных для выпадающих списков
- $clusters = ArrayHelper::map(Cluster::find()->all(), 'id', 'name');
$admins = ArrayHelper::map(Admin::find()
->select(['id', 'name'])
- ->where(['IN', 'group_id', [7]]) // Только кустовые директора
+ ->where(['IN', 'group_id', [7]])
->all(), 'id', 'name');
$user = Yii::$app->user->identity;
return $this->render('update', [
'model' => $model,
- 'clusters' => $clusters,
+ 'cluster' => $cluster,
'admins' => $admins,
'user' => $user,
]);
--- /dev/null
+<?php
+
+use yii\db\Migration;
+
+/**
+ * Class m241018_114640_alter_table_cluster_admin_add_column_active
+ */
+class m241018_114640_alter_table_cluster_admin_add_column_active extends Migration
+{
+ const TABLE_NAME = 'erp24.cluster_admin';
+ /**
+ * {@inheritdoc}
+ */
+ public function safeUp()
+ {
+ $this->addColumn(self::TABLE_NAME, 'active', $this->tinyInteger()->notNull()->defaultValue(0)
+ ->after('date_end')->comment('0 - запись не активная 1 - запись привязки активная'));
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function safeDown()
+ {
+ $this->dropColumn(self::TABLE_NAME, 'active');
+ }
+
+ /*
+ // Use up()/down() to run migration code without a transaction.
+ public function up()
+ {
+
+ }
+
+ public function down()
+ {
+ echo "m241018_114640_alter_table_cluster_admin_add_column_active cannot be reverted.\n";
+
+ return false;
+ }
+ */
+}
* @property int $admin_id ID пользователя
* @property string $date_start Дата начала привязки
* @property string $date_end Дата окончания привязки
+ * @property int $active Активность
*/
class ClusterAdmin extends \yii\db\ActiveRecord
{
{
return [
[['cluster_id', 'admin_id', 'date_start'], 'required'],
- [['cluster_id', 'admin_id'], 'integer'],
+ [['cluster_id', 'admin_id', 'active'], 'integer'],
[['date_start', 'date_end'], 'date', 'format' => 'php:Y-m-d'],
['date_end', 'compare', 'compareAttribute' => 'date_start',
'operator' => '>=', 'type' => 'date',
'admin_id' => 'Кустовой',
'date_start' => 'Начало привязки',
'date_end' => 'Окончание привязки',
+ 'active' => 'Активность',
];
}
return $this->hasOne(Admin::class, ['id' => 'admin_id']);
}
-}
+ /**
+ * Устанавливаем значение активности по умолчанию
+ */
+ public function init()
+ {
+ parent::init();
+ if ($this->isNewRecord) {
+ $this->active = 1; // По умолчанию активная запись
+ }
+ }
+}
\ No newline at end of file
use yii_app\records\ClusterAdmin;
-
/** @var yii\web\View $this */
/** @var ClusterAdmin $model */
/** @var yii\widgets\ActiveForm $form */
-/** @var array $clusters */
+/** @var yii_app\records\Cluster $cluster */
/** @var array $admins */
/** @var yii_app\records\Admin $user */
-
-
?>
<div class="cluster-admin-form">
- <?php if(Yii::$app->session->hasFlash('error')) { ?>
+ <?php if (Yii::$app->session->hasFlash('error')) { ?>
<div class="alert alert-danger" role="alert">
<?= Yii::$app->session->getFlash('error') ?>
</div>
<div class="col-6">
<?php $form = ActiveForm::begin(); ?>
- <?= $form->field($model, 'cluster_id')->widget(Select2::class, [
- 'data' => $clusters,
- 'options' => ['placeholder' => 'Выберите куст...'],
- 'pluginOptions' => [
- 'allowClear' => true
- ],
- ]); ?>
+ <!-- Отображаем только имя кластера и скрытое поле для передачи cluster_id -->
+ <div class="form-group">
+ <label>Куст</label>
+ <input type="text" class="form-control" value="<?= Html::encode($cluster->name) ?>" readonly>
+ <?= $form->field($model, 'cluster_id')->hiddenInput(['value' => $cluster->id])->label(false) ?>
+ </div>
<?= $form->field($model, 'admin_id')->widget(Select2::class, [
'data' => $admins,
],
]); ?>
- <?php if (in_array($user->group_id , [81])): ?>
- <!-- Поля для группы 81 -->
+ <!-- Чекбокс для активности -->
+ <?= $form->field($model, 'active')->checkbox([
+ 'label' => 'Активность',
+ 'checked' => $model->isNewRecord ? true : boolval($model->active),
+ ]) ?>
+
+ <?php if (in_array($user->group_id, [81])): ?>
<?= $form->field($model, 'date_start')->input('date', [
'value' => $model->date_start ?? date('Y-m-d'),
]) ?>
-
-
<?php else: ?>
- <!-- Скрытые поля для других пользователей, чтобы сохранить значение по умолчанию -->
<?= $form->field($model, 'date_start')->hiddenInput(['value' => date('Y-m-d')])->label(false) ?>
-
-
<?php endif; ?>
<div class="form-group">
</div>
<?php ActiveForm::end(); ?>
+
+
</div>
</div>
\ No newline at end of file
/** @var yii\web\View $this */
/** @var yii_app\records\ClusterAdmin $model */
-/** @var array $clusters */
+/** @var yii_app\records\Cluster $cluster */
/** @var array $admins */
/** @var yii_app\records\Admin $user */
-$this->title = 'Создание привязки Куста к Кустовому';
+$this->title = 'Создание привязки Куста к Кустовому для ' . $cluster->name;
$this->params['breadcrumbs'][] = ['label' => 'Cluster Admins', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<?= $this->render('_form', [
'model' => $model,
- 'clusters' => $clusters,
+ 'cluster' => $cluster,
'admins' => $admins,
'user' => $user,
]) ?>
<?php
-
-use yii_app\records\ClusterAdmin;
-use yii\helpers\Html;
-use yii\helpers\Url;
-use yii\grid\ActionColumn;
use yii\grid\GridView;
+use yii\helpers\Html;
-/** @var yii\web\View $this */
-/** @var yii_app\records\ClusterAdminSearch $searchModel */
-/** @var yii\data\ActiveDataProvider $dataProvider */
-/** @var yii_app\records\Admin $user */
+/* @var $this yii\web\View */
+/* @var $clusterMapping array */
$this->title = 'Привязка Куст-Кустовой';
$this->params['breadcrumbs'][] = $this->title;
<h1><?= Html::encode($this->title) ?></h1>
- <p>
- <?= Html::a('Создать новую привязку', ['create'], ['class' => 'btn btn-success']) ?>
- </p>
-
- <?php // echo $this->render('_search', ['model' => $searchModel]); ?>
-
<?= GridView::widget([
- 'dataProvider' => $dataProvider,
- 'filterModel' => $searchModel,
+ 'dataProvider' => new \yii\data\ArrayDataProvider([
+ 'allModels' => $clusterMapping,
+ 'pagination' => [
+ 'pageSize' => 20,
+ ],
+ ]),
'columns' => [
- ['class' => 'yii\grid\SerialColumn'],
-
- 'id',
[
- 'attribute' => 'cluster_id',
+ 'attribute' => 'name',
+ 'label' => 'Куст',
'value' => function ($model) {
- return $model->cluster ? $model->cluster->name . ' (' . $model->cluster_id . ')' : null;
+ return Html::encode($model['name']);
},
+ 'format' => 'raw',
],
[
- 'attribute' => 'admin_id',
+ 'attribute' => 'admin',
+ 'label' => 'Кустовой',
'value' => function ($model) {
- return $model->admin ? $model->admin->name . ' (' . $model->admin_id . ')' : null;
+ if ($model['status'] === 'Нет записей') {
+ return Html::tag('span', 'Нет записей', ['style' => 'color: red;']);
+ } elseif ($model['status'] === 'Нет активных записей') {
+ return Html::tag('span', 'Нет активных записей', ['style' => 'color: orange;']);
+ } else {
+ return Html::encode($model['admin']);
+ }
},
+ 'format' => 'raw',
],
- 'date_start',
- 'date_end',
[
- 'class' => ActionColumn::class,
- 'template' => '{view} {update} {delete}', // По умолчанию включаем все кнопки
- 'visibleButtons' => [
- 'update' => function ($model) use ($user) {
- return in_array($user->group_id, [81]); // Показывать кнопку 'update' только для группы 81
+ 'class' => 'yii\grid\ActionColumn',
+ 'template' => '{view} {create}',
+ 'buttons' => [
+ 'view' => function ($url, $model, $key) {
+ return Html::a('Просмотреть', ['view', 'id' => $key], ['class' => 'btn btn-primary']);
},
- 'delete' => function ($model) use ($user) {
- return in_array($user->group_id, [81]); // Показывать кнопку 'delete' только для группы 81
+ 'create' => function ($url, $model, $key) {
+ // Показываем кнопку только если нет записей для кластера
+ if ($model['status'] === 'Нет записей') {
+ return Html::a('Создать новую привязку', ['create', 'cluster_id' => $key], ['class' => 'btn btn-success']);
+ }
+ return null;
},
],
- 'urlCreator' => function ($action, ClusterAdmin $model, $key, $index, $column) {
- return Url::toRoute([$action, 'id' => $model->id]);
- }
],
],
]); ?>
-
-</div>
+</div>
\ No newline at end of file
/** @var yii\web\View $this */
/** @var yii_app\records\ClusterAdmin $model */
-/** @var array $clusters */
+/** @var yii_app\records\Cluster $cluster */
/** @var array $admins */
/** @var yii_app\records\Admin $user */
-$this->title = 'Редактирование привязки куста к кустовому: ' . $model->id;
+$this->title = 'Редактирование привязки куста к кустовому: ' . $cluster->name;
$this->params['breadcrumbs'][] = ['label' => 'Cluster Admins', 'url' => ['index']];
$this->params['breadcrumbs'][] = ['label' => $model->id, 'url' => ['view', 'id' => $model->id]];
$this->params['breadcrumbs'][] = 'Update';
<?= $this->render('_form', [
'model' => $model,
- 'clusters' => $clusters,
+ 'cluster' => $cluster,
'admins' => $admins,
'user' => $user,
]) ?>
use yii\helpers\Html;
use yii\widgets\DetailView;
+use yii\grid\GridView;
+use yii\data\ArrayDataProvider;
/** @var yii\web\View $this */
-/** @var yii_app\records\ClusterAdmin $model */
+/** @var yii_app\records\Cluster $cluster */
+/** @var array $clusterAdmins */
/** @var yii_app\records\Admin $user */
-$this->title = "Ð\9fÑ\80ивÑ\8fзка кÑ\83Ñ\81Ñ\82ового к кÑ\83Ñ\81Ñ\82Ñ\83 â\84\96" . $model->id . " оÑ\82 " . $model->date_start;
+$this->title = "Ð\94еÑ\82али клаÑ\81Ñ\82еÑ\80а: " . $cluster->name;
$this->params['breadcrumbs'][] = ['label' => 'Cluster Admins', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
\yii\web\YiiAsset::register($this);
?>
<div class="cluster-admin-view p-4">
+
<?= Html::a('Назад', ['index'], ['class' => 'btn btn-danger my-2']) ?>
<h1><?= Html::encode($this->title) ?></h1>
-
<p>
<?php if (in_array($user->group_id, [81])): ?> <!-- Проверяем, принадлежит ли пользователь к группе 81 -->
- <?= Html::a('Изменить', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
- <?= Html::a('Удалить', ['delete', 'id' => $model->id], [
- 'class' => 'btn btn-danger',
- 'data' => [
- 'confirm' => 'Вы уверены что хотите удалить запись?',
- 'method' => 'post',
- ],
- ]) ?>
+ <?= Html::a('Создать новую привязку', ['create', 'cluster_id' => $cluster->id], ['class' => 'btn btn-success']) ?>
<?php endif; ?>
</p>
- <?= DetailView::widget([
- 'model' => $model,
- 'attributes' => [
- 'id',
+
+
+ <h2>Привязки кустового к кусту</h2>
+
+ <?= GridView::widget([
+ 'dataProvider' => new ArrayDataProvider([
+ 'allModels' => $clusterAdmins,
+ 'pagination' => [
+ 'pageSize' => 10,
+ ],
+ ]),
+ 'columns' => [
[
- 'attribute' => 'cluster_id',
+ 'attribute' => 'admin_id',
+ 'label' => 'Кустовой',
'value' => function ($model) {
- return $model->cluster ? $model->cluster->name . ' (' . $model->cluster_id . ')' : null;
+ return $model->admin ? $model->admin->name . ' (' . $model->admin_id . ')' : 'Не назначен';
},
],
[
- 'attribute' => 'admin_id',
+ 'attribute' => 'active',
+ 'label' => 'Активность',
+ 'format' => 'raw',
'value' => function ($model) {
- return $model->admin ? $model->admin->name . ' (' . $model->admin_id . ')' : null;
+ return $model->active == 1
+ ? Html::tag('span', 'Активен', ['style' => 'color: green;'])
+ : Html::tag('span', 'Неактивен', ['style' => 'color: red;']);
},
],
'date_start',
- 'date_end',
+ [
+ 'attribute' => 'date_end',
+ 'label' => 'Дата окончания',
+ 'value' => function ($model) {
+ return $model->active == 0 ? $model->date_end : '-';
+ },
+ ],
+ [
+ 'class' => 'yii\grid\ActionColumn',
+ 'template' => '{update} {delete}',
+ 'visibleButtons' => [
+ 'update' => function ($model) use ($user) {
+ return in_array($user->group_id, [81]);
+ },
+ 'delete' => function ($model) use ($user) {
+ return in_array($user->group_id, [81]);
+ },
+ ],
+ 'urlCreator' => function ($action, $model, $key, $index) {
+ return [$action, 'id' => $model->id];
+ },
+ ],
],
- ]) ?>
+ ]); ?>
-</div>
+</div>
\ No newline at end of file