Luc De Meyer
6 years ago
16 changed files with 140 additions and 47 deletions
-
11report_xlsx_helper/README.rst
-
3report_xlsx_helper/__init__.py
-
4report_xlsx_helper/__manifest__.py
-
1report_xlsx_helper/controllers/__init__.py
-
54report_xlsx_helper/controllers/main.py
-
1report_xlsx_helper/models/__init__.py
-
21report_xlsx_helper/models/ir_actions_report.py
-
1report_xlsx_helper/readme/CONTRIBUTORS.rst
-
1report_xlsx_helper/readme/DESCRIPTION.rst
-
1report_xlsx_helper/readme/INSTALL.rst
-
32report_xlsx_helper/readme/USAGE.rst
-
4report_xlsx_helper/report/__init__.py
-
20report_xlsx_helper/report/report_xlsx_abstract.py
-
18report_xlsx_helper/report/test_partner_report_xlsx.py
-
2report_xlsx_helper/tests/__init__.py
-
13report_xlsx_helper/tests/test_report_xlsx_helper.py
@ -1,2 +1,3 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from . import controllers |
|||
from . import models |
|||
from . import report |
@ -0,0 +1 @@ |
|||
from . import main |
@ -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) |
@ -0,0 +1 @@ |
|||
from . import ir_actions_report |
@ -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) |
@ -0,0 +1 @@ |
|||
* Luc De Meyer <luc.demeyer@noviat.com> |
@ -0,0 +1 @@ |
|||
This module provides a set of tools to facilitate the creation of excel reports with format xlsx. |
@ -0,0 +1 @@ |
|||
This module requires report_xlsx version 11.0.1.0.3 or higher. |
@ -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. |
@ -1,2 +1,2 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from . import abstract_report_xlsx |
|||
from . import report_xlsx_abstract |
|||
from . import test_partner_report_xlsx |
@ -1,3 +1 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from . import test_partner_report_xlsx |
|||
from . import test_report_xlsx_helper |
Write
Preview
Loading…
Cancel
Save
Reference in new issue