# Copyright 2016-17 ForgeFlow S.L. # (http://www.forgeflow.com) # Copyright 2016 Serpent Consulting Services Pvt. Ltd. # () # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from lxml import etree from odoo import _, api, fields, models from odoo.osv import expression class MailThread(models.AbstractModel): _inherit = "mail.thread" def _search_message_content(self, operator, value): model_domain = [("model", "=", self._name)] if operator not in expression.NEGATIVE_TERM_OPERATORS: model_domain += ["|"] * 4 model_domain += [ ("record_name", operator, value), ("subject", operator, value), ("body", operator, value), ("email_from", operator, value), ("reply_to", operator, value), ] recs = self.env["mail.message"].search(model_domain) return [("id", "in", recs.mapped("res_id"))] message_content = fields.Text( help="Message content, to be used only in searches", compute="_compute_message_content", search="_search_message_content", ) def _compute_message_content(self): # Always assign a value to avoid CacheMiss errors self.message_content = False @api.model def fields_view_get( self, view_id=None, view_type="form", toolbar=False, submenu=False ): """ Override to add message_content field in all the objects that inherits mail.thread """ res = super(MailThread, self).fields_view_get( 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("/search/field[last()]"): # Add message_content in search view elem = etree.Element("field", {"name": "message_content"}) node.addnext(elem) res["arch"] = etree.tostring(doc) return res