summaryrefslogtreecommitdiff
path: root/addons/report/controllers/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/report/controllers/main.py')
-rw-r--r--addons/report/controllers/main.py126
1 files changed, 0 insertions, 126 deletions
diff --git a/addons/report/controllers/main.py b/addons/report/controllers/main.py
deleted file mode 100644
index 43771252ccb..00000000000
--- a/addons/report/controllers/main.py
+++ /dev/null
@@ -1,126 +0,0 @@
-# -*- coding: utf-8 -*-
-# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-import json
-import time
-from werkzeug import exceptions, url_decode
-from werkzeug.datastructures import Headers
-from werkzeug.test import Client
-from werkzeug.wrappers import BaseResponse
-
-from odoo.http import Controller, route, request
-from odoo.tools import html_escape
-from odoo.addons.web.controllers.main import _serialize_exception, content_disposition
-from odoo.tools.safe_eval import safe_eval
-
-
-class ReportController(Controller):
-
- #------------------------------------------------------
- # Report controllers
- #------------------------------------------------------
- @route([
- '/report/<converter>/<reportname>',
- '/report/<converter>/<reportname>/<docids>',
- ], type='http', auth='user', website=True)
- def report_routes(self, reportname, docids=None, converter=None, **data):
- report_obj = request.env['report']
- context = dict(request.env.context)
-
- if docids:
- docids = [int(i) for i in docids.split(',')]
- if data.get('options'):
- data.update(json.loads(data.pop('options')))
- if data.get('context'):
- # Ignore 'lang' here, because the context in data is the one from the webclient *but* if
- # the user explicitely wants to change the lang, this mechanism overwrites it.
- data['context'] = json.loads(data['context'])
- if data['context'].get('lang'):
- del data['context']['lang']
- context.update(data['context'])
- if converter == 'html':
- html = report_obj.with_context(context).get_html(docids, reportname, data=data)
- return request.make_response(html)
- elif converter == 'pdf':
- pdf = report_obj.with_context(context).get_pdf(docids, reportname, data=data)
- pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf))]
- return request.make_response(pdf, headers=pdfhttpheaders)
- else:
- raise exceptions.HTTPException(description='Converter %s not implemented.' % converter)
-
- #------------------------------------------------------
- # Misc. route utils
- #------------------------------------------------------
- @route(['/report/barcode', '/report/barcode/<type>/<path:value>'], type='http', auth="public")
- def report_barcode(self, type, value, width=600, height=100, humanreadable=0):
- """Contoller able to render barcode images thanks to reportlab.
- Samples:
- <img t-att-src="'/report/barcode/QR/%s' % o.name"/>
- <img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' %
- ('QR', o.name, 200, 200)"/>
-
- :param type: Accepted types: 'Codabar', 'Code11', 'Code128', 'EAN13', 'EAN8', 'Extended39',
- 'Extended93', 'FIM', 'I2of5', 'MSI', 'POSTNET', 'QR', 'Standard39', 'Standard93',
- 'UPCA', 'USPS_4State'
- :param humanreadable: Accepted values: 0 (default) or 1. 1 will insert the readable value
- at the bottom of the output image
- """
- try:
- barcode = request.env['report'].barcode(type, value, width=width, height=height, humanreadable=humanreadable)
- except (ValueError, AttributeError):
- raise exceptions.HTTPException(description='Cannot convert into barcode.')
-
- return request.make_response(barcode, headers=[('Content-Type', 'image/png')])
-
- @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))
-
- report = request.env['report']._get_report_from_name(reportname)
- filename = "%s.%s" % (report.name, "pdf")
- if docids:
- ids = [int(x) for x in docids.split(",")]
- obj = request.env[report.model].browse(ids)
- if report.print_report_name and not len(obj) > 1:
- report_name = safe_eval(report.print_report_name, {'object': obj, 'time': time})
- filename = "%s.%s" % (report_name, "pdf")
- response.headers.add('Content-Disposition', content_disposition(filename))
- response.set_cookie('fileToken', token)
- return response
- else:
- return
- except Exception as e:
- se = _serialize_exception(e)
- error = {
- 'code': 200,
- 'message': "Odoo Server Error",
- 'data': se
- }
- return request.make_response(html_escape(json.dumps(error)))
-
- @route(['/report/check_wkhtmltopdf'], type='json', auth="user")
- def check_wkhtmltopdf(self):
- return request.env['report']._check_wkhtmltopdf()