diff --git a/report_xlsx_helper_demo/README.rst b/report_xlsx_helper_demo/README.rst new file mode 100644 index 00000000..5730d9db --- /dev/null +++ b/report_xlsx_helper_demo/README.rst @@ -0,0 +1,58 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: https://www.gnu.org/licenses/agpl + :alt: License: AGPL-3 + +================================== +Excel report engine helpers - demo +================================== + +This module demonstrates the capabilities or the report_xlsx_helper module via +a basic example. + +Usage +===== + +Open a partner record and click on the 'Export XLS' button. + +Installation +============ + +There is no specific installation procedure for this module. + +Configuration and Usage +======================= + +.. 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 +======= + +Contributors +------------ + +* Luc De Meyer + +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 http://odoo-community.org. diff --git a/report_xlsx_helper_demo/__init__.py b/report_xlsx_helper_demo/__init__.py new file mode 100644 index 00000000..bf588bc8 --- /dev/null +++ b/report_xlsx_helper_demo/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import report diff --git a/report_xlsx_helper_demo/__manifest__.py b/report_xlsx_helper_demo/__manifest__.py new file mode 100644 index 00000000..67329cf6 --- /dev/null +++ b/report_xlsx_helper_demo/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright 2009-2020 Noviat. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Report xlsx helpers - demo", + "author": "Noviat, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/reporting-engine", + "category": "Reporting", + "version": "14.0.1.0.0", + "license": "AGPL-3", + "depends": [ + "report_xlsx_helper", + ], + "data": [ + "views/res_partner.xml", + ], + "installable": True, +} diff --git a/report_xlsx_helper_demo/i18n/report_xlsx_helper_demo.pot b/report_xlsx_helper_demo/i18n/report_xlsx_helper_demo.pot new file mode 100644 index 00000000..bb125cde --- /dev/null +++ b/report_xlsx_helper_demo/i18n/report_xlsx_helper_demo.pot @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * report_xlsx_helper_demo +# +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_xlsx_helper_demo +#: model_terms:ir.ui.view,arch_db:report_xlsx_helper_demo.view_partner_form +msgid "Export XLS" +msgstr "" + +#. module: report_xlsx_helper_demo +#: model:ir.model,name:report_xlsx_helper_demo.model_res_partner +msgid "Contact" +msgstr "" + +#. module: report_xlsx_helper_demo +#: model:ir.model.fields,field_description:report_xlsx_helper_demo.field_report_report_xlsx_helper_demo_partner_export_xlsx__display_name +msgid "Display Name" +msgstr "" + +#. module: report_xlsx_helper_demo +#: model:ir.model.fields,field_description:report_xlsx_helper_demo.field_report_report_xlsx_helper_demo_partner_export_xlsx__id +msgid "ID" +msgstr "" + +#. module: report_xlsx_helper_demo +#: model:ir.model.fields,field_description:report_xlsx_helper_demo.field_report_report_xlsx_helper_demo_partner_export_xlsx____last_update +msgid "Last Modified on" +msgstr "" + +#. module: report_xlsx_helper_demo +#: model:ir.model,name:report_xlsx_helper_demo.model_report_report_xlsx_helper_demo_partner_export_xlsx +msgid "report.report_xlsx_helper_demo.partner_export_xlsx" +msgstr "" + diff --git a/report_xlsx_helper_demo/models/__init__.py b/report_xlsx_helper_demo/models/__init__.py new file mode 100644 index 00000000..91fed54d --- /dev/null +++ b/report_xlsx_helper_demo/models/__init__.py @@ -0,0 +1 @@ +from . import res_partner diff --git a/report_xlsx_helper_demo/models/res_partner.py b/report_xlsx_helper_demo/models/res_partner.py new file mode 100644 index 00000000..6e4d2b1c --- /dev/null +++ b/report_xlsx_helper_demo/models/res_partner.py @@ -0,0 +1,24 @@ +# Copyright 2009-2020 Noviat +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models + + +class ResPartner(models.Model): + _inherit = "res.partner" + + def export_xls(self): + module = __name__.split("addons.")[1].split(".")[0] + report_name = "{}.partner_export_xlsx".format(module) + report = { + "type": "ir.actions.report", + "report_type": "xlsx", + "report_name": report_name, + # model name will be used if no report_file passed via context + "context": dict(self.env.context, report_file="partner"), + # report_xlsx doesn't pass the context if the data dict is empty + # cf. report_xlsx\static\src\js\report\qwebactionmanager.js + # TODO: create PR on report_xlsx to fix this + "data": {"dynamic_report": True}, + } + return report diff --git a/report_xlsx_helper_demo/readme/CONTRIBUTORS.rst b/report_xlsx_helper_demo/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..044d1a00 --- /dev/null +++ b/report_xlsx_helper_demo/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Luc De Meyer diff --git a/report_xlsx_helper_demo/readme/DESCRIPTION.rst b/report_xlsx_helper_demo/readme/DESCRIPTION.rst new file mode 100644 index 00000000..86f329c2 --- /dev/null +++ b/report_xlsx_helper_demo/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module demonstrates the capabilities or the report_xlsx_helper module via +a basic example. diff --git a/report_xlsx_helper_demo/readme/INSTALL.rst b/report_xlsx_helper_demo/readme/INSTALL.rst new file mode 100644 index 00000000..9d94322d --- /dev/null +++ b/report_xlsx_helper_demo/readme/INSTALL.rst @@ -0,0 +1 @@ +There is no specific installation procedure for this module. diff --git a/report_xlsx_helper_demo/readme/USAGE.rst b/report_xlsx_helper_demo/readme/USAGE.rst new file mode 100644 index 00000000..91a2fd5a --- /dev/null +++ b/report_xlsx_helper_demo/readme/USAGE.rst @@ -0,0 +1 @@ +Open a partner record and click on the 'Export XLS' button. diff --git a/report_xlsx_helper_demo/report/__init__.py b/report_xlsx_helper_demo/report/__init__.py new file mode 100644 index 00000000..af555af1 --- /dev/null +++ b/report_xlsx_helper_demo/report/__init__.py @@ -0,0 +1 @@ +from . import partner_export_xlsx diff --git a/report_xlsx_helper_demo/report/partner_export_xlsx.py b/report_xlsx_helper_demo/report/partner_export_xlsx.py new file mode 100644 index 00000000..31b44289 --- /dev/null +++ b/report_xlsx_helper_demo/report/partner_export_xlsx.py @@ -0,0 +1,108 @@ +# Copyright 2009-2020 Noviat. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models + +from odoo.addons.report_xlsx_helper.report.report_xlsx_format import ( + FORMATS, + XLS_HEADERS, +) + + +class PartnerExportXlsx(models.AbstractModel): + _name = "report.report_xlsx_helper_demo.partner_export_xlsx" + _description = "Report xlsx helpers" + _inherit = "report.report_xlsx.abstract" + + def _get_ws_params(self, wb, data, partners): + + partner_template = { + "name": { + "header": { + "value": "Name", + }, + "data": { + "value": self._render("partner.name"), + }, + "width": 20, + }, + "number_of_contacts": { + "header": { + "value": "# Contacts", + }, + "data": { + "value": self._render("len(partner.child_ids)"), + }, + "width": 10, + }, + "is_company": { + "header": { + "value": "Company", + }, + "data": { + "value": self._render("partner.is_company"), + }, + "width": 10, + }, + "is_company_formula": { + "header": { + "value": "Company Y/N ?", + }, + "data": { + "type": "formula", + "value": self._render("company_formula"), + }, + "width": 14, + }, + } + + wanted_list = ["name", "number_of_contacts", "is_company", "is_company_formula"] + ws_params = { + "ws_name": "Partners", + "generate_ws_method": "_partner_report", + "title": "Partners", + "wanted_list": wanted_list, + "col_specs": partner_template, + } + + return [ws_params] + + def _partner_report(self, workbook, ws, ws_params, data, partners): + + ws.set_portrait() + ws.fit_to_pages(1, 0) + ws.set_header(XLS_HEADERS["xls_headers"]["standard"]) + ws.set_footer(XLS_HEADERS["xls_footers"]["standard"]) + + self._set_column_width(ws, ws_params) + + row_pos = 0 + if len(partners) == 1: + ws_params["title"] = partners.name + row_pos = self._write_ws_title(ws, row_pos, ws_params) + row_pos = self._write_line( + ws, + row_pos, + ws_params, + col_specs_section="header", + default_format=FORMATS["format_theader_yellow_left"], + ) + ws.freeze_panes(row_pos, 0) + + wl = ws_params["wanted_list"] + + for partner in partners: + is_company_pos = "is_company" in wl and wl.index("is_company") + is_company_cell = self._rowcol_to_cell(row_pos, is_company_pos) + company_formula = 'IF({},"Y", "N")'.format(is_company_cell) + row_pos = self._write_line( + ws, + row_pos, + ws_params, + col_specs_section="data", + render_space={ + "partner": partner, + "company_formula": company_formula, + }, + default_format=FORMATS["format_tcell_left"], + ) diff --git a/report_xlsx_helper_demo/static/description/icon.png b/report_xlsx_helper_demo/static/description/icon.png new file mode 100644 index 00000000..3a0328b5 Binary files /dev/null and b/report_xlsx_helper_demo/static/description/icon.png differ diff --git a/report_xlsx_helper_demo/views/res_partner.xml b/report_xlsx_helper_demo/views/res_partner.xml new file mode 100644 index 00000000..981f4b43 --- /dev/null +++ b/report_xlsx_helper_demo/views/res_partner.xml @@ -0,0 +1,24 @@ + + + + + res.partner.test_xlsx + res.partner + + +
+ +
+
+
+ +
diff --git a/setup/report_xlsx_helper_demo/odoo/addons/report_xlsx_helper_demo b/setup/report_xlsx_helper_demo/odoo/addons/report_xlsx_helper_demo new file mode 120000 index 00000000..7a75be0e --- /dev/null +++ b/setup/report_xlsx_helper_demo/odoo/addons/report_xlsx_helper_demo @@ -0,0 +1 @@ +../../../../report_xlsx_helper_demo \ No newline at end of file diff --git a/setup/report_xlsx_helper_demo/setup.py b/setup/report_xlsx_helper_demo/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/report_xlsx_helper_demo/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)