diff --git a/addons/crm/models/crm_team_member.py b/addons/crm/models/crm_team_member.py index 3e40577256542db89e894792c3a0d2eb44dfffe0..e6333e01fbea83bb6fce6f539fc10bf8f314865d 100644 --- a/addons/crm/models/crm_team_member.py +++ b/addons/crm/models/crm_team_member.py @@ -156,7 +156,7 @@ class Team(models.Model): # auto-commit except in testing mode auto_commit = not getattr(threading.current_thread(), 'testing', False) commit_bundle_size = int(self.env['ir.config_parameter'].sudo().get_param('crm.assignment.commit.bundle', 100)) - while population: + while population and any(weights): counter += 1 member_id = random.choices(population, weights=weights, k=1)[0] member_index = population.index(member_id) diff --git a/addons/crm/tests/test_crm_lead_assignment.py b/addons/crm/tests/test_crm_lead_assignment.py index e528b5a87cb8ab94221530154bda070d6ae2a71d..4379290cbb70fc0968a1d95a7e75179ad53e0422 100644 --- a/addons/crm/tests/test_crm_lead_assignment.py +++ b/addons/crm/tests/test_crm_lead_assignment.py @@ -533,3 +533,32 @@ class TestLeadAssign(TestLeadAssignCommon): self.assertFalse(dupe_lead.exists()) self.assertEqual(master_opp.team_id, self.sales_team_1, 'Opportunity: should keep its sales team') self.assertEqual(master_opp.user_id, self.user_sales_manager, 'Opportunity: should keep its salesman') + + def test_no_assign_if_exceed_max_assign(self): + """ Test no leads being assigned to any team member if weights list sums to 0""" + + leads = self._create_leads_batch( + lead_type='lead', + user_ids=[False], + count=1 + ) + + sales_team_4 = self.env['crm.team'].create({ + 'name': 'Sales Team 4', + 'sequence': 15, + 'use_leads': True, + }) + sales_team_4_m1 = self.env['crm.team.member'].create({ + 'user_id': self.user_sales_salesman.id, + 'crm_team_id': sales_team_4.id, + 'assignment_max': 30, + }) + + sales_team_4_m1.lead_month_count = 50 + leads.team_id = sales_team_4.id + + members_data = sales_team_4_m1._assign_and_convert_leads(work_days=0.2) + self.assertEqual( + len(members_data[sales_team_4_m1]['assigned']), + 0, + "If team member has lead count greater than max assign,then do not assign any more")