summaryrefslogtreecommitdiff
path: root/addons/crm
diff options
context:
space:
mode:
authorMunaf Khan <mub@odoo.com>2021-02-26 04:46:57 +0000
committerThibault Delavallée <tde@odoo.com>2021-03-15 11:38:37 +0000
commitb0023e2afa9a08b0d60e54b335f31d07018abecd (patch)
treec9fab1dd747f8d005e92b168f739e30b8e28c5e2 /addons/crm
parent9733c22d0645459a0e5f280f59242dd31070d9b2 (diff)
[FIX] crm: prevent email_from propagation if only formatting differs
Before this commit when we update the email_from field on lead with only formatting differing from partner a warning ribbon was displayed. It considered email had changed and had to be propagated. Moreover unnecessary update on partner was done to propagate the new email onto the customer. In this commit we propagate email only if normalized versions are different. It means that if lead email_from is "Hermes Conrad <email@example.com>" and partner email is "Jonathan Conrad <email@example.com"> no update from lead to partner is performed. Indeed normalized versions are the same. Task ID-2461308 PR odoo/odoo#66890 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Diffstat (limited to 'addons/crm')
-rw-r--r--addons/crm/models/crm_lead.py15
-rw-r--r--addons/crm/tests/test_crm_lead.py7
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'