'customer': fields.boolean('Customer'),
'supplier': fields.boolean('Supplier'),
'city':fields.related('address','city',type='char', string='City'),
- 'country':fields.related('address','country_id','name',type='char', string='Country'),
+ 'country':fields.related('address','country_id',type='many2one', relation='res.country', string='Country'),
}
_defaults = {
'active': lambda *a: 1,
class related(function):
def _fnct_search(self, cr, uid, ids, obj=None, name=None, context=None):
- print "_fnct_search >>>",ids,obj,name
- return self._fnct_search(obj, cr, uid, obj, name, args)
+ raise 'Not Implemented Yet'
+
+ def _fnct_write(self,obj,cr, uid, ids, field_name, args, context=None):
+ raise 'Not Implemented Yet'
def _fnct_read(self,obj,cr, uid, ids, field_name, args, context=None):
+ if not ids: return {}
relation=obj._name
res={}
- for data in obj.browse(cr,uid,ids):
+ objlst = obj.browse(cr,uid,ids)
+ for data in objlst:
t_data=data
relation=obj._name
- for i in range(0,len(args)-1):
- field_detail=self._field_get(cr,uid,relation,args[i])
+ for i in range(len(self.arg)):
+ field_detail=self._field_get(cr,uid,relation,self.arg[i])
relation=field_detail[0]
- if field_detail[1]=='one2many':
- if t_data[args[i]]:
- t_data=t_data[args[i]][0]
- else:
- t_data=False
- break
- elif field_detail[1]=='many2one':
- if t_data[args[i]]:
- t_data=t_data[args[i]]
- else:
- t_data=False
- break
- if t_data:
- res[data.id]=t_data[args[len(args)-1]]
+ if not t_data[self.arg[i]]:
+ t_data = False
+ break
+ if field_detail[1] in ('one2many','many2many'):
+ t_data=t_data[self.arg[i]][0]
+ else:
+ t_data=t_data[self.arg[i]]
+ if type(t_data) == type(objlst[0]):
+ res[data.id]=t_data.id
else:
res[data.id]=t_data
return res
-
+
def __init__(self,*arg,**args):
- function.__init__(self,self._fnct_read, arg, fnct_inv_arg=arg,method=True, fnct_search=self._fnct_search,**args)
+ print arg
+ self.arg = arg
+ super(related, self).__init__(self._fnct_read, arg, fnct_inf=self._fnct_write, fnct_inv_arg=arg,method=True, fnct_search=self._fnct_search,**args)
+ # TODO: call field_get on the object, not in the DB
def _field_get(self, cr, uid, model_name, prop):
cr.execute('SELECT relation,ttype FROM ir_model_fields WHERE name=%s AND model=%s', (prop, model_name))
res = cr.fetchone()