From fc87e85eeea71b9561020215c59048b23e9e0bc9 Mon Sep 17 00:00:00 2001 From: zhou <123@> Date: Wed, 25 Jun 2025 16:03:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yuthon_salary/wizard/salary_compute_wizard.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/yuthon_salary/wizard/salary_compute_wizard.py b/yuthon_salary/wizard/salary_compute_wizard.py index eb2e5e58c..44fa97756 100644 --- a/yuthon_salary/wizard/salary_compute_wizard.py +++ b/yuthon_salary/wizard/salary_compute_wizard.py @@ -85,6 +85,7 @@ class SalaryComputeWizard(models.Model): 'payslip_count': 0 }) existing_payslip = self.env['hr.payslip'].search([ + ('is_push', '=', False), ('employee_id', '=', employee.id), ('date_from', '<=', end_date), ('date_to', '>=', start_date) @@ -93,20 +94,30 @@ class SalaryComputeWizard(models.Model): employee.salary_year_jin_ids = [(6, 0, self.employee_ids.ids)] if existing_payslip: raise UserError(f"员工 {employee.name} 在 {start_date} 到 {end_date} 日期范围内已有工资单记录,无法创建新的工资单。") + + # 查找有效合同:date_start <= start_date <= date_end(或date_end为空) + contract_id = self.env['hr.contract'].search([ + ('employee_id', '=', employee.id), + ('date_start', '<=', start_date), + '|', + ('date_end', '>=', start_date), + ('date_end', '=', False), + ], limit=1) + # 创建工资单,使用找到的合同或默认合同 self.env['hr.payslip'].create({ 'is_bold': is_bold, 'name': employee.name, 'employee_id': employee.id, - 'contract_id': contract_id.id, + 'contract_id': contract_id.id or employee.contract_id.id, # 使用找到的合同或员工默认合同 'date_from': start_date, 'date_to': end_date, - 'salary_group_id': employee.contract_id.salary_group_id.id, + 'salary_group_id': contract_id.salary_group_id.id if contract_id else employee.contract_id.salary_group_id.id, 'payslip_run_id': payslip_run_id.id, 'state': 'draft', }).compute_sheet() internship_ids = self.env['hr.payslip'].search([ - ('is_push', '=', False), ('employee_id.contract_id.is_probation', '=', True), + ('is_push', '=', False), ('date_from', '<=', end_date), ('date_to', '>=', start_date), ])