From 58c8b5129f891e3293980a8e0f8a972d8981ab0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= <9664676+pengyuthon@user.noreply.gitee.com> Date: Wed, 4 Feb 2026 18:40:09 +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_contract/models/inherit_hr_contract.py | 11 +-- .../models/yuthon_reassignment_approval.py | 90 +++++++++---------- 2 files changed, 47 insertions(+), 54 deletions(-) diff --git a/yuthon_contract/models/inherit_hr_contract.py b/yuthon_contract/models/inherit_hr_contract.py index 07069eea2..b535b42db 100644 --- a/yuthon_contract/models/inherit_hr_contract.py +++ b/yuthon_contract/models/inherit_hr_contract.py @@ -93,11 +93,12 @@ class HrContract(models.Model): @api.constrains('change_ids') def _onchange_change_ids(self): - latest = self.change_ids.sorted('change_end_date', reverse=True)[0] - self.department_id = latest.department_id - self.job_id = latest.job_id - self.structure_type_id = latest.structure_type_id - self.salary_group_id = latest.salary_group_id + if self.change_ids: + latest = self.change_ids.sorted('change_end_date', reverse=True)[0] + self.department_id = latest.department_id + self.job_id = latest.job_id + self.structure_type_id = latest.structure_type_id + self.salary_group_id = latest.salary_group_id def update_version(self): contract_ids = self.env["hr.contract"].browse( diff --git a/yuthon_hr_employee_approval/models/yuthon_reassignment_approval.py b/yuthon_hr_employee_approval/models/yuthon_reassignment_approval.py index 5864aa3ad..321b313b8 100644 --- a/yuthon_hr_employee_approval/models/yuthon_reassignment_approval.py +++ b/yuthon_hr_employee_approval/models/yuthon_reassignment_approval.py @@ -86,65 +86,57 @@ class YuthonReassignmentApproval(models.Model): def end_approval(self): current_date = fields.Date.today() - # 筛选已完成审批的记录 - # reassignment_approval_ids = self.search([('work_end', '=', True), - # ('is_execution', '=', False), - # ]) for record in self: - if record.change_date <= current_date: + # if not record.is_execution and record.change_date <= current_date and record.work_end: employee = record.employee_id - old_contract = employee.contract_id - update_vals = {} + original_contract = employee.contract_id # + if not original_contract: + continue + + emp_update_vals = {} if record.change_company_id: - update_vals['company_id'] = record.change_company_id.id + emp_update_vals['company_id'] = record.change_company_id.id if record.change_department_id: - update_vals['department_id'] = record.change_department_id.id + emp_update_vals['department_id'] = record.change_department_id.id if record.change_job_id: - update_vals['job_id'] = record.change_job_id.id + emp_update_vals['job_id'] = record.change_job_id.id if record.change_parent_id: - update_vals['parent_id'] = record.change_parent_id.id - if update_vals: - employee.write(update_vals) + emp_update_vals['parent_id'] = record.change_parent_id.id + if emp_update_vals: + employee.write(emp_update_vals) - if old_contract: - version_str = self.version.lstrip('V') - main_version = version_str.split('.')[0] - new_main_version = int(main_version) + 1 - new_version = f"V{new_main_version}.0" - new_contract_vals = { - 'employee_id': old_contract.employee_id.id, - 'name': old_contract.name, - 'state': 'open', - 'party_id': old_contract.party_id.id, - 'company_id': record.change_company_id.id, - 'is_annual_salary': old_contract.is_annual_salary, - 'date_start': record.change_date, - 'date_end': False, - 'resource_calendar_id': old_contract.resource_calendar_id.id, - # 'structure_type_id': old_contract.structure_type_id.id, - 'department_id': old_contract.department_id.id, - 'job_id': old_contract.job_id.id, - 'termination_date': old_contract.termination_date, - 'salary_group_id': old_contract.salary_group_id.id, - 'contract_type_id': old_contract.contract_type_id.id, - 'version': new_version, - 'wage': old_contract.wage, - } - - if record.change_job_id: - new_contract_vals['job_id'] = record.change_job_id.id - if record.change_structure_id: - new_contract_vals[ 'structure_type_id'] = record.change_structure_id.type_id.id - if record.change_department_id: - new_contract_vals['department_id'] = record.change_department_id.id - old_contract.write({ - 'state': 'cancel', - 'date_end': record.change_date - timedelta(days=1), + if original_contract.version: + version_str = original_contract.version.lstrip('V') + main_version = version_str.split('.')[0] if '.' in version_str else version_str + try: + new_main_version = int(main_version) + 1 + except ValueError: + new_main_version = 2 + original_contract.write({ + 'version': f"V{new_main_version}.0" }) - new_contract = self.env['hr.contract'].create(new_contract_vals) - employee.contract_id = new_contract.id + + existing_line = self.env['hr.contract.change.line'].search([ + ('contract_id', '=', original_contract.id), + ('change_start_date', '=', record.change_date), + ('job_id', '=', record.change_job_id.id or original_contract.job_id.id) + ], limit=1) + + if not existing_line: + line_vals = { + 'contract_id': original_contract.id, + 'department_id': record.change_department_id.id or original_contract.department_id.id, + 'job_id': record.change_job_id.id or original_contract.job_id.id, + 'structure_type_id': record.change_structure_id.type_id.id if record.change_structure_id else original_contract.structure_type_id.id, + 'salary_group_id': original_contract.salary_group_id.id if original_contract.salary_group_id else False, + 'change_start_date': record.change_date, + 'change_end_date': False, + } + self.env['hr.contract.change.line'].create(line_vals) + original_contract._onchange_change_ids() record.is_execution = True + class HrJobType(models.Model): _name = "hr.job.type"