From 469bf234824bd2cb689b4b607dc6542e7e3a5f8c Mon Sep 17 00:00:00 2001 From: "Ysa (Open ERP)" Date: Thu, 8 Apr 2010 17:14:59 +0530 Subject: [PATCH 01/17] [IMP] diagram :- add form_view_ref attribute in node and arrow tag. bzr revid: ysa@tinyerp.co.in-20100408114459-0g89j8autyis2oyw --- bin/addons/base/rng/view.rng | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/addons/base/rng/view.rng b/bin/addons/base/rng/view.rng index 09b1080e7cf..f4473602aa2 100644 --- a/bin/addons/base/rng/view.rng +++ b/bin/addons/base/rng/view.rng @@ -48,6 +48,7 @@ + @@ -61,6 +62,7 @@ + From b882309f71c5bb22ccfdf80b3b8b98727914fa3f Mon Sep 17 00:00:00 2001 From: "nch@tinyerp.com" <> Date: Fri, 9 Apr 2010 15:48:46 +0530 Subject: [PATCH 02/17] [IMP]:printscreen Reports for Single/Multi level Groupby bzr revid: nch@tinyerp.com-20100409101846-j0v63e7teo3j6brz --- bin/addons/base/report/custom_new.xsl | 4 +- bin/report/printscreen/ps_list.py | 77 ++++++++++++++------------- 2 files changed, 43 insertions(+), 38 deletions(-) diff --git a/bin/addons/base/report/custom_new.xsl b/bin/addons/base/report/custom_new.xsl index dea86903a72..98fba709682 100644 --- a/bin/addons/base/report/custom_new.xsl +++ b/bin/addons/base/report/custom_new.xsl @@ -114,14 +114,14 @@ - + - + diff --git a/bin/report/printscreen/ps_list.py b/bin/report/printscreen/ps_list.py index b3932588cdd..a25adb975f6 100644 --- a/bin/report/printscreen/ps_list.py +++ b/bin/report/printscreen/ps_list.py @@ -27,19 +27,25 @@ from report import render import locale import time, os +from operator import itemgetter from datetime import datetime class report_printscreen_list(report_int): def __init__(self, name): report_int.__init__(self, name) self.context = {} + self.groupby = [] def _parse_node(self, root_node): result = [] + groupby = self.context.get('group_by',[]) for node in root_node: + field_name = node.get('name') if not eval(str(node.attrib.get('invisible',False)),{'context':self.context}): if node.tag == 'field': - result.append(node.get('name')) + if field_name in groupby: + continue + result.append(field_name) else: result.extend(self._parse_node(node)) return result @@ -55,6 +61,7 @@ class report_printscreen_list(report_int): if not context: context={} self.context = context + self.groupby = context.get('group_by',[]) pool = pooler.get_pool(cr.dbname) model = pool.get(datas['model']) model_id = pool.get('ir.model').search(cr, uid, [('model','=',model._name)]) @@ -64,35 +71,37 @@ class report_printscreen_list(report_int): else: model_desc = model._description self.title = model_desc - datas['ids'] = ids model = pooler.get_pool(cr.dbname).get(datas['model']) result = model.fields_view_get(cr, uid, view_type='tree', context=context) - fields_order = self._parse_string(result['arch']) - rows = model.read(cr, uid, datas['ids'], result['fields'].keys(), context) - ids2 = [x['id'] for x in rows] # getting the ids from read result - if datas['ids'] != ids2: # sorted ids were not taken into consideration for print screen - rows_new = [] - for id in datas['ids']: - element = [elem for elem in rows if elem['id']==id] - rows_new.append(element[0]) - rows = rows_new - if context.get('group_by',False): - if context['group_by'] in fields_order: - fields_order.remove(context['group_by']) - fields_order.insert(0, context['group_by']) - re = model.read_group(cr, uid, [('id','in',ids)], fields_order, context.get('group_by',False),0,None,context) - rows=[] - for r in re: - for f in fields_order: - if f not in r: - r.update({f:False}) - r['__group']=True - rows.append(r) - _ids = model.search(cr, uid, r['__domain']) - res=model.read(cr, uid, _ids, result['fields'].keys(), context) - for r in res: - rows.append(r) + fields_order = self.groupby + self._parse_string(result['arch']) + if self.groupby: + rows = [] + def get_groupby_data(groupby = [], domain = []): + records = model.read_group(cr, uid, domain, fields_order, groupby , 0, None, context) + for rec in records: + rec['__group'] = True + for f in fields_order: + if f not in rec: + rec.update({f:False}) + rows.append(rec) + groupby = (rec.get('__context', {})).get('group_by',[]) + domain = rec.get('__domain', []) + if groupby: + get_groupby_data(groupby, domain) + else: + child_ids = model.search(cr, uid, domain) + res = model.read(cr, uid, child_ids, result['fields'].keys(), context) + rows.extend(res) + get_groupby_data(self.groupby, [('id','in',ids)]) + else: + rows = model.read(cr, uid, datas['ids'], result['fields'].keys(), context) + ids2 = map(itemgetter('id'), rows) # getting the ids from read result + if datas['ids'] != ids2: # sorted ids were not taken into consideration for print screen + rows_new = [] + for id in datas['ids']: + rows_new += [elem for elem in rows if elem['id'] == id] + rows = rows_new res = self._create_table(uid, datas['ids'], result['fields'], fields_order, rows, context, model_desc) return (self.obj.get(), 'pdf') @@ -116,13 +125,14 @@ class report_printscreen_list(report_int): l = [] t = 0 - rowcount=0; + rowcount = 0; strmax = (pageSize[0]-40) * 2.8346 temp = [] + tsum = [] count = len(fields_order) for i in range(0, count): temp.append(0) - + tsum.append(0) ince = -1; for f in fields_order: s = 0 @@ -131,7 +141,7 @@ class report_printscreen_list(report_int): s = 60 strmax -= s if fields[f]['type'] in ('float','integer'): - temp[ince]=1; + temp[ince] = 1 else: t += fields[f].get('size', 80) / 28 + 1 @@ -149,10 +159,6 @@ class report_printscreen_list(report_int): field.text = tools.ustr(fields[f]['string'] or '') lines = etree.SubElement(new_doc, 'lines') - tsum = [] - count = len(fields_order) - for i in range(0,count): - tsum.append(0) for line in results: node_line = etree.SubElement(lines, 'row') count = -1 @@ -212,9 +218,8 @@ class report_printscreen_list(report_int): tsum[count] = float(tsum[count]) + float(line[f]); else: col.text = '/' - node_line = etree.SubElement(lines, 'row') - for f in range(0,count+1): + for f in range(0, count+1): col = etree.SubElement(node_line, 'col', para='group', tree='no') if tsum[f] != None: if tsum[f] >= 0.01 : From d5ded262fa4a795495ee17e845711b808ee17d5c Mon Sep 17 00:00:00 2001 From: "nch@tinyerp.com" <> Date: Fri, 9 Apr 2010 15:58:15 +0530 Subject: [PATCH 03/17] [REF]:printscreen improvements bzr revid: nch@tinyerp.com-20100409102815-zf7p8xg2yug8wjdh --- bin/report/printscreen/ps_list.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bin/report/printscreen/ps_list.py b/bin/report/printscreen/ps_list.py index a25adb975f6..0dea67382fe 100644 --- a/bin/report/printscreen/ps_list.py +++ b/bin/report/printscreen/ps_list.py @@ -38,12 +38,11 @@ class report_printscreen_list(report_int): def _parse_node(self, root_node): result = [] - groupby = self.context.get('group_by',[]) for node in root_node: field_name = node.get('name') if not eval(str(node.attrib.get('invisible',False)),{'context':self.context}): if node.tag == 'field': - if field_name in groupby: + if field_name in self.groupby: continue result.append(field_name) else: From 67bd95ea5c0c833b1fb407e2a010c88d898fcea5 Mon Sep 17 00:00:00 2001 From: "HDA (OpenERP)" Date: Mon, 12 Apr 2010 14:18:46 +0530 Subject: [PATCH 04/17] Improved grammer for default attribute bzr revid: hda@tinyerp.com-20100412084846-9joosfug04k265e9 --- bin/addons/base/res/partner/partner_view.xml | 4 ++-- bin/addons/base/rng/view.rng | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/bin/addons/base/res/partner/partner_view.xml b/bin/addons/base/res/partner/partner_view.xml index b1be567175e..004f2f8ae8a 100644 --- a/bin/addons/base/res/partner/partner_view.xml +++ b/bin/addons/base/res/partner/partner_view.xml @@ -346,7 +346,7 @@ - + @@ -363,7 +363,7 @@ ir.actions.act_window res.partner form - {"search_default_supplier":supplier} + {"search_default_Suppliers":1} diff --git a/bin/addons/base/rng/view.rng b/bin/addons/base/rng/view.rng index 1de5fb1b441..f3d060bf343 100644 --- a/bin/addons/base/rng/view.rng +++ b/bin/addons/base/rng/view.rng @@ -541,7 +541,6 @@ - From a30e469839580a1756fabc2d3ace69aa537d07a9 Mon Sep 17 00:00:00 2001 From: "nch@tinyerp.com" <> Date: Mon, 12 Apr 2010 18:28:21 +0530 Subject: [PATCH 05/17] [IMP]: removed 'parent_field' from o2m 's attrs as now it is not required by the pager bzr revid: nch@tinyerp.com-20100412125821-9p8gqt06dhs41tfa --- bin/osv/fields.py | 2 -- bin/osv/orm.py | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/bin/osv/fields.py b/bin/osv/fields.py index 980b3ad67c6..b3d35e1c9c0 100644 --- a/bin/osv/fields.py +++ b/bin/osv/fields.py @@ -81,7 +81,6 @@ class _column(object): self.select = select self.selectable = True self.group_operator = args.get('group_operator', False) - self.parent_field = args.get('parent_field', False) for a in args: if args[a]: setattr(self, a, args[a]) @@ -367,7 +366,6 @@ class one2many(_column): _type = 'one2many' def __init__(self, obj, fields_id, string='unknown', limit=None, **args): - args.update({'parent_field':fields_id}) _column.__init__(self, string=string, **args) self._obj = obj self._fields_id = fields_id diff --git a/bin/osv/orm.py b/bin/osv/orm.py index 494989f910e..4cd9e39474d 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -1072,7 +1072,7 @@ class orm_template(object): continue res[f] = {'type': self._columns[f]._type} for arg in ('string', 'readonly', 'states', 'size', 'required', 'group_operator', - 'change_default', 'translate', 'help', 'select', 'selectable','parent_field'): + 'change_default', 'translate', 'help', 'select', 'selectable'): if getattr(self._columns[f], arg): res[f][arg] = getattr(self._columns[f], arg) if not read_access: From b481a12eea9d64659270f0e62749c2e2e0ddcdc5 Mon Sep 17 00:00:00 2001 From: "Rvo (Open ERP)" Date: Tue, 13 Apr 2010 13:02:28 +0530 Subject: [PATCH 06/17] [IMP]: access rights checking stopped for osv_memory objects, filter and shortcut creation rights added for all groups bzr revid: rvo@tinyerp.co.in-20100413073228-earaglnoo4hr2x3r --- bin/addons/__init__.py | 25 +++++++++++--------- bin/addons/base/security/ir.model.access.csv | 6 ++--- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/bin/addons/__init__.py b/bin/addons/__init__.py index 4dd62f11694..5819eaacab4 100644 --- a/bin/addons/__init__.py +++ b/bin/addons/__init__.py @@ -306,7 +306,7 @@ def load_information_from_description_file(module): if os.path.isfile(description_file): return eval(tools.file_open(description_file).read()) - #TODO: refactor the logger in this file to follow the logging guidelines + #TODO: refactor the logger in this file to follow the logging guidelines # for 6.0 logging.getLogger('addons').debug('The module %s does not contain a description file:'\ '__openerp__.py or __terp__.py (deprecated)', module) @@ -595,14 +595,14 @@ class MigrationManager(object): log = logging.getLogger('init') def load_module_graph(cr, graph, status=None, perform_checks=True, **kwargs): - + def process_sql_file(cr, file): queries = fp.read().split(';') for query in queries: new_query = ' '.join(query.split()) if new_query: cr.execute(new_query) - + def load_init_update_xml(cr, m, idref, mode, kind): for filename in package.data.get('%s_xml' % kind, []): logger.notifyChannel('init', netsvc.LOG_INFO, 'module %s: loading %s' % (m, filename)) @@ -631,20 +631,20 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, **kwargs): else: tools.convert_xml_import(cr, m, fp, idref, mode=mode, noupdate=True, **kwargs) fp.close() - + def load_data(cr, module_name, id_map, mode): _load_data(cr, module_name, id_map, mode, 'data') - + def load_demo(cr, module_name, id_map, mode): _load_data(cr, module_name, id_map, mode, 'demo') - + def load_test(cr, module_name, id_map, mode): cr.commit() try: _load_data(cr, module_name, id_map, mode, 'test') finally: cr.rollback() - + def _load_data(cr, module_name, id_map, mode, kind): noupdate = (kind == 'demo') for filename in package.data.get(kind, []): @@ -660,7 +660,7 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, **kwargs): else: tools.convert_xml_import(cr, module_name, file, id_map, mode, noupdate) file.close() - + # **kwargs is passed directly to convert_xml_import if not status: status = {} @@ -722,11 +722,11 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, **kwargs): if hasattr(package, 'demo') or (package.dbdemo and package.state != 'installed'): status['progress'] = (float(statusi)+0.75) / len(graph) load_demo_xml(cr, m, idref, mode) - load_demo(cr, m, idref, mode) + load_demo(cr, m, idref, mode) cr.execute('update ir_module_module set demo=%s where id=%s', (True, mid)) - + load_test(cr, m, idref, mode) - + package_todo.append(package.name) migrations.migrate_module(package, 'post') @@ -830,6 +830,9 @@ def load_modules(db, force_demo=False, status=None, update_module=False): if has_updates: cr.execute("""select model,name from ir_model where id not in (select model_id from ir_model_access)""") for (model, name) in cr.fetchall(): + obj = pool.get(model) + if osv.osv.osv_memory in obj.__class__.__bases__: + continue logger.notifyChannel('init', netsvc.LOG_WARNING, 'object %s (%s) has no access rules!' % (model, name)) cr.execute("SELECT model from ir_model") diff --git a/bin/addons/base/security/ir.model.access.csv b/bin/addons/base/security/ir.model.access.csv index 1d772991e76..bc291af8b33 100644 --- a/bin/addons/base/security/ir.model.access.csv +++ b/bin/addons/base/security/ir.model.access.csv @@ -29,7 +29,7 @@ "access_ir_sequence_group_user","ir_sequence group_user","model_ir_sequence",,1,1,1,1 "access_ir_sequence_type_group_user","ir_sequence_type group_user","model_ir_sequence_type",,1,0,0,0 "access_ir_translation_group_system","ir_translation group_system","model_ir_translation",,1,1,1,1 -"access_ir_ui_menu_group_user","ir_ui_menu group_user","model_ir_ui_menu",,1,0,0,0 +"access_ir_ui_menu_group_user","ir_ui_menu group_user","model_ir_ui_menu",,1,0,1,0 "access_ir_ui_menu_group_system","ir_ui_menu group_system","model_ir_ui_menu","group_system",1,1,1,1 "access_ir_ui_view_group_user","ir_ui_view group_user","model_ir_ui_view",,1,0,0,0 "access_ir_ui_view_group_system","ir_ui_view group_system","model_ir_ui_view","group_system",1,1,1,1 @@ -37,7 +37,7 @@ "access_ir_ui_view_custom_group_system","ir_ui_view_custom_group_system","model_ir_ui_view_custom","group_system",1,1,1,1 "access_ir_ui_view_sc_group_user","ir_ui_view_sc group_user","model_ir_ui_view_sc",,1,1,1,1 "access_ir_values_group_erp_manager","ir_values group_erp_manager","model_ir_values","group_erp_manager",1,1,1,1 -"access_ir_values_group_all","ir_values group_all","model_ir_values",,1,0,0,0 +"access_ir_values_group_all","ir_values group_all","model_ir_values",,1,0,1,0 "access_wizard_ir_model_menu_create_group_system","wizard_ir_model_menu_create group_system","model_wizard_ir_model_menu_create","group_system",1,1,1,1 "access_wizard_ir_model_menu_create_line_group_system","wizard_ir_model_menu_create_line group_system","model_wizard_ir_model_menu_create_line","group_system",1,1,1,1 "access_wizard_module_lang_export_group_system","wizard_module_lang_export group_system","model_wizard_module_lang_export","group_system",1,1,1,1 @@ -89,7 +89,7 @@ "access_res_users_group_erp_manager","res_users group_erp_manager","model_res_users","group_erp_manager",1,1,1,1 "access_ir_actions_all","ir_actions_all","model_ir_actions_actions",,1,0,0,0 "access_ir_actions_group_system","ir_actions_group_system","model_ir_actions_actions","group_system",1,1,1,1 -"access_ir_actions_act_window_all","ir_actions_act_window_all","model_ir_actions_act_window",,1,0,0,0 +"access_ir_actions_act_window_all","ir_actions_act_window_all","model_ir_actions_act_window",,1,0,1,0 "access_ir_actions_act_window_system","ir_actions_act_window_system","model_ir_actions_act_window","group_system",1,1,1,1 "access_ir_actions_act_window_close_all","ir_actions_act_window_close_all","model_ir_actions_act_window_close",,1,0,0,0 "access_ir_actions_act_window_close_group_system","ir_actions_act_window_close_group_system","model_ir_actions_act_window_close","group_system",1,1,1,1 From eebbd52d8a2dce5e1de84b66094cf9847fdf0187 Mon Sep 17 00:00:00 2001 From: "Ysa (Open ERP)" Date: Tue, 13 Apr 2010 15:31:57 +0530 Subject: [PATCH 07/17] [IMP] diagram :- parse node and arrow tag field. bzr revid: ysa@tinyerp.co.in-20100413100157-nhz3lejj8ayg2zqc --- bin/osv/orm.py | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/bin/osv/orm.py b/bin/osv/orm.py index 4cd9e39474d..4367730be27 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -1134,7 +1134,21 @@ class orm_template(object): fields = {} childs = True - if node.tag == 'field': + if node.tag in ('field', 'node', 'arrow'): + if node.get('object'): + attrs = {} + views = {} + for f in node: + if f.tag in ('field'): + node.remove(f) + ctx = context.copy() + ctx['base_model_name'] = self._name + xarch, xfields = self.pool.get(node.get('object')).__view_look_dom_arch(cr, user, f, view_id, ctx) + views[str(f.tag)] = { + 'arch': xarch, + 'fields': xfields + } + attrs = {'views': views} if node.get('name'): attrs = {} try: @@ -1253,20 +1267,8 @@ class orm_template(object): arch = etree.tostring(node, encoding="utf-8").replace('\t', '') - #code for diagram view. fields={} - if node.tag=='diagram': - if node.getchildren()[0].tag=='node': - node_fields=self.pool.get(node.getchildren()[0].get('object')).fields_get(cr, user, fields_def.keys(), context) - if node.getchildren()[1].tag=='arrow': - arrow_fields = self.pool.get(node.getchildren()[1].get('object')).fields_get(cr, user, fields_def.keys(), context) - for key,value in node_fields.items(): - fields[key]=value - for key,value in arrow_fields.items(): - fields[key]=value - else: - fields = self.fields_get(cr, user, fields_def.keys(), context) - + fields = self.fields_get(cr, user, fields_def.keys(), context) for field in fields_def: if field == 'id': # sometime, the view may containt the (invisible) field 'id' needed for a domain (when 2 objects have cross references) From 8a481e4fa2866c096b9aec39b50730e6f3eefaff Mon Sep 17 00:00:00 2001 From: "Ysa (Open ERP)" Date: Tue, 13 Apr 2010 18:27:53 +0530 Subject: [PATCH 08/17] [IMP] diagram :- rename arrow attribute single to label. bzr revid: ysa@tinyerp.co.in-20100413125753-oryt6quuq1x00nub --- bin/addons/base/ir/ir_ui_view.py | 12 ++++++------ bin/addons/base/ir/workflow/workflow_view.xml | 2 +- bin/addons/base/rng/view.rng | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bin/addons/base/ir/ir_ui_view.py b/bin/addons/base/ir/ir_ui_view.py index 95ce993c8b1..ae92bacf9d5 100644 --- a/bin/addons/base/ir/ir_ui_view.py +++ b/bin/addons/base/ir/ir_ui_view.py @@ -132,13 +132,13 @@ class view(osv.osv): return super(view, self).write(cr, uid, ids, vals, context) - def graph_get(self, cr, uid, id, model, node_obj, conn_obj, src_node, des_node,signal,scale,context={}): + def graph_get(self, cr, uid, id, model, node_obj, conn_obj, src_node, des_node,label,scale,context={}): nodes=[] nodes_name=[] transitions=[] start=[] tres={} - sig={} + labels={} no_ancester=[] blank_nodes = [] @@ -177,9 +177,9 @@ class view(osv.osv): for t in _Arrow_Obj.read(cr,uid, a[_Destination_Field],[]): transitions.append((a['id'], t[des_node][0])) tres[str(t['id'])] = (a['id'],t[des_node][0]) - if t.has_key(str(signal)) and str(t[signal])=='False': - t[signal]=' ' - sig[str(t['id'])] = (a['id'],t.get(signal,' ')) + if t.has_key(str(label)) and str(t[label])=='False': + t[label]=' ' + labels[str(t['id'])] = (a['id'],t.get(label,' ')) g = graph(nodes, transitions, no_ancester) g.process(start) g.scale(*scale) @@ -188,7 +188,7 @@ class view(osv.osv): for node in nodes_name: results[str(node[0])] = result[node[0]] results[str(node[0])]['name'] = node[1] - return {'nodes': results, 'transitions': tres, 'signal' : sig, 'blank_nodes': blank_nodes} + return {'nodes': results, 'transitions': tres, 'label' : labels, 'blank_nodes': blank_nodes} view() class view_sc(osv.osv): diff --git a/bin/addons/base/ir/workflow/workflow_view.xml b/bin/addons/base/ir/workflow/workflow_view.xml index 04457f21338..a3d6cf5d1b5 100644 --- a/bin/addons/base/ir/workflow/workflow_view.xml +++ b/bin/addons/base/ir/workflow/workflow_view.xml @@ -34,7 +34,7 @@ - + diff --git a/bin/addons/base/rng/view.rng b/bin/addons/base/rng/view.rng index f3d060bf343..d2d108a2163 100644 --- a/bin/addons/base/rng/view.rng +++ b/bin/addons/base/rng/view.rng @@ -63,7 +63,7 @@ - + From a658362faebb44f770d9f2be7c039e8e8f604577 Mon Sep 17 00:00:00 2001 From: "Ysa (Open ERP)" Date: Tue, 13 Apr 2010 18:48:40 +0530 Subject: [PATCH 09/17] [IMP] diagram :- add multiple label on edge. bzr revid: ysa@tinyerp.co.in-20100413131840-z4luf0k0znjnjrap --- bin/addons/base/ir/ir_ui_view.py | 10 +++++++--- bin/addons/base/ir/workflow/workflow_view.xml | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/bin/addons/base/ir/ir_ui_view.py b/bin/addons/base/ir/ir_ui_view.py index ae92bacf9d5..1bd454c6a8b 100644 --- a/bin/addons/base/ir/ir_ui_view.py +++ b/bin/addons/base/ir/ir_ui_view.py @@ -177,9 +177,13 @@ class view(osv.osv): for t in _Arrow_Obj.read(cr,uid, a[_Destination_Field],[]): transitions.append((a['id'], t[des_node][0])) tres[str(t['id'])] = (a['id'],t[des_node][0]) - if t.has_key(str(label)) and str(t[label])=='False': - t[label]=' ' - labels[str(t['id'])] = (a['id'],t.get(label,' ')) + label_string = "" + for lbl in eval(label): + if t.has_key(str(lbl)) and str(t[lbl])=='False': + label_string = label_string + ' ' + else: + label_string = label_string + " " + t[lbl] + labels[str(t['id'])] = (a['id'],label_string) g = graph(nodes, transitions, no_ancester) g.process(start) g.scale(*scale) diff --git a/bin/addons/base/ir/workflow/workflow_view.xml b/bin/addons/base/ir/workflow/workflow_view.xml index a3d6cf5d1b5..2868096119a 100644 --- a/bin/addons/base/ir/workflow/workflow_view.xml +++ b/bin/addons/base/ir/workflow/workflow_view.xml @@ -34,7 +34,7 @@ - + From 35b3d766437270549df906e6cc3041a2ecc7ec6f Mon Sep 17 00:00:00 2001 From: "Ysa (Open ERP)" Date: Tue, 13 Apr 2010 19:09:03 +0530 Subject: [PATCH 10/17] [IMP] diagram :- improve diagram view. bzr revid: ysa@tinyerp.co.in-20100413133903-wzdra2bn46dauoed --- bin/addons/base/ir/workflow/workflow_view.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/addons/base/ir/workflow/workflow_view.xml b/bin/addons/base/ir/workflow/workflow_view.xml index 2868096119a..e31cd1395b4 100644 --- a/bin/addons/base/ir/workflow/workflow_view.xml +++ b/bin/addons/base/ir/workflow/workflow_view.xml @@ -30,9 +30,10 @@ diagram - + + From 7d81ac0cde8243d593c270a4497e0c9d1611d35e Mon Sep 17 00:00:00 2001 From: rga Date: Wed, 14 Apr 2010 15:58:26 +0530 Subject: [PATCH 11/17] [FIX] M2O field, widget=selection not display all records bzr revid: rga@rga-desktop-20100414102826-huc2x2h891r8k2j8 --- bin/osv/orm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/osv/orm.py b/bin/osv/orm.py index 4cd9e39474d..b1a8afb6080 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -1167,7 +1167,7 @@ class orm_template(object): dom = column._domain dom += eval(node.get('domain','[]'), {'uid':user, 'time':time}) context.update(eval(node.get('context','{}'))) - attrs['selection'] = self.pool.get(relation).name_search(cr, user, '', dom, context=context) + attrs['selection'] = self.pool.get(relation).name_search(cr, user, '', dom, context=context,limit=None) if (node.get('required') and not int(node.get('required'))) or not column.required: attrs['selection'].append((False,'')) fields[node.get('name')] = attrs From 2cd495e9c4877a46b95b8b0bb55abcf1b5c8d6d3 Mon Sep 17 00:00:00 2001 From: rga Date: Wed, 14 Apr 2010 16:14:26 +0530 Subject: [PATCH 12/17] [IMP] Added domain in filter action bzr revid: rga@rga-desktop-20100414104426-njnmvs16i0jypeta --- bin/addons/base/res/partner/partner_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/addons/base/res/partner/partner_view.xml b/bin/addons/base/res/partner/partner_view.xml index 004f2f8ae8a..74c7169b9ae 100644 --- a/bin/addons/base/res/partner/partner_view.xml +++ b/bin/addons/base/res/partner/partner_view.xml @@ -389,7 +389,7 @@ ir.actions.act_window res.partner form - [] + [('customer','=',1)] {'default_customer':1} @@ -399,7 +399,7 @@ ir.actions.act_window res.partner form - [] + [('supplier','=',1)] {'default_customer':0, 'default_supplier':1} From ad67123966e7aba085bdfa0a5788bc05e1ac7805 Mon Sep 17 00:00:00 2001 From: "Ysa (Open ERP)" Date: Wed, 14 Apr 2010 17:29:14 +0530 Subject: [PATCH 13/17] [IMP] diagram :- improve code(label display) bzr revid: ysa@tinyerp.co.in-20100414115914-p025jtgwtmyvww7l --- bin/addons/base/ir/ir_ui_view.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/bin/addons/base/ir/ir_ui_view.py b/bin/addons/base/ir/ir_ui_view.py index 1bd454c6a8b..8d81064a1bf 100644 --- a/bin/addons/base/ir/ir_ui_view.py +++ b/bin/addons/base/ir/ir_ui_view.py @@ -133,6 +133,8 @@ class view(osv.osv): return super(view, self).write(cr, uid, ids, vals, context) def graph_get(self, cr, uid, id, model, node_obj, conn_obj, src_node, des_node,label,scale,context={}): + if not label: + label = [] nodes=[] nodes_name=[] transitions=[] @@ -178,11 +180,12 @@ class view(osv.osv): transitions.append((a['id'], t[des_node][0])) tres[str(t['id'])] = (a['id'],t[des_node][0]) label_string = "" - for lbl in eval(label): - if t.has_key(str(lbl)) and str(t[lbl])=='False': - label_string = label_string + ' ' - else: - label_string = label_string + " " + t[lbl] + if label: + for lbl in eval(label): + if t.has_key(str(lbl)) and str(t[lbl])=='False': + label_string = label_string + ' ' + else: + label_string = label_string + " " + t[lbl] labels[str(t['id'])] = (a['id'],label_string) g = graph(nodes, transitions, no_ancester) g.process(start) From 4ebbb9fbda8337fdbf68626244042e64c4f9b9b5 Mon Sep 17 00:00:00 2001 From: "Ysa (Open ERP)" Date: Wed, 14 Apr 2010 17:42:17 +0530 Subject: [PATCH 14/17] [IMP] diagram :- improve parser code(parse node and arrow field). bzr revid: ysa@tinyerp.co.in-20100414121217-1yh6uohkjkwl8r8e --- bin/osv/orm.py | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/bin/osv/orm.py b/bin/osv/orm.py index c134900af21..d3fc4b89c5c 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -1134,21 +1134,31 @@ class orm_template(object): fields = {} childs = True + def encode(s): + if isinstance(s, unicode): + return s.encode('utf8') + return s + if node.tag in ('field', 'node', 'arrow'): if node.get('object'): attrs = {} views = {} + xml = "
" for f in node: if f.tag in ('field'): - node.remove(f) - ctx = context.copy() - ctx['base_model_name'] = self._name - xarch, xfields = self.pool.get(node.get('object')).__view_look_dom_arch(cr, user, f, view_id, ctx) - views[str(f.tag)] = { - 'arch': xarch, - 'fields': xfields - } - attrs = {'views': views} + xml += etree.tostring(f, encoding="utf-8") + xml += "
" + new_xml = etree.fromstring(encode(xml)) + ctx = context.copy() + ctx['base_model_name'] = self._name + xarch, xfields = self.pool.get(node.get('object',False)).__view_look_dom_arch(cr, user, new_xml, view_id, ctx) + views[str(f.tag)] = { + 'arch': xarch, + 'fields': xfields + } + attrs = {'views': views} + view = False + fields = views.get('field',False) and views['field'].get('fields',False) if node.get('name'): attrs = {} try: @@ -1268,7 +1278,17 @@ class orm_template(object): arch = etree.tostring(node, encoding="utf-8").replace('\t', '') fields={} - fields = self.fields_get(cr, user, fields_def.keys(), context) + if node.tag=='diagram': + if node.getchildren()[0].tag=='node': + node_fields=self.pool.get(node.getchildren()[0].get('object')).fields_get(cr, user, fields_def.keys(), context) + if node.getchildren()[1].tag=='arrow': + arrow_fields = self.pool.get(node.getchildren()[1].get('object')).fields_get(cr, user, fields_def.keys(), context) + for key,value in node_fields.items(): + fields[key]=value + for key,value in arrow_fields.items(): + fields[key]=value + else: + fields = self.fields_get(cr, user, fields_def.keys(), context) for field in fields_def: if field == 'id': # sometime, the view may containt the (invisible) field 'id' needed for a domain (when 2 objects have cross references) From c6be656b4f897c4c66db8aaa4f677673a8b35d42 Mon Sep 17 00:00:00 2001 From: "Ysa (Open ERP)" Date: Thu, 15 Apr 2010 12:29:59 +0530 Subject: [PATCH 15/17] [IMP] wizard :- improve wizard view. bzr revid: ysa@tinyerp.co.in-20100415065959-3bwyzpq06l9e34me --- bin/addons/base/ir/workflow/workflow_view.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bin/addons/base/ir/workflow/workflow_view.xml b/bin/addons/base/ir/workflow/workflow_view.xml index e31cd1395b4..f6bfc0096f1 100644 --- a/bin/addons/base/ir/workflow/workflow_view.xml +++ b/bin/addons/base/ir/workflow/workflow_view.xml @@ -30,10 +30,13 @@ diagram - + + + + From 321c9d89922f81f5d4127904aa1c603f49db43d6 Mon Sep 17 00:00:00 2001 From: rga Date: Thu, 15 Apr 2010 19:55:24 +0530 Subject: [PATCH 16/17] Revert changes to use name attribute to set dafault on fieltrs bzr revid: rga@rga-desktop-20100415142524-mq2x95jshur4p99k --- bin/addons/base/rng/view.rng | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/addons/base/rng/view.rng b/bin/addons/base/rng/view.rng index ea937e58e36..2979c739764 100644 --- a/bin/addons/base/rng/view.rng +++ b/bin/addons/base/rng/view.rng @@ -541,6 +541,7 @@ + From b134ac988e63c0632978ab4c6ba709d3c51e2053 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Tue, 20 Apr 2010 13:58:29 +0200 Subject: [PATCH 17/17] [IMP] re-enabled warning for osv_memory access rights, because we are going to check them explictly bzr revid: odo@openerp.com-20100420115829-ysyk4b5n6ox1wapn --- bin/addons/__init__.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/bin/addons/__init__.py b/bin/addons/__init__.py index 5819eaacab4..1b2d13c95e3 100644 --- a/bin/addons/__init__.py +++ b/bin/addons/__init__.py @@ -830,9 +830,6 @@ def load_modules(db, force_demo=False, status=None, update_module=False): if has_updates: cr.execute("""select model,name from ir_model where id not in (select model_id from ir_model_access)""") for (model, name) in cr.fetchall(): - obj = pool.get(model) - if osv.osv.osv_memory in obj.__class__.__bases__: - continue logger.notifyChannel('init', netsvc.LOG_WARNING, 'object %s (%s) has no access rules!' % (model, name)) cr.execute("SELECT model from ir_model")