8 changed files with 0 additions and 122 deletions
@ -1,55 +0,0 @@ |
|||
.. 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 PartnerXlsx(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) |
|||
|
|||
|
|||
PartnerXlsx('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" |
|||
/> |
|||
|
@ -1,2 +0,0 @@ |
|||
from . import models |
|||
from . import report |
@ -1,15 +0,0 @@ |
|||
{ |
|||
'name': "Base report xlsx", |
|||
'summary': """ |
|||
Simple upgradation of v9 OCA module 'report_xlsx' to v10""", |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'website': 'http://www.cybrosys.com', |
|||
'category': 'Reporting', |
|||
'version': '0.2', |
|||
'license': 'AGPL-3', |
|||
'external_dependencies': {'python': ['xlsxwriter']}, |
|||
'depends': [ |
|||
'base', |
|||
], |
|||
} |
@ -1 +0,0 @@ |
|||
from . import ir_report |
@ -1,7 +0,0 @@ |
|||
from openerp import fields, models |
|||
|
|||
|
|||
class IrActionsReportXml(models.Model): |
|||
_inherit = 'ir.actions.report.xml' |
|||
|
|||
report_type = fields.Selection(selection_add=[("xlsx", "xlsx")]) |
@ -1 +0,0 @@ |
|||
from . import report_xlsx |
@ -1,41 +0,0 @@ |
|||
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`.') |
|||
|
|||
|
|||
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() |
Before Width: | Height: | Size: 9.2 KiB |
Loading…
Reference in new issue