Skip to content

Commit

Permalink
Merge 2d5d780 into de92678
Browse files Browse the repository at this point in the history
  • Loading branch information
hbrunn committed Aug 31, 2015
2 parents de92678 + 2d5d780 commit 7559fbc
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 8 deletions.
11 changes: 4 additions & 7 deletions report_custom_filename/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,7 @@ This addon allows for custom filenames for reports.
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.

Known issues / Roadmap
======================

* Currently, only old-style reports (ir.actions.report.xml) are supported, it should be simple to add support for qweb reports.

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.

Bug Tracker
===========
Expand All @@ -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
`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
=======
Expand Down
1 change: 1 addition & 0 deletions report_custom_filename/controllers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@
#
##############################################################################
from . import reports
from . import report_controller
68 changes: 68 additions & 0 deletions report_custom_filename/controllers/report_controller.py
Original file line number Diff line number Diff line change
@@ -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
4 changes: 3 additions & 1 deletion report_custom_filename/model/ir_actions_report_xml.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,6 @@ class IrActionsReportXml(models.Model):
'the objects for which the report is being generated.\n'
'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`, '
'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')

0 comments on commit 7559fbc

Please sign in to comment.