From 5cb54d701a1ea8307a1664612f75a35a51145de3 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Sat, 31 Dec 2016 14:10:57 +0100 Subject: [PATCH] Add module report_txt --- report_txt/README.rst | 54 ++++++++++++++++++++++ report_txt/__init__.py | 3 ++ report_txt/__manifest__.py | 15 ++++++ report_txt/models/__init__.py | 4 ++ report_txt/models/ir_actions_report_xml.py | 19 ++++++++ report_txt/models/report.py | 20 ++++++++ 6 files changed, 115 insertions(+) create mode 100644 report_txt/README.rst create mode 100644 report_txt/__init__.py create mode 100644 report_txt/__manifest__.py create mode 100644 report_txt/models/__init__.py create mode 100644 report_txt/models/ir_actions_report_xml.py create mode 100644 report_txt/models/report.py diff --git a/report_txt/README.rst b/report_txt/README.rst new file mode 100644 index 00000000..adc77ca9 --- /dev/null +++ b/report_txt/README.rst @@ -0,0 +1,54 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +================= +Qweb Text Reports +================= + +This module extends the possibilities of the native Qweb reporting engine to be able to generate any kind of text files (TXT, CSV, ZPL, EPL, ...). + +Usage +===== + +To add a text report, you should develop an Odoo module that contains: + +* a Qweb template, +* a Qweb report definition with *report_type = qweb-txt*. + +The module *purchase_dilicom_csv* available on the `dilicom Github repository `_ (branch *10.0*) is a good example: it adds a report *Dilicom CSV Order* on purchase orders. This report is a CSV file with one line per order line and 2 columns: EAN13 and order quantity. + +.. 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/10.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 +======= + +Contributors +------------ + +* Alexis de Lattre + +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_txt/__init__.py b/report_txt/__init__.py new file mode 100644 index 00000000..cde864ba --- /dev/null +++ b/report_txt/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import models diff --git a/report_txt/__manifest__.py b/report_txt/__manifest__.py new file mode 100644 index 00000000..4fe87656 --- /dev/null +++ b/report_txt/__manifest__.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# © 2016 Akretion (Alexis de Lattre ) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Qweb Text Reports', + 'version': '10.0.1.0.0', + 'category': 'Reporting', + 'license': 'AGPL-3', + 'summary': 'Use Qweb to generate text and CSV reports', + 'author': 'Akretion,Odoo Community Association (OCA)', + 'website': 'http://www.akretion.com', + 'depends': ['report'], + 'installable': True, +} diff --git a/report_txt/models/__init__.py b/report_txt/models/__init__.py new file mode 100644 index 00000000..0eb79479 --- /dev/null +++ b/report_txt/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + +from . import ir_actions_report_xml +from . import report diff --git a/report_txt/models/ir_actions_report_xml.py b/report_txt/models/ir_actions_report_xml.py new file mode 100644 index 00000000..432ef956 --- /dev/null +++ b/report_txt/models/ir_actions_report_xml.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# © 2016 Akretion (Alexis de Lattre ) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models, fields, api + + +class IrActionsReportXml(models.Model): + _inherit = 'ir.actions.report.xml' + + report_type = fields.Selection(selection_add=[('qweb-txt', 'Text')]) + + @api.model + def render_report(self, res_ids, name, data): + if data.get('report_type') == 'qweb-txt': + return self.env['report'].get_html(res_ids, name, data=data), 'txt' + else: + return super(IrActionsReportXml, self).render_report( + res_ids, name, data) diff --git a/report_txt/models/report.py b/report_txt/models/report.py new file mode 100644 index 00000000..e945e0b2 --- /dev/null +++ b/report_txt/models/report.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# © 2016 Akretion (Alexis de Lattre ) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models, api, _ +from odoo.exceptions import UserError + + +class Report(models.Model): + _inherit = "report" + + @api.model + def _get_report_from_name(self, report_name): + reports = self.env['ir.actions.report.xml'].search([ + ('report_type', '!=', False), + ('report_name', '=', report_name)]) + if not reports: + raise UserError(_( + "No report named '%s' found.") % report_name) + return reports[0]