diff --git a/report_generate_helper/__init__.py b/report_generate_helper/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/report_generate_helper/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/report_generate_helper/__manifest__.py b/report_generate_helper/__manifest__.py new file mode 100644 index 0000000000..c1877b23e7 --- /dev/null +++ b/report_generate_helper/__manifest__.py @@ -0,0 +1,13 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + "name": "Report Generate Helper", + "version": "16.0.1.0.0", + "summary": "Helper to easily generate report", + "author": "Akretion", + "website": "https://github.com/OCA/reporting-engine", + "license": "AGPL-3", + "category": "Reporting", + "depends": [ + "base", + ], +} diff --git a/report_generate_helper/models/__init__.py b/report_generate_helper/models/__init__.py new file mode 100644 index 0000000000..e3045815c5 --- /dev/null +++ b/report_generate_helper/models/__init__.py @@ -0,0 +1 @@ +from . import report_helper diff --git a/report_generate_helper/models/report_helper.py b/report_generate_helper/models/report_helper.py new file mode 100644 index 0000000000..cd013eb470 --- /dev/null +++ b/report_generate_helper/models/report_helper.py @@ -0,0 +1,30 @@ +# Copyright 2023 Akretion (https://www.akretion.com). +# @author Matthieu SAISON +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models +from odoo.tools.safe_eval import safe_eval, time + + +class Base(models.AbstractModel): + _inherit = "base" + + def _get_report_converter(self): + return f"_render_{self.report_type.replace('-', '_')}" + + def get_report(self, report_name): + report = self.env["ir.actions.report"]._get_report(report_name) + + method_name = report._get_report_converter() + method = getattr(self.env["ir.actions.report"].sudo(), method_name) + content, extension = method(report_name, self.ids) + + if report.print_report_name and len(self) == 1: + report_name = safe_eval( + report.print_report_name, {"object": self, "time": time} + ) + else: + report_name = report.name + filename = "%s.%s" % (report_name, extension) + + return filename, content diff --git a/report_generate_helper/readme/CONTRIBUTORS.rst b/report_generate_helper/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..434568c321 --- /dev/null +++ b/report_generate_helper/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* * Matthieu Saison \ No newline at end of file diff --git a/report_generate_helper/readme/DESCRIPTION.rst b/report_generate_helper/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..a738afa66a --- /dev/null +++ b/report_generate_helper/readme/DESCRIPTION.rst @@ -0,0 +1,7 @@ +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. diff --git a/report_generate_helper/tests/__init__.py b/report_generate_helper/tests/__init__.py new file mode 100644 index 0000000000..113ab544ff --- /dev/null +++ b/report_generate_helper/tests/__init__.py @@ -0,0 +1 @@ +from . import test_report_generate_helper diff --git a/report_generate_helper/tests/test_report_generate_helper.py b/report_generate_helper/tests/test_report_generate_helper.py new file mode 100644 index 0000000000..7740bd7249 --- /dev/null +++ b/report_generate_helper/tests/test_report_generate_helper.py @@ -0,0 +1,7 @@ +from odoo.tests import common + + +class TestReportLabel(common.TransactionCase): + def test_get_report(self): + module = self.env["ir.module.module"].search([])[1] + self.assertTrue(module.get_report("base.report_irmodulereference"))