Merge pull request #22 from hbrunn/8.0-report_custom_filename
[ADD] support qweb reportspull/25/head
commit
daac236789
|
@ -6,13 +6,7 @@ This addon allows for custom filenames for reports.
|
||||||
Configuration
|
Configuration
|
||||||
=============
|
=============
|
||||||
|
|
||||||
To configure this module, open the report whose filename you want to change and fill in the `Download filename` field. This field is evaluated as jinja2 template with `objects` being a list of browse records of the records to print, and `o` the first record.
|
To configure this module, open the report whose filename you want to change and fill in the `Download filename` field. This field is evaluated as jinja2 template with `objects` being a list of browse records of the records to print, and `o` the first record. If your model contains a name field, you might write something like `${o.name}_report.pdf` as filename.
|
||||||
|
|
||||||
Known issues / Roadmap
|
|
||||||
======================
|
|
||||||
|
|
||||||
* Currently, only old-style reports (ir.actions.report.xml) are supported, it should be simple to add support for qweb reports.
|
|
||||||
|
|
||||||
|
|
||||||
Bug Tracker
|
Bug Tracker
|
||||||
===========
|
===========
|
||||||
|
@ -22,6 +16,9 @@ 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
|
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_custom_filename%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
`here <https://github.com/OCA/reporting-engine/issues/new?body=module:%20report_custom_filename%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||||
|
|
||||||
|
.. 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
|
||||||
|
|
||||||
Credits
|
Credits
|
||||||
=======
|
=======
|
||||||
|
|
|
@ -19,3 +19,4 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
from . import reports
|
from . import reports
|
||||||
|
from . import report_controller
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# OpenERP, Open Source Management Solution
|
||||||
|
# This module copyright (C) 2015 Therp BV (<http://therp.nl>).
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
##############################################################################
|
||||||
|
from openerp import http
|
||||||
|
from openerp.addons.email_template import email_template
|
||||||
|
from openerp.addons.report.controllers.main import ReportController
|
||||||
|
from openerp.addons.web.controllers.main import content_disposition
|
||||||
|
|
||||||
|
|
||||||
|
class ReportController(ReportController):
|
||||||
|
@http.route([
|
||||||
|
'/report/<path:converter>/<reportname>',
|
||||||
|
'/report/<path:converter>/<reportname>/<docids>',
|
||||||
|
])
|
||||||
|
def report_routes(self, reportname, docids=None, converter=None, **data):
|
||||||
|
response = super(ReportController, self).report_routes(
|
||||||
|
reportname, docids=docids, converter=converter, **data)
|
||||||
|
if docids:
|
||||||
|
docids = [int(i) for i in docids.split(',')]
|
||||||
|
report_xml = http.request.session.model('ir.actions.report.xml')
|
||||||
|
report_ids = report_xml.search(
|
||||||
|
[('report_name', '=', reportname)])
|
||||||
|
for report in report_xml.browse(report_ids):
|
||||||
|
if not report.download_filename:
|
||||||
|
continue
|
||||||
|
objects = http.request.session.model(report.model)\
|
||||||
|
.browse(docids or [])
|
||||||
|
generated_filename = email_template.mako_template_env\
|
||||||
|
.from_string(report.download_filename)\
|
||||||
|
.render({
|
||||||
|
'objects': objects,
|
||||||
|
'o': objects[:1],
|
||||||
|
'object': objects[:1],
|
||||||
|
'ext': report.report_type.replace('qweb-', ''),
|
||||||
|
})
|
||||||
|
response.headers['Content-Disposition'] = content_disposition(
|
||||||
|
generated_filename)
|
||||||
|
return response
|
||||||
|
|
||||||
|
@http.route(['/report/download'])
|
||||||
|
def report_download(self, data, token):
|
||||||
|
response = super(ReportController, self).report_download(data, token)
|
||||||
|
# if we got another content disposition before, ditch the one added
|
||||||
|
# by super()
|
||||||
|
last_index = None
|
||||||
|
for i in range(len(response.headers) - 1, -1, -1):
|
||||||
|
if response.headers[i][0] == 'Content-Disposition':
|
||||||
|
if last_index:
|
||||||
|
response.headers.pop(last_index)
|
||||||
|
last_index = i
|
||||||
|
return response
|
|
@ -32,4 +32,6 @@ class IrActionsReportXml(models.Model):
|
||||||
'the objects for which the report is being generated.\n'
|
'the objects for which the report is being generated.\n'
|
||||||
'Check for this list\'s length to determine if it is a report being '
|
'Check for this list\'s length to determine if it is a report being '
|
||||||
'printed for multiple records or not. You also have access to `o`, '
|
'printed for multiple records or not. You also have access to `o`, '
|
||||||
'which is the first record in the list')
|
'which is the first record in the list.\n'
|
||||||
|
'For qweb reports, the variable `ext` gives you the requested format'
|
||||||
|
'\'s extension')
|
||||||
|
|
Loading…
Reference in New Issue