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
+}
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();
- }
- }
}