diff --git a/addons/event_crm/models/event_registration.py b/addons/event_crm/models/event_registration.py index 994500f26ed..a4940115e01 100644 --- a/addons/event_crm/models/event_registration.py +++ b/addons/event_crm/models/event_registration.py @@ -3,7 +3,7 @@ from collections import defaultdict -from odoo import api, fields, models, _ +from odoo import api, fields, models, tools, _ from odoo.addons.phone_validation.tools import phone_validation @@ -195,10 +195,18 @@ class EventRegistration(models.Model): ) # CHECKME: broader than just public partner # mono registration mode: keep partner only if email and phone matches; - # otherwise registration > partner. Note that _phone_format has to be - # taken into account as it may have side effects on phone formatting + # otherwise registration > partner. Note that email format has to be + # taken into account in comparison if len(self) == 1 and valid_partner: - if self.email and valid_partner.email and valid_partner.email != self.email: + # compare emails: email_normalized or raw + if self.email and valid_partner.email: + if valid_partner.email_normalized and tools.email_normalize(self.email) != valid_partner.email_normalized: + valid_partner = self.env['res.partner'] + elif not valid_partner.email_normalized and valid_partner.email != self.email: + valid_partner = self.env['res.partner'] + + # compare phone + if valid_partner and valid_partner.phone and self.phone and valid_partner.phone != self.phone: valid_partner = self.env['res.partner'] if valid_partner and self.phone and valid_partner.phone: phone_formatted = phone_validation.phone_format( diff --git a/addons/event_crm/tests/test_event_crm_flow.py b/addons/event_crm/tests/test_event_crm_flow.py index 3a32ea87e7d..c9a74e6e809 100644 --- a/addons/event_crm/tests/test_event_crm_flow.py +++ b/addons/event_crm/tests/test_event_crm_flow.py @@ -142,7 +142,7 @@ class TestEventCrmFlow(TestEventCrmCommon): }) for email, phone, base_partner, expected_partner in [ (False, False, self.event_customer, self.event_customer), # should take partner info - ('"Other Name" ', False, self.event_customer, self.env['res.partner']), # same email normalized -> currently not supported + ('"Other Name" ', False, self.event_customer, self.event_customer), # same email normalized ('other.email@test.example.com', False, self.event_customer, self.env['res.partner']), # not same email -> no partner on lead (False, '+32485112233', self.event_customer, self.env['res.partner']), # same phone but differently formatted -> currently not supported (False, '0485112244', self.event_customer, self.env['res.partner']), # other phone -> no partner on lead