From b0f4e3c4d29a8d564ee332e3febd7797de1a8c91 Mon Sep 17 00:00:00 2001 From: Thibault Francois Date: Wed, 22 Feb 2017 23:25:46 +0100 Subject: [PATCH] =?UTF-8?q?[TASK]=20Modifier=20les=20noms=20des=20PDF=20g?= =?UTF-8?q?=C3=A9n=C3=A9r=C3=A9s=20par=20"action=20imprimer"=20(bons=20de?= =?UTF-8?q?=20commande,=20factures)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- beesdoo_base/__init__.py | 3 +- beesdoo_base/controllers/__init__.py | 1 + beesdoo_base/controllers/report.py | 73 ++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 beesdoo_base/controllers/__init__.py create mode 100644 beesdoo_base/controllers/report.py diff --git a/beesdoo_base/__init__.py b/beesdoo_base/__init__.py index c9a8b24..fe524ee 100644 --- a/beesdoo_base/__init__.py +++ b/beesdoo_base/__init__.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- import models import wizard -import tools \ No newline at end of file +import tools +import controllers \ No newline at end of file diff --git a/beesdoo_base/controllers/__init__.py b/beesdoo_base/controllers/__init__.py new file mode 100644 index 0000000..097e4d2 --- /dev/null +++ b/beesdoo_base/controllers/__init__.py @@ -0,0 +1 @@ +import report \ No newline at end of file diff --git a/beesdoo_base/controllers/report.py b/beesdoo_base/controllers/report.py new file mode 100644 index 0000000..94f9f94 --- /dev/null +++ b/beesdoo_base/controllers/report.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from openerp.addons.web.http import Controller, route, request +from openerp.addons.web.controllers.main import _serialize_exception, content_disposition +from openerp.tools import html_escape + +import json +import time +from werkzeug import url_decode +from werkzeug.test import Client +from werkzeug.wrappers import BaseResponse +from werkzeug.datastructures import Headers + +from openerp.addons.report.controllers.main import ReportController +from openerp.tools.safe_eval import safe_eval + + +class ReportCustom(ReportController): + + @route(['/report/download'], type='http', auth="user") + def report_download(self, data, token): + """This function is used by 'qwebactionmanager.js' in order to trigger the download of + a pdf/controller report. + + :param data: a javascript array JSON.stringified containg report internal url ([0]) and + type [1] + :returns: Response with a filetoken cookie and an attachment header + """ + requestcontent = json.loads(data) + url, type = requestcontent[0], requestcontent[1] + try: + if type == 'qweb-pdf': + reportname = url.split('/report/pdf/')[1].split('?')[0] + + docids = None + if '/' in reportname: + reportname, docids = reportname.split('/') + + if docids: + # Generic report: + response = self.report_routes(reportname, docids=docids, converter='pdf') + else: + # Particular report: + data = url_decode(url.split('?')[1]).items() # decoding the args represented in JSON + response = self.report_routes(reportname, converter='pdf', **dict(data)) + + cr, uid = request.cr, request.uid + report = request.registry['report']._get_report_from_name(cr, uid, reportname) + filename = "%s-test.%s" % (report.name, "pdf") + if docids: + ids = [int(x) for x in docids.split(",")] + obj = request.env[report.model].browse(ids) + if report.attachment and not len(obj) > 1: + filename = safe_eval(report.attachment, {'object': obj, 'time': time}) + response.headers.add('Content-Disposition', content_disposition(filename)) + response.set_cookie('fileToken', token) + return response + elif type =='controller': + reqheaders = Headers(request.httprequest.headers) + response = Client(request.httprequest.app, BaseResponse).get(url, headers=reqheaders, follow_redirects=True) + response.set_cookie('fileToken', token) + return response + else: + return + except Exception, e: + se = _serialize_exception(e) + error = { + 'code': 200, + 'message': "Odoo Server Error", + 'data': se + } + return request.make_response(html_escape(json.dumps(error))) \ No newline at end of file