[['admin_group_id'], 'exist', 'skipOnError' => true, 'targetClass' => AdminGroup::class, 'targetAttribute' => ['admin_group_id' => 'id']],
[['admin_id'], 'exist', 'skipOnError' => true, 'targetClass' => Admin::class, 'targetAttribute' => ['admin_id' => 'id']],
[['creator_id'], 'exist', 'skipOnError' => true, 'targetClass' => Admin::class, 'targetAttribute' => ['creator_id' => 'id']],
+ [['daily_payment'], 'validateDailyPayment'],
+ [['date', 'admin_id'], 'validateUniqueDate'],
];
}
+
+ /**
+ * Валидация для daily_payment, чтобы он не был больше monthly_salary
+ */
+ public function validateDailyPayment($attribute, $params, $validator)
+ {
+ if ($this->daily_payment > $this->monthly_salary) {
+ $this->addError($attribute, 'Подневная оплата не может быть больше оклада.');
+ }
+ }
+
+ /**
+ * Валидация для уникальности записи по дате и admin_id при создании новой записи.
+ */
+ public function validateUniqueDate($attribute, $params)
+ {
+ // Проверка уникальности только для новых записей
+ $exists = EmployeePayment::find()
+ ->where(['admin_id' => $this->admin_id, 'date' => $this->date])
+ ->andFilterWhere(['!=', 'id', $this->id])
+ ->exists();
+
+ if ($exists) {
+ $this->addError($attribute, 'Запись с этой датой уже существует.');
+ }
+ }
+
public function beforeValidate()
{
if (get_called_class() === self::class) {
<div class="employee-payment-form">
<?php $form = ActiveForm::begin(); ?>
- <?php
- $admins = \yii_app\records\Admin::find()->select(['name', 'id'])->orderBy(['name' => SORT_ASC])->asArray()->all();
-
- $adminsList = [];
- foreach ($admins as $admin) {
- $adminsList[$admin['id']] = $admin['name'] . ' ( id ' . $admin['id'] . ')';
- }
- ?>
- <?= $form->field($model, 'admin_id')->widget(Select2::classname(), [
- 'data' => $adminsList,
- 'options' => [
- 'placeholder' => 'Выберите сотрудника...',
- 'value' => $model->admin_id, // Устанавливаем значение по умолчанию
- ],
- 'pluginOptions' => [
- 'allowClear' => true
- ],
- ]); ?>
+
+ <?= $form->field($model, 'admin_id')->hiddenInput()->label(false) ?>
+ <?= $form->field($model, 'admin_name')->textInput([
+ 'value' => $model->admin->name,
+ 'readonly' => true,
+ 'disabled' => true,
+ ])->label('Сотрудник') ?>
<?= $form->field($model, 'date')->textInput(['type' => 'date']) ?>
<?= $form->field($model, 'monthly_salary')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'daily_payment')->textInput(['maxlength' => true]) ?>