mirror of
https://github.com/OCA/reporting-engine.git
synced 2025-02-16 16:30:38 +02:00
In a multi-company context, if you put a template with company_id set, this template is trying to be assigned to any document, no matter which company it belongs, as it runs in a sudo environment, or at least, you can have several companies seen at the same time. We add the company discriminant for avoiding this problem. Furthermore, the previous code was adding a domain where the right part may be `False` with the operator `in`, provoking an unexpected behavior in the search. This has been fixed stating directly the expected domain. TT42591
68 lines
2.5 KiB
Python
68 lines
2.5 KiB
Python
# Copyright 2014 Guewen Baconnier (Camptocamp SA)
|
|
# Copyright 2013-2014 Nicolas Bessi (Camptocamp SA)
|
|
# Copyright 2020 NextERP Romania SRL
|
|
# Copyright 2021 Tecnativa - Víctor Martínez
|
|
# Copyright 2023 Tecnativa - Pedro M. Baeza
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
from odoo import api, fields, models
|
|
from odoo.tools.safe_eval import safe_eval
|
|
|
|
|
|
class CommentTemplate(models.AbstractModel):
|
|
_name = "comment.template"
|
|
_description = (
|
|
"base.comment.template to put header and footer "
|
|
"in reports based on created comment templates"
|
|
)
|
|
# This field allows to set any given field that determines the source partner for
|
|
# the comment templates downstream.
|
|
# E.g.: other models where the partner field is called customer_id.
|
|
_comment_template_partner_field_name = "partner_id"
|
|
|
|
comment_template_ids = fields.Many2many(
|
|
compute="_compute_comment_template_ids",
|
|
comodel_name="base.comment.template",
|
|
string="Comment Template",
|
|
domain=lambda self: [("model_ids.model", "=", self._name)],
|
|
store=True,
|
|
readonly=False,
|
|
)
|
|
|
|
@api.depends(_comment_template_partner_field_name)
|
|
def _compute_comment_template_ids(self):
|
|
for record in self:
|
|
partner = record[self._comment_template_partner_field_name]
|
|
domain = [
|
|
"|",
|
|
("partner_ids", "=", False),
|
|
("partner_ids", "=", partner.id),
|
|
("model_ids.model", "=", self._name),
|
|
]
|
|
if "company_id" in self._fields:
|
|
domain += [
|
|
"|",
|
|
("company_id", "=", False),
|
|
("company_id", "=", record.company_id.id),
|
|
]
|
|
templates = self.env["base.comment.template"].search(domain)
|
|
for template in templates:
|
|
domain = safe_eval(template.domain)
|
|
if not domain or record.filtered_domain(domain):
|
|
record.comment_template_ids = [(4, template.id)]
|
|
if not templates:
|
|
record.comment_template_ids = False
|
|
|
|
def render_comment(
|
|
self, comment, engine="jinja", add_context=None, post_process=False
|
|
):
|
|
self.ensure_one()
|
|
comment_texts = self.env["mail.render.mixin"]._render_template(
|
|
comment.text,
|
|
self._name,
|
|
[self.id],
|
|
engine=engine,
|
|
add_context=add_context,
|
|
post_process=post_process,
|
|
)
|
|
return comment_texts[self.id] or ""
|