diff --git a/addons/process/process.py b/addons/process/process.py index d489b5f12f0..0b08c2e9ea2 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,67 @@ 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 + + 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):