diff options
| -rw-r--r-- | addons/crm/models/crm_lead.py | 15 | ||||
| -rw-r--r-- | addons/crm/tests/test_crm_lead.py | 7 |
2 files changed, 20 insertions, 2 deletions
diff --git a/addons/crm/models/crm_lead.py b/addons/crm/models/crm_lead.py index 53c7f832402..708604aed52 100644 --- a/addons/crm/models/crm_lead.py +++ b/addons/crm/models/crm_lead.py @@ -354,7 +354,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): @@ -446,7 +454,10 @@ class Lead(models.Model): @api.depends('email_from', 'phone', 'partner_id') def _compute_ribbon_message(self): for lead in self: - will_write_email = lead.partner_id and lead.email_from != lead.partner_id.email + # 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 will_write_phone = False if lead.partner_id and lead.phone != lead.partner_id.phone: # if reset -> obviously new value will be propagated diff --git a/addons/crm/tests/test_crm_lead.py b/addons/crm/tests/test_crm_lead.py index 66317593391..fdd5aadce12 100644 --- a/addons/crm/tests/test_crm_lead.py +++ b/addons/crm/tests/test_crm_lead.py @@ -256,6 +256,13 @@ 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 ribbon 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.ribbon_message) + lead_form.save() + self.assertEqual(lead_form.partner_id.email, partner_email) + # LEAD/PARTNER SYNC: lead updates partner new_email = '"John Zoidberg" <john.zoidberg@test.example.com>' new_email_normalized = 'john.zoidberg@test.example.com' |
