From 02cdbfb31a9b71fe613efe955d1a6c8527499cb7 Mon Sep 17 00:00:00 2001 From: "ame (Tiny/Axelor)" Date: Wed, 24 Dec 2008 15:56:56 +0530 Subject: [PATCH] * Improved `process` module - process graph without resource - added prefered resource for the process bzr revid: ame@tinyerp.com-20081224102656-z0xi440xpnq7x42p --- addons/process/process.py | 66 +++++++++++++++++++-------------- addons/process/process_view.xml | 2 + 2 files changed, 40 insertions(+), 28 deletions(-) diff --git a/addons/process/process.py b/addons/process/process.py index ff6e6378d83..b1a6002dfd9 100644 --- a/addons/process/process.py +++ b/addons/process/process.py @@ -50,6 +50,7 @@ class process_process(osv.osv): _columns = { 'name': fields.char('Name', size=30,required=True, translate=True), 'active': fields.boolean('Active'), + 'model_id': fields.many2one('ir.model', 'Object', ondelete='set null'), 'note': fields.text('Notes', translate=True), 'node_ids': fields.one2many('process.node', 'process_id', 'Nodes') } @@ -64,19 +65,24 @@ class process_process(osv.osv): if not model_ids: return [] - nodes = pool.get('process.node').search(cr, uid, [('model_id', 'in', model_ids)]) - if not nodes: - return [] - - nodes = pool.get('process.node').browse(cr, uid, nodes, context) - - unique = [] result = [] - - for node in nodes: - if node.process_id.id not in unique: - result.append((node.process_id.id, node.process_id.name)) - unique.append(node.process_id.id) + + # search all processes + res = pool.get('process.process').search(cr, uid, [('model_id', 'in', model_ids)]) + if res: + res = pool.get('process.process').browse(cr, uid, res, context) + for process in res: + result.append((process.id, process.name)) + + return result + + # else search process nodes + res = pool.get('process.node').search(cr, uid, [('model_id', 'in', model_ids)]) + if res: + res = pool.get('process.node').browse(cr, uid, res, context) + for node in res: + if (node.process_id.id, node.process_id.name) not in result: + result.append((node.process_id.id, node.process_id.name)) return result @@ -85,21 +91,25 @@ class process_process(osv.osv): pool = pooler.get_pool(cr.dbname) process = pool.get('process.process').browse(cr, uid, [id])[0] - current_object = pool.get(res_model).browse(cr, uid, [res_id], context)[0] - current_user = pool.get('res.users').browse(cr, uid, [uid], context)[0] - - expr_context = Env(current_object, current_user) - - notes = process.note + states = dict(pool.get(res_model).fields_get(cr, uid, context=context).get('state', {}).get('selection', {})) + + title = process.name + + expr_context = {} + perm = None + + if res_id: + current_object = pool.get(res_model).browse(cr, uid, [res_id], context)[0] + current_user = pool.get('res.users').browse(cr, uid, [uid], context)[0] + expr_context = Env(current_object, current_user) + title = _("%s - Resource: %s, State: %s") % (process.name, current_object.name, states.get(getattr(current_object, 'state'), 'N/A')) + perm = pool.get(res_model).perm_read(cr, uid, [res_id], context)[0] + + notes = process.note or "N/A" nodes = {} start = [] transitions = {} - states = dict(pool.get(res_model).fields_get(cr, uid, context=context).get('state', {}).get('selection', {})) - title = "%s - Resource: %s, State: %s" % (process.name, current_object.name, states.get(getattr(current_object, 'state'), 'N/A')) - - perm = pool.get(res_model).perm_read(cr, uid, [res_id], context)[0] - for node in process.node_ids: data = {} data['name'] = node.name @@ -126,7 +136,6 @@ class process_process(osv.osv): try: data['active'] = eval(node.model_states, expr_context) except Exception, e: - # waring: invalid state expression pass if not data['active']: @@ -212,10 +221,11 @@ class process_process(osv.osv): except: pass - for nid, node in nodes.items(): - if not node['gray'] and (node['active'] or node['model'] == res_model): - update_relatives(nid, res_id, res_model) - break + if res_id: + for nid, node in nodes.items(): + if not node['gray'] and (node['active'] or node['model'] == res_model): + update_relatives(nid, res_id, res_model) + break # calculate graph layout g = tools.graph(nodes.keys(), map(lambda x: (x['source'], x['target']), transitions.values())) diff --git a/addons/process/process_view.xml b/addons/process/process_view.xml index 8083ba278d4..360f3499f36 100644 --- a/addons/process/process_view.xml +++ b/addons/process/process_view.xml @@ -17,6 +17,7 @@ + @@ -120,6 +121,7 @@ +