From 52522bf0f91d65fda2b363643dd99ad74b75f43d Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Thu, 20 Mar 2014 15:06:09 +0100 Subject: [PATCH] [FIX] get_pdf can be called on is own (no need to call get_html before on particular controller-report) and make the multiple ids work bzr revid: sle@openerp.com-20140320140609-7ozly6f55sgeow7k --- addons/report/controllers/main.py | 16 +++++++++------- addons/report/models/report.py | 8 ++++---- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/addons/report/controllers/main.py b/addons/report/controllers/main.py index 4925374cba2..e962bdf12e7 100644 --- a/addons/report/controllers/main.py +++ b/addons/report/controllers/main.py @@ -35,11 +35,13 @@ class ReportController(Controller): @route(['/report//'], type='http', auth='user', website=True, multilang=True) def report_html(self, reportname, docids): - return request.registry['report'].get_html(request.cr, request.uid, docids, reportname, context=request.context) + cr, uid, context = request.cr, request.uid, request.context + return request.registry['report'].get_html(cr, uid, docids, reportname, context=context) @route(['/report/pdf/report//'], type='http', auth="user", website=True) def report_pdf(self, reportname, docids): - pdf = request.registry['report'].get_pdf(request.cr, request.uid, docids, reportname) + cr, uid, context = request.cr, request.uid, request.context + pdf = request.registry['report'].get_pdf(cr, uid, docids, reportname, context=context) pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf))] return request.make_response(pdf, headers=pdfhttpheaders) @@ -49,17 +51,17 @@ class ReportController(Controller): @route(['/report/'], type='http', auth='user', website=True, multilang=True) def report_html_particular(self, reportname, **data): + cr, uid, context = request.cr, request.uid, request.context report_obj = request.registry['report'] - data = report_obj.eval_params(data) - return report_obj.get_html(request.cr, request.uid, [], reportname, data=data, context=request.context) + data = report_obj.eval_params(data) # Sanitizing + return report_obj.get_html(cr, uid, [], reportname, data=data, context=context) @route(['/report/pdf/report/'], type='http', auth='user', website=True, multilang=True) def report_pdf_particular(self, reportname, **data): cr, uid, context = request.cr, request.uid, request.context report_obj = request.registry['report'] - data = report_obj.eval_params(data) - html = report_obj.get_html(cr, uid, [], reportname, data=data, context=context) - pdf = report_obj.get_pdf(cr, uid, [], reportname, html=html, context=context) + data = report_obj.eval_params(data) # Sanitizing + pdf = report_obj.get_pdf(cr, uid, [], reportname, data=data, context=context) pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf))] return request.make_response(pdf, headers=pdfhttpheaders) diff --git a/addons/report/models/report.py b/addons/report/models/report.py index 5c0dc8c7703..174ec71fab2 100644 --- a/addons/report/models/report.py +++ b/addons/report/models/report.py @@ -236,7 +236,7 @@ class Report(osv.Model): except: pass - if isinstance(ids, str): + if isinstance(ids, (str, unicode)): ids = [int(i) for i in ids.split(',')] if isinstance(ids, list): ids = list(set(ids)) @@ -254,7 +254,7 @@ class Report(osv.Model): } return self.render(cr, uid, [], report.report_name, docargs, context=context) - def get_pdf(self, cr, uid, ids, report_name, html=None, context=None): + def get_pdf(self, cr, uid, ids, report_name, html=None, data=None, context=None): """This method generates and returns pdf version of generic report. """ if context is None: @@ -268,7 +268,7 @@ class Report(osv.Model): ids = [ids] if html is None: - html = self.get_html(cr, uid, ids, report_name, context=context) + html = self.get_html(cr, uid, ids, report_name, data=data, context=context) html = html.decode('utf-8') @@ -644,7 +644,7 @@ class Report(osv.Model): document.close() merged = cStringIO.StringIO() writer.write(merged) - merged.flush() + merged.seek(0) content = merged.read() merged.close() return content