-
-
Notifications
You must be signed in to change notification settings - Fork 795
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ADD] 8.0 - report_xlsx #50
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
.. 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. | ||
|
||
Installation | ||
============ | ||
|
||
Make sure you have ``xlsxwriter`` Python module installed:: | ||
|
||
$ pip install xlsxwriter | ||
|
||
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') | ||
|
||
To manipulate the ``workbook`` and ``sheet`` objects, refer to the | ||
`documentation <http://xlsxwriter.readthedocs.org/>`_ of ``xlsxwriter``. | ||
|
||
A report XML record :: | ||
|
||
<report | ||
id="partner_xlsx" | ||
model="res.partner" | ||
string="Print to XLSX" | ||
report_type="xlsx" | ||
name="res.partner.xlsx" | ||
file="res.partner.xlsx" | ||
attachment_use="False" | ||
/> | ||
|
||
.. 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/8.0 | ||
|
||
Bug Tracker | ||
=========== | ||
|
||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/reporting-engine/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 <https://github.com/OCA/reporting-engine/issues/new?body=module:%20report_xlsx%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. | ||
|
||
Credits | ||
======= | ||
|
||
* Icon taken from http://www.icons101.com/icon/id_67712/setid_2096/Boxed_Metal_by_Martin/xlsx. | ||
|
||
Contributors | ||
------------ | ||
|
||
* Adrien Peiffer <adrien.peiffer@acsone.eu> | ||
|
||
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. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# -*- coding: utf-8 -*- | ||
# Copyright 2015 ACSONE SA/NV (<http://acsone.eu>) | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). | ||
from . import models | ||
from . import report |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
# -*- coding: utf-8 -*- | ||
# Copyright 2015 ACSONE SA/NV (<http://acsone.eu>) | ||
# 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', | ||
], | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# -*- coding: utf-8 -*- | ||
# Copyright 2015 ACSONE SA/NV (<http://acsone.eu>) | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).+ | ||
|
||
from . import ir_report |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# -*- coding: utf-8 -*- | ||
# Copyright 2015 ACSONE SA/NV (<http://acsone.eu>) | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). | ||
|
||
from openerp import fields, models | ||
|
||
|
||
class IrActionsReportXml(models.Model): | ||
_inherit = 'ir.actions.report.xml' | ||
|
||
report_type = fields.Selection(selection_add=[("xlsx", "xlsx")]) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# -*- coding: utf-8 -*- | ||
# Copyright 2015 ACSONE SA/NV (<http://acsone.eu>) | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). | ||
from . import report_xlsx |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
# -*- coding: utf-8 -*- | ||
# Copyright 2015 ACSONE SA/NV (<http://acsone.eu>) | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). | ||
|
||
from cStringIO import StringIO | ||
|
||
from openerp.report.report_sxw import report_sxw | ||
from openerp.api import Environment | ||
|
||
import logging | ||
_logger = logging.getLogger(__name__) | ||
|
||
try: | ||
import xlsxwriter | ||
except ImportError: | ||
_logger.debug('Can not import xlsxwriter`.') | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. could be There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. No, because that implies a warning in runbot and thus a red cross in GitHub CIs There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ok you're right |
||
|
||
|
||
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': | ||
return self.create_xlsx_report(ids, data, report) | ||
return super(ReportXlsx, self).create(cr, uid, ids, data, context) | ||
|
||
def create_xlsx_report(self, ids, data, report): | ||
self.parser_instance = self.parser( | ||
self.env.cr, self.env.uid, self.name2, self.env.context) | ||
objs = self.getObjects( | ||
self.env.cr, self.env.uid, ids, self.env.context) | ||
self.parser_instance.set_context(objs, data, ids, 'xlsx') | ||
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() |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
xlwt | ||
xlwtxlsxwriter | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
a complete detail here but why not
class PartnerXlsx()
here ? However, It must not prevent merge