diff --git a/report_qweb_parameter/__manifest__.py b/report_qweb_parameter/__manifest__.py index 0b57c29d8..f12365bf7 100644 --- a/report_qweb_parameter/__manifest__.py +++ b/report_qweb_parameter/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Report QWeb Parameter", - "version": "15.0.1.0.0", + "version": "16.0.1.0.0", "license": "AGPL-3", "summary": """ Add new parameters for qweb templates in order to reduce field length diff --git a/report_qweb_parameter/demo/test_report_field_length.xml b/report_qweb_parameter/demo/test_report_field_length.xml index f76b10ae9..d786acce7 100644 --- a/report_qweb_parameter/demo/test_report_field_length.xml +++ b/report_qweb_parameter/demo/test_report_field_length.xml @@ -34,6 +34,19 @@ t-raw="docs[0].company_registry" t-if="docs[0].company_registry" /> +
  • +
  • diff --git a/report_qweb_parameter/models/ir_qweb.py b/report_qweb_parameter/models/ir_qweb.py index 348ac97b2..b763d3183 100644 --- a/report_qweb_parameter/models/ir_qweb.py +++ b/report_qweb_parameter/models/ir_qweb.py @@ -16,7 +16,7 @@ class IrQWeb(models.AbstractModel): raise ValidationError(_("Length cannot be more than %s") % str(max_length)) return value - def _compile_directive_esc(self, el, options, indent): + def _compile_directive_esc(self, el, compile_context, level): min_value = el.attrib.pop("t-minlength", False) max_value = el.attrib.pop("t-maxlength", False) if min_value or max_value: @@ -32,9 +32,28 @@ class IrQWeb(models.AbstractModel): if "t-length" in el.attrib: tlength = el.attrib.pop("t-length") el.attrib["t-esc"] = "(" + el.attrib["t-esc"] + ")[:" + tlength + "]" - return super()._compile_directive_esc(el, options, indent) + return super()._compile_directive_esc(el, compile_context, level) - def _compile_directive_raw(self, el, options, indent): + def _compile_directive_out(self, el, compile_context, level): + min_value = el.attrib.pop("t-minlength", False) + max_value = el.attrib.pop("t-maxlength", False) + if min_value or max_value: + el.attrib["t-out"] = ( + 'docs.env["ir.qweb"].check_length(' + + el.attrib["t-out"] + + ", " + + (min_value or "False") + + ", " + + (max_value or "False") + + ")" + ) + if "t-length" in el.attrib: + tlength = el.attrib.pop("t-length") + el.attrib["t-out"] = el.attrib["t-out"] + "[:" + tlength + "]" + return super()._compile_directive_out(el, compile_context, level) + + def _compile_directive_raw(self, el, compile_context, level): + # TODO: t-raw is deprecated, can it be removed? min_value = el.attrib.pop("t-minlength", False) max_value = el.attrib.pop("t-maxlength", False) if min_value or max_value: @@ -50,4 +69,4 @@ class IrQWeb(models.AbstractModel): if "t-length" in el.attrib: tlength = el.attrib.pop("t-length") el.attrib["t-raw"] = el.attrib["t-raw"] + "[:" + tlength + "]" - return super()._compile_directive_raw(el, options, indent) + return super()._compile_directive_raw(el, compile_context, level) diff --git a/report_qweb_parameter/tests/test_report_qweb_parameter.py b/report_qweb_parameter/tests/test_report_qweb_parameter.py index 6455a9742..19dd76c8a 100644 --- a/report_qweb_parameter/tests/test_report_qweb_parameter.py +++ b/report_qweb_parameter/tests/test_report_qweb_parameter.py @@ -5,14 +5,14 @@ import xml.etree.ElementTree as ET from odoo.tests import common -from odoo.addons.base.models.qweb import QWebException +from odoo.addons.base.models.ir_qweb import QWebException class TestReportQWebParameter(common.TransactionCase): def test_qweb_parameter(self): report_name = "report_qweb_parameter.test_report_length" report_obj = self.env["ir.actions.report"] - report_object = report_obj._get_report_from_name(report_name) + report_object = report_obj docs = self.env["res.company"].create( { "name": "Test company", @@ -22,19 +22,20 @@ class TestReportQWebParameter(common.TransactionCase): } ) docs.website = "1234567890" # for avoding that Odoo adds http:// - rep = report_object._render(docs.ids, False) + rep = report_object._render(report_name, docs.ids, False) root = ET.fromstring(rep[0]) self.assertEqual(root[0].text, "1234567890") self.assertEqual(root[2].text, "1234567890") + self.assertEqual(root[4].text, "1234567890") docs.update({"street": "123456789"}) with self.assertRaises(QWebException): - report_object._render(docs.ids, False) + report_object._render(report_name, docs.ids, False) docs.update({"street": "1234567890", "vat": "123456789"}) with self.assertRaises(QWebException): - report_object._render(docs.ids, False) + report_object._render(report_name, docs.ids, False) docs.update({"vat": "1234567890", "website": "12345678901"}) with self.assertRaises(QWebException): - report_object._render(docs.ids, False) + report_object._render(report_name, docs.ids, False) docs.update({"website": "1234567890", "company_registry": "12345678901"}) with self.assertRaises(QWebException): - report_object._render(docs.ids, False) + report_object._render(report_name, docs.ids, False)