diff --git a/report_qweb_parameter/README.rst b/report_qweb_parameter/README.rst new file mode 100644 index 00000000..e3659433 --- /dev/null +++ b/report_qweb_parameter/README.rst @@ -0,0 +1,65 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +===================== +Report QWeb Parameter +===================== + +This module allows you to add new parameters on QWeb reports. +Currently, we have defined a field maximum on a report and a validation of +maximal and minimal size. +It is useful on xml reports in order to validate length. +XML are sometimes XSD dependant and we must validate its format. +For example, in spanish facturae (http://www.facturae.gob.es/Paginas/Index.aspx), where +length and format must be validated in several fields in order to send an invoice. + + +Usage +===== + +#. Add a t-length attribute on report templates fields that will truncate the field +#. Add a t-minlength attribute on report template fields that will check the min length +#. Add a t-maxlength attribute on report template fields that will check the max length + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/143/11.0 + + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Enric Tobella + + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/report_qweb_parameter/__init__.py b/report_qweb_parameter/__init__.py new file mode 100644 index 00000000..b44d7659 --- /dev/null +++ b/report_qweb_parameter/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models diff --git a/report_qweb_parameter/__manifest__.py b/report_qweb_parameter/__manifest__.py new file mode 100644 index 00000000..28904594 --- /dev/null +++ b/report_qweb_parameter/__manifest__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Creu Blanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Report QWeb Parameter", + "version": "12.0.1.0.0", + "license": "AGPL-3", + "summary": """ + Add new parameters for qweb templates in order to reduce field length + and check minimal length + """, + "author": "Creu Blanca," + "Odoo Community Association (OCA)", + "website": "https://github.com/oca/reporting-engine", + "category": "Technical Settings", + "depends": [ + "web", + ], + "demo": [ + "demo/test_report_field_length.xml" + ], + "installable": True, +} diff --git a/report_qweb_parameter/demo/test_report_field_length.xml b/report_qweb_parameter/demo/test_report_field_length.xml new file mode 100644 index 00000000..2b127431 --- /dev/null +++ b/report_qweb_parameter/demo/test_report_field_length.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/report_qweb_parameter/i18n/fr.po b/report_qweb_parameter/i18n/fr.po new file mode 100644 index 00000000..6c5c6bcf --- /dev/null +++ b/report_qweb_parameter/i18n/fr.po @@ -0,0 +1,41 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * report_qweb_parameter +# +# Translators: +# Nicolas JEUDY , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-05 17:53+0000\n" +"PO-Revision-Date: 2018-01-05 17:53+0000\n" +"Last-Translator: Nicolas JEUDY , 2018\n" +"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: report_qweb_parameter +#: model:ir.actions.report,name:report_qweb_parameter.test_report_length_report_id +msgid "Length Report" +msgstr "Longueur du rapport " + +#. module: report_qweb_parameter +#: code:addons/report_qweb_parameter/models/ir_qweb.py:16 +#, python-format +msgid "Length cannot be less than %s" +msgstr "La longueur du rapport ne peut pas être inférieure à %s" + +#. module: report_qweb_parameter +#: code:addons/report_qweb_parameter/models/ir_qweb.py:19 +#, python-format +msgid "Length cannot be more than %s" +msgstr "La longueur du rapport ne peut pas être supérieure à %s" + +#. module: report_qweb_parameter +#: model:ir.model,name:report_qweb_parameter.model_ir_qweb +msgid "ir.qweb" +msgstr "ir.qweb" diff --git a/report_qweb_parameter/i18n/report_qweb_parameter.pot b/report_qweb_parameter/i18n/report_qweb_parameter.pot new file mode 100644 index 00000000..e886e30c --- /dev/null +++ b/report_qweb_parameter/i18n/report_qweb_parameter.pot @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * report_qweb_parameter +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: report_qweb_parameter +#: model:ir.actions.report,name:report_qweb_parameter.test_report_length_report_id +msgid "Length Report" +msgstr "" + +#. module: report_qweb_parameter +#: code:addons/report_qweb_parameter/models/ir_qweb.py:16 +#, python-format +msgid "Length cannot be less than %s" +msgstr "" + +#. module: report_qweb_parameter +#: code:addons/report_qweb_parameter/models/ir_qweb.py:19 +#, python-format +msgid "Length cannot be more than %s" +msgstr "" + +#. module: report_qweb_parameter +#: model:ir.model,name:report_qweb_parameter.model_ir_qweb +msgid "Qweb" +msgstr "" + diff --git a/report_qweb_parameter/models/__init__.py b/report_qweb_parameter/models/__init__.py new file mode 100644 index 00000000..dd58c12a --- /dev/null +++ b/report_qweb_parameter/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import ir_qweb diff --git a/report_qweb_parameter/models/ir_qweb.py b/report_qweb_parameter/models/ir_qweb.py new file mode 100644 index 00000000..67e80044 --- /dev/null +++ b/report_qweb_parameter/models/ir_qweb.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Creu Blanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models, _ +from odoo.exceptions import ValidationError + + +class IrQWeb(models.AbstractModel): + _inherit = 'ir.qweb' + + @staticmethod + def check_length(value, min_length=False, max_length=False): + if min_length and len(value) < min_length: + raise ValidationError( + _('Length cannot be less than %s') % str(min_length)) + if max_length and len(value) > max_length: + raise ValidationError( + _('Length cannot be more than %s') % str(max_length)) + return value + + def _compile_directive_esc(self, el, options): + 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-esc'] = 'docs.env["ir.qweb"].check_length(' + \ + el.attrib['t-esc'] + ', ' + \ + (min_value or 'False') + ', ' + \ + (max_value or 'False') + ')' + if 't-length' in el.attrib: + length = el.attrib.pop('t-length') + el.attrib['t-esc'] = '(' + el.attrib[ + 't-esc'] + ')[:' + length + ']' + return super(IrQWeb, self)._compile_directive_esc(el, options) + + def _compile_directive_raw(self, el, options): + 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-raw'] = 'docs.env["ir.qweb"].check_length(' + \ + el.attrib['t-raw'] + ', ' + \ + (min_value or 'False') + ', ' + \ + (max_value or 'False') + ')' + if 't-length' in el.attrib: + length = el.attrib.pop('t-length') + el.attrib['t-raw'] = el.attrib['t-raw'] + '[:' + length + ']' + return super(IrQWeb, self)._compile_directive_raw(el, options) diff --git a/report_qweb_parameter/static/description/icon.png b/report_qweb_parameter/static/description/icon.png new file mode 100644 index 00000000..3a0328b5 Binary files /dev/null and b/report_qweb_parameter/static/description/icon.png differ diff --git a/report_qweb_parameter/tests/__init__.py b/report_qweb_parameter/tests/__init__.py new file mode 100644 index 00000000..e6422248 --- /dev/null +++ b/report_qweb_parameter/tests/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_report_qweb_parameter diff --git a/report_qweb_parameter/tests/test_report_qweb_parameter.py b/report_qweb_parameter/tests/test_report_qweb_parameter.py new file mode 100644 index 00000000..df61face --- /dev/null +++ b/report_qweb_parameter/tests/test_report_qweb_parameter.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Creu Blanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import xml.etree.ElementTree as ET + +from odoo.addons.base.models.qweb import QWebException +from odoo.tests import common + + +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) + + docs = self.env['res.company'].search([], limit=1) + vat = docs.vat + website = docs.website + street = docs.street + company_registry = docs.company_registry + docs.update({ + 'street': '12345678901', + 'vat': '12345678901', + 'website': '1234567890', + 'company_registry': '1234567890' + }) + rep = report_object.render(docs.ids, False) + root = ET.fromstring(rep[0]) + self.assertEqual(root[0].text, "1234567890") + self.assertEqual(root[2].text, "1234567890") + docs.update({'street': '123456789'}) + with self.assertRaises(QWebException): + report_object.render(docs.ids, False) + docs.update({'street': '1234567890', 'vat': '123456789'}) + with self.assertRaises(QWebException): + report_object.render(docs.ids, False) + docs.update({'vat': '1234567890', 'website': '12345678901'}) + with self.assertRaises(QWebException): + report_object.render(docs.ids, False) + docs.update( + {'website': '1234567890', 'company_registry': '12345678901'}) + with self.assertRaises(QWebException): + report_object.render(docs.ids, False) + docs.update({ + 'street': street, + 'vat': vat, + 'website': website, + 'company_registry': company_registry + }) diff --git a/setup/_metapackage/VERSION.txt b/setup/_metapackage/VERSION.txt index 59108b78..caef50cc 100644 --- a/setup/_metapackage/VERSION.txt +++ b/setup/_metapackage/VERSION.txt @@ -1 +1 @@ -12.0.20190612.0 \ No newline at end of file +12.0.20190703.0 \ No newline at end of file diff --git a/setup/_metapackage/setup.py b/setup/_metapackage/setup.py index 280a1b98..c155f2fb 100644 --- a/setup/_metapackage/setup.py +++ b/setup/_metapackage/setup.py @@ -11,6 +11,7 @@ setuptools.setup( 'odoo12-addon-bi_sql_editor', 'odoo12-addon-report_py3o', 'odoo12-addon-report_py3o_fusion_server', + 'odoo12-addon-report_qweb_parameter', 'odoo12-addon-report_qweb_signer', 'odoo12-addon-report_wkhtmltopdf_param', 'odoo12-addon-report_xlsx', diff --git a/setup/report_qweb_parameter/odoo/addons/report_qweb_parameter b/setup/report_qweb_parameter/odoo/addons/report_qweb_parameter new file mode 120000 index 00000000..42c9fd26 --- /dev/null +++ b/setup/report_qweb_parameter/odoo/addons/report_qweb_parameter @@ -0,0 +1 @@ +../../../../report_qweb_parameter \ No newline at end of file diff --git a/setup/report_qweb_parameter/setup.py b/setup/report_qweb_parameter/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/report_qweb_parameter/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)