return false;
}
+ /**
+ * {@inheritdoc}
+ * Синхронизирует зарплату из employee_position в employee_payment при назначении должности
+ */
+ public function afterSave($insert, $changedAttributes)
+ {
+ parent::afterSave($insert, $changedAttributes);
+
+ // Если изменился employee_position_id, синхронизируем зарплату
+ if (array_key_exists('employee_position_id', $changedAttributes) && !empty($this->employee_position_id)) {
+ $employeePosition = EmployeePosition::findOne($this->employee_position_id);
+ if (!empty($employeePosition) && !empty($employeePosition->salary)) {
+ // Обновляем или создаем запись в employee_payment
+ $today = date('Y-m-d');
+
+ // Проверяем, есть ли уже запись на сегодня или позже
+ $existingPayment = EmployeePayment::find()
+ ->where(['admin_id' => $this->id])
+ ->andWhere(['>=', 'date', $today])
+ ->orderBy(['date' => SORT_DESC])
+ ->one();
+
+ if (!empty($existingPayment)) {
+ // Обновляем существующую запись
+ $existingPayment->monthly_salary = $employeePosition->salary;
+ $existingPayment->save(false);
+ } else {
+ // Если нет записи на сегодня, создаем новую
+ $latestPayment = EmployeePayment::find()
+ ->where(['admin_id' => $this->id])
+ ->orderBy(['date' => SORT_DESC])
+ ->one();
+
+ if (!empty($latestPayment)) {
+ // Берем daily_payment из последней записи
+ $newPayment = new EmployeePayment();
+ $newPayment->admin_id = $this->id;
+ $newPayment->monthly_salary = $employeePosition->salary;
+ $newPayment->daily_payment = $latestPayment->daily_payment ?? 0;
+ $newPayment->date = $today;
+ $newPayment->save(false);
+ } else {
+ // Если записей нет вообще, создаем с нулевым daily_payment
+ $newPayment = new EmployeePayment();
+ $newPayment->admin_id = $this->id;
+ $newPayment->monthly_salary = $employeePosition->salary;
+ $newPayment->daily_payment = 0;
+ $newPayment->date = $today;
+ $newPayment->save(false);
+ }
+ }
+ }
+ }
+ }
+
}
\ No newline at end of file
use yii\helpers\ArrayHelper;
use yii\behaviors\TimestampBehavior;
use yii\behaviors\BlameableBehavior;
+use yii_app\records\EmployeePayment;
/**
* This is the model class for table "employee_position".
public function getAdminGroup() {
return $this->hasOne(\yii_app\records\AdminGroup::class, ['id' => 'group_id']);
}
+
+ /**
+ * Синхронизирует зарплату из employee_position в employee_payment для всех администраторов с этой должностью
+ * @return void
+ */
+ public function syncSalaryToEmployeePayments(): void
+ {
+ if (empty($this->salary)) {
+ return;
+ }
+
+ // Находим всех администраторов с этой должностью
+ $adminsWithPosition = Admin::find()
+ ->select(['id'])
+ ->where(['employee_position_id' => $this->id])
+ ->column();
+
+ if (empty($adminsWithPosition)) {
+ return;
+ }
+
+ // Обновляем или создаем записи в employee_payment для каждого администратора
+ $today = date('Y-m-d');
+ foreach ($adminsWithPosition as $adminId) {
+ // Проверяем, есть ли уже запись на сегодня или позже
+ $existingPayment = EmployeePayment::find()
+ ->where(['admin_id' => $adminId])
+ ->andWhere(['>=', 'date', $today])
+ ->orderBy(['date' => SORT_DESC])
+ ->one();
+
+ if (!empty($existingPayment)) {
+ // Обновляем существующую запись
+ $existingPayment->monthly_salary = $this->salary;
+ $existingPayment->save(false);
+ } else {
+ // Если нет записи на сегодня, создаем новую
+ $latestPayment = EmployeePayment::find()
+ ->where(['admin_id' => $adminId])
+ ->orderBy(['date' => SORT_DESC])
+ ->one();
+
+ if (!empty($latestPayment)) {
+ // Берем daily_payment из последней записи
+ $newPayment = new EmployeePayment();
+ $newPayment->admin_id = $adminId;
+ $newPayment->monthly_salary = $this->salary;
+ $newPayment->daily_payment = $latestPayment->daily_payment ?? 0;
+ $newPayment->date = $today;
+ $newPayment->save(false);
+ } else {
+ // Если записей нет вообще, создаем с нулевым daily_payment
+ $newPayment = new EmployeePayment();
+ $newPayment->admin_id = $adminId;
+ $newPayment->monthly_salary = $this->salary;
+ $newPayment->daily_payment = 0;
+ $newPayment->date = $today;
+ $newPayment->save(false);
+ }
+ }
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function afterSave($insert, $changedAttributes)
+ {
+ parent::afterSave($insert, $changedAttributes);
+
+ // Если изменилась зарплата, синхронизируем для всех администраторов
+ if (array_key_exists('salary', $changedAttributes) || $insert) {
+ $this->syncSalaryToEmployeePayments();
+ }
+ }
}