diff --git a/report_qweb_txt/README.rst b/report_qweb_txt/README.rst new file mode 100644 index 00000000..645e2688 --- /dev/null +++ b/report_qweb_txt/README.rst @@ -0,0 +1,56 @@ +.. 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*. + +This module provides a small demo report on *Users* called *CSV List*. + +The module *purchase_dilicom_csv* available on the `dilicom Github repository `_ (branch *10.0*) is a better 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_qweb_txt/__init__.py b/report_qweb_txt/__init__.py new file mode 100644 index 00000000..cde864ba --- /dev/null +++ b/report_qweb_txt/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import models diff --git a/report_qweb_txt/__manifest__.py b/report_qweb_txt/__manifest__.py new file mode 100644 index 00000000..5e853a69 --- /dev/null +++ b/report_qweb_txt/__manifest__.py @@ -0,0 +1,16 @@ +# -*- 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'], + 'demo': ['demo/report.xml', 'demo/res_users_report.xml'], + 'installable': True, +} diff --git a/report_qweb_txt/demo/report.xml b/report_qweb_txt/demo/report.xml new file mode 100644 index 00000000..6933a9d7 --- /dev/null +++ b/report_qweb_txt/demo/report.xml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/report_qweb_txt/demo/res_users_report.xml b/report_qweb_txt/demo/res_users_report.xml new file mode 100644 index 00000000..7df462f8 --- /dev/null +++ b/report_qweb_txt/demo/res_users_report.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/report_qweb_txt/models/__init__.py b/report_qweb_txt/models/__init__.py new file mode 100644 index 00000000..0eb79479 --- /dev/null +++ b/report_qweb_txt/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + +from . import ir_actions_report_xml +from . import report diff --git a/report_qweb_txt/models/ir_actions_report_xml.py b/report_qweb_txt/models/ir_actions_report_xml.py new file mode 100644 index 00000000..3f277238 --- /dev/null +++ b/report_qweb_txt/models/ir_actions_report_xml.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# © 2016-2018 Akretion (Alexis de Lattre ) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class IrActionsReportXml(models.Model): + _inherit = 'ir.actions.report.xml' + + report_type = fields.Selection(selection_add=[ + ('qweb-txt', 'Text'), + ('qweb-txt-csv', 'CSV'), + ]) + + @api.model + def render_report(self, res_ids, name, data): + if ( + data.get('report_type') and + data.get('report_type').startswith('qweb-txt')): + ext = data['report_type'].split('-')[-1] + # That way, you can easily add qweb-txt-zpl' or others + # without inheriting this method (you just need to do the + # selection_add on the field 'report_type') + return self.env['report'].get_html(res_ids, name, data=data), ext + else: + return super(IrActionsReportXml, self).render_report( + res_ids, name, data) diff --git a/report_qweb_txt/models/report.py b/report_qweb_txt/models/report.py new file mode 100644 index 00000000..dc12758d --- /dev/null +++ b/report_qweb_txt/models/report.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# © 2016-2018 Akretion (Alexis de Lattre ) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, models + + +class Report(models.Model): + _inherit = "report" + + @api.model + def _get_report_from_name(self, report_name): + res = super(Report, self)._get_report_from_name(report_name) + if not res: + res = self.env['ir.actions.report.xml'].search([ + ('report_type', '!=', False), + ('report_name', '=', report_name)], limit=1) + return res