← Back to team overview

openerp-dev-web team mailing list archive

[Merge] lp:~openerp-dev/openobject-server/6.0-bug-405962-pydot-vmt into lp:openobject-server/6.0

 

Vo Minh Thu (OpenERP) has proposed merging lp:~openerp-dev/openobject-server/6.0-bug-405962-pydot-vmt into lp:openobject-server/6.0.

Requested reviews:
  OpenERP Core Team (openerp)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/6.0-bug-405962-pydot-vmt/+merge/51521
-- 
https://code.launchpad.net/~openerp-dev/openobject-server/6.0-bug-405962-pydot-vmt/+merge/51521
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-server/6.0-bug-405962-pydot-vmt.
=== 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-28 12:06:16 +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 !!!


Follow ups