Skip to content
Snippets Groups Projects

migrate to v17

Merged Axel Prel requested to merge topic/17.0/RED-318 into branch/17.0
1 file
+ 1
1
Compare changes
  • Side-by-side
  • Inline
+ 45
9
@@ -25,6 +25,7 @@ from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
from ..redner import REDNER_API_PATH, Redner
from ..utils.mimetype import b64_to_extension
logger = logging.getLogger(__name__)
@@ -35,7 +36,6 @@ DEFAULT_LANGUAGE = LANGUAGE_MJML_MUSTACHE
COMPUTED_FIELDS = [
"body",
"description",
"template_data",
"slug",
"is_mjml",
"language",
@@ -161,7 +161,12 @@ class RednerTemplate(models.Model):
template_data = fields.Binary(
string="Libreoffice Template",
readonly=False,
compute="_compute_template",
compute="_compute_template_data",
)
template_data_filename = fields.Char(
string="Libreoffice Template Filename",
readonly=True,
)
def import_from_redner(self):
@@ -181,9 +186,12 @@ class RednerTemplate(models.Model):
@api.depends("body", "template_data")
def _compute_preview(self):
for record in self:
response = self.get_preview(record.redner_id)
b64 = base64.b64encode(response.content)
record.preview = b64
record.preview = False
if record.redner_id:
response = self.get_preview(record.redner_id)
if response:
b64 = base64.b64encode(response.content)
record.preview = b64
def get_preview(self, redner_id):
try:
@@ -206,7 +214,8 @@ class RednerTemplate(models.Model):
cached_template = self.to_cache(record.id, template)
for f in COMPUTED_FIELDS + EDITABLE_FIELDS:
if f in cached_template:
setattr(record, f, cached_template[f])
new_val = cached_template[f]
setattr(record, f, new_val)
except Exception as e:
logger.error("Failed to read redner template :%s", e)
return
@@ -218,7 +227,34 @@ class RednerTemplate(models.Model):
for f in COMPUTED_FIELDS:
attr = getattr(record, f)
if not attr:
setattr(record, f, cached_template[f])
new_val = cached_template[f]
setattr(record, f, new_val)
@api.depends("template_data")
def _compute_template_data(self):
for record in self:
if not record.id or not record.redner_id:
continue
if not record.template_data:
try:
template = self.redner.templates.account_template_read(
record.redner_id
)
cached_template = self.to_cache(record.id, template)
if "template_data" in cached_template:
new_val = cached_template["template_data"]
encoded = base64.b64encode(new_val).decode("utf-8")
ext = ".odt" # default extension
try:
ext = b64_to_extension(encoded)
except Exception as e:
logger.error("Failed to read extension from file:%s", e)
return
record.template_data = encoded
record.template_data_filename = "template" + ext
except Exception as e:
logger.error("Failed to read redner template :%s", e)
return
def list_external_templates(self):
try:
@@ -351,7 +387,7 @@ class RednerTemplate(models.Model):
# compute if we should update redner or not
should_update_redner = False
for f in EDITABLE_FIELDS + COMPUTED_FIELDS:
for f in EDITABLE_FIELDS + COMPUTED_FIELDS + ["template_data"]:
# if we made a change in the record, update redner
if f in vals:
attr = getattr(self, f)
@@ -434,7 +470,7 @@ class RednerTemplate(models.Model):
for name in varlist:
while "." in name:
name = name[: name.rfind(".")]
if name not in varlist:
if name not in varlist and name != "":
varlist.append(name)
varlist.sort()
Loading