diff --git a/addons/crm/models/calendar.py b/addons/crm/models/calendar.py index 8a13f3d3a17..1d1c07154a8 100644 --- a/addons/crm/models/calendar.py +++ b/addons/crm/models/calendar.py @@ -7,6 +7,17 @@ from odoo import api, fields, models class CalendarEvent(models.Model): _inherit = 'calendar.event' + def _is_crm_lead(self, defaults, ctx=None): + """ + This method checks if the concerned model is a CRM lead. + The information is not always in the defaults values, + this is why it is necessary to check the context too. + """ + res_model = defaults.get('res_model', False) or ctx and ctx.get('default_res_model') + res_model_id = defaults.get('res_model_id', False) or ctx and ctx.get('default_res_model_id') + + return res_model and res_model == 'crm.lead' or res_model_id and self.env['ir.model'].sudo().browse(res_model_id).model == 'crm.lead' + @api.model def default_get(self, fields): if self.env.context.get('default_opportunity_id'): @@ -17,9 +28,10 @@ class CalendarEvent(models.Model): defaults = super(CalendarEvent, self).default_get(fields) # sync res_model / res_id to opportunity id (aka creating meeting from lead chatter) - if 'opportunity_id' not in defaults and defaults.get('res_id') and (defaults.get('res_model') or defaults.get('res_model_id')): - if (defaults.get('res_model') and defaults['res_model'] == 'crm.lead') or (defaults.get('res_model_id') and self.env['ir.model'].sudo().browse(defaults['res_model_id']).model == 'crm.lead'): - defaults['opportunity_id'] = defaults['res_id'] + ctx = self.env.context + if 'opportunity_id' not in defaults: + if self._is_crm_lead(defaults, ctx): + defaults['opportunity_id'] = defaults.get('res_id', False) or ctx.get('default_res_id', False) return defaults