diff --git a/addons/project/models/project.py b/addons/project/models/project.py index af136d9f227..bbf961f4c2c 100644 --- a/addons/project/models/project.py +++ b/addons/project/models/project.py @@ -313,7 +313,7 @@ class Project(models.Model): active = fields.Boolean(default=True, help="If the active field is set to False, it will allow you to hide the project without removing it.") sequence = fields.Integer(default=10) - partner_id = fields.Many2one('res.partner', string='Customer', auto_join=True, tracking=True, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]") + partner_id = fields.Many2one('res.partner', string='Customer', auto_join=True, tracking=True, check_company=True) partner_email = fields.Char( compute='_compute_partner_email', inverse='_inverse_partner_email', string='Email', readonly=False, store=True, copy=False) diff --git a/addons/project/models/res_partner.py b/addons/project/models/res_partner.py index 26998e10827..0259842c659 100644 --- a/addons/project/models/res_partner.py +++ b/addons/project/models/res_partner.py @@ -8,7 +8,9 @@ from odoo.tools import email_normalize class ResPartner(models.Model): """ Inherits partner and adds Tasks information in the partner form """ _inherit = 'res.partner' + _check_company_auto = True + project_ids = fields.One2many('project.project', 'partner_id', string='Projects', check_company=True) task_ids = fields.One2many('project.task', 'partner_id', string='Tasks') task_count = fields.Integer(compute='_compute_task_count', string='# Tasks') diff --git a/addons/project/tests/test_project_base.py b/addons/project/tests/test_project_base.py index ad7f82b8b01..7c7c8027d1a 100644 --- a/addons/project/tests/test_project_base.py +++ b/addons/project/tests/test_project_base.py @@ -174,3 +174,26 @@ class TestProjectBase(TestProjectCommon): self.assertTrue(self.project_pigs.id < self.project_goats.id) self.assertEqual(Project.search(domain, order='id').ids, project_ids) + + def test_change_project_or_partner_company(self): + """ Tests that it is impossible to change the company of a project + if the company of the partner is different and vice versa. + """ + company_1 = self.env.company + company_2 = self.env['res.company'].create({'name': 'Company 2'}) + partner = self.env['res.partner'].create({ + 'name': 'Partner', + }) + self.project_pigs.partner_id = partner + # Can change the company of a project if the company of the partner is not set + self.assertFalse(partner.company_id) + self.project_pigs.company_id = company_2 + self.project_pigs.partner_id.company_id = company_2 + + with self.assertRaises(UserError): + # Cannot change the company of a partner if the company of the project is different + partner.company_id = company_1 + + with self.assertRaises(UserError): + # Cannot change the company of a project if the company of the partner is different + self.project_pigs.company_id = company_1