diff --git a/addons/hr/models/mail_alias.py b/addons/hr/models/mail_alias.py index a88a6a4530f..f98fce32f5a 100644 --- a/addons/hr/models/mail_alias.py +++ b/addons/hr/models/mail_alias.py @@ -13,8 +13,8 @@ class Alias(models.Model): class MailAlias(models.AbstractModel): _inherit = 'mail.alias.mixin' - def _alias_check_contact(self, message, message_dict, alias): - if alias.alias_contact == 'employees' and self.ids: + def _alias_check_contact_on_record(self, record, message, message_dict, alias): + if alias.alias_contact == 'employees' and record.ids: email_from = tools.decode_message_header(message, 'From') email_address = tools.email_split(email_from)[0] employee = self.env['hr.employee'].search([('work_email', 'ilike', email_address)], limit=1) @@ -26,4 +26,4 @@ class MailAlias(models.AbstractModel): 'error_template': self.env.ref('hr.mail_template_data_unknown_employee_email_address').body_html, } return True - return super(MailAlias, self)._alias_check_contact(message, message_dict, alias) + return super(MailAlias, self)._alias_check_contact_on_record(record, message, message_dict, alias) diff --git a/addons/mail/models/mail_alias.py b/addons/mail/models/mail_alias.py index cd330419fb0..dc09f3be13b 100644 --- a/addons/mail/models/mail_alias.py +++ b/addons/mail/models/mail_alias.py @@ -264,13 +264,24 @@ class AliasMixin(models.AbstractModel): record._name, record.display_name, record.id) def _alias_check_contact(self, message, message_dict, alias): + """ Main mixin method that inheriting models may inherit in order + to implement a specifc behavior. """ + return self._alias_check_contact_on_record(self, message, message_dict, alias) + + def _alias_check_contact_on_record(self, record, message, message_dict, alias): + """ Generic method that takes a record not necessarily inheriting from + mail.alias.mixin. """ author = self.env['res.partner'].browse(message_dict.get('author_id', False)) - if alias.alias_contact == 'followers' and self.ids: - if not hasattr(self, "message_partner_ids") or not hasattr(self, "message_channel_ids"): + if alias.alias_contact == 'followers': + if not record.ids: + return { + 'error_message': _('incorrectly configured alias (unknown reference record)'), + } + if not hasattr(record, "message_partner_ids") or not hasattr(record, "message_channel_ids"): return { 'error_message': _('incorrectly configured alias'), } - accepted_partner_ids = self.message_partner_ids | self.message_channel_ids.mapped('channel_partner_ids') + accepted_partner_ids = record.message_partner_ids | record.message_channel_ids.mapped('channel_partner_ids') if not author or author not in accepted_partner_ids: return { 'error_message': _('restricted to followers'), diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index a4a3097d998..7a0ec8a65d0 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -956,9 +956,10 @@ class MailThread(models.AbstractModel): obj = self.env[alias.alias_parent_model_id.model].browse(alias.alias_parent_thread_id) elif model: obj = self.env[model] - if not hasattr(obj, '_alias_check_contact'): - obj = self.env['mail.alias.mixin'] - check_result = obj._alias_check_contact(message, message_dict, alias) + if hasattr(obj, '_alias_check_contact'): + check_result = obj._alias_check_contact(message, message_dict, alias) + else: + check_result = self.env['mail.alias.mixin']._alias_check_contact_on_record(obj, message, message_dict, alias) if check_result is not True: self._routing_warn(_('alias %s: %s') % (alias.alias_name, check_result.get('error_message', _('unknown error'))), _('skipping'), message_id, route, False) self._routing_create_bounce_email(email_from, check_result.get('error_template', _generic_bounce_body_html), message)