You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.1 KiB
62 lines
2.1 KiB
# -*- coding: utf-8 -*-
|
|
# © 2016 Eficent Business and IT Consulting Services S.L.
|
|
# (http://www.eficent.com)
|
|
# © 2016 Serpent Consulting Services Pvt. Ltd. (<http://www.serpentcs.com>)
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
|
|
|
from openerp import api, models
|
|
from lxml import etree
|
|
from openerp.osv import expression
|
|
|
|
|
|
_base_fields_view_get = models.BaseModel.fields_view_get
|
|
|
|
|
|
@api.model
|
|
def _custom_fields_view_get(self, view_id=None, view_type='form',
|
|
toolbar=False, submenu=False):
|
|
"""
|
|
Override to add message_ids field in all the objects
|
|
that inherits mail.thread
|
|
"""
|
|
# Tricky super call
|
|
res = _base_fields_view_get(self, view_id=view_id, view_type=view_type,
|
|
toolbar=toolbar, submenu=submenu)
|
|
if view_type == 'search' and self._fields.get('message_ids'):
|
|
doc = etree.XML(res['arch'])
|
|
for node in doc.xpath("//field[1]"):
|
|
# Add message_ids in search view
|
|
elem = etree.Element('field', {
|
|
'name': 'message_ids',
|
|
'domain': "[('model','=', %s)]" % self._model
|
|
})
|
|
node.addnext(elem)
|
|
# Register message_ids in fields
|
|
res['fields'].update({
|
|
'message_ids': {
|
|
'type': 'one2many',
|
|
'relation': 'mail.message',
|
|
'string': 'Messages',
|
|
}
|
|
})
|
|
res['arch'] = etree.tostring(doc)
|
|
return res
|
|
|
|
|
|
models.BaseModel.fields_view_get = _custom_fields_view_get
|
|
|
|
|
|
class MailMessage(models.Model):
|
|
|
|
_inherit = 'mail.message'
|
|
|
|
@api.model
|
|
def name_search(self, name='', args=None, operator='ilike', limit=100):
|
|
"""Override to search on multiple fields"""
|
|
args = args or []
|
|
domain = ['|', '|', ('record_name', operator, name),
|
|
('subject', operator, name), ('body', operator, name)]
|
|
if operator in expression.NEGATIVE_TERM_OPERATORS:
|
|
domain = domain[2:]
|
|
rec = self.search(domain + args, limit=limit)
|
|
return rec.name_get()
|