ee89ccbbaa
Avoid CacheMiss errors setting a value on message_content field.
62 lines
2.2 KiB
Python
62 lines
2.2 KiB
Python
# Copyright 2016-17 ForgeFlow S.L.
|
|
# (http://www.forgeflow.com)
|
|
# Copyright 2016 Serpent Consulting Services Pvt. Ltd.
|
|
# (<http://www.serpentcs.com>)
|
|
# 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
|