Purpose ======= A new module "Event Social" will be added in the enterprise PR. This new module will use a new template type, the "Social Post Template" adding one more column in the communication tab... We want to have only one column to select the template (Mail, SMS or Post template) and therefor we need to use a reference field. Technical ========= As we can not set a domain on a reference field, we added a context key and in the `_name_search` of the `mail/sms.template` we filter with the domain we want if the key exists. Links ===== Task-2127615 See odoo/odoo/pull/46304 See odoo/enterprise/pull/7701 See odoo/upgrade/pull/848
23 lines
1003 B
Python
23 lines
1003 B
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, models
|
|
from odoo.osv import expression
|
|
|
|
|
|
class MailTemplate(models.Model):
|
|
_inherit = 'mail.template'
|
|
|
|
@api.model
|
|
def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):
|
|
"""Context-based hack to filter reference field in a m2o search box to emulate a domain the ORM currently does not support.
|
|
|
|
As we can not specify a domain on a reference field, we added a context
|
|
key `filter_template_on_event` on the template reference field. If this
|
|
key is set, we add our domain in the `args` in the `_name_search`
|
|
method to filtrate the mail templates.
|
|
"""
|
|
if self.env.context.get('filter_template_on_event'):
|
|
args = expression.AND([[('model', '=', 'event.registration')], args])
|
|
return super(MailTemplate, self)._name_search(name, args, operator, limit, name_get_uid)
|