From a292b44ba3140681a661acc937910b8c8ed5ae9e 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: Tue, 2 Jun 2026 19:14:23 +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 | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/yuthon_contract/models/inherit_hr_contract.py b/yuthon_contract/models/inherit_hr_contract.py index 1466d8aa9..43b8ef15d 100644 --- a/yuthon_contract/models/inherit_hr_contract.py +++ b/yuthon_contract/models/inherit_hr_contract.py @@ -91,8 +91,19 @@ class HrContract(models.Model): ) change_ids = fields.One2many('hr.contract.change.line', 'contract_id', string="异动信息") - @api.constrains('party_id') - def _constrains_party_company(self): + @api.onchange('party_id') + def _onchange_party_company(self): + """UI 交互:切换甲方时自动带出对应公司""" + if self.party_id and self.party_id.work_address: + company = self.env['res.company'].search( + [('name', 'ilike', self.party_id.work_address)], + limit=1 + ) + if company: + self.company_id = company + + def _sync_party_company(self): + """根据 party_id 同步合同、员工、用户的公司信息""" for rec in self: company = False if rec.party_id and rec.party_id.work_address: @@ -100,14 +111,16 @@ class HrContract(models.Model): [('name', 'ilike', rec.party_id.work_address)], limit=1 ) + if not company: + continue rec.company_id = company - rec.employee_id.company_id = company - if rec.employee_id and rec.employee_id.user_id and company: - user = rec.employee_id.user_id - user.write({ - 'company_id': company.id, - 'company_ids': [(4, company.id)] - }) + if rec.employee_id: + rec.employee_id.company_id = company + if rec.employee_id.user_id: + rec.employee_id.user_id.write({ + 'company_id': company.id, + 'company_ids': [(4, company.id)] + }) @api.constrains('change_ids') def _onchange_change_ids(self): @@ -442,6 +455,7 @@ class HrContract(models.Model): 'is_accum_salary': True, 'is_membership': True, }) + contracts._sync_party_company() return contracts