[FIX] crm: set the email_from from the kanban quick create

When setting the partner of a lead, on the form view the email_from
is automatically populated by the onchange on the partner_id.
This is not the case when created programmatically,
and this is not even the case when created from the kanban view.

This can lead to an unexpected failure to send emails down the line.

We apply the onchange in the create to fill all values consistently in all cases.
In case the values were already set, this simply won't change anything.

Note that we need to adapt the test from website_crm_partner_assign.
It uses demo data that makes little sense.
The opportunity crm.crm_case_21 is set in the UK,
with a partner base.res_partner_4 in the US, in the state Escuintla of Guatemala.
With the change from above, all the address fields on the opportunity are
populated by the onchange, from the partner.

opw 2000241

closes odoo/odoo#33622

Signed-off-by: Nans Lefebvre (len) <len@odoo.com>
This commit is contained in:
Nans Lefebvre
2019-05-23 13:35:03 +00:00
parent 0c50fb516c
commit 345a5a4aa8
2 changed files with 18 additions and 4 deletions
+4 -3
View File
@@ -312,9 +312,10 @@ class Lead(models.Model):
if vals.get('user_id') and 'date_open' not in vals:
vals['date_open'] = fields.Datetime.now()
if context.get('default_partner_id') and not vals.get('email_from'):
partner = self.env['res.partner'].browse(context['default_partner_id'])
vals['email_from'] = partner.email
partner_id = vals.get('partner_id') or context.get('default_partner_id')
onchange_values = self._onchange_partner_id_values(partner_id)
onchange_values.update(vals) # we don't want to overwrite any existing key
vals = onchange_values
# context: no_log, because subtype already handle this
return super(Lead, self.with_context(context, mail_create_nolog=True)).create(vals)
@@ -16,6 +16,19 @@ class TestPartnerAssign(TransactionCase):
def setUp(self):
super(TestPartnerAssign, self).setUp()
self.customer_uk = self.env['res.partner'].create({
'name': 'Nigel',
'country_id': self.env.ref('base.uk').id,
'city': 'Birmingham',
'zip': 'B46 3AG',
'street': 'Cannon Hill Park',
})
self.lead_uk = self.env['crm.lead'].create({
'type': 'opportunity',
'name': 'Office Design and Architecture',
'partner_id': self.customer_uk.id
})
def geo_find(addr, apikey):
return {
'Wavre, Belgium': (50.7158956, 4.6128075),
@@ -51,7 +64,7 @@ class TestPartnerAssign(TransactionCase):
"partner_weight": 10,
})
lead = self.env.ref('crm.crm_case_21')
lead = self.lead_uk
# In order to test find nearest Partner functionality and assign to opportunity,
# I Set Geo Lattitude and Longitude according to partner address.