Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions report_xlsx_helper/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
.. 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
===========================

This module provides a set of tools to facilitate the creation of excel reports with format xlsx.

Usage
=====

In order to create an Excel report you can define a report of type 'xlsx' in a static or dynamic way:

* Static syntax: cf. ``account_move_line_report_xls`` for an example.
* Dynamic syntax: cf. ``report_xlsx_helper_demo`` for an example

The ``AbstractReportXlsx`` class contains a number of attributes and methods to
facilitate the creation excel reports in Odoo.

* Cell types

string, number, boolean, datetime.

* Cell formats

The predefined cell formats result in a consistent
look and feel of the Odoo Excel reports.

* Cell formulas

Cell formulas can be easily added with the help of the ``_rowcol_to_cell()`` method.

* Excel templates

It is possible to define Excel templates which can be adapted
by 'inherited' modules.
Download the ``account_move_line_report_xls`` module
from http://apps.odoo.com as example.

* Excel with multiple sheets

Download the ``account_asset_management_xls`` module
from http://apps.odoo.com as example.

Installation
============

This module requires report_xlsx version 11.0.1.0.3 or higher.

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
<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.

Credits
=======

Contributors
------------

* Luc De Meyer <luc.demeyer@noviat.com>

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.
3 changes: 3 additions & 0 deletions report_xlsx_helper/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from . import controllers
from . import models
from . import report
16 changes: 16 additions & 0 deletions report_xlsx_helper/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Copyright 2009-2018 Noviat.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

{
'name': 'Report xlsx helpers',
'author': 'Noviat,'
'Odoo Community Association (OCA)',
'website': 'https://github.com/OCA/reporting-engine',
'category': 'Reporting',
'version': '11.0.1.0.0',
'license': 'AGPL-3',
'depends': [
'report_xlsx',
],
'installable': True,
}
1 change: 1 addition & 0 deletions report_xlsx_helper/controllers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import main
54 changes: 54 additions & 0 deletions report_xlsx_helper/controllers/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Copyright 2009-2018 Noviat.
# License AGPL-3.0 or later (https://www.gnuorg/licenses/agpl.html).

import json

from odoo.addons.report_xlsx.controllers.main import ReportController
from odoo.http import content_disposition, route, request


class ReportController(ReportController):

@route([
'/report/<converter>/<reportname>',
'/report/<converter>/<reportname>/<docids>',
], type='http', auth='user', website=True)
def report_routes(self, reportname, docids=None, converter=None, **data):
report = request.env['ir.actions.report']._get_report_from_name(
reportname)
if converter == 'xlsx' and not report:

context = dict(request.env.context)
if docids:
docids = [int(i) for i in docids.split(',')]
if data.get('options'):
data.update(json.loads(data.pop('options')))
if data.get('context'):
# Ignore 'lang' here, because the context in data is the one
# from the webclient *but* if the user explicitely wants to
# change the lang, this mechanism overwrites it.
data['context'] = json.loads(data['context'])
if data['context'].get('lang'):
del data['context']['lang']
context.update(data['context'])
context['report_name'] = reportname

xlsx = report.with_context(context).render_xlsx(
docids, data=data
)[0]
report_file = context.get('report_file')
if not report_file:
active_model = context.get('active_model', 'export')
report_file = active_model.replace('.', '_')
xlsxhttpheaders = [
('Content-Type', 'application/vnd.openxmlformats-'
'officedocument.spreadsheetml.sheet'),
('Content-Length', len(xlsx)),
(
'Content-Disposition',
content_disposition(report_file + '.xlsx')
)
]
return request.make_response(xlsx, headers=xlsxhttpheaders)
return super(ReportController, self).report_routes(
reportname, docids, converter, **data)
103 changes: 103 additions & 0 deletions report_xlsx_helper/i18n/report_xlsx_helper.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * report_xlsx_helper
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.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
#: code:addons/report_xlsx_helper/models/ir_actions_report.py:19
#, python-format
msgid "%s model was not found"
msgstr ""

#. module: report_xlsx_helper
#: code:addons/report_xlsx_helper/report/report_xlsx_abstract.py:510
#, python-format
msgid "%s, _write_line : programming error detected while processing col_specs_section %s, column %s"
msgstr ""

#. module: report_xlsx_helper
#: code:addons/report_xlsx_helper/report/report_xlsx_abstract.py:516
#, python-format
msgid ", cellvalue %s"
msgstr ""

#. module: report_xlsx_helper
#: model:ir.model.fields,field_description:report_xlsx_helper.field_report_report_xlsx_helper_test_partner_xlsx_display_name
msgid "Display Name"
msgstr ""

#. module: report_xlsx_helper
#: model:ir.model.fields,field_description:report_xlsx_helper.field_report_report_xlsx_helper_test_partner_xlsx_id
msgid "ID"
msgstr ""

#. module: report_xlsx_helper
#: model:ir.model.fields,field_description:report_xlsx_helper.field_report_report_xlsx_helper_test_partner_xlsx___last_update
msgid "Last Modified on"
msgstr ""

#. module: report_xlsx_helper
#: code:addons/report_xlsx_helper/report/report_xlsx_abstract.py:42
#, python-format
msgid "Programming Error:\n"
"\n"
"Excel Sheet name '%s' contains unsupported special characters: '%s'."
msgstr ""

#. module: report_xlsx_helper
#: code:addons/report_xlsx_helper/report/report_xlsx_abstract.py:36
#, python-format
msgid "Programming Error:\n"
"\n"
"Excel Sheet name '%s' should not exceed %s characters."
msgstr ""

#. module: report_xlsx_helper
#: code:addons/report_xlsx_helper/report/report_xlsx_abstract.py:438
#, python-format
msgid "Programming Error:\n"
"\n"
"The '%s' column is not defined in the worksheet column specifications."
msgstr ""

#. module: report_xlsx_helper
#: code:addons/report_xlsx_helper/report/report_xlsx_abstract.py:479
#, python-format
msgid "Programming Error:\n"
"\n"
"The '%s' column is not defined the worksheet column specifications."
msgstr ""

#. module: report_xlsx_helper
#: code:addons/report_xlsx_helper/report/report_xlsx_abstract.py:452
#, python-format
msgid "Programming Error:\n"
"\n"
"The 'title' parameter is mandatory when calling the '_write_ws_title' method."
msgstr ""

#. module: report_xlsx_helper
#: model:ir.model,name:report_xlsx_helper.model_ir_actions_report
msgid "ir.actions.report"
msgstr ""

#. module: report_xlsx_helper
#: model:ir.model,name:report_xlsx_helper.model_report_report_xlsx_abstract
msgid "report.report_xlsx.abstract"
msgstr ""

#. module: report_xlsx_helper
#: model:ir.model,name:report_xlsx_helper.model_report_report_xlsx_helper_test_partner_xlsx
msgid "report.report_xlsx_helper.test_partner_xlsx"
msgstr ""

1 change: 1 addition & 0 deletions report_xlsx_helper/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import ir_actions_report
21 changes: 21 additions & 0 deletions report_xlsx_helper/models/ir_actions_report.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Copyright 2009-2018 Noviat.
# License AGPL-3.0 or later (https://www.gnuorg/licenses/agpl.html).

from odoo import api, models, _
from odoo.exceptions import UserError


class IrActionsReport(models.Model):
_inherit = 'ir.actions.report'

@api.model
def render_xlsx(self, docids, data):
if not self and self.env.context.get('report_name'):
report_model_name = 'report.{}'.format(
self.env.context['report_name'])
report_model = self.env.get(report_model_name)
if report_model is None:
raise UserError(
_('%s model was not found' % report_model_name))
return report_model.create_xlsx_report(docids, data)
return super(IrActionsReport, self).render_xlsx(docids, data)
1 change: 1 addition & 0 deletions report_xlsx_helper/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* Luc De Meyer <luc.demeyer@noviat.com>
1 change: 1 addition & 0 deletions report_xlsx_helper/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This module provides a set of tools to facilitate the creation of excel reports with format xlsx.
1 change: 1 addition & 0 deletions report_xlsx_helper/readme/INSTALL.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This module requires report_xlsx version 11.0.1.0.3 or higher.
32 changes: 32 additions & 0 deletions report_xlsx_helper/readme/USAGE.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
In order to create an Excel report you can define a report of type 'xlsx' in a static or dynamic way:

* Static syntax: cf. ``account_move_line_report_xls`` for an example.
* Dynamic syntax: cf. ``report_xlsx_helper_demo`` for an example

The ``AbstractReportXlsx`` class contains a number of attributes and methods to
facilitate the creation excel reports in Odoo.

* Cell types

string, number, boolean, datetime.

* Cell formats

The predefined cell formats result in a consistent
look and feel of the Odoo Excel reports.

* Cell formulas

Cell formulas can be easily added with the help of the ``_rowcol_to_cell()`` method.

* Excel templates

It is possible to define Excel templates which can be adapted
by 'inherited' modules.
Download the ``account_move_line_report_xls`` module
from http://apps.odoo.com as example.

* Excel with multiple sheets

Download the ``account_asset_management_xls`` module
from http://apps.odoo.com as example.
2 changes: 2 additions & 0 deletions report_xlsx_helper/report/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import report_xlsx_abstract
from . import test_partner_report_xlsx
Loading