[IMP] Added a route to check presence and version of wkhtmltopdf. If the soft is not present, qweb-pdf fallback on qweb-html mode.
bzr revid: sle@openerp.com-20140227144810-d14iwu5pudmrshh9
This commit is contained in:
parent
c8ebe2dc8a
commit
a82c186611
|
@ -39,6 +39,7 @@ except ImportError:
|
|||
import psutil
|
||||
import signal
|
||||
import os
|
||||
from distutils.version import LooseVersion
|
||||
|
||||
|
||||
from pyPdf import PdfFileWriter, PdfFileReader
|
||||
|
@ -270,7 +271,7 @@ class Report(http.Controller):
|
|||
:param save_in_attachment: dict of reports to save/load in/from the db
|
||||
:returns: Content of the pdf as a string
|
||||
"""
|
||||
command = ['wkhtmltopdf-0.12']
|
||||
command = ['wkhtmltopdf']
|
||||
tmp_dir = tempfile.gettempdir()
|
||||
|
||||
command_args = []
|
||||
|
@ -345,7 +346,7 @@ class Report(http.Controller):
|
|||
|
||||
if process.returncode != 0:
|
||||
raise except_osv(_('Report (PDF)'),
|
||||
_('wkhtmltopdf-0.12 failed with error code = %s. '
|
||||
_('wkhtmltopdf failed with error code = %s. '
|
||||
'Message: %s') % (str(process.returncode), err))
|
||||
|
||||
# Save the pdf in attachment if marked
|
||||
|
@ -511,3 +512,25 @@ class Report(http.Controller):
|
|||
response.headers.add('Content-Length', len(file))
|
||||
response.set_cookie('fileToken', token)
|
||||
return response
|
||||
|
||||
@http.route('/report/check_wkhtmltopdf/', type='json', auth="user")
|
||||
def check_wkhtmltopdf(self):
|
||||
"""Check the presence of wkhtmltopdf and return its version. If wkhtmltopdf
|
||||
cannot be found, return False.
|
||||
"""
|
||||
try:
|
||||
process = subprocess.Popen(['wkhtmltopdf', '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
out, err = process.communicate()
|
||||
if err:
|
||||
raise
|
||||
|
||||
version = out.splitlines()[1].strip()
|
||||
version = version.split(' ')[1]
|
||||
|
||||
if LooseVersion(version) < LooseVersion('0.12.0'):
|
||||
_logger.warning('Upgrade WKHTMLTOPDF to (at least) 0.12.0')
|
||||
|
||||
return True
|
||||
except:
|
||||
_logger.error('You need WKHTMLTOPDF to print a pdf version of this report.')
|
||||
return False
|
||||
|
|
|
@ -258,8 +258,10 @@ class report(osv.Model):
|
|||
dict_param[key] = False
|
||||
elif value.lower() == 'true':
|
||||
dict_param[key] = True
|
||||
elif ',' in value or '%2C' in value:
|
||||
elif ',' in value:
|
||||
dict_param[key] = [int(i) for i in value.split(',')]
|
||||
elif '%2C' in value:
|
||||
dict_param[key] = [int(i) for i in value.split('%2C')]
|
||||
else:
|
||||
try:
|
||||
i = int(value)
|
||||
|
|
|
@ -58,13 +58,21 @@ openerp.report = function(instance) {
|
|||
response[0] = report_url
|
||||
response[1] = action.report_type
|
||||
|
||||
this.session.get_file({
|
||||
url: '/report/download',
|
||||
data: {data: JSON.stringify(response)},
|
||||
complete: openerp.web.unblockUI,
|
||||
error: c.rpc_error.bind(c)
|
||||
openerp.session.rpc('/report/check_wkhtmltopdf').then(function (presence) {
|
||||
// Fallback of qweb-pdf if wkhtmltopdf is not installed
|
||||
if (!presence && action.report_type == 'qweb-pdf') {
|
||||
window.open(report_url.substring(12), '_blank', 'height=768,width=1024');
|
||||
instance.web.unblockUI();
|
||||
}
|
||||
else {
|
||||
self.session.get_file({
|
||||
url: '/report/download',
|
||||
data: {data: JSON.stringify(response)},
|
||||
complete: openerp.web.unblockUI,
|
||||
error: c.rpc_error.bind(c)
|
||||
});
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
return self._super(action, options);
|
||||
|
|
Loading…
Reference in New Issue