From 78e09640cec85f8c32ab1a39c9f5a20b89908c11 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 19 Dec 2014 13:19:55 +0100 Subject: [PATCH] [ADD] report_custom_filename --- report_custom_filename/__init__.py | 22 ++++++++ report_custom_filename/__openerp__.py | 53 ++++++++++++++++++ .../controllers/__init__.py | 21 +++++++ report_custom_filename/controllers/reports.py | 53 ++++++++++++++++++ .../i18n/report_custom_filename.pot | 34 +++++++++++ report_custom_filename/model/__init__.py | 21 +++++++ .../model/ir_actions_report_xml.py | 35 ++++++++++++ .../static/description/icon.png | Bin 0 -> 1817 bytes .../view/ir_actions_report_xml.xml | 14 +++++ 9 files changed, 253 insertions(+) create mode 100644 report_custom_filename/__init__.py create mode 100644 report_custom_filename/__openerp__.py create mode 100644 report_custom_filename/controllers/__init__.py create mode 100644 report_custom_filename/controllers/reports.py create mode 100644 report_custom_filename/i18n/report_custom_filename.pot create mode 100644 report_custom_filename/model/__init__.py create mode 100644 report_custom_filename/model/ir_actions_report_xml.py create mode 100644 report_custom_filename/static/description/icon.png create mode 100644 report_custom_filename/view/ir_actions_report_xml.xml diff --git a/report_custom_filename/__init__.py b/report_custom_filename/__init__.py new file mode 100644 index 00000000..cba0a4dc --- /dev/null +++ b/report_custom_filename/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Therp BV (). +# +# 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 . +# +############################################################################## +from . import controllers +from . import model diff --git a/report_custom_filename/__openerp__.py b/report_custom_filename/__openerp__.py new file mode 100644 index 00000000..a9808390 --- /dev/null +++ b/report_custom_filename/__openerp__.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Therp BV (). +# +# 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 . +# +############################################################################## +{ + "name": "Custom report filenames", + "summary": "Configure the filename to use when downloading a report", + "version": "1.0", + "author": "Therp BV", + "license": "AGPL-3", + "complexity": "normal", + "description": """ +This addon allows for custom filenames for reports. Currently, only old-style +reports (ir.actions.report.xml) are supported, it should be simple to add +support for qweb reports. + +Acknowledgements +================ +Icon courtesy of http://www.picol.org/ (download_settings.svg) + """, + "category": "Reporting", + "depends": [ + 'web', + 'email_template', + ], + "data": [ + "view/ir_actions_report_xml.xml", + ], + "test": [ + ], + "auto_install": False, + "installable": True, + "application": False, + "external_dependencies": { + 'python': ['jinja2'], + }, +} diff --git a/report_custom_filename/controllers/__init__.py b/report_custom_filename/controllers/__init__.py new file mode 100644 index 00000000..329fca16 --- /dev/null +++ b/report_custom_filename/controllers/__init__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Therp BV (). +# +# 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 . +# +############################################################################## +from . import reports diff --git a/report_custom_filename/controllers/reports.py b/report_custom_filename/controllers/reports.py new file mode 100644 index 00000000..1ff58ed0 --- /dev/null +++ b/report_custom_filename/controllers/reports.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Therp BV (). +# +# 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 . +# +############################################################################## +import simplejson +from openerp import http +from openerp.addons.web.controllers import main +from openerp.addons.email_template import email_template + + +class Reports(main.Reports): + @http.route('/web/report', type='http', auth="user") + @main.serialize_exception + def index(self, action, token): + result = super(Reports, self).index(action, token) + action = simplejson.loads(action) + context = dict(http.request.context) + context.update(action["context"]) + report_xml = http.request.session.model('ir.actions.report.xml') + report_ids = report_xml.search( + [('report_name', '=', action['report_name'])], + 0, False, False, context) + for report in report_xml.browse(report_ids): + if not report.download_filename: + continue + objects = http.request.session.model(context['active_model'])\ + .browse(context['active_ids']) + generated_filename = email_template.mako_template_env\ + .from_string(report.download_filename)\ + .render({ + 'objects': objects, + 'o': objects[0], + 'object': objects[0], + }) + result.headers['Content-Disposition'] = main.content_disposition( + generated_filename) + return result diff --git a/report_custom_filename/i18n/report_custom_filename.pot b/report_custom_filename/i18n/report_custom_filename.pot new file mode 100644 index 00000000..fa2ec82c --- /dev/null +++ b/report_custom_filename/i18n/report_custom_filename.pot @@ -0,0 +1,34 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * report_custom_filename +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-12-19 12:17+0000\n" +"PO-Revision-Date: 2014-12-19 12:17+0000\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_custom_filename +#: field:ir.actions.report.xml,download_filename:0 +msgid "Download filename" +msgstr "" + +#. module: report_custom_filename +#: help:ir.actions.report.xml,download_filename:0 +msgid "Fill in this field to have a custom file name when downloading this report. This string is evaluated as a jinja2 expression.\n" +"You can use python expressions, `objects` is a browse record list of 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" +msgstr "" + +#. module: report_custom_filename +#: model:ir.model,name:report_custom_filename.model_ir_actions_report_xml +msgid "ir.actions.report.xml" +msgstr "" + diff --git a/report_custom_filename/model/__init__.py b/report_custom_filename/model/__init__.py new file mode 100644 index 00000000..b7da7af1 --- /dev/null +++ b/report_custom_filename/model/__init__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Therp BV (). +# +# 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 . +# +############################################################################## +from . import ir_actions_report_xml diff --git a/report_custom_filename/model/ir_actions_report_xml.py b/report_custom_filename/model/ir_actions_report_xml.py new file mode 100644 index 00000000..27cd638c --- /dev/null +++ b/report_custom_filename/model/ir_actions_report_xml.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# This module copyright (C) 2014 Therp BV (). +# +# 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 . +# +############################################################################## +from openerp import models, fields + + +class IrActionsReportXml(models.Model): + _inherit = 'ir.actions.report.xml' + + download_filename = fields.Char( + 'Download filename', + help='Fill in this field to have a custom file name when downloading ' + 'this report. This string is evaluated as a jinja2 expression.\n' + 'You can use python expressions, `objects` is a browse record list of ' + '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') diff --git a/report_custom_filename/static/description/icon.png b/report_custom_filename/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..df9ef01c1a78075d2df5de33a105ecf917d5a580 GIT binary patch literal 1817 zcmai#X*kpi8^-^$G{!O*>!`?UDN2$hOM@_DhM~qe6spVEmzg<@tXanrBAHUi5^6?< zW2vD<(O8akZUC`ya$&j??24hLf3tTxGDP5)o>fSOUKdwL+pq6V>!& zpjeUyJe`Y|mP@#+ss&cJ`u`95peH)&M8BnYV+`YxF$wjz)IXAi2X;YsAR-ANU=52f zP#MS=Gy<8YA1AyiJP-#9hZH0nB;~5;Vg-?+Pa!K{oI1Sg2MjHB`$5^p@1}Yl?AUPgRmK~K;a%4SXEKx1kcH>N-XY}*iiDJU!TmsRHQ<5vs$_<`m;T> z%k3^Z79>QGPSH>%rPHgAxI~hn9w-mwFnrM+^^+CL6bRTph^~)LC|nTC0=)chz-Y{d zNJW@>s`kpOaIXXSf+6sqK=tj~)L!t5l)_7XVvO}bMLkX1J^rqAlcOxH9&oxt%2MOu za)HZ-!%TrI&K2j}>BllC8lec!KjQg^8Y;Rv+hS|{z0U(pdK$&BuTY(cp_+yvI@+B( z9?Q|RoF-9BYlrVmBS|DS;HEH#SUv(`*o%~_+(6Ej)V-CX$JC4%QS_#U&(F++18lG` z;QJXZ?}Y3WbRUrGtAyvY*7Y`bPEIS>yQ-R^w#)}$p92X^gy#~Ul%-JAQfKff_q9h) z8@FHRwVY!EanB;ZnTu!oeh4}{j=Lb=H9>(@gX8qMk%Y6?tjx+2LL=^fI~MeFN=`3E zHZpIfFwQ>_=+cm1|KRt67`S01|DV4U$tg4J> zKZ?w%!+5lxhP7if>OtaNP1X4Msj%yK{AD!dXwenH)$e^FiQUi)>D=OME-rEmQe^j4$<^xGe1S zR}t3VcY>iZQ>F{CMcSg3#u8f;d+!V7254T0%8gLaE;lY96cL2*KD~TZgN!aN9cJ_` z1wz*nW<6uj8^?KM*_%u=5~JfvL_4ETegE+4bJenFbYDl5K#F(1FTFM0xAaR_e_1W)R zIWOZ~rwUYj1dSB-I#J-CC*01-zFx&KoB($)UbX>{$ySFgK3P@q4|?=pPSY+qF^ay; z2F2;I8GM$cRu7o;9q7V}e6iu?kr(?@)x~x+tczU_)+p4APr_Ic-04{Q=-h9nh>kcv zAEeR%o}k5&57Xd|(7qk;8U$uUQnBI9iLPVE?p>jD`M6~cW-mr%!30dl!7+MWmu!0! z>G5ooI8CaV@RohibTzZp_`CGxoi;6_iGBn3u-iJE22{QLP`!Gb1M-W$;-+b9zE0k2 z-K$CN?e#`&c0=t+>8S1_iDn(6GA-FPOibtreh6wSu=q}NSY`N#O(0Lk*yj(v~f6 z; + + + + ir.actions.report.xml + + + + + + + + +