diff --git a/contract/models/contract.py b/contract/models/contract.py index 12ef80668..3a2a3e581 100644 --- a/contract/models/contract.py +++ b/contract/models/contract.py @@ -87,6 +87,7 @@ class ContractContract(models.Model): commercial_partner_id = fields.Many2one( 'res.partner', + compute_sudo=True, related='partner_id.commercial_partner_id', store=True, string='Commercial Entity', diff --git a/contract/tests/test_contract.py b/contract/tests/test_contract.py index c31c2cbc5..87039a25a 100644 --- a/contract/tests/test_contract.py +++ b/contract/tests/test_contract.py @@ -2361,6 +2361,31 @@ class TestContract(TestContractBase): ).fields_view_get(view_type='form') self.assertEqual(view['view_id'], purchase_form_view.id) + def test_multicompany_partner_edited(self): + """Editing a partner with contracts in several companies works.""" + company2 = self.env['res.company'].create({ + "name": "Company 2", + }) + unprivileged_user = self.env["res.users"].create({ + "name": "unprivileged test user", + "login": "test", + "company_id": company2.id, + "company_ids": [(4, company2.id, False)], + }) + parent_partner = self.env["res.partner"].create({ + "name": "parent partner", + "is_company": True, + }) + # Assume contract 2 is for company 2 + self.contract2.company_id = company2 + # Update the partner attached to both contracts + self.partner.sudo(unprivileged_user).with_context( + company_id=company2.id, force_company=company2.id + ).write({ + "is_company": False, + "parent_id": parent_partner.id, + }) + def test_sale_fields_view_get(self): sale_form_view = self.env.ref( 'contract.contract_line_customer_form_view'