diff --git a/addons/calendar/models/calendar.py b/addons/calendar/models/calendar.py index 0606aac6b36..16e99e1fe2d 100644 --- a/addons/calendar/models/calendar.py +++ b/addons/calendar/models/calendar.py @@ -528,6 +528,27 @@ class Meeting(models.Model): _order = "id desc" _inherit = ["mail.thread"] + @api.model + def default_get(self, fields): + if self.env.context.get('default_res_model'): # super default_model='crm.lead' for easier use in adddons + self = self.with_context( + default_res_model_id=self.env['ir.model'].sudo().search([ + ('model', '=', self.env.context['default_res_model']) + ], limit=1).id + ) + + defaults = super(Meeting, self).default_get(fields) + + # support active_model / active_id as replacement of default_* if not already given + if 'res_model_id' not in defaults and 'res_model_id' in fields and \ + self.env.context.get('active_model') and self.env.context['active_model'] != 'calendar.event': + defaults['res_model_id'] = self.env['ir.model'].sudo().search([('model', '=', self.env.context['active_model'])], limit=1).id + if 'res_id' not in defaults and 'res_id' in fields and \ + defaults.get('res_model_id') and self.env.context.get('active_id'): + defaults['res_id'] = self.env.context['active_id'] + + return defaults + @api.model def _default_partners(self): """ When active_model is res.partner, the current partners should be attendees """ @@ -710,6 +731,11 @@ class Meeting(models.Model): location = fields.Char('Location', states={'done': [('readonly', True)]}, track_visibility='onchange', help="Location of Event") show_as = fields.Selection([('free', 'Free'), ('busy', 'Busy')], 'Show Time as', states={'done': [('readonly', True)]}, default='busy') + # linked document + res_id = fields.Integer('Document ID') + res_model_id = fields.Many2one('ir.model', 'Document Model', ondelete='cascade') + res_model = fields.Char('Document Model Name', related='res_model_id.model', readonly=True, store=True) + # RECURRENCE FIELD rrule = fields.Char('Recurrent Rule', compute='_compute_rrule', inverse='_inverse_rrule', store=True) rrule_type = fields.Selection([ @@ -1277,6 +1303,12 @@ class Meeting(models.Model): 'flags': {'form': {'action_buttons': True, 'options': {'mode': 'edit'}}} } + @api.multi + def action_open_calendar_event(self): + if self.res_model and self.res_id: + return self.env[self.res_model].browse(self.res_id).get_formview_action() + return False + @api.multi def action_sendmail(self): email = self.env.user.email diff --git a/addons/calendar/views/calendar_views.xml b/addons/calendar/views/calendar_views.xml index d0857a179f2..eb7707af2d1 100644 --- a/addons/calendar/views/calendar_views.xml +++ b/addons/calendar/views/calendar_views.xml @@ -88,6 +88,9 @@
+