From 065ec4e2bb043fb96a0f9343cf323f2c66be3f18 Mon Sep 17 00:00:00 2001 From: "Arthur Pierrot (arpi)" Date: Thu, 15 Feb 2024 10:04:46 +0100 Subject: [PATCH] [FIX] hr: correct number of employees This will fix the number of employees in the partner view and redirect to a kanban view of the employees. The smart button on the partner view for the number of employees related to this partner now gives the correct number depending on the companies selected. If multiple employees are related, the action shows a kanban view of those employees. closes odoo/odoo#158146 Task: 3693173 X-original-commit: c1e979203ec82de2300ad2f8b10478e1504b1c7c Signed-off-by: Yannick Tivisse (yti) --- addons/hr/models/res_partner.py | 9 +++++---- addons/hr/tests/test_hr_employee.py | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/addons/hr/models/res_partner.py b/addons/hr/models/res_partner.py index 7bba971f882..b881a77f130 100644 --- a/addons/hr/models/res_partner.py +++ b/addons/hr/models/res_partner.py @@ -14,17 +14,18 @@ class Partner(models.Model): def _compute_employees_count(self): for partner in self: - partner.employees_count = len(partner.employee_ids) + partner.employees_count = len(partner.employee_ids.filtered(lambda e: e.company_id in self.env.companies)) def action_open_employees(self): self.ensure_one() - if len(self.employee_ids) > 1: + if self.employees_count > 1: return { 'name': _('Related Employees'), 'type': 'ir.actions.act_window', 'res_model': 'hr.employee', - 'view_mode': 'form', - 'domain': [('id', 'in', self.employee_ids.ids)], + 'view_mode': 'kanban', + 'domain': [('id', 'in', self.employee_ids.ids), + ('company_id', 'in', self.env.companies.ids)], } return { 'name': _('Employee'), diff --git a/addons/hr/tests/test_hr_employee.py b/addons/hr/tests/test_hr_employee.py index d6d939710b0..56e48fe628a 100644 --- a/addons/hr/tests/test_hr_employee.py +++ b/addons/hr/tests/test_hr_employee.py @@ -21,6 +21,28 @@ class TestHrEmployee(TestHrCommon): 'image_1920': False }) + def test_employee_smart_button_multi_company(self): + partner = self.env['res.partner'].create({'name': 'Partner Test'}) + company_A = self.env['res.company'].create({'name': 'company_A'}) + company_B = self.env['res.company'].create({'name': 'company_B'}) + self.env['hr.employee'].create({ + 'name': 'employee_A', + 'work_contact_id': partner.id, + 'company_id': company_A.id, + }) + self.env['hr.employee'].create({ + 'name': 'employee_B', + 'work_contact_id': partner.id, + 'company_id': company_B.id + }) + + partner.with_company(company_A)._compute_employees_count() + self.assertEqual(partner.employees_count, 1) + partner.with_company(company_B)._compute_employees_count() + self.assertEqual(partner.employees_count, 1) + partner.with_company(company_A).with_company(company_B)._compute_employees_count() + self.assertEqual(partner.employees_count, 2) + def test_employee_linked_partner(self): user_partner = self.user_without_image.partner_id work_contact = self.employee_without_image.work_contact_id