summaryrefslogtreecommitdiff
path: root/addons/process/process.py
diff options
context:
space:
mode:
authorFabien Pinckaers <fp@tinyerp.com>2008-09-16 12:37:53 +0200
committerFabien Pinckaers <fp@tinyerp.com>2008-09-16 12:37:53 +0200
commit6345cd70a0dc751a6100a37fe07e30de26a4c60d (patch)
tree5d40c6cdc92ddff051d41aa8b3d9cf4bbbec7a54 /addons/process/process.py
parent02104cd18b57722a3b3a25d7b4cc36b363481da7 (diff)
parentabe80b1acfdfd80dd18030a5ba3eb1c3ef13dda1 (diff)
merge
bzr revid: fp@tinyerp.com-20080916103753-x2velfo42zzk2lb7
Diffstat (limited to 'addons/process/process.py')
-rw-r--r--addons/process/process.py76
1 files changed, 75 insertions, 1 deletions
diff --git a/addons/process/process.py b/addons/process/process.py
index d489b5f12f0..cff0a1fb22d 100644
--- a/addons/process/process.py
+++ b/addons/process/process.py
@@ -27,8 +27,9 @@
##############################################################################
import netsvc
-from osv import fields, osv
+import pooler, tools
+from osv import fields, osv
class process_process(osv.osv):
_name = "process.process"
@@ -42,6 +43,79 @@ class process_process(osv.osv):
_defaults = {
'active' : lambda *a: True,
}
+
+ def graph_get(self, cr, uid, id, res_model, res_id, scale, context):
+
+ current_object = res_model
+ pool = pooler.get_pool(cr.dbname)
+
+ process = pool.get('process.process').browse(cr, uid, [id])[0]
+
+ nodes = {}
+ start = []
+ transitions = {}
+ for node in process.node_ids:
+
+ data = {}
+
+ data['name'] = node.name
+ data['menu'] = node.menu_id.name
+ data['model'] = node.model_id.model
+
+ nodes[node.id] = data
+
+ if node.flow_start:
+ start.append(node.id)
+
+ for tr in node.transition_out:
+ data = {}
+
+ data['name'] = tr.name
+ data['source'] = tr.node_from_id.id
+ data['target'] = tr.node_to_id.id
+
+ data['buttons'] = buttons = []
+ for b in tr.action_ids:
+ button = {}
+ button['name'] = b.name
+ buttons.append(button)
+
+ data['roles'] = roles = []
+ for r in tr.transition_ids:
+ role = {}
+ role['name'] = r.role_id.name
+ roles.append(role)
+
+ transitions[tr.id] = data
+
+ g = tools.graph(nodes.keys(), map(lambda x: (x['source'], x['target']), transitions.values()))
+ g.process(start)
+ #g.scale(100, 100, 180, 120)
+ g.scale(*scale)
+
+ graph = g.result_get()
+
+ miny = -1
+
+ for k,v in nodes.items():
+
+ x = graph[k]['y']
+ y = graph[k]['x']
+
+ if miny == -1:
+ miny = y
+
+ miny = min(y, miny)
+
+ v['x'] = x
+ v['y'] = y
+
+ for k, v in nodes.items():
+ y = v['y']
+ v['y'] = min(y - miny + 10, y)
+
+ return dict(nodes=nodes, transitions=transitions)
+
process_process()
class process_node(osv.osv):