[FX][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 X-Original-Commit odoo/odoo@3dd972c35b closes odoo/odoo#67859 Related: odoo/enterprise#17191 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
This commit is contained in:
committed by
Thibault Delavallée
parent
700929d1a4
commit
8f88307c18
@@ -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):
|
||||
|
||||
@@ -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" <john.zoidberg@test.example.com>'
|
||||
new_email_normalized = 'john.zoidberg@test.example.com'
|
||||
|
||||
Reference in New Issue
Block a user