diff options
| author | Thibault Francois <tfr@openerp.com> | 2020-07-16 13:43:07 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2020-08-04 15:08:56 +0000 |
| commit | e6cb48b7e41693066f5d9ad55c4535793977aea2 (patch) | |
| tree | 8ba4dc8d7adf1f4dbf43726d7402de975df2484b /addons/crm | |
| parent | 62355b6ad3e2af16efabe1c3ca2fb053a6084bc1 (diff) | |
[FIX] crm_lead: do not erase computed field based on partner
Issue:
When you write partner_id = False on a lead
it erase all the values computed based on the res.partner
this lead to data loss during the conversion to opportunies
by the lead assignation process
Solution:
Revert to v13.0 behavior, don't erase the value
of the address, phone, email when the partner is set to
False
+ Fix typo in method name
X-original-commit: 21db6cf93fea7d07ec4a8655fc6030a177abc36f
Diffstat (limited to 'addons/crm')
| -rw-r--r-- | addons/crm/models/crm_lead.py | 34 | ||||
| -rw-r--r-- | addons/crm/tests/test_crm_lead.py | 32 |
2 files changed, 44 insertions, 22 deletions
diff --git a/addons/crm/models/crm_lead.py b/addons/crm/models/crm_lead.py index d13a6648a8d..101d285a1d2 100644 --- a/addons/crm/models/crm_lead.py +++ b/addons/crm/models/crm_lead.py @@ -48,6 +48,19 @@ CRM_LEAD_FIELDS_TO_MERGE = [ 'email_cc', 'website'] +PARTNER_FIELDS_TO_SYNC = [ + 'title', + 'street', + 'street2', + 'city', + 'state_id', + 'country_id', + 'mobile', + 'zip', + 'function', + 'website', +] + # Those values have been determined based on benchmark to minimise # computation time, number of transaction and transaction time. PLS_COMPUTE_BATCH_STEP = 50000 # odoo.models.PREFETCH_MAX = 1000 but larger cluster can speed up global computation @@ -422,21 +435,12 @@ class Lead(models.Model): partner_name = partner.parent_id.name if not partner_name and partner.is_company: partner_name = partner.name - - return { - 'partner_name': partner_name, - 'contact_name': partner.name if not partner.is_company else False, - 'title': partner.title.id, - 'street': partner.street, - 'street2': partner.street2, - 'city': partner.city, - 'state_id': partner.state_id.id, - 'country_id': partner.country_id.id, - 'mobile': partner.mobile, - 'zip': partner.zip, - 'function': partner.function, - 'website': partner.website, - } + values = {f: partner[f] or self[f] for f in PARTNER_FIELDS_TO_SYNC} + values.update({ + 'partner_name': partner_name or self.partner_name, + 'contact_name': False if partner.is_company else partner.name or self.contact_name, + }) + return values # ------------------------------------------------------------ # ORM diff --git a/addons/crm/tests/test_crm_lead.py b/addons/crm/tests/test_crm_lead.py index 8473ed4a555..d55e42c2748 100644 --- a/addons/crm/tests/test_crm_lead.py +++ b/addons/crm/tests/test_crm_lead.py @@ -23,13 +23,31 @@ class TestCRMLead(TestCrmCommon): # update to a partner, should udpate address lead.write({'partner_id': self.contact_1.id}) - # self.assertEqual(lead.partner_name, self.contact_company_1.name) - # self.assertEqual(lead.contact_name, self.contact_1.name) - # self.assertEqual(lead.email_from, self.contact_1.email) - # self.assertEqual(lead.street, self.contact_1.street) - # self.assertEqual(lead.city, self.contact_1.city) - # self.assertEqual(lead.zip, self.contact_1.zip) - # self.assertEqual(lead.country_id, self.contact_1.country_id) + self.assertEqual(lead.partner_name, self.contact_company_1.name) + self.assertEqual(lead.contact_name, self.contact_1.name) + self.assertEqual(lead.email_from, self.contact_1.email) + self.assertEqual(lead.street, self.contact_1.street) + self.assertEqual(lead.city, self.contact_1.city) + self.assertEqual(lead.zip, self.contact_1.zip) + self.assertEqual(lead.country_id, self.contact_1.country_id) + + def test_crm_lead_creation_no_partner(self): + belgium = self.env.ref('base.be') + lead_data = { + 'name': 'Test', + 'country_id': belgium.id, + 'email_from': 'test@odoo.com', + 'phone': '04584579646', + } + lead = self.env['crm.lead'].new(lead_data) + # get the street should not trigger cache miss + lead.street + # Create the lead and the write partner_id = False + # Country should remain + lead = self.env['crm.lead'].create(lead_data) + self.assertEqual(lead.country_id, belgium, "Country should be set on the lead") + lead.partner_id = False + self.assertEqual(lead.country_id, belgium, "Country should still be set on the lead") @users('user_sales_manager') def test_crm_lead_partner_sync(self): |
