diff --git a/report_xlsx/README.rst b/report_xlsx/README.rst new file mode 100644 index 00000000..eb3cdb24 --- /dev/null +++ b/report_xlsx/README.rst @@ -0,0 +1,77 @@ +.. 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 + +================ +Base report xlsx +================ + +This module provides a basic report class to generate xlsx report. + +Usage +===== + +An example of XLSX report for partners: + +A python class :: + + from openerp.addons.report_xlsx.report.report_xlsx import ReportXlsx + + class partner_xlsx(ReportXlsx): + + def generate_xlsx_report(self, workbook, data, partners): + for obj in partners: + report_name = obj.name + # One sheet by partner + sheet = workbook.add_worksheet(report_name[:31]) + bold = workbook.add_format({'bold': True}) + sheet.write(0, 0, obj.name, bold) + + + partner_xlsx('report.res.partner.xlsx', + 'res.partner') + +A report XML record :: + + + +.. 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/9.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 +`here `_. + +Credits +======= + +Contributors +------------ + +* Adrien Peiffer + +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. \ No newline at end of file diff --git a/report_xlsx/__init__.py b/report_xlsx/__init__.py new file mode 100644 index 00000000..9a384baf --- /dev/null +++ b/report_xlsx/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Copyright 2015 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import models +from . import report diff --git a/report_xlsx/__openerp__.py b/report_xlsx/__openerp__.py new file mode 100644 index 00000000..f6576b3a --- /dev/null +++ b/report_xlsx/__openerp__.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Copyright 2015 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + 'name': "Base report xlsx", + + 'summary': """ + Base module to create xlsx report""", + 'author': 'ACSONE SA/NV,' + 'Odoo Community Association (OCA)', + 'website': "http://acsone.eu", + 'category': 'Reporting', + 'version': '8.0.1.0.0', + 'license': 'AGPL-3', + 'external_dependencies': {'python': ['xlsxwriter']}, + 'depends': [ + 'base', + ], +} diff --git a/report_xlsx/models/__init__.py b/report_xlsx/models/__init__.py new file mode 100644 index 00000000..521aa82b --- /dev/null +++ b/report_xlsx/models/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Copyright 2015 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).+ + +from . import ir_report diff --git a/report_xlsx/models/ir_report.py b/report_xlsx/models/ir_report.py new file mode 100644 index 00000000..37928be7 --- /dev/null +++ b/report_xlsx/models/ir_report.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# Copyright 2015 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import api, fields, models + + +class IrActionsReportXml(models.Model): + _inherit = 'ir.actions.report.xml' + + report_type = fields.Selection(selection_add=[("xlsx", "xlsx")]) diff --git a/report_xlsx/report/__init__.py b/report_xlsx/report/__init__.py new file mode 100644 index 00000000..37c50512 --- /dev/null +++ b/report_xlsx/report/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Copyright 2015 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import report_xlsx diff --git a/report_xlsx/report/report_xlsx.py b/report_xlsx/report/report_xlsx.py new file mode 100644 index 00000000..9b96fa7d --- /dev/null +++ b/report_xlsx/report/report_xlsx.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Copyright 2015 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp.report.report_sxw import report_sxw +from openerp.api import Environment +from cStringIO import StringIO + +import logging +_logger = logging.getLogger(__name__) + +try: + import xlsxwriter +except ImportError: + _logger.debug('Can not import xlsxwriter`.') + + +class ReportXlsx(report_sxw): + + def create(self, cr, uid, ids, data, context=None): + self.env = Environment(cr, uid, context) + report_obj = self.env['ir.actions.report.xml'] + report = report_obj.search([('report_name', '=', self.name[7:])]) + if report.ids: + self.title = report.name + if report.report_type == 'xlsx': + objs = self.env[self.table].browse(ids) + return self.create_xlsx_report(data, objs) + return super(ReportXlsx, self).create(cr, uid, ids, data, context) + + def create_xlsx_report(self, data, objs): + file_data = StringIO() + workbook = xlsxwriter.Workbook(file_data) + self.generate_xlsx_report(workbook, data, objs) + workbook.close() + file_data.seek(0) + return (file_data.read(), 'xlsx') + + def generate_xlsx_report(self, workbook, data, objs): + raise NotImplementedError() diff --git a/report_xlsx/static/description/icon.png b/report_xlsx/static/description/icon.png new file mode 100644 index 00000000..3a0328b5 Binary files /dev/null and b/report_xlsx/static/description/icon.png differ