From 02cdbfb31a9b71fe613efe955d1a6c8527499cb7 Mon Sep 17 00:00:00 2001 From: "ame (Tiny/Axelor)" Date: Wed, 24 Dec 2008 15:56:56 +0530 Subject: [PATCH 1/4] * 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 @@ + From 11e102cef611cf5c770628bb728b41db59b23b3e Mon Sep 17 00:00:00 2001 From: Dhara Shah Date: Wed, 24 Dec 2008 18:00:41 +0530 Subject: [PATCH 2/4] small modification bzr revid: dsh@tinyerp.com-20081224123041-4mpney2ca8c83p12 --- .../base_report_designer.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/addons/base_report_designer/base_report_designer.py b/addons/base_report_designer/base_report_designer.py index bf4c26fd4de..6f3c4019934 100644 --- a/addons/base_report_designer/base_report_designer.py +++ b/addons/base_report_designer/base_report_designer.py @@ -31,13 +31,18 @@ import tools class report_xml(osv.osv): _inherit = 'ir.actions.report.xml' - def sxwtorml(self,cr, uid, file_sxw): + def sxwtorml(self,cr, uid, file_sxw,file_type): ''' The use of this function is to get rml file from sxw file. ''' sxwval = StringIO(base64.decodestring(file_sxw)) - fp = tools.file_open('normalized_odt2rml.xsl', - subdir='/home/dsh/my-work/bazaar/odt-sxw2ml') + if file_type=='sxw': + fp = tools.file_open('normalized_oo2rml.xsl', + subdir='addons/base_report_designer/wizard/tiny_sxw2rml') + if file_type=='odt': + fp = tools.file_open('normalized_odt2rml.xsl', + subdir='addons/base_report_designer/wizard/tiny_sxw2rml') + return {'report_rml_content': str(sxw2rml(sxwval, xsl=fp.read()))} def upload_report(self, cr, uid, report_id, file_sxw,file_type, context): @@ -46,11 +51,12 @@ class report_xml(osv.osv): ''' pool = pooler.get_pool(cr.dbname) sxwval = StringIO(base64.decodestring(file_sxw)) - fp = tools.file_open('normalized_oo2rml.xsl', - subdir='addons/base_report_designer/wizard/tiny_sxw2rml') + if file_type=='sxw': + fp = tools.file_open('normalized_oo2rml.xsl', + subdir='addons/base_report_designer/wizard/tiny_sxw2rml') if file_type=='odt': fp = tools.file_open('normalized_odt2rml.xsl', - subdir='/home/dsh/my-work/bazaar/odt-sxw2ml') + subdir='addons/base_report_designer/wizard/tiny_sxw2rml') report = pool.get('ir.actions.report.xml').write(cr, uid, [report_id], { 'report_sxw_content': base64.decodestring(file_sxw), 'report_rml_content': str(sxw2rml(sxwval, xsl=fp.read())), From a5d8cf5d2c8a6de68fe5d0cead394a056ff1688d Mon Sep 17 00:00:00 2001 From: "ame (Tiny/Axelor)" Date: Wed, 24 Dec 2008 18:37:29 +0530 Subject: [PATCH 3/4] * Improved process module bzr revid: ame@tinyerp.com-20081224130729-857dvlgcrlki4b6r --- addons/process/process.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/addons/process/process.py b/addons/process/process.py index b1a6002dfd9..94bbd6daaa1 100644 --- a/addons/process/process.py +++ b/addons/process/process.py @@ -60,15 +60,13 @@ class process_process(osv.osv): def search_by_model(self, cr, uid, res_model, context): pool = pooler.get_pool(cr.dbname) + model_ids = (res_model or None) and pool.get('ir.model').search(cr, uid, [('model', '=', res_model)]) - model_ids = pool.get('ir.model').search(cr, uid, [('model', '=', res_model)]) - if not model_ids: - return [] - + domain = (model_ids or []) and [('model_id', 'in', model_ids)] result = [] # search all processes - res = pool.get('process.process').search(cr, uid, [('model_id', 'in', model_ids)]) + res = pool.get('process.process').search(cr, uid, domain) if res: res = pool.get('process.process').browse(cr, uid, res, context) for process in res: @@ -77,9 +75,9 @@ class process_process(osv.osv): return result # else search process nodes - res = pool.get('process.node').search(cr, uid, [('model_id', 'in', model_ids)]) + res = pool.get('process.node').search(cr, uid, domain) if res: - res = pool.get('process.node').browse(cr, uid, res, context) + 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)) @@ -91,13 +89,15 @@ class process_process(osv.osv): pool = pooler.get_pool(cr.dbname) process = pool.get('process.process').browse(cr, uid, [id])[0] - states = dict(pool.get(res_model).fields_get(cr, uid, context=context).get('state', {}).get('selection', {})) - title = process.name expr_context = {} + states = {} perm = None + if res_model: + states = dict(pool.get(res_model).fields_get(cr, uid, context=context).get('state', {}).get('selection', {})) + 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] From dfb4a39b6b67bc6ff7adc7c538b76eeb8019fa50 Mon Sep 17 00:00:00 2001 From: "mra (Open ERP)" Date: Wed, 24 Dec 2008 19:21:31 +0530 Subject: [PATCH 4/4] base module quality bzr revid: mra@tinyerp.com-20081224135131-7keeqeyqf168g5e1 --- addons/base_module_quality/__terp__.py | 2 +- .../base_module_quality.py | 26 ++++++++++++++++--- .../base_module_quality_wizard.xml | 2 +- .../method_test/method_test.py | 11 ++------ .../security/ir.model.access.csv | 2 ++ .../speed_test/speed_test.py | 17 +++--------- 6 files changed, 33 insertions(+), 27 deletions(-) create mode 100644 addons/base_module_quality/security/ir.model.access.csv diff --git a/addons/base_module_quality/__terp__.py b/addons/base_module_quality/__terp__.py index 4a4d5b9fc60..5588ab05780 100644 --- a/addons/base_module_quality/__terp__.py +++ b/addons/base_module_quality/__terp__.py @@ -34,7 +34,7 @@ This module's aim is to check the quality of other modules. """, "init_xml" : [], - "update_xml" : ["base_module_quality_wizard.xml"], + "update_xml" : ["base_module_quality_wizard.xml", "security/ir.model.access.csv",], "category" : "Tiny Specific Modules/Base module quality", "active": False, "installable": True diff --git a/addons/base_module_quality/base_module_quality.py b/addons/base_module_quality/base_module_quality.py index 195e345e8ef..ef4a0c3c515 100644 --- a/addons/base_module_quality/base_module_quality.py +++ b/addons/base_module_quality/base_module_quality.py @@ -19,7 +19,7 @@ # along with this program. If not, see . # ############################################################################## - +import pooler class abstract_quality_check(object): ''' @@ -41,11 +41,11 @@ class abstract_quality_check(object): #This bool defines if the test can be run only if the module is installed. #True => the module have to be installed. #False => the module can be uninstalled. - bool_installed_only = True + bool_installed_only = True def __init__(self): ''' - this method should initialize the var + this method should initialize the var ''' raise 'Not Implemented' @@ -55,7 +55,27 @@ class abstract_quality_check(object): ''' raise 'Not Implemented' + def get_objects(self, cr, uid, module): + # This function returns all object of the given module.. + pool = pooler.get_pool(cr.dbname) + ids2 = pool.get('ir.model.data').search(cr, uid, [('module','=', module), ('model','=','ir.model')]) + model_list = [] + model_data = pool.get('ir.model.data').browse(cr, uid, ids2) + for model in model_data: + model_list.append(model.res_id) + obj_list = [] + for mod in pool.get('ir.model').browse(cr, uid, model_list): + obj_list.append(str(mod.model)) + return obj_list + def get_ids(self, cr, uid, object_list): + #This method return dictionary with ids of records of object for module + pool = pooler.get_pool(cr.dbname) + result_ids = {} + for obj in object_list: + ids = pool.get(obj).search(cr, uid, []) + result_ids[obj] = ids + return result_ids # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_module_quality/base_module_quality_wizard.xml b/addons/base_module_quality/base_module_quality_wizard.xml index c99b949be35..b49c17667a7 100644 --- a/addons/base_module_quality/base_module_quality_wizard.xml +++ b/addons/base_module_quality/base_module_quality_wizard.xml @@ -16,7 +16,7 @@