From fea00d94296fd6d0511e5165e070c4acc61acab0 Mon Sep 17 00:00:00 2001 From: Christophe Simonis <chs@openerp.com> Date: Fri, 7 May 2010 15:50:02 +0200 Subject: [PATCH] [FIX]orm: invisible fields with widget=selection must have at least the default value into the selection lp bug: https://launchpad.net/bugs/575748 fixed bzr revid: chs@openerp.com-20100507135002-78s6p0rwccu1vrdd --- bin/osv/orm.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/bin/osv/orm.py b/bin/osv/orm.py index 133f6cdda68e..6a96f22ff404 100644 --- a/bin/osv/orm.py +++ b/bin/osv/orm.py @@ -1153,12 +1153,8 @@ class orm_template(object): def check_group(node): if node.get('groups'): groups = node.get('groups').split(',') - can_see = False access_pool = self.pool.get('ir.model.access') - for group in groups: - can_see = can_see or access_pool.check_groups(cr, user, group) - if can_see: - break + can_see = any(access_pool.check_groups(cr, user, group) for group in groups) if not can_see: node.set('invisible', '1') if 'attrs' in node.attrib: @@ -1199,7 +1195,8 @@ class orm_template(object): column = False if column: - relation = column._obj + relation = self.pool.get(column._obj) + childs = False views = {} for f in node: @@ -1207,7 +1204,7 @@ class orm_template(object): node.remove(f) ctx = context.copy() ctx['base_model_name'] = self._name - xarch, xfields = self.pool.get(relation).__view_look_dom_arch(cr, user, f, view_id, ctx) + xarch, xfields = relation.__view_look_dom_arch(cr, user, f, view_id, ctx) views[str(f.tag)] = { 'arch': xarch, 'fields': xfields @@ -1215,7 +1212,13 @@ class orm_template(object): attrs = {'views': views} if node.get('widget') and node.get('widget') == 'selection': if not check_group(node): - attrs['selection'] = [] + # the field is just invisible. default value must be in the selection + name = node.get('name') + default = self.default_get(cr, user, [name], context=context).get(name) + if default: + attrs['selection'] = relation.name_get(cr, 1, default, context=context) + else: + attrs['selection'] = [] # We can not use the 'string' domain has it is defined according to the record ! else: dom = [] @@ -1223,7 +1226,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, limit=None, name_get_uid=1) + attrs['selection'] = relation._name_search(cr, user, '', dom, context=context, limit=None, name_get_uid=1) if (node.get('required') and not int(node.get('required'))) or not column.required: attrs['selection'].append((False,'')) fields[node.get('name')] = attrs -- GitLab