diff --git a/addons/crm/models/crm_lead.py b/addons/crm/models/crm_lead.py index 0e5ce514c78..eb4c57aca69 100644 --- a/addons/crm/models/crm_lead.py +++ b/addons/crm/models/crm_lead.py @@ -273,20 +273,28 @@ class Lead(models.Model): for lead in self: proposal = lead.company_id - # invalidate wrong configuration: company not in responsible companies or in team company if set - if proposal and lead.user_id and proposal not in lead.user_id.company_ids: - proposal = False - if proposal and lead.team_id.company_id and proposal != lead.team_id.company_id: - proposal = False + # invalidate wrong configuration + if proposal: + # company not in responsible companies + if lead.user_id and proposal not in lead.user_id.company_ids: + proposal = False + # inconsistent + if lead.team_id.company_id and proposal != lead.team_id.company_id: + proposal = False + # void company on team and no assignee + if lead.team_id and not lead.team_id.company_id and not lead.user_id: + proposal = False + # no user and no team -> void company and let assignment do its job + if not lead.team_id and not lead.user_id: + proposal = False # propose a new company based on responsible, limited by team if not proposal: - if not lead.user_id or lead.user_id == self.env.user: - proposal = self.env.company - elif lead.user_id: - proposal = lead.user_id.company_id - - if lead.team_id.company_id and proposal != lead.team_id.company_id: + if lead.user_id: + proposal = lead.team_id.company_id or lead.user_id.company_id + elif lead.team_id: + proposal = lead.team_id.company_id + else: proposal = False # set a new company diff --git a/addons/crm/tests/test_crm_lead_multicompany.py b/addons/crm/tests/test_crm_lead_multicompany.py index 035df831521..657d34800f5 100644 --- a/addons/crm/tests/test_crm_lead_multicompany.py +++ b/addons/crm/tests/test_crm_lead_multicompany.py @@ -31,8 +31,7 @@ class TestCRMLeadMultiCompany(TestCrmCommon): 'team_id': False, 'user_id': False, }) - # self.assertFalse(lead_no_team.company_id) FIXME: should not limit company - self.assertEqual(lead_no_team.company_id, self.user_sales_manager_mc.company_id) + self.assertFalse(lead_no_team.company_id) self.assertFalse(lead_no_team.team_id) self.assertFalse(lead_no_team.user_id) @@ -47,8 +46,7 @@ class TestCRMLeadMultiCompany(TestCrmCommon): # Update team wo company: reset lead company also lead_team_c2.team_id = self.sales_team_1 - # self.assertFalse(lead_team_c2.company_id) FIXME: currently kept - self.assertEqual(lead_team_c2.company_id, self.company_2) + self.assertFalse(lead_team_c2.company_id) # Lead with global team has no company lead_team_no_company = self.env['crm.lead'].create({ @@ -56,8 +54,7 @@ class TestCRMLeadMultiCompany(TestCrmCommon): 'team_id': self.sales_team_1.id, 'user_id': False, }) - # self.assertFalse(lead_no_team.company_id) FIXME: should not limit company - self.assertEqual(lead_no_team.company_id, self.user_sales_manager_mc.company_id) + self.assertFalse(lead_no_team.company_id) # Update team w company updates company lead_team_no_company.team_id = self.team_company2 @@ -88,12 +85,14 @@ class TestCRMLeadMultiCompany(TestCrmCommon): self.assertEqual(crm_lead_form.user_id, self.user_sales_manager_mc) self.assertEqual(crm_lead_form.team_id, self.env['crm.team']) - # remove both + # remove both: void company to ease assignment crm_lead_form.user_id = self.env['res.users'] - self.assertEqual(crm_lead_form.company_id, self.company_2) + self.assertEqual(crm_lead_form.company_id, self.env['res.company']) self.assertEqual(crm_lead_form.user_id, self.env['res.users']) self.assertEqual(crm_lead_form.team_id, self.env['crm.team']) + # force company manually + crm_lead_form.company_id = self.company_2 lead = crm_lead_form.save() # user_sales_manager cannot read it due to MC rules @@ -125,12 +124,10 @@ class TestCRMLeadMultiCompany(TestCrmCommon): 'team_id': False, }) crm_lead_form = Form(lead) - # self.assertEqual(crm_lead_form.company_id, self.env['res.company']) FIXME - self.assertEqual(crm_lead_form.company_id, self.company_2) + self.assertEqual(crm_lead_form.company_id, self.env['res.company']) crm_lead_form.team_id = self.sales_team_1 - # self.assertEqual(crm_lead_form.company_id, self.env['res.company']) # FIXME - self.assertEqual(crm_lead_form.company_id, self.company_2) + self.assertEqual(crm_lead_form.company_id, self.env['res.company']) crm_lead_form.user_id = self.env.user # self.assertEqual(crm_lead_form.company_id, self.env['res.company']) # FIXME