# -*- coding: utf-8 -*- from openerp import http from openerp.http import request from openerp.report import render_report from werkzeug.wrappers import Response from werkzeug.datastructures import Headers from gzip import GzipFile from StringIO import StringIO as IO import json import logging import base64 LOGGER = logging.getLogger(__name__) GZIP_COMPRESSION_LEVEL = 9 class PrintEngineController(http.Controller): ''' ''' def make_info_log(self, log): LOGGER.info('[INFO] {}'.format(log)) ''' Make GZIP to JSON response ''' def make_gzip_response(self, data=None, status=200): gzip_buffer = IO() with GzipFile(mode='wb', compresslevel=GZIP_COMPRESSION_LEVEL, fileobj=gzip_buffer) as gzip_file: gzip_file.write(json.dumps(data)) contents = gzip_buffer.getvalue() gzip_buffer.close() headers = Headers() headers.add('Content-Encoding', 'gzip') headers.add('Vary', 'Accept-Encoding') headers.add('Content-Length', len(contents)) return Response(contents, status=status, headers=headers, content_type='application/json') ''' ''' @http.route('/print_engine/update_printers', auth='user', type='json', methods=['POST'], cors='*') def printers_update(self, **kw): import pdb; pdb.set_trace() return True ''' ''' @http.route('/print_engine/socket_config', auth='user', type='json') def socket_config(self, **kw): settings_obj = request.env['print.engine.settings'] settings = settings_obj.search([]) return { 'host': settings.host or None, 'port': settings.port or None, 'path': settings.path or None } ''' ''' @http.route('/print_engine/get_pdf', auth='user', type='json') def get_pdf(self, **kw): ctx = request.context ir_action = request.env['ir.actions.report.xml'].browse(ctx.get('params').get('action')) res_ids = request.env[ctx.get('active_model')].browse(ctx.get('active_ids')) if ir_action.report_type in ['qweb-html', 'qweb-pdf']: result, format = request.env['report'].get_pdf(res_ids, ir_action.report_name), 'pdf' else: # TODO: mejorar el renderización de reportes rml de la api v7 a v8 result, format = render_report(request._cr, request.uid, [res_ids.id], ir_action.report_name, {'model': ctx.get('active_model')}, ctx) encoded_result = base64.b64encode(result) return { 'data': 'data:application/%s;base64,%s' % (format, encoded_result) }