diff --git a/addons/report_webkit/__init__.py b/addons/report_webkit/__init__.py
index 6c9306f5721..74e8f583dd0 100644
--- a/addons/report_webkit/__init__.py
+++ b/addons/report_webkit/__init__.py
@@ -5,5 +5,5 @@
# Author : Nicolas Bessi (Camptocamp)
import models
-import wizard
import report
+import wizard
diff --git a/addons/report_webkit/__openerp__.py b/addons/report_webkit/__openerp__.py
index f13e521e348..a13ae6e4fde 100644
--- a/addons/report_webkit/__openerp__.py
+++ b/addons/report_webkit/__openerp__.py
@@ -54,20 +54,23 @@ TODO:
* Web client WYSIWYG
""",
'version': '0.9',
- 'depends': ['base','report'],
+ 'depends': ['base', 'report'],
'author': 'Camptocamp',
- 'category': 'Hidden', # i.e a technical module, not shown in Application install menu
+ 'category': 'Hidden', # i.e a technical module, not shown in Application install menu
'url': 'http://http://www.camptocamp.com/',
- 'data': [ 'security/ir.model.access.csv',
- 'data/report_webkit_data.xml',
- 'wizard/report_webkit_actions_views.xml',
- 'views/company_views.xml',
- 'views/header_views.xml',
- 'views/ir_report_views.xml',
+ 'data': [
+ 'security/ir.model.access.csv',
+ 'data/report_webkit_data.xml',
+ 'wizard/report_webkit_actions_views.xml',
+ 'views/company_views.xml',
+ 'views/header_views.xml',
+ 'views/ir_report_views.xml',
],
'demo': [
"report/webkit_report_demo.xml",
],
- 'installable': True,
+ 'test': [
+ "test/print.yml",
+ ],
'auto_install': False,
}
diff --git a/addons/report_webkit/data/report_webkit_data.xml b/addons/report_webkit/data/report_webkit_data.xml
index 8cfaecbec8c..34d24f7084c 100644
--- a/addons/report_webkit/data/report_webkit_data.xml
+++ b/addons/report_webkit/data/report_webkit_data.xml
@@ -1,5 +1,5 @@
-
-'%(
- width,
- height,
- type,
- str(img))
+ toreturn = '
' % (width, height, type, str(img))
return toreturn
-
-
+
def get_logo_by_name(self, name):
"""Return logo by name"""
- header_obj = self.pool.get('ir.header_img')
- header_img_id = header_obj.search(
- self.cursor,
- self.uid,
- [('name','=',name)]
- )
- if not header_img_id :
+ header_obj = self.env['ir.header_img']
+ header_img_id = header_obj.search([('name', '=', name)])
+ if not header_img_id:
return u''
if isinstance(header_img_id, list):
header_img_id = header_img_id[0]
head = header_obj.browse(self.cursor, self.uid, header_img_id)
return (head.img, head.type)
-
+
def embed_logo_by_name(self, name, width=0, height=0):
"""Return HTML embedded logo by name"""
img, type = self.get_logo_by_name(name)
return self.embed_image(type, img, width, height)
def embed_company_logo(self, width=0, height=0):
- cr, uid, context = self.cursor, self.uid, self.context
- my_user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ my_user = self.env.user
logo = my_user.company_id.logo_web
return self.embed_image("png", logo, width, height)
-
-
diff --git a/addons/report_webkit/models/webkit_report.py b/addons/report_webkit/models/webkit_report.py
index f8411c64cc6..72f26ed76c4 100644
--- a/addons/report_webkit/models/webkit_report.py
+++ b/addons/report_webkit/models/webkit_report.py
@@ -2,27 +2,23 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
# Copyright (c) 2010 Camptocamp SA (http://www.camptocamp.com)
-# Author : Nicolas Bessi (Camptocamp)
-# Contributor(s) : Florent Xicluna (Wingo SA)
+# Author: Nicolas Bessi (Camptocamp)
+# Contributor(s): Florent Xicluna (Wingo SA)
import subprocess
import os
import sys
-from openerp import report
import tempfile
-import time
import logging
from functools import partial
-from report_helper import WebKitHelper
-import openerp
-from openerp.modules.module import get_module_resource
-from openerp.report.report_sxw import *
-from openerp import SUPERUSER_ID
-from openerp import tools
-from openerp.tools.translate import _
-from urllib import urlencode, quote as quote
-from openerp.exceptions import UserError
+from odoo import api, tools, SUPERUSER_ID, _
+from odoo.modules.module import get_module_resource
+from odoo.report.report_sxw import *
+from urllib import urlencode, quote
+from odoo.exceptions import UserError
+
+from odoo.addons.report_webkit.models.report_helper import WebKitHelper
_logger = logging.getLogger(__name__)
@@ -73,12 +69,12 @@ def webkit_report_extender(report_name):
The given function will be called at the creation of the report. The following arguments
will be passed to it (in this order):
- - pool The model pool.
+ - env The model env.
- cr The cursor.
- uid The user id.
- localcontext The context given to the template engine to render the templates for the
current report. This is the context that should be modified.
- - context The OpenERP context.
+ - context The Odoo context.
"""
def fct1(fct):
lst = _extender_functions.get(report_name)
@@ -92,18 +88,16 @@ def webkit_report_extender(report_name):
class WebKitParser(report_sxw):
"""Custom class that use webkit to render HTML reports
- Code partially taken from report openoffice. Thanks guys :)
+ Code partially taken from report openoffice. Thanks guys:)
"""
- def __init__(self, name, table, rml=False, parser=rml_parse,
- header=True, store=False, register=True):
+ def __init__(self, name, table, rml=False, parser=rml_parse, header=True, store=False, register=True):
self.localcontext = {}
- report_sxw.__init__(self, name, table, rml, parser,
- header, store, register=register)
+ report_sxw.__init__(self, name, table, rml, parser, header, store, register=register)
- def get_lib(self, cursor, uid):
+ def get_lib(self, cr, uid):
"""Return the lib wkhtml path"""
- proxy = self.pool['ir.config_parameter']
- webkit_path = proxy.get_param(cursor, SUPERUSER_ID, 'webkit_path')
+ proxy = self.env['ir.config_parameter'].sudo()
+ webkit_path = proxy.get_param('webkit_path')
if not webkit_path:
try:
@@ -120,18 +114,17 @@ class WebKitParser(report_sxw):
return webkit_path
raise UserError(_('Wkhtmltopdf library path is not set') + ' ' +
- _('Please install executable on your system'
- ' (sudo apt-get install wkhtmltopdf) or download it from here:'
- ' http://code.google.com/p/wkhtmltopdf/downloads/list and set the'
- ' path in the ir.config_parameter with the webkit_path key.'
- 'Minimal version is 0.9.9'))
+ _('Please install executable on your system'
+ ' (sudo apt-get install wkhtmltopdf) or download it from here:'
+ ' http://code.google.com/p/wkhtmltopdf/downloads/list and set the'
+ ' path in the ir.config_parameter with the webkit_path key.'
+ 'Minimal version is 0.9.9'))
def generate_pdf(self, comm_path, report_xml, header, footer, html_list, webkit_header=False):
"""Call webkit in order to generate pdf"""
if not webkit_header:
webkit_header = report_xml.webkit_header
- fd, out_filename = tempfile.mkstemp(suffix=".pdf",
- prefix="webkit.tmp.")
+ fd, out_filename = tempfile.mkstemp(suffix=".pdf", prefix="webkit.tmp.")
file_to_del = [out_filename]
if comm_path:
command = [comm_path]
@@ -141,35 +134,32 @@ class WebKitParser(report_sxw):
command.append('--quiet')
# default to UTF-8 encoding. Use to override.
command.extend(['--encoding', 'utf-8'])
- if header :
- with tempfile.NamedTemporaryFile(suffix=".head.html",
- delete=False) as head_file:
+ if header:
+ with tempfile.NamedTemporaryFile(suffix=".head.html", delete=False) as head_file:
head_file.write(self._sanitize_html(header.encode('utf-8')))
file_to_del.append(head_file.name)
command.extend(['--header-html', head_file.name])
- if footer :
- with tempfile.NamedTemporaryFile(suffix=".foot.html",
- delete=False) as foot_file:
+ if footer:
+ with tempfile.NamedTemporaryFile(suffix=".foot.html", delete=False) as foot_file:
foot_file.write(self._sanitize_html(footer.encode('utf-8')))
file_to_del.append(foot_file.name)
command.extend(['--footer-html', foot_file.name])
- if webkit_header.margin_top :
+ if webkit_header.margin_top:
command.extend(['--margin-top', str(webkit_header.margin_top).replace(',', '.')])
- if webkit_header.margin_bottom :
+ if webkit_header.margin_bottom:
command.extend(['--margin-bottom', str(webkit_header.margin_bottom).replace(',', '.')])
- if webkit_header.margin_left :
+ if webkit_header.margin_left:
command.extend(['--margin-left', str(webkit_header.margin_left).replace(',', '.')])
- if webkit_header.margin_right :
+ if webkit_header.margin_right:
command.extend(['--margin-right', str(webkit_header.margin_right).replace(',', '.')])
- if webkit_header.orientation :
+ if webkit_header.orientation:
command.extend(['--orientation', str(webkit_header.orientation).replace(',', '.')])
- if webkit_header.format :
+ if webkit_header.format:
command.extend(['--page-size', str(webkit_header.format).replace(',', '.')])
count = 0
- for html in html_list :
- with tempfile.NamedTemporaryFile(suffix="%d.body.html" %count,
- delete=False) as html_file:
+ for html in html_list:
+ with tempfile.NamedTemporaryFile(suffix="%d.body.html" % count, delete=False) as html_file:
count += 1
html_file.write(self._sanitize_html(html.encode('utf-8')))
file_to_del.append(html_file.name)
@@ -179,8 +169,8 @@ class WebKitParser(report_sxw):
file_to_del.append(stderr_path)
try:
status = subprocess.call(command, stderr=stderr_fd)
- os.close(stderr_fd) # ensure flush before reading
- stderr_fd = None # avoid closing again in finally block
+ os.close(stderr_fd) # ensure flush before reading
+ stderr_fd = None # avoid closing again in finally block
fobj = open(stderr_path, 'r')
error_message = fobj.read()
fobj.close()
@@ -188,7 +178,7 @@ class WebKitParser(report_sxw):
error_message = _('No diagnosis message was provided')
else:
error_message = _('The following diagnosis message was provided:\n') + error_message
- if status :
+ if status:
raise UserError(_("The command 'wkhtmltopdf' failed with error code = %s. Message: %s") % (status, error_message))
with open(out_filename, 'rb') as pdf_file:
pdf = pdf_file.read()
@@ -205,88 +195,77 @@ class WebKitParser(report_sxw):
def translate_call(self, parser_instance, src):
"""Translate String."""
- ir_translation = self.pool['ir.translation']
+ ir_translation = self.env['ir.translation']
name = self.tmpl and 'addons/' + self.tmpl or None
- res = ir_translation._get_source(parser_instance.cr, parser_instance.uid,
- name, 'report', parser_instance.localcontext.get('lang', 'en_US'), src)
+ res = ir_translation._get_source(name, 'report', parser_instance.localcontext.get('lang', 'en_US'), src)
if res == src:
# no translation defined, fallback on None (backward compatibility)
- res = ir_translation._get_source(parser_instance.cr, parser_instance.uid,
- None, 'report', parser_instance.localcontext.get('lang', 'en_US'), src)
- if not res :
+ res = ir_translation._get_source(None, 'report', parser_instance.localcontext.get('lang', 'en_US'), src)
+ if not res:
return src
return res
# override needed to keep the attachments storing procedure
- def create_single_pdf(self, cursor, uid, ids, data, report_xml, context=None):
+ def create_single_pdf(self, cr, uid, ids, data, report_xml, context=None):
"""generate the PDF"""
# just try to find an xml id for the report
- cr = cursor
- pool = openerp.registry(cr.dbname)
- found_xml_ids = pool["ir.model.data"].search(cr, uid, [["model", "=", "ir.actions.report.xml"], \
- ["res_id", "=", report_xml.id]], context=context)
+ env = api.Environment(cr, SUPERUSER_ID, {})
+ found_xml_ids = env["ir.model.data"].search([["model", "=", "ir.actions.report.xml"], ["res_id", "=", report_xml.id]])
xml_id = None
if found_xml_ids:
- xml_id = pool["ir.model.data"].read(cr, uid, found_xml_ids[0], ["module", "name"])
- xml_id = "%s.%s" % (xml_id["module"], xml_id["name"])
+ xml_id = "%s.%s" % (found_xml_ids.module, found_xml_ids.name)
- if context is None:
- context={}
htmls = []
if report_xml.report_type != 'webkit':
- return super(WebKitParser,self).create_single_pdf(cursor, uid, ids, data, report_xml, context=context)
+ return super(WebKitParser, self).create_single_pdf(cr, uid, ids, data, report_xml, context=context)
- parser_instance = self.parser(cursor,
- uid,
- self.name2,
- context=context)
+ parser_instance = self.parser(cr, uid, self.name2, context=context)
- self.pool = pool
- objs = self.getObjects(cursor, uid, ids, context)
+ self.env = env
+ objs = self.getObjects(cr, uid, ids, context)
parser_instance.set_context(objs, data, ids, report_xml.report_type)
- template = False
+ template = False
- if report_xml.report_file :
+ if report_xml.report_file:
path = get_module_resource(*report_xml.report_file.split('/'))
- if path and os.path.exists(path) :
+ if path and os.path.exists(path):
template = file(path).read()
- if not template and report_xml.report_webkit_data :
- template = report_xml.report_webkit_data
- if not template :
+ if not template and report_xml.report_webkit_data:
+ template = report_xml.report_webkit_data
+ if not template:
raise UserError(_('Webkit report template not found!'))
header = report_xml.webkit_header.html
footer = report_xml.webkit_header.footer_html
if not header and report_xml.use_global_header:
raise UserError(_('No header defined for this Webkit report!') + " " + _('Please set a header in company settings.'))
- if not report_xml.use_global_header :
+ if not report_xml.use_global_header:
header = ''
default_head = get_module_resource('report_webkit', 'default_header.html')
- with open(default_head,'r') as f:
+ with open(default_head, 'r') as f:
header = f.read()
css = report_xml.webkit_header.css
- if not css :
+ if not css:
css = ''
translate_call = partial(self.translate_call, parser_instance)
body_mako_tpl = mako_template(template)
- helper = WebKitHelper(cursor, uid, report_xml.id, context)
+ helper = WebKitHelper(cr, uid, report_xml.id, context)
parser_instance.localcontext['helper'] = helper
parser_instance.localcontext['css'] = css
parser_instance.localcontext['_'] = translate_call
# apply extender functions
- additional = {}
if xml_id in _extender_functions:
for fct in _extender_functions[xml_id]:
- fct(pool, cr, uid, parser_instance.localcontext, context)
+ fct(env, cr, uid, parser_instance.localcontext, context)
if report_xml.precise_mode:
ctx = dict(parser_instance.localcontext)
for obj in parser_instance.localcontext['objects']:
ctx['objects'] = [obj]
- try :
+ try:
html = body_mako_tpl.render(dict(ctx))
htmls.append(html)
except Exception, e:
@@ -294,7 +273,7 @@ class WebKitParser(report_sxw):
_logger.info(msg, exc_info=True)
raise UserError(msg)
else:
- try :
+ try:
html = body_mako_tpl.render(dict(parser_instance.localcontext))
htmls.append(html)
except Exception, e:
@@ -302,50 +281,47 @@ class WebKitParser(report_sxw):
_logger.info(msg, exc_info=True)
raise UserError(msg)
head_mako_tpl = mako_template(header)
- try :
+ try:
head = head_mako_tpl.render(dict(parser_instance.localcontext, _debug=False))
except Exception, e:
raise UserError(tools.ustr(e))
foot = False
- if footer :
+ if footer:
foot_mako_tpl = mako_template(footer)
- try :
+ try:
foot = foot_mako_tpl.render(dict(parser_instance.localcontext))
except Exception, e:
msg = u"%s" % e
_logger.info(msg, exc_info=True)
raise UserError(msg)
- if report_xml.webkit_debug :
- try :
+ if report_xml.webkit_debug:
+ try:
deb = head_mako_tpl.render(dict(parser_instance.localcontext, _debug=tools.ustr("\n".join(htmls))))
except Exception, e:
msg = u"%s" % e
_logger.info(msg, exc_info=True)
raise UserError(msg)
return (deb, 'html')
- bin = self.get_lib(cursor, uid)
+ bin = self.get_lib(cr, uid)
pdf = self.generate_pdf(bin, report_xml, head, foot, htmls)
return (pdf, 'pdf')
- def create(self, cursor, uid, ids, data, context=None):
+ def create(self, cr, uid, ids, data, context=None):
"""We override the create function in order to handle generator
- Code taken from report openoffice. Thanks guys :) """
- pool = openerp.registry(cursor.dbname)
- ir_obj = pool['ir.actions.report.xml']
- report_xml_ids = ir_obj.search(cursor, uid,
- [('report_name', '=', self.name[7:])], context=context)
- if report_xml_ids:
- report_xml = ir_obj.browse(cursor, uid, report_xml_ids[0], context=context)
- else:
- return super(WebKitParser, self).create(cursor, uid, ids, data, context)
+ Code taken from report openoffice. Thanks guys:) """
+ env = api.Environment(cr, SUPERUSER_ID, {})
+ ir_obj = env['ir.actions.report.xml']
+ report_xml = ir_obj.search([('report_name', '=', self.name[7:])], limit=1)
+ if not report_xml:
+ return super(WebKitParser, self).create(cr, uid, ids, data, context)
setattr(report_xml, 'use_global_header', self.header if report_xml.header else False)
if report_xml.report_type != 'webkit':
- return super(WebKitParser, self).create(cursor, uid, ids, data, context)
- result = self.create_source_pdf(cursor, uid, ids, data, report_xml, context)
+ return super(WebKitParser, self).create(cr, uid, ids, data, context)
+ result = self.create_source_pdf(cr, uid, ids, data, report_xml, context)
if not result:
- return (False,False)
+ return (False, False)
return result
def _sanitize_html(self, html):
diff --git a/addons/report_webkit/report/__init__.py b/addons/report_webkit/report/__init__.py
index d94586fedb1..9ae6e662a3f 100644
--- a/addons/report_webkit/report/__init__.py
+++ b/addons/report_webkit/report/__init__.py
@@ -1,2 +1,7 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+# Copyright (c) 2010 Camptocamp SA (http://www.camptocamp.com)
+# Author : Nicolas Bessi (Camptocamp)
import webkit_report_demo
diff --git a/addons/report_webkit/report/webkit_report_demo.py b/addons/report_webkit/report/webkit_report_demo.py
index e45c11eaa69..e99155f8bfd 100644
--- a/addons/report_webkit/report/webkit_report_demo.py
+++ b/addons/report_webkit/report/webkit_report_demo.py
@@ -1,11 +1,16 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+# Copyright (c) 2010 Camptocamp SA (http://www.camptocamp.com)
+# Author : Nicolas Bessi (Camptocamp)
-from openerp.addons.report_webkit.models.webkit_report import webkit_report_extender
-from openerp import SUPERUSER_ID
+from odoo.addons.report_webkit.models.webkit_report import webkit_report_extender
+from odoo import SUPERUSER_ID
@webkit_report_extender("report_webkit.webkit_demo_report")
-def extend_demo(pool, cr, uid, localcontext, context):
- admin = pool.get("res.users").browse(cr, uid, SUPERUSER_ID, context)
+def extend_demo(env, cr, uid, localcontext, context):
+ admin = env["res.users"].browse(SUPERUSER_ID)
localcontext.update({
"admin_name": admin.name,
})
diff --git a/addons/report_webkit/report/webkit_report_demo.xml b/addons/report_webkit/report/webkit_report_demo.xml
index 120c11e9ecd..ff460b795a4 100644
--- a/addons/report_webkit/report/webkit_report_demo.xml
+++ b/addons/report_webkit/report/webkit_report_demo.xml
@@ -1,13 +1,9 @@
-