74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
|
# -*- 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, fields, models
|
||
|
from lxml import etree
|
||
|
from openerp.osv import expression
|
||
|
from openerp.osv.orm import setup_modifiers
|
||
|
|
||
|
|
||
|
class MailThread(models.AbstractModel):
|
||
|
|
||
|
_inherit = 'mail.thread'
|
||
|
|
||
|
def _search_message_content(self, operator, value):
|
||
|
domain = [('model', '=', self._name), '|', '|',
|
||
|
('record_name', operator, value),
|
||
|
('subject', operator, value), ('body', operator, value)]
|
||
|
|
||
|
if operator in expression.NEGATIVE_TERM_OPERATORS:
|
||
|
domain = domain[2:]
|
||
|
recs = self.env['mail.message'].search(domain)
|
||
|
return [('id', 'in', recs.mapped('res_id'))]
|
||
|
|
||
|
@api.multi
|
||
|
def _compute_message_content(self):
|
||
|
""" We don't really need to show any content. This field is to be
|
||
|
used only by searches"""
|
||
|
return ''
|
||
|
|
||
|
message_content = fields.Text(
|
||
|
string='Messages',
|
||
|
help='Message content, to be used only in searches',
|
||
|
compute="_compute_message_content",
|
||
|
search='_search_message_content')
|
||
|
|
||
|
|
||
|
_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_content'):
|
||
|
doc = etree.XML(res['arch'])
|
||
|
res['fields'].update({
|
||
|
'message_content': {
|
||
|
'type': 'char',
|
||
|
'string': 'Message content',
|
||
|
}
|
||
|
})
|
||
|
|
||
|
for node in doc.xpath("//field[1]"):
|
||
|
# Add message_ids in search view
|
||
|
elem = etree.Element('field', {
|
||
|
'name': 'message_content',
|
||
|
})
|
||
|
setup_modifiers(elem)
|
||
|
node.addnext(elem)
|
||
|
res['arch'] = etree.tostring(doc)
|
||
|
return res
|
||
|
|
||
|
|
||
|
models.BaseModel.fields_view_get = _custom_fields_view_get
|