openerp-dev-web team mailing list archive
-
openerp-dev-web team
-
Mailing list archive
-
Message #03464
lp:~openerp-dev/openobject-server/6.0-bug-405962-pydot-error-vmt into lp:~openerp-dev/openobject-server/6.0
Vo Minh Thu (OpenERP) has proposed merging lp:~openerp-dev/openobject-server/6.0-bug-405962-pydot-error-vmt into lp:~openerp-dev/openobject-server/6.0.
Requested reviews:
OpenERP R&D Team (openerp-dev)
Related bugs:
#405962 Complex workflow for procurement causes pydot error
https://bugs.launchpad.net/bugs/405962
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/6.0-bug-405962-pydot-error-vmt/+merge/51273
Makes sure we only render in full each subflow only once when printing workflow instances.
--
https://code.launchpad.net/~openerp-dev/openobject-server/6.0-bug-405962-pydot-error-vmt/+merge/51273
Your team OpenERP R&D Team is requested to review the proposed merge of lp:~openerp-dev/openobject-server/6.0-bug-405962-pydot-error-vmt into lp:~openerp-dev/openobject-server/6.0.
=== modified file 'bin/addons/base/ir/workflow/print_instance.py'
--- bin/addons/base/ir/workflow/print_instance.py 2011-01-12 08:54:42 +0000
+++ bin/addons/base/ir/workflow/print_instance.py 2011-02-25 10:18:10 +0000
@@ -25,7 +25,7 @@
import report,pooler,tools
from operator import itemgetter
-def graph_get(cr, graph, wkf_ids, nested=False, workitem={}):
+def graph_get(cr, graph, wkf_ids, nested, workitem, processed_subflows):
import pydot
cr.execute('select * from wkf_activity where wkf_id in ('+','.join(['%s']*len(wkf_ids))+')', wkf_ids)
nodes = cr.dictfetchall()
@@ -34,11 +34,12 @@
actto = {}
for n in nodes:
activities[n['id']] = n
- if n['subflow_id'] and nested:
+ if n['subflow_id'] and nested and n['subflow_id'] not in processed_subflows:
+ processed_subflows.add(n['subflow_id']) # don't create multiple times the same cluster.
cr.execute('select * from wkf where id=%s', (n['subflow_id'],))
wkfinfo = cr.dictfetchone()
- graph2 = pydot.Cluster('subflow'+str(n['subflow_id']), fontsize='12', label = """\"Subflow: %s\\nOSV: %s\"""" % ( n['name'], wkfinfo['osv']) )
- (s1,s2) = graph_get(cr, graph2, [n['subflow_id']], nested,workitem)
+ graph2 = pydot.Cluster('subflow'+str(n['subflow_id']), fontsize='12', label = "\"Subflow: %s\\nOSV: %s\"" % ( n['name'], wkfinfo['osv']) )
+ (s1,s2) = graph_get(cr, graph2, [n['subflow_id']], True, workitem, processed_subflows)
graph.add_subgraph(graph2)
actfrom[n['id']] = s2
actto[n['id']] = s1
@@ -48,11 +49,22 @@
args['style']='filled'
args['color']='lightgrey'
args['label']=n['name']
+ workitems = ''
+ if n['id'] in workitem:
+ workitems = '\\nx ' + str(workitem[n['id']])
+ args['label'] += workitems
+ args['color'] = "red"
+ args['style']='filled'
if n['subflow_id']:
args['shape'] = 'box'
- if n['id'] in workitem:
- args['label']+='\\nx '+str(workitem[n['id']])
- args['color'] = "red"
+ if nested and n['subflow_id'] in processed_subflows:
+ cr.execute('select * from wkf where id=%s', (n['subflow_id'],))
+ wkfinfo = cr.dictfetchone()
+ args['label'] = \
+ '\"Recursive Subflow: %s\\nOSV: %s%s\"' % \
+ (n['name'], wkfinfo['osv'], workitems)
+ args['color'] = 'green'
+ args['style'] ='filled'
graph.add_node(pydot.Node(n['id'], **args))
actfrom[n['id']] = (n['id'],{})
actto[n['id']] = (n['id'],{})
@@ -104,7 +116,9 @@
for (subflow_id,) in cr.fetchall():
workitems.update(workitem_get(subflow_id))
return workitems
- graph_get(cr, graph, [x[0] for x in inst], nested, workitem_get(inst_id))
+
+ processed_subflows = set()
+ graph_get(cr, graph, [x[0] for x in inst], nested, workitem_get(inst_id), processed_subflows)
#
# TODO: pas clean: concurrent !!!