namespace yii_app\controllers\crud;
+use Yii;
use yii\data\ActiveDataProvider;
use yii_app\records\Admin;
use yii_app\records\EmployeePayment;
*/
public function actionView($id)
{
+ // Получаем текущий месяц и год
+ $currentMonth = date('m');
+ $currentYear = date('Y');
- $dataProvider = new ActiveDataProvider([
- 'query' => EmployeePayment::find()->where(['admin_id' => $id]),
- ]);
+ // Проверяем, сколько записей у сотрудника за текущий месяц
+ $hasMultipleRecords = EmployeePayment::find()
+ ->where(['admin_id' => $id])
+ ->andWhere(['EXTRACT(MONTH FROM date)' => $currentMonth, 'EXTRACT(YEAR FROM date)' => $currentYear])
+ ->count() > 1;
- // Ð\9fолÑ\83Ñ\87ение даннÑ\8bÑ\85 сотрудника для заголовка
+ // Ð\9fолÑ\83Ñ\87аем даннÑ\8bе сотрудника для заголовка
$admin = Admin::findOne($id);
if (!$admin) {
throw new NotFoundHttpException("Сотрудник не найден");
}
+ $dataProvider = new ActiveDataProvider([
+ 'query' => EmployeePayment::find()->where(['admin_id' => $id]),
+ ]);
+
return $this->render('view', [
'admin' => $admin,
'dataProvider' => $dataProvider,
+ 'hasMultipleRecords' => $hasMultipleRecords,
]);
}
+
/**
* Creates a new EmployeePayment model.
* If creation is successful, the browser will be redirected to the 'view' page.
public function actionUpdate($id)
{
$model = $this->findModel($id);
+ $admin = Yii::$app->user->identity;
+
+ // Проверка на group_id и дату записи
+ if ($admin->group_id != 81 && date('Y-m') !== date('Y-m', strtotime($model->date))) {
+ throw new \yii\web\ForbiddenHttpException('Редактирование разрешено только для записей текущего месяца.');
+ }
if ($this->request->isPost && $model->load($this->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->admin_id]);
public function actionDelete($id)
{
$model = $this->findModel($id);
- $admin_id = $model->admin_id;
+ $admin = Yii::$app->user->identity;
+ $adminId = $model->admin_id;
+
+ // Проверка на group_id и дату записи
+ if ($admin->group_id != 81) {
+ // Проверка, разрешено ли удаление записи текущего месяца
+ if (date('Y-m') !== date('Y-m', strtotime($model->date))) {
+ throw new \yii\web\ForbiddenHttpException('Удаление разрешено только для записей текущего месяца.');
+ }
+
+ // Проверка, чтобы осталась хотя бы одна запись после удаления
+ $remainingRecords = EmployeePayment::find()->where(['admin_id' => $adminId])->count();
+ if ($remainingRecords <= 1) {
+ throw new \yii\web\ForbiddenHttpException('Нельзя удалить последнюю запись. Должна остаться хотя бы одна запись.');
+ }
+ }
$model->delete();
- // Редирект на страницу просмотра сотрудника после удаления записи
- return $this->redirect(['view', 'id' => $admin_id]);
+ return $this->redirect(['view', 'id' => $adminId]);
}
/**
/* @var $this yii\web\View */
/* @var $admin yii_app\records\Admin */
/* @var $dataProvider yii\data\ActiveDataProvider */
+/* @var $hasMultipleRecords boolean */
$this->title = $admin->name . ' - ' . $admin->adminGroup->name;
$this->params['breadcrumbs'][] = ['label' => 'Оклады', 'url' => ['index']];
'creator.name:text:Правило создал',
[
'class' => 'yii\grid\ActionColumn',
- 'template' => ' {update} {delete}',
+ 'template' => '{update} {delete}',
+ 'visibleButtons' => [
+ 'update' => function ($model) use ($admin) {
+ // Если пользователь в группе с group_id = 81, разрешить редактирование для всех периодов
+ if ($admin->group_id == 81) {
+ return true;
+ }
+ // Для остальных пользователей разрешено редактирование только записей текущего месяца
+ return date('Y-m') === date('Y-m', strtotime($model->date));
+ },
+ 'delete' => function ($model) use ($admin, $hasMultipleRecords) {
+ // Если пользователь в группе с group_id = 81, разрешить удаление для всех периодов
+ if ($admin->group_id == 81) {
+ return true;
+ }
+ // Разрешить удаление только для записей текущего месяца, если их больше одной
+ return $hasMultipleRecords && date('Y-m') === date('Y-m', strtotime($model->date));
+ },
+ ],
'urlCreator' => function ($action, $model, $key, $index, $column) use ($admin) {
return [$action, 'id' => $model->id, 'admin_id' => $admin->id];
}
],
+
],
]) ?>