Merge lp:openobject-jasper-reports/6.1 into lp:openobject-jasper-reports

Proposed by Bharati Soopal
Status: Rejected
Rejected by: Omar (Pexego)
Proposed branch: lp:openobject-jasper-reports/6.1
Merge into: lp:openobject-jasper-reports
Diff against target: 425 lines (+94/-105)
8 files modified
jasper_reports/JasperReports/BrowseDataGenerator.py (+11/-11)
jasper_reports/JasperReports/JasperServer.py (+3/-9)
jasper_reports/JasperReports/RecordDataGenerator.py (+0/-2)
jasper_reports/__openerp__.py (+49/-0)
jasper_reports/__terp__.py (+0/-49)
jasper_reports/http_server.py (+9/-7)
jasper_reports/jasper_report.py (+19/-15)
jasper_reports/report_xml.py (+3/-12)
To merge this branch: bzr merge lp:openobject-jasper-reports/6.1
Reviewer Review Type Date Requested Status
Omar (Pexego) Disapprove
Review via email: mp+105759@code.launchpad.net
To post a comment you must log in.
lp:openobject-jasper-reports/6.1 updated
179. By Omar (Pexego)

[FIX] If first translation of attachments, user or special had blanks, output xmls were malformed

Revision history for this message
Omar (Pexego) (omar7r) wrote :

Each branch belongs to different openerp version and are not compatible

Revision history for this message
Omar (Pexego) (omar7r) :
review: Disapprove

Unmerged revisions

181. By Omar (Pexego)

[IMP] Improves excel exportation, removing white lines created between pages, removing white columns, seting maximum rows per sheet and detecting cell type

180. By Omar (Pexego)

Merged Bruce Doan merge proposal that convert create xml template wizard to osv_memory

179. By Omar (Pexego)

[FIX] If first translation of attachments, user or special had blanks, output xmls were malformed

178. By Omar (Pexego)

[FIX] Web client doesn't pass 'model' in data dictionary, but it does context['active_model'].

177. By Omar (Pexego)

[ADD] bzr add __openerp__.py

176. By Omar (Pexego)

jasper_reports: Ported to 6.1

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'jasper_reports/JasperReports/BrowseDataGenerator.py'
--- jasper_reports/JasperReports/BrowseDataGenerator.py 2012-03-04 01:25:44 +0000
+++ jasper_reports/JasperReports/BrowseDataGenerator.py 2012-07-27 12:19:24 +0000
@@ -1,7 +1,10 @@
1# -*- coding: utf-8 -*-
1##############################################################################2##############################################################################
2#3#
3# Copyright (c) 2008-2012 NaN Projectes de Programari Lliure, S.L.4# Copyright (c) 2008-2012 NaN Projectes de Programari Lliure, S.L.
4# http://www.NaN-tic.com5# http://www.NaN-tic.com
6# Copyright (c) 2012 Omar Castiñeira Saavedra <omar@pexego.es>
7# Pexego Sistemas Informáticos http://www.pexego.es
5#8#
6# WARNING: This program as such is intended to be used by professional9# WARNING: This program as such is intended to be used by professional
7# programmers who take the whole responsability of assessing all potential10# programmers who take the whole responsability of assessing all potential
@@ -31,10 +34,10 @@
31import copy34import copy
32import base6435import base64
33from xml.dom.minidom import getDOMImplementation36from xml.dom.minidom import getDOMImplementation
34import xml.dom.minidom
35from osv import orm, osv, fields37from osv import orm, osv, fields
36import tempfile 38import tempfile
37import codecs39import codecs
40import logging
3841
39from JasperReport import *42from JasperReport import *
40from AbstractDataGenerator import *43from AbstractDataGenerator import *
@@ -51,18 +54,11 @@
51 self._languages = []54 self._languages = []
52 self.imageFiles = {}55 self.imageFiles = {}
53 self.temporaryFiles = []56 self.temporaryFiles = []
5457 self.logger = logging.getLogger(__name__)
55 try:
56 # Do not depend on being called inside OpenERP server
57 import netsvc
58 self.logger = netsvc.Logger()
59 self.WARNING = netsvc.LOG_WARNING
60 except:
61 self.logger = None
62 58
63 def warning(self, message):59 def warning(self, message):
64 if self.logger:60 if self.logger:
65 self.logger.notifyChannel("jasper_reports", self.WARNING, message )61 self.logger.warning("%s" % message)
66 else:62 else:
67 print 'JasperReports: %s' % message63 print 'JasperReports: %s' % message
6864
@@ -85,6 +81,10 @@
85 value = model.read(self.cr, self.uid, [id], [field], context=context)81 value = model.read(self.cr, self.uid, [id], [field], context=context)
86 values[ language ] = value[0][field] or ''82 values[ language ] = value[0][field] or ''
8783
84 if model._columns[field]._type == 'selection' and model._columns[field].selection:
85 field_data = model.fields_get(self.cr, self.uid, allfields=[field], context=context)
86 values[ language ] = dict(field_data[field]['selection']).get(values[ language ],values[ language ])
87
88 result = []88 result = []
89 for key, value in values.iteritems():89 for key, value in values.iteritems():
90 result.append( '%s~%s' % (key, value) )90 result.append( '%s~%s' % (key, value) )
9191
=== modified file 'jasper_reports/JasperReports/JasperServer.py'
--- jasper_reports/JasperReports/JasperServer.py 2012-03-04 01:25:44 +0000
+++ jasper_reports/JasperReports/JasperServer.py 2012-07-27 12:19:24 +0000
@@ -34,6 +34,7 @@
34import subprocess34import subprocess
35import xmlrpclib35import xmlrpclib
36from tools.translate import _36from tools.translate import _
37import logging
3738
38class JasperServer:39class JasperServer:
39 def __init__(self, port=8090):40 def __init__(self, port=8090):
@@ -41,18 +42,11 @@
41 self.pidfile = None42 self.pidfile = None
42 url = 'http://localhost:%d' % port43 url = 'http://localhost:%d' % port
43 self.proxy = xmlrpclib.ServerProxy( url, allow_none = True )44 self.proxy = xmlrpclib.ServerProxy( url, allow_none = True )
4445 self.logger = logging.getLogger(__name__)
45 try:
46 # Do not depend on being called inside OpenERP server
47 import netsvc
48 self.logger = netsvc.Logger()
49 self.ERROR = netsvc.LOG_ERROR
50 except:
51 self.logger = None
5246
53 def error(self, message):47 def error(self, message):
54 if self.logger:48 if self.logger:
55 self.logger.notifyChannel("jasper_reports", self.ERROR, message )49 self.logger.error("%s" % message )
56 else:50 else:
57 print 'JasperReports: %s' % message51 print 'JasperReports: %s' % message
5852
5953
=== modified file 'jasper_reports/JasperReports/RecordDataGenerator.py'
--- jasper_reports/JasperReports/RecordDataGenerator.py 2012-03-04 01:25:44 +0000
+++ jasper_reports/JasperReports/RecordDataGenerator.py 2012-07-27 12:19:24 +0000
@@ -26,10 +26,8 @@
26#26#
27##############################################################################27##############################################################################
2828
29import os
30import csv29import csv
31from xml.dom.minidom import getDOMImplementation30from xml.dom.minidom import getDOMImplementation
32import xml.dom.minidom
33import codecs31import codecs
3432
35from JasperReport import *33from JasperReport import *
3634
=== added file 'jasper_reports/__openerp__.py'
--- jasper_reports/__openerp__.py 1970-01-01 00:00:00 +0000
+++ jasper_reports/__openerp__.py 2012-07-27 12:19:24 +0000
@@ -0,0 +1,49 @@
1##############################################################################
2#
3# Copyright (c) 2008-2012 NaN Projectes de Programari Lliure, S.L.
4# http://www.NaN-tic.com
5#
6# WARNING: This program as such is intended to be used by professional
7# programmers who take the whole responsability of assessing all potential
8# consequences resulting from its eventual inadequacies and bugs
9# End users who are looking for a ready-to-use solution with commercial
10# garantees and support are strongly adviced to contract a Free Software
11# Service Company
12#
13# This program is Free Software; you can redistribute it and/or
14# modify it under the terms of the GNU General Public License
15# as published by the Free Software Foundation; either version 2
16# of the License, or (at your option) any later version.
17#
18# This program is distributed in the hope that it will be useful,
19# but WITHOUT ANY WARRANTY; without even the implied warranty of
20# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21# GNU General Public License for more details.
22#
23# You should have received a copy of the GNU General Public License
24# along with this program; if not, write to the Free Software
25# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26#
27##############################################################################
28
29{
30 "name" : "Jasper Reports",
31 "version" : "0.1",
32 "description" : "This module integrates Jasper Reports with OpenERP.",
33 "author" : "NaN·tic",
34 "website" : "http://www.nan-tic.com",
35 "depends" : ["base"],
36 "category" : "Generic Modules/Jasper Reports",
37 "init_xml" : [],
38 "demo_xml" : [
39 'jasper_demo.xml'
40 ],
41 "update_xml" : [
42 'jasper_wizard.xml',
43 'report_xml_view.xml',
44 'security/ir.model.access.csv',
45 ],
46 "active": False,
47 "installable": True
48}
49
050
=== removed file 'jasper_reports/__terp__.py'
--- jasper_reports/__terp__.py 2012-03-04 01:25:44 +0000
+++ jasper_reports/__terp__.py 1970-01-01 00:00:00 +0000
@@ -1,49 +0,0 @@
1##############################################################################
2#
3# Copyright (c) 2008-2012 NaN Projectes de Programari Lliure, S.L.
4# http://www.NaN-tic.com
5#
6# WARNING: This program as such is intended to be used by professional
7# programmers who take the whole responsability of assessing all potential
8# consequences resulting from its eventual inadequacies and bugs
9# End users who are looking for a ready-to-use solution with commercial
10# garantees and support are strongly adviced to contract a Free Software
11# Service Company
12#
13# This program is Free Software; you can redistribute it and/or
14# modify it under the terms of the GNU General Public License
15# as published by the Free Software Foundation; either version 2
16# of the License, or (at your option) any later version.
17#
18# This program is distributed in the hope that it will be useful,
19# but WITHOUT ANY WARRANTY; without even the implied warranty of
20# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21# GNU General Public License for more details.
22#
23# You should have received a copy of the GNU General Public License
24# along with this program; if not, write to the Free Software
25# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26#
27##############################################################################
28
29{
30 "name" : "Jasper Reports",
31 "version" : "0.1",
32 "description" : "This module integrates Jasper Reports with OpenERP.",
33 "author" : "NaN·tic",
34 "website" : "http://www.nan-tic.com",
35 "depends" : ["base"],
36 "category" : "Generic Modules/Jasper Reports",
37 "init_xml" : [],
38 "demo_xml" : [
39 'jasper_demo.xml'
40 ],
41 "update_xml" : [
42 'jasper_wizard.xml',
43 'report_xml_view.xml',
44 'security/ir.model.access.csv',
45 ],
46 "active": False,
47 "installable": True
48}
49
500
=== modified file 'jasper_reports/http_server.py'
--- jasper_reports/http_server.py 2012-03-04 01:25:44 +0000
+++ jasper_reports/http_server.py 2012-07-27 12:19:24 +0000
@@ -1,7 +1,10 @@
1# -*- coding: utf-8 -*-
1##############################################################################2##############################################################################
2#3#
3# Copyright (c) 2008-2012 NaN Projectes de Programari Lliure, S.L.4# Copyright (c) 2008-2012 NaN Projectes de Programari Lliure, S.L.
4# http://www.NaN-tic.com5# http://www.NaN-tic.com
6# Copyright (c) 2012 Omar Castiñeira Saavedra <omar@pexego.es>
7# Pexego Sistemas Informáticos http://www.pexego.es
5#8#
6# WARNING: This program as such is intended to be used by professional9# WARNING: This program as such is intended to be used by professional
7# programmers who take the whole responsability of assessing all potential10# programmers who take the whole responsability of assessing all potential
@@ -26,9 +29,8 @@
26#29#
27##############################################################################30##############################################################################
2831
29from service.http_server import reg_http_service, HttpDaemon32from service.http_server import reg_http_service
30from service.websrv_lib import HTTPDir33from BaseHTTPServer import BaseHTTPRequestHandler
31from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
32import netsvc34import netsvc
33import tools35import tools
3436
@@ -36,7 +38,7 @@
36 def __init__(self):38 def __init__(self):
37 self.status = False39 self.status = False
3840
39class JasperHandler(netsvc.OpenERPDispatcher, BaseHTTPRequestHandler):41class JasperHandler(BaseHTTPRequestHandler):
40 cache = {}42 cache = {}
4143
42 def __init__(self, request, client_address, server):44 def __init__(self, request, client_address, server):
@@ -90,12 +92,12 @@
90 'lang': language,92 'lang': language,
91 }93 }
9294
93 uid = self.dispatch('common', 'login', (database, user, password) )95 uid = netsvc.dispatch_rpc('common', 'login', (database, user, password))
94 result = self.dispatch('object', 'execute', (database, uid, password, 'ir.actions.report.xml', 'create_xml', model, depth, context) )96 result = netsvc.dispatch_rpc('object', 'execute', (database, uid, password, 'ir.actions.report.xml', 'create_xml', model, depth, context))
9597
96 if use_cache:98 if use_cache:
97 self.cache[key] = result99 self.cache[key] = result
98100
99 return result101 return result
100102
101reg_http_service(HTTPDir('/jasper/', JasperHandler))103reg_http_service('/jasper/', JasperHandler)
102104
=== modified file 'jasper_reports/jasper_report.py'
--- jasper_reports/jasper_report.py 2012-03-04 01:25:44 +0000
+++ jasper_reports/jasper_report.py 2012-07-27 12:19:24 +0000
@@ -25,19 +25,16 @@
25# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.25# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26#26#
27##############################################################################27##############################################################################
28
28import os29import os
29import csv
30import copy
31import base64
32import report30import report
33import pooler31import pooler
34from osv import orm, osv, fields32from osv import orm, osv, fields
35import tools33import tools
36import tempfile 34import tempfile
37import codecs
38import sql_db
39import netsvc35import netsvc
40import release36import release
37import logging
4138
42from JasperReports import *39from JasperReports import *
4340
@@ -57,7 +54,7 @@
57 self.uid = uid54 self.uid = uid
58 self.ids = ids55 self.ids = ids
59 self.data = data56 self.data = data
60 self.model = self.data['model']57 self.model = self.data.get('model', False) or context.get('active_model', False)
61 self.context = context or {}58 self.context = context or {}
62 self.pool = pooler.get_pool( self.cr.dbname )59 self.pool = pooler.get_pool( self.cr.dbname )
63 self.reportPath = None60 self.reportPath = None
@@ -70,7 +67,7 @@
70 If self.context contains "return_pages = True" it will return the number of pages67 If self.context contains "return_pages = True" it will return the number of pages
71 of the generated report.68 of the generated report.
72 """69 """
73 logger = netsvc.Logger()70 logger = logging.getLogger(__name__)
7471
75 # * Get report path *72 # * Get report path *
76 # Not only do we search the report by name but also ensure that 'report_rml' field73 # Not only do we search the report by name but also ensure that 'report_rml' field
@@ -85,9 +82,11 @@
85 self.outputFormat = data['jasper_output']82 self.outputFormat = data['jasper_output']
86 self.reportPath = data['report_rml']83 self.reportPath = data['report_rml']
87 self.reportPath = os.path.join( self.addonsPath(), self.reportPath )84 self.reportPath = os.path.join( self.addonsPath(), self.reportPath )
85 if not os.path.lexists(self.reportPath):
86 self.reportPath = self.addonsPath(path=data['report_rml'])
8887
89 # Get report information from the jrxml file88 # Get report information from the jrxml file
90 logger.notifyChannel("jasper_reports", netsvc.LOG_INFO, "Requested report: '%s'" % self.reportPath)89 logger.info("Requested report: '%s'" % self.reportPath)
91 self.report = JasperReport( self.reportPath )90 self.report = JasperReport( self.reportPath )
9291
93 # Create temporary input (XML) and output (PDF) files 92 # Create temporary input (XML) and output (PDF) files
@@ -97,7 +96,7 @@
97 os.close(fd)96 os.close(fd)
98 self.temporaryFiles.append( dataFile )97 self.temporaryFiles.append( dataFile )
99 self.temporaryFiles.append( outputFile )98 self.temporaryFiles.append( outputFile )
100 logger.notifyChannel("jasper_reports", netsvc.LOG_INFO, "Temporary data file: '%s'" % dataFile)99 logger.info("Temporary data file: '%s'" % dataFile)
101100
102 import time101 import time
103 start = time.time()102 start = time.time()
@@ -121,7 +120,7 @@
121 else:120 else:
122 message += 'without prefix '121 message += 'without prefix '
123 message += 'for file %s' % subreportInfo['filename']122 message += 'for file %s' % subreportInfo['filename']
124 logger.notifyChannel("jasper_reports", netsvc.LOG_INFO, message)123 logger.info("%s" % message)
125124
126 fd, subreportDataFile = tempfile.mkstemp()125 fd, subreportDataFile = tempfile.mkstemp()
127 os.close(fd)126 os.close(fd)
@@ -144,7 +143,7 @@
144 # Call the external java application that will generate the PDF file in outputFile143 # Call the external java application that will generate the PDF file in outputFile
145 pages = self.executeReport( dataFile, outputFile, subreportDataFiles )144 pages = self.executeReport( dataFile, outputFile, subreportDataFiles )
146 elapsed = (time.time() - start) / 60145 elapsed = (time.time() - start) / 60
147 logger.notifyChannel("jasper_reports", netsvc.LOG_INFO, "ELAPSED: '%f'" % elapsed )146 logger.info("ELAPSED: %f" % elapsed)
148147
149 # Read data from the generated file and return it148 # Read data from the generated file and return it
150 f = open( outputFile, 'rb')149 f = open( outputFile, 'rb')
@@ -159,8 +158,7 @@
159 try:158 try:
160 os.unlink( file )159 os.unlink( file )
161 except os.error, e:160 except os.error, e:
162 logger = netsvc.Logger()161 logger.warning("Could not remove file '%s'." % file )
163 logger.notifyChannel("jasper_reports", netsvc.LOG_WARNING, "Could not remove file '%s'." % file )
164 self.temporaryFiles = []162 self.temporaryFiles = []
165163
166 if self.context.get('return_pages'):164 if self.context.get('return_pages'):
@@ -171,7 +169,13 @@
171 def path(self):169 def path(self):
172 return os.path.abspath(os.path.dirname(__file__))170 return os.path.abspath(os.path.dirname(__file__))
173171
174 def addonsPath(self):172 def addonsPath(self, path=False):
173 if path:
174 report_module = path.split(os.path.sep)[0]
175 for addons_path in tools.config['addons_path'].split(','):
176 if os.path.lexists(addons_path+os.path.sep+report_module):
177 return os.path.normpath( addons_path+os.path.sep+path )
178
175 return os.path.dirname( self.path() )179 return os.path.dirname( self.path() )
176180
177 def systemUserName(self):181 def systemUserName(self):
178182
=== modified file 'jasper_reports/report_xml.py'
--- jasper_reports/report_xml.py 2012-03-04 01:25:44 +0000
+++ jasper_reports/report_xml.py 2012-07-27 12:19:24 +0000
@@ -28,21 +28,12 @@
28##############################################################################28##############################################################################
2929
30import os30import os
31import csv
32import copy
33import base6431import base64
34import report32import report
35import pooler
36from osv import orm, osv, fields33from osv import orm, osv, fields
37import tools
38import tempfile
39import codecs
40import sql_db
41import netsvc
42import jasper_report34import jasper_report
43from tools.translate import _35from tools.translate import _
4436
45import string
46import unicodedata37import unicodedata
47from xml.dom.minidom import getDOMImplementation38from xml.dom.minidom import getDOMImplementation
4839
@@ -246,18 +237,18 @@
246237
247 if depth > 1 and modelName != 'Attachments':238 if depth > 1 and modelName != 'Attachments':
248 # Create relation with attachments239 # Create relation with attachments
249 fieldNode = document.createElement( '%s-Attachments' % _('Attachments') )240 fieldNode = document.createElement( '%s-Attachments' % self.unaccent(_('Attachments')) )
250 parentNode.appendChild( fieldNode )241 parentNode.appendChild( fieldNode )
251 self.generate_xml(cr, uid, context, pool, 'ir.attachment', fieldNode, document, depth-1, False)242 self.generate_xml(cr, uid, context, pool, 'ir.attachment', fieldNode, document, depth-1, False)
252243
253 if first_call:244 if first_call:
254 # Create relation with user245 # Create relation with user
255 fieldNode = document.createElement( '%s-User' % _('User') )246 fieldNode = document.createElement( '%s-User' % self.unaccent(_('User')) )
256 parentNode.appendChild( fieldNode )247 parentNode.appendChild( fieldNode )
257 self.generate_xml(cr, uid, context, pool, 'res.users', fieldNode, document, depth-1, False)248 self.generate_xml(cr, uid, context, pool, 'res.users', fieldNode, document, depth-1, False)
258249
259 # Create special entries250 # Create special entries
260 fieldNode = document.createElement( '%s-Special' % _('Special') )251 fieldNode = document.createElement( '%s-Special' % self.unaccent(_('Special')) )
261 parentNode.appendChild( fieldNode )252 parentNode.appendChild( fieldNode )
262253
263 newNode = document.createElement('copy')254 newNode = document.createElement('copy')