From 3ef3dcec4bea736716013daa4f6eab5e688fd547 Mon Sep 17 00:00:00 2001 From: Vladimir Fomichev Date: Sat, 1 Nov 2025 14:37:13 +0300 Subject: [PATCH] =?utf8?q?=D0=A3=D0=B1=D0=B8=D1=80=D0=B0=D0=B5=D0=BC=20?= =?utf8?q?=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD=D0=B8=D0=B7=D0=B0?= =?utf8?q?=D1=86=D0=B8=D1=8E=20=D0=97=D0=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/records/Admin.php | 58 +---------------------- erp24/records/EmployeePosition.php | 74 ------------------------------ 2 files changed, 1 insertion(+), 131 deletions(-) diff --git a/erp24/records/Admin.php b/erp24/records/Admin.php index 940cee39..bd108177 100755 --- a/erp24/records/Admin.php +++ b/erp24/records/Admin.php @@ -752,60 +752,4 @@ class Admin extends ActiveRecord implements IdentityInterface 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 +} diff --git a/erp24/records/EmployeePosition.php b/erp24/records/EmployeePosition.php index d9a2874e..404e4c58 100755 --- a/erp24/records/EmployeePosition.php +++ b/erp24/records/EmployeePosition.php @@ -114,78 +114,4 @@ class EmployeePosition extends \yii\db\ActiveRecord 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(); - } - } } -- 2.39.5