diff --git a/addons/crm/models/crm_lead.py b/addons/crm/models/crm_lead.py index b25e2fc7c73..53abc9a4130 100644 --- a/addons/crm/models/crm_lead.py +++ b/addons/crm/models/crm_lead.py @@ -916,17 +916,19 @@ class Lead(models.Model): (still only active leads are considered). If False, search for active and not won leads and opportunities; """ - if not email: + if not email and not partner: return self.env['crm.lead'] - partner_match_domain = [] - for email in set(email_split(email) + [email]): - partner_match_domain.append(('email_from', '=ilike', email)) + + domain = [] + for normalized_email in [tools.email_normalize(email) for email in tools.email_split(email)]: + domain.append(('email_normalized', '=', normalized_email)) if partner: - partner_match_domain.append(('partner_id', '=', partner.id)) - partner_match_domain = ['|'] * (len(partner_match_domain) - 1) + partner_match_domain - if not partner_match_domain: + domain.append(('partner_id', '=', partner.id)) + domain = ['|'] * (len(domain) - 1) + domain + + if not domain: return self.env['crm.lead'] - domain = partner_match_domain + if include_lost: domain += ['|', ('type', '=', 'opportunity'), ('active', '=', True)] else: diff --git a/addons/crm/tests/test_crm_lead_convert.py b/addons/crm/tests/test_crm_lead_convert.py index 382d0a00055..3ebea3611af 100644 --- a/addons/crm/tests/test_crm_lead_convert.py +++ b/addons/crm/tests/test_crm_lead_convert.py @@ -262,9 +262,8 @@ class TestLeadConvert(crm_common.TestLeadConvertCommon): 'active_ids': self.lead_1.ids, }).create({}) self.assertEqual(convert.partner_id, self.customer) - # TDE FIXME: should not give priority to partner email if it is void - # self.assertEqual(convert.duplicated_lead_ids, self.lead_1 | lead_email_from | lead_email_normalized | lead_partner) - self.assertEqual(convert.duplicated_lead_ids, self.env['crm.lead']) + # self.assertEqual(convert.duplicated_lead_ids, self.lead_1 | self.lead_email_from | self.lead_email_normalized | self.lead_partner | self.opp_lost) + self.assertEqual(convert.duplicated_lead_ids, self.lead_1 | self.lead_email_from | self.lead_partner | self.opp_lost) # Check: partner fallbacks self.lead_1.write({ @@ -278,9 +277,7 @@ class TestLeadConvert(crm_common.TestLeadConvertCommon): 'active_ids': self.lead_1.ids, }).create({}) self.assertEqual(convert.partner_id, self.customer) - # TDE FIXME: CHECKME: 2917b38f28d5c2d6c53c706e613da7b8e2ad7b52 for lead without email - # self.assertEqual(convert.duplicated_lead_ids, self.lead_1 | lead_partner) - self.assertEqual(convert.duplicated_lead_ids, self.env['crm.lead']) + self.assertEqual(convert.duplicated_lead_ids, self.lead_1 | self.lead_partner) @users('user_sales_manager') def test_lead_merge_duplicates_flow(self): diff --git a/addons/crm/wizard/crm_lead_to_opportunity.py b/addons/crm/wizard/crm_lead_to_opportunity.py index b66ccf3e802..c47566a60ef 100644 --- a/addons/crm/wizard/crm_lead_to_opportunity.py +++ b/addons/crm/wizard/crm_lead_to_opportunity.py @@ -24,7 +24,7 @@ class Lead2OpportunityPartner(models.TransientModel): result['lead_id'] = lead.id partner = lead._find_matching_partner() - email = lead.partner_id.email if lead.partner_id else lead.email_from + email = lead.partner_id.email if lead.partner_id.email else lead.email_from tomerge.update(self.env['crm.lead']._get_lead_duplicates(partner, email, include_lost=True).ids)