[FIX] Manual object and field creation with searchable
lp bug: https://launchpad.net/bugs/489573 fixed bzr revid: hda@tinyerp.com-20091229130841-88yee2x111ymw0cd
This commit is contained in:
parent
7ce73f7713
commit
131355606c
|
@ -83,7 +83,7 @@ class ir_model(osv.osv):
|
||||||
if vals.get('state','base')=='manual':
|
if vals.get('state','base')=='manual':
|
||||||
self.instanciate(cr, user, vals['model'], context)
|
self.instanciate(cr, user, vals['model'], context)
|
||||||
self.pool.get(vals['model']).__init__(self.pool, cr)
|
self.pool.get(vals['model']).__init__(self.pool, cr)
|
||||||
self.pool.get(vals['model'])._auto_init(cr,{})
|
self.pool.get(vals['model'])._auto_init(cr,{'field_name':vals['name'],'field_state':'manual','select':vals.get('select_level','0')})
|
||||||
#pooler.restart_pool(cr.dbname)
|
#pooler.restart_pool(cr.dbname)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
@ -113,10 +113,10 @@ class ir_model_grid(osv.osv):
|
||||||
result = super(osv.osv, self).read(cr, uid, ids, fields, context, load)
|
result = super(osv.osv, self).read(cr, uid, ids, fields, context, load)
|
||||||
allgr = self.pool.get('res.groups').search(cr, uid, [], context=context)
|
allgr = self.pool.get('res.groups').search(cr, uid, [], context=context)
|
||||||
acc_obj = self.pool.get('ir.model.access')
|
acc_obj = self.pool.get('ir.model.access')
|
||||||
|
|
||||||
if not isinstance(result,list):
|
if not isinstance(result,list):
|
||||||
result=[result]
|
result=[result]
|
||||||
|
|
||||||
for res in result:
|
for res in result:
|
||||||
rules = acc_obj.search(cr, uid, [('model_id', '=', res['id'])])
|
rules = acc_obj.search(cr, uid, [('model_id', '=', res['id'])])
|
||||||
rules_br = acc_obj.browse(cr, uid, rules, context=context)
|
rules_br = acc_obj.browse(cr, uid, rules, context=context)
|
||||||
|
@ -247,18 +247,19 @@ class ir_model_fields(osv.osv):
|
||||||
vals['model'] = model_data.model
|
vals['model'] = model_data.model
|
||||||
if context and context.get('manual',False):
|
if context and context.get('manual',False):
|
||||||
vals['state'] = 'manual'
|
vals['state'] = 'manual'
|
||||||
res = super(ir_model_fields,self).create(cr, user, vals, context)
|
res = super(ir_model_fields,self).create(cr, user, vals, context)
|
||||||
if vals.get('state','base') == 'manual':
|
if vals.get('state','base') == 'manual':
|
||||||
if not vals['name'].startswith('x_'):
|
if not vals['name'].startswith('x_'):
|
||||||
raise except_orm(_('Error'), _("Custom fields must have a name that starts with 'x_' !"))
|
raise except_orm(_('Error'), _("Custom fields must have a name that starts with 'x_' !"))
|
||||||
|
|
||||||
if 'relation' in vals and not self.pool.get('ir.model').search(cr, user, [('model','=',vals['relation'])]):
|
if 'relation' in vals and not self.pool.get('ir.model').search(cr, user, [('model','=',vals['relation'])]):
|
||||||
raise except_orm(_('Error'), _("Model %s Does not Exist !" % vals['relation']))
|
raise except_orm(_('Error'), _("Model %s Does not Exist !" % vals['relation']))
|
||||||
|
|
||||||
if self.pool.get(vals['model']):
|
if self.pool.get(vals['model']):
|
||||||
self.pool.get(vals['model']).__init__(self.pool, cr)
|
self.pool.get(vals['model']).__init__(self.pool, cr)
|
||||||
self.pool.get(vals['model'])._auto_init(cr, {})
|
#Added context to _auto_init for special treatment to custom field for select_level
|
||||||
|
self.pool.get(vals['model'])._auto_init(cr, {'field_name':vals['name'],'field_state':'manual','select':vals.get('select_level','0')})
|
||||||
|
|
||||||
return res
|
return res
|
||||||
ir_model_fields()
|
ir_model_fields()
|
||||||
|
|
||||||
|
@ -458,7 +459,7 @@ class ir_model_data(osv.osv):
|
||||||
if (not xml_id) and (not self.doinit):
|
if (not xml_id) and (not self.doinit):
|
||||||
return False
|
return False
|
||||||
action_id = False
|
action_id = False
|
||||||
|
|
||||||
if xml_id:
|
if xml_id:
|
||||||
cr.execute('select id,res_id from ir_model_data where module=%s and name=%s', (module,xml_id))
|
cr.execute('select id,res_id from ir_model_data where module=%s and name=%s', (module,xml_id))
|
||||||
results = cr.fetchall()
|
results = cr.fetchall()
|
||||||
|
@ -567,7 +568,7 @@ class ir_model_data(osv.osv):
|
||||||
def _process_end(self, cr, uid, modules):
|
def _process_end(self, cr, uid, modules):
|
||||||
if not modules:
|
if not modules:
|
||||||
return True
|
return True
|
||||||
modules = list(modules)
|
modules = list(modules)
|
||||||
module_in = ",".join(["%s"] * len(modules))
|
module_in = ",".join(["%s"] * len(modules))
|
||||||
cr.execute('select id,name,model,res_id,module from ir_model_data where module in (' + module_in + ') and noupdate=%s', modules + [False])
|
cr.execute('select id,name,model,res_id,module from ir_model_data where module in (' + module_in + ') and noupdate=%s', modules + [False])
|
||||||
wkf_todo = []
|
wkf_todo = []
|
||||||
|
|
|
@ -365,10 +365,18 @@ class orm_template(object):
|
||||||
'ttype': f._type,
|
'ttype': f._type,
|
||||||
'relation': f._obj or 'NULL',
|
'relation': f._obj or 'NULL',
|
||||||
'view_load': (f.view_load and 1) or 0,
|
'view_load': (f.view_load and 1) or 0,
|
||||||
'select_level': str(f.select or 0),
|
'select_level': tools.ustr(f.select or 0),
|
||||||
'readonly':(f.readonly and 1) or 0,
|
'readonly':(f.readonly and 1) or 0,
|
||||||
'required':(f.required and 1) or 0,
|
'required':(f.required and 1) or 0,
|
||||||
}
|
}
|
||||||
|
# When its a custom field,it does not contain f.select
|
||||||
|
if context.get('field_state','base') == 'manual':
|
||||||
|
if context.get('field_name','') == k:
|
||||||
|
vals['select_level'] = context.get('select','0')
|
||||||
|
#setting value to let the problem NOT occur next time
|
||||||
|
else:
|
||||||
|
vals['select_level'] = cols[k]['select_level']
|
||||||
|
|
||||||
if k not in cols:
|
if k not in cols:
|
||||||
cr.execute('select nextval(%s)', ('ir_model_fields_id_seq',))
|
cr.execute('select nextval(%s)', ('ir_model_fields_id_seq',))
|
||||||
id = cr.fetchone()[0]
|
id = cr.fetchone()[0]
|
||||||
|
@ -2211,13 +2219,14 @@ class orm(orm_template):
|
||||||
return 'length("%s") as "%s"' % (f, f)
|
return 'length("%s") as "%s"' % (f, f)
|
||||||
return '"%s"' % (f,)
|
return '"%s"' % (f,)
|
||||||
fields_pre2 = map(convert_field, fields_pre)
|
fields_pre2 = map(convert_field, fields_pre)
|
||||||
|
order_by = self._parent_order or self._order
|
||||||
for i in range(0, len(ids), cr.IN_MAX):
|
for i in range(0, len(ids), cr.IN_MAX):
|
||||||
sub_ids = ids[i:i+cr.IN_MAX]
|
sub_ids = ids[i:i+cr.IN_MAX]
|
||||||
if d1:
|
if d1:
|
||||||
cr.execute('SELECT %s FROM \"%s\" WHERE id IN (%s) AND %s ORDER BY %s' % \
|
cr.execute('SELECT %s FROM \"%s\" WHERE id IN (%s) AND %s ORDER BY %s' % \
|
||||||
(','.join(fields_pre2 + ['id']), self._table,
|
(','.join(fields_pre2 + ['id']), self._table,
|
||||||
','.join(['%s' for x in sub_ids]), d1,
|
','.join(['%s' for x in sub_ids]), d1,
|
||||||
self._order),sub_ids + d2)
|
order_by),sub_ids + d2)
|
||||||
if not cr.rowcount == len({}.fromkeys(sub_ids)):
|
if not cr.rowcount == len({}.fromkeys(sub_ids)):
|
||||||
raise except_orm(_('AccessError'),
|
raise except_orm(_('AccessError'),
|
||||||
_('You try to bypass an access rule (Document type: %s).') % self._description)
|
_('You try to bypass an access rule (Document type: %s).') % self._description)
|
||||||
|
@ -2225,7 +2234,7 @@ class orm(orm_template):
|
||||||
cr.execute('SELECT %s FROM \"%s\" WHERE id IN (%s) ORDER BY %s' % \
|
cr.execute('SELECT %s FROM \"%s\" WHERE id IN (%s) ORDER BY %s' % \
|
||||||
(','.join(fields_pre2 + ['id']), self._table,
|
(','.join(fields_pre2 + ['id']), self._table,
|
||||||
','.join(['%s' for x in sub_ids]),
|
','.join(['%s' for x in sub_ids]),
|
||||||
self._order), sub_ids)
|
order_by), sub_ids)
|
||||||
res.extend(cr.dictfetchall())
|
res.extend(cr.dictfetchall())
|
||||||
else:
|
else:
|
||||||
res = map(lambda x: {'id': x}, ids)
|
res = map(lambda x: {'id': x}, ids)
|
||||||
|
|
Loading…
Reference in New Issue