diff --git a/addons/crm/models/crm_lead.py b/addons/crm/models/crm_lead.py index cf8f64228f3..dc95c6a3f62 100644 --- a/addons/crm/models/crm_lead.py +++ b/addons/crm/models/crm_lead.py @@ -417,7 +417,15 @@ class Lead(models.Model): def _inverse_email_from(self): for lead in self: if lead.partner_id and lead.email_from != lead.partner_id.email: - lead.partner_id.email = lead.email_from + # force reset + if not lead.email_from or not lead.partner_id.email: + lead.partner_id.email = lead.email_from + # compare formatted values as we may have formatting differences between equivalent email + else: + lead_email_normalized = tools.email_normalize(lead.email_from) + partner_email_normalized = tools.email_normalize(lead.partner_id.email) + if lead_email_normalized != partner_email_normalized: + lead.partner_id.email = lead.email_from @api.depends('partner_id.phone') def _compute_phone(self): @@ -576,7 +584,13 @@ class Lead(models.Model): @api.depends('email_from', 'partner_id') def _compute_partner_email_update(self): for lead in self: - lead.partner_email_update = lead.partner_id and lead.email_from != lead.partner_id.email + will_write_email = False + if lead.partner_id: + # beware: void user input gives '' which is different from False + lead_email_normalized = tools.email_normalize(lead.email_from) or (lead.email_from if lead.email_from else False) + partner_email_normalized = tools.email_normalize(lead.partner_id.email) or lead.partner_id.email + will_write_email = lead_email_normalized != partner_email_normalized if lead.partner_id else False + lead.partner_email_update = will_write_email @api.depends('phone', 'partner_id') def _compute_partner_phone_update(self): diff --git a/addons/crm/tests/test_crm_lead.py b/addons/crm/tests/test_crm_lead.py index 667a1a6db16..d550eb157a3 100644 --- a/addons/crm/tests/test_crm_lead.py +++ b/addons/crm/tests/test_crm_lead.py @@ -278,6 +278,20 @@ class TestCRMLead(TestCrmCommon): self.assertEqual(lead.phone_sanitized, partner_mobile_sanitized, 'Lead: phone_sanitized computed field on mobile') + # for email_from, if only formatting differs, warning should not appear and + # email on partner should not be updated + lead_form.email_from = '"Hermes Conrad" <%s>' % partner_email_normalized + self.assertFalse(lead_form.partner_email_update) + lead_form.save() + self.assertEqual(partner.email, partner_email) + + # for phone, if only formatting differs, warning should not appear and + # phone on partner should not be updated + lead_form.phone = partner_phone_sanitized + self.assertFalse(lead_form.partner_phone_update) + lead_form.save() + self.assertEqual(partner.phone, partner_phone) + # LEAD/PARTNER SYNC: lead updates partner new_email = '"John Zoidberg" ' new_email_normalized = 'john.zoidberg@test.example.com'