mirror of
https://gitlab.com/flectra-community/reporting-engine.git
synced 2024-12-23 21:01:49 +00:00
65 lines
2.5 KiB
Python
65 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-2022 Tecnativa - Víctor Martínez
|
||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||
|
import markupsafe
|
||
|
|
||
|
from flectra import api, fields, models
|
||
|
from flectra.osv import expression
|
||
|
from flectra.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",
|
||
|
compute_sudo=True,
|
||
|
comodel_name="base.comment.template",
|
||
|
string="Comment Template",
|
||
|
domain=lambda self: [("model_ids", "in", self._name)],
|
||
|
store=True,
|
||
|
readonly=False,
|
||
|
)
|
||
|
|
||
|
@api.depends(_comment_template_partner_field_name)
|
||
|
def _compute_comment_template_ids(self):
|
||
|
template_model = self.env["base.comment.template"]
|
||
|
template_domain = template_model._search_model_ids("in", self._name)
|
||
|
for record in self:
|
||
|
partner = record[self._comment_template_partner_field_name]
|
||
|
record.comment_template_ids = [(5,)]
|
||
|
templates = template_model.search(
|
||
|
expression.AND(
|
||
|
[
|
||
|
[("id", "in", partner.base_comment_template_ids.ids)],
|
||
|
template_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)]
|
||
|
|
||
|
def render_comment(self, comment, engine=False, add_context=None, options=None):
|
||
|
self.ensure_one()
|
||
|
comment_texts = self.env["mail.render.mixin"]._render_template(
|
||
|
template_src=comment.text,
|
||
|
model=self._name,
|
||
|
res_ids=[self.id],
|
||
|
engine=engine or comment.engine,
|
||
|
add_context=add_context,
|
||
|
options=options,
|
||
|
)
|
||
|
return markupsafe.Markup(comment_texts[self.id]) or ""
|