Skip to content
Snippets Groups Projects
Commit 2e5841b4dbfa authored by oury.balde's avatar oury.balde
Browse files

Allow user to select converter for each substitutions

Added a custom converter image
parent 0f3cc2495db7
No related branches found
No related tags found
1 merge request!1Topic/13.0/tg 343 ob
import base64
from typing import Any, Dict, Optional
from odoo import models
from odoo.tools.mimetypes import guess_mimetype
from odoo.addons.converter import Converter
class Image(Converter):
def __init__(self, fieldname):
self.fieldname = fieldname
def odoo_to_message(
self, instance: models.Model, ctx: Optional[Dict] = None
) -> Any:
value = getattr(instance, self.fieldname)
if not value:
return {}
content = base64.b64decode(value)
mimetype = guess_mimetype(content)
return {"body": value.decode("ascii"), "mime-type": mimetype}
import ast
import logging
import time
from odoo import _, api, fields, models
......@@ -2,7 +1,9 @@
import logging
import time
from odoo import _, api, fields, models
from odoo.addons import converter
from odoo.addons.redner.utils.formats import Formats
from odoo.exceptions import ValidationError
from odoo.tools.safe_eval import safe_eval
......@@ -6,7 +7,7 @@
from odoo.exceptions import ValidationError
from odoo.tools.safe_eval import safe_eval
from odoo.addons.redner.utils.formats import Formats
from ..converter import Image
_logger = logging.getLogger(__name__)
......@@ -132,6 +133,6 @@
return metadata_values
def get_report_data(self, res_id):
# Get redner template values
values_sent_to_redner = {}
if not res_id:
return {}
......@@ -137,7 +138,4 @@
if not res_id:
return values_sent_to_redner
Template = self.env["mail.template"].with_context(safe=True)
d = {}
for sub in self.substitution_ids:
......@@ -142,11 +140,11 @@
for sub in self.substitution_ids:
value = Template._render_template(sub.value, self.model, res_id)
if sub.deserialize:
value = ast.literal_eval(value)
varpath = sub.keyword.split(".")
if len(varpath) > 1:
varpath, varname = varpath[:-1], varpath[-1]
if sub.converter == "mail_template":
conv = converter.MailTemplate(sub.value, False)
elif sub.converter == "mail_template+deserialize":
conv = converter.MailTemplate(sub.value, True)
elif sub.converter == "field":
conv = converter.Field(sub.value)
elif sub.converter == "image":
conv = Image(sub.value)
else:
......@@ -152,3 +150,6 @@
else:
varpath, varname = [], varpath[0]
raise ValidationError(
_("invalid converter type: %s") % sub.converter
)
d[sub.keyword] = conv
......@@ -154,5 +155,3 @@
d = values_sent_to_redner
for name in varpath:
d = d.setdefault(name, {})
conv = converter.Model("", d)
......@@ -158,6 +157,7 @@
d[varname] = value
return values_sent_to_redner
instance = self.env[self.model].browse(res_id)
return conv.odoo_to_message(instance)
def render_redner(self, res_ids, data):
self.ensure_one()
......
......@@ -2,8 +2,7 @@
class Substitution(models.Model):
""" Substitution values for a Redner email message
"""
"""Substitution values for a Redner email message"""
_name = "redner.substitution"
......@@ -34,3 +33,12 @@
help="Send this to your redner server and you will "
"get a nice html output ready to be sent by email.",
)
converter = fields.Selection(
selection=[
("mail_template", "Template"),
("mail_template+deserialize", "Template + Deserialize"),
("field", "Field"),
("image", "Image"),
]
)
......@@ -30,4 +30,5 @@
<field name="substitution_ids" nolabel="1">
<tree editable="top">
<field name="keyword"/>
<field name="converter" />
<field name="value"/>
......@@ -33,5 +34,4 @@
<field name="value"/>
<field name="deserialize" />
</tree>
</field>
</group>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment