diff --git a/addons/crm/models/crm_lead.py b/addons/crm/models/crm_lead.py index 71108500028..655446cbb48 100644 --- a/addons/crm/models/crm_lead.py +++ b/addons/crm/models/crm_lead.py @@ -1557,6 +1557,7 @@ class Lead(models.Model): used mainly for first classification; * stage sequence: the higher the better as it indicates we are moving towards won stage; + * probability: the higher the better as it is more likely to be won; * ID: the higher the better when all other parameters are equal. We consider newer leads to be more reliable; """ @@ -1564,6 +1565,7 @@ class Lead(models.Model): return opportunity.type == 'opportunity' or opportunity.active, \ opportunity.type == 'opportunity', \ opportunity.stage_id.sequence, \ + opportunity.probability, \ -opportunity._origin.id return self.sorted(key=opps_key, reverse=reverse) diff --git a/addons/crm/tests/test_crm_lead_merge.py b/addons/crm/tests/test_crm_lead_merge.py index f625ee0f745..8f580585058 100644 --- a/addons/crm/tests/test_crm_lead_merge.py +++ b/addons/crm/tests/test_crm_lead_merge.py @@ -89,8 +89,8 @@ class TestLeadMerge(TestLeadMergeCommon): def test_lead_merge_internals(self): """ Test internals of merge wizard. In this test leads are ordered as - lead_w_contact --lead---seq=3 - lead_w_email ----lead---seq=3 + lead_w_contact --lead---seq=3---probability=25 + lead_w_email ----lead---seq=3---probability=15 lead_1 ----------lead---seq=1 lead_w_partner --lead---seq=False """ @@ -113,7 +113,7 @@ class TestLeadMerge(TestLeadMergeCommon): ordered_merge_description = '

'.join(l.description for l in ordered_merge) # merged opportunity: in this test, all input are leads. Confidence is based on stage - # sequence -> lead_w_contact has a stage sequence of 3 and ID is greater than lead_w_email + # sequence -> lead_w_contact has a stage sequence of 3 and probability is greater result = merge.action_merge() merge_opportunity = self.env['crm.lead'].browse(result['res_id']) self.assertFalse((ordered_merge - merge_opportunity).exists()) @@ -130,14 +130,16 @@ class TestLeadMerge(TestLeadMergeCommon): def test_lead_merge_mixed(self): """ In case of mix, opportunities are on top, and result is an opportunity - lead_1 -------------------opp----seq=1 - lead_w_partner_company ---opp----seq=1 (ID greater) - lead_w_contact -----------lead---seq=3 - lead_w_email -------------lead---seq=3 + lead_1 -------------------opp----seq=1---probability=60 + lead_w_partner_company ---opp----seq=1---probability=50 + lead_w_contact -----------lead---seq=3---probability=25 + lead_w_email -------------lead---seq=3---probability=15 lead_w_partner -----------lead---seq=False """ # ensure initial data (self.lead_w_partner_company | self.lead_1).write({'type': 'opportunity'}) + self.lead_1.write({'probability': 60}) + self.assertEqual(self.lead_w_partner_company.stage_id.sequence, 1) self.assertEqual(self.lead_1.stage_id.sequence, 1) @@ -175,7 +177,7 @@ class TestLeadMerge(TestLeadMergeCommon): @mute_logger('odoo.models.unlink') def test_lead_merge_probability_auto(self): """ Check master lead keeps its automated probability when merged. """ - self.lead_1.write({'probability': self.lead_1.automated_probability}) + self.lead_1.write({'type': 'opportunity', 'probability': self.lead_1.automated_probability}) self.assertTrue(self.lead_1.is_automated_probability) leads = self.env['crm.lead'].browse((self.lead_1 + self.lead_w_partner + self.lead_w_partner_company).ids) merged_lead = self._run_merge_wizard(leads) @@ -187,7 +189,7 @@ class TestLeadMerge(TestLeadMergeCommon): def test_lead_merge_probability_auto_empty(self): """ Check master lead keeps its automated probability when merged even if its probability is 0. """ - self.lead_1.write({'probability': 0, 'automated_probability': 0}) + self.lead_1.write({'type': 'opportunity', 'probability': 0, 'automated_probability': 0}) self.assertTrue(self.lead_1.is_automated_probability) leads = self.env['crm.lead'].browse((self.lead_1 + self.lead_w_partner + self.lead_w_partner_company).ids) merged_lead = self._run_merge_wizard(leads) @@ -198,12 +200,12 @@ class TestLeadMerge(TestLeadMergeCommon): @mute_logger('odoo.models.unlink') def test_lead_merge_probability_manual(self): """ Check master lead keeps its manual probability when merged. """ - self.lead_1.write({'probability': 40}) + self.lead_1.write({'probability': 60}) self.assertFalse(self.lead_1.is_automated_probability) leads = self.env['crm.lead'].browse((self.lead_1 + self.lead_w_partner + self.lead_w_partner_company).ids) merged_lead = self._run_merge_wizard(leads) self.assertEqual(merged_lead, self.lead_1) - self.assertEqual(merged_lead.probability, 40, "Manual Probability should remain the same after the merge") + self.assertEqual(merged_lead.probability, 60, "Manual Probability should remain the same after the merge") self.assertFalse(merged_lead.is_automated_probability) @users('user_sales_manager') @@ -211,7 +213,7 @@ class TestLeadMerge(TestLeadMergeCommon): def test_lead_merge_probability_manual_empty(self): """ Check master lead keeps its manual probability when merged even if its probability is 0. """ - self.lead_1.write({'probability': 0}) + self.lead_1.write({'type': 'opportunity', 'probability': 0}) leads = self.env['crm.lead'].browse((self.lead_1 + self.lead_w_partner + self.lead_w_partner_company).ids) merged_lead = self._run_merge_wizard(leads) self.assertEqual(merged_lead, self.lead_1) @@ -223,14 +225,14 @@ class TestLeadMerge(TestLeadMergeCommon): def test_merge_method(self): """ In case of mix, opportunities are on top, and result is an opportunity - lead_1 -------------------opp----seq=1 - lead_w_partner_company ---opp----seq=1 (ID greater) + lead_1 -------------------opp----seq=1---probability=50 + lead_w_partner_company ---opp----seq=1---probability=50 (ID greater) lead_w_contact -----------lead---seq=3 lead_w_email -------------lead---seq=3 lead_w_partner -----------lead---seq=False """ # ensure initial data - (self.lead_w_partner_company | self.lead_1).write({'type': 'opportunity'}) + (self.lead_w_partner_company | self.lead_1).write({'type': 'opportunity', 'probability': 50}) leads = self.env['crm.lead'].browse(self.leads.ids)._sort_by_confidence_level(reverse=True) with self.assertLeadMerged(self.lead_1, leads, name='Nibbler Spacecraft Request',