main.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # -*- coding: utf-8 -*-
  2. from openerp import http
  3. from openerp.http import request
  4. from openerp.report import render_report
  5. from werkzeug.wrappers import Response
  6. from werkzeug.datastructures import Headers
  7. from gzip import GzipFile
  8. from StringIO import StringIO as IO
  9. import json
  10. import logging
  11. import base64
  12. LOGGER = logging.getLogger(__name__)
  13. GZIP_COMPRESSION_LEVEL = 9
  14. class PrintEngineController(http.Controller):
  15. '''
  16. '''
  17. def make_info_log(self, log):
  18. LOGGER.info('[INFO] {}'.format(log))
  19. '''
  20. Make GZIP to JSON response
  21. '''
  22. def make_gzip_response(self, data=None, status=200):
  23. gzip_buffer = IO()
  24. with GzipFile(mode='wb', compresslevel=GZIP_COMPRESSION_LEVEL, fileobj=gzip_buffer) as gzip_file:
  25. gzip_file.write(json.dumps(data))
  26. contents = gzip_buffer.getvalue()
  27. gzip_buffer.close()
  28. headers = Headers()
  29. headers.add('Content-Encoding', 'gzip')
  30. headers.add('Vary', 'Accept-Encoding')
  31. headers.add('Content-Length', len(contents))
  32. return Response(contents, status=status, headers=headers, content_type='application/json')
  33. '''
  34. '''
  35. @http.route('/print_engine/update_printers', auth='user', type='json', methods=['POST'], cors='*')
  36. def printers_update(self, **kw):
  37. import pdb; pdb.set_trace()
  38. return True
  39. '''
  40. '''
  41. @http.route('/print_engine/socket_config', auth='user', type='json')
  42. def socket_config(self, **kw):
  43. settings_obj = request.env['print.engine.settings']
  44. settings = settings_obj.search([])
  45. return {
  46. 'host': settings.host or None,
  47. 'port': settings.port or None,
  48. 'path': settings.path or None
  49. }
  50. '''
  51. '''
  52. @http.route('/print_engine/get_pdf', auth='user', type='json')
  53. def get_pdf(self, **kw):
  54. ctx = request.context
  55. ir_action = request.env['ir.actions.report.xml'].browse(ctx.get('params').get('action'))
  56. res_ids = request.env[ctx.get('active_model')].browse(ctx.get('active_ids'))
  57. if ir_action.report_type in ['qweb-html', 'qweb-pdf']:
  58. result, format = request.env['report'].get_pdf(res_ids, ir_action.report_name), 'pdf'
  59. else:
  60. # TODO: mejorar el renderización de reportes rml de la api v7 a v8
  61. result, format = render_report(request._cr, request.uid, [res_ids.id], ir_action.report_name, {'model': ctx.get('active_model')}, ctx)
  62. encoded_result = base64.b64encode(result)
  63. return {
  64. 'data': 'data:application/%s;base64,%s' % (format, encoded_result)
  65. }