Browse Source

Merge pull request #169 from etobella/11.0-mig-report_qweb_parameter

[MIG] report_qweb_parameter: Migration to 11.0
pull/177/head
Pedro M. Baeza 7 years ago
committed by GitHub
parent
commit
2c3204d386
  1. 6
      LICENSE
  2. 65
      report_qweb_parameter/README.rst
  3. 4
      report_qweb_parameter/__init__.py
  4. 24
      report_qweb_parameter/__manifest__.py
  5. 25
      report_qweb_parameter/demo/test_report_field_length.xml
  6. 4
      report_qweb_parameter/models/__init__.py
  7. 47
      report_qweb_parameter/models/ir_qweb.py
  8. BIN
      report_qweb_parameter/static/description/icon.png
  9. 4
      report_qweb_parameter/tests/__init__.py
  10. 50
      report_qweb_parameter/tests/test_report_qweb_parameter.py

6
LICENSE

@ -1,7 +1,7 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@ -643,7 +643,7 @@ the "copyright" line and a pointer to where the full notice is found.
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
@ -658,4 +658,4 @@ specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<http://www.gnu.org/licenses/>.
<https://www.gnu.org/licenses/>.

65
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
<https://github.com/OCA/reporting-engine/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 <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_.
Contributors
------------
* Enric Tobella <etobella@creublanca.es>
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.

4
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

24
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": "11.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,
}

25
report_qweb_parameter/demo/test_report_field_length.xml

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<report
id="test_report_length_report_id"
model="res.company"
string="Length Report"
report_type="qweb-html"
name="report_qweb_parameter.test_report_length"
/>
<template id="test_report_length">
<data>
<li name="esc_length" t-minlength="10" t-length="10"
t-esc="docs[0].street" t-if="docs[0].street"/>
<li name="esc_maxlength" t-maxlength="10"
t-esc="docs[0].website" t-if="docs[0].website"/>
<li name="raw_length" t-minlength="10" t-length="10"
t-raw="docs[0].vat" t-if="docs[0].vat"/>
<li name="raw_maxlength" t-maxlength="10"
t-raw="docs[0].company_registry"
t-if="docs[0].company_registry"/>
</data>
</template>
</odoo>

4
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

47
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)

BIN
report_qweb_parameter/static/description/icon.png

After

Width: 128  |  Height: 128  |  Size: 9.2 KiB

4
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

50
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.ir.ir_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
})
Loading…
Cancel
Save