Merge lp:~openerp-dev/openobject-server/trunk-bug-712254-ysa into lp:openobject-server

Proposed by Yogesh (SerpentCS)
Status: Rejected
Rejected by: Vo Minh Thu
Proposed branch: lp:~openerp-dev/openobject-server/trunk-bug-712254-ysa
Merge into: lp:openobject-server
Diff against target: 65 lines (+15/-10)
1 file modified
openerp/osv/fields.py (+15/-10)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/trunk-bug-712254-ysa
Reviewer Review Type Date Requested Status
Yogesh (SerpentCS) (community) Needs Resubmitting
Naresh(OpenERP) Pending
Review via email: mp+65941@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Vo Minh Thu (thu) wrote :

- You are computing the company_id with

  company_id = obj.pool.get('res.users').browse(cr, uid, uid, context).company_id.id

but later in _fnct_write, it is computed with

  cid = company._company_default_get(cr, uid, obj._name, def_id, context=context)

Did you choose the former for a specific reason?

- You have made twice the same modification. Please refactor the code when you see duplicated code.

3481. By Yogesh (SerpentCS)

[FIX+IMP] improvement in fnct_write and fnct_read method of property class.

Revision history for this message
Yogesh (SerpentCS) (yogesh-serpentcs) wrote :

Hello sir,

I have improve the code. Please check it.

Thanks,

review: Needs Resubmitting
Revision history for this message
Vo Minh Thu (thu) wrote :

Actually, the call to _company_default_get shouldn't be there (it is unrelated to the property field). We also want to make the read/write function be much simpler, with the main work being done in ir.properties.

qdp will work on it (next week I think) as part of some larger rework, so I will reject this merge proposal.

Part of the reason it needs a rework is that at creation time, the company is chosen (wrongly) by _company_default_get. Later when we want to read the property, we have no idea of the company that was chosen and cannot decide which property is the right one.

Unmerged revisions

3481. By Yogesh (SerpentCS)

[FIX+IMP] improvement in fnct_write and fnct_read method of property class.

3480. By Yogesh (SerpentCS)

[FIX] add domain comapny_id = current user comapny in fnct_read and _get_by_id method in fields.property class.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'openerp/osv/fields.py'
--- openerp/osv/fields.py 2011-06-24 14:01:03 +0000
+++ openerp/osv/fields.py 2011-06-27 10:13:32 +0000
@@ -1026,11 +1026,11 @@
1026 replaces[value._name][value.id] = True1026 replaces[value._name][value.id] = True
1027 return default_value, replaces1027 return default_value, replaces
10281028
1029 def _get_by_id(self, obj, cr, uid, prop_name, ids, context=None):1029 def _get_by_id(self, obj, cr, uid, prop_name, ids, company_id=False, context=None):
1030 prop = obj.pool.get('ir.property')1030 prop = obj.pool.get('ir.property')
1031 vids = [obj._name + ',' + str(oid) for oid in ids]1031 vids = [obj._name + ',' + str(oid) for oid in ids]
10321032
1033 domain = [('fields_id.model', '=', obj._name), ('fields_id.name','in',prop_name)]1033 domain = [('fields_id.model', '=', obj._name), ('fields_id.name','in',prop_name), ('company_id','=', company_id)]
1034 #domain = prop._get_domain(cr, uid, prop_name, obj._name, context)1034 #domain = prop._get_domain(cr, uid, prop_name, obj._name, context)
1035 if vids:1035 if vids:
1036 domain = [('res_id', 'in', vids)] + domain1036 domain = [('res_id', 'in', vids)] + domain
@@ -1040,18 +1040,16 @@
1040 def _fnct_write(self, obj, cr, uid, id, prop_name, id_val, obj_dest, context=None):1040 def _fnct_write(self, obj, cr, uid, id, prop_name, id_val, obj_dest, context=None):
1041 if context is None:1041 if context is None:
1042 context = {}1042 context = {}
10431043 def_id = self._field_get(cr, uid, obj._name, prop_name)
1044 nids = self._get_by_id(obj, cr, uid, [prop_name], [id], context)1044 company_id = obj.pool.get('res.company')._company_default_get(cr, uid, obj._name,
1045 def_id, context=context)
1046 nids = self._get_by_id(obj, cr, uid, [prop_name], [id], company_id, context)
1045 if nids:1047 if nids:
1046 cr.execute('DELETE FROM ir_property WHERE id IN %s', (tuple(nids),))1048 cr.execute('DELETE FROM ir_property WHERE id IN %s', (tuple(nids),))
10471049
1048 default_val = self._get_default(obj, cr, uid, prop_name, context)1050 default_val = self._get_default(obj, cr, uid, prop_name, context)
10491051
1050 if id_val is not default_val:1052 if id_val is not default_val:
1051 def_id = self._field_get(cr, uid, obj._name, prop_name)
1052 company = obj.pool.get('res.company')
1053 cid = company._company_default_get(cr, uid, obj._name, def_id,
1054 context=context)
1055 propdef = obj.pool.get('ir.model.fields').browse(cr, uid, def_id,1053 propdef = obj.pool.get('ir.model.fields').browse(cr, uid, def_id,
1056 context=context)1054 context=context)
1057 prop = obj.pool.get('ir.property')1055 prop = obj.pool.get('ir.property')
@@ -1059,7 +1057,7 @@
1059 'name': propdef.name,1057 'name': propdef.name,
1060 'value': id_val,1058 'value': id_val,
1061 'res_id': obj._name+','+str(id),1059 'res_id': obj._name+','+str(id),
1062 'company_id': cid,1060 'company_id': company_id,
1063 'fields_id': def_id,1061 'fields_id': def_id,
1064 'type': self._type,1062 'type': self._type,
1065 }, context=context)1063 }, context=context)
@@ -1068,7 +1066,14 @@
10681066
1069 def _fnct_read(self, obj, cr, uid, ids, prop_name, obj_dest, context=None):1067 def _fnct_read(self, obj, cr, uid, ids, prop_name, obj_dest, context=None):
1070 properties = obj.pool.get('ir.property')1068 properties = obj.pool.get('ir.property')
1071 domain = [('fields_id.model', '=', obj._name), ('fields_id.name','in',prop_name)]1069 company_obj = obj.pool.get('res.company')
1070 company_id = []
1071 for prop in prop_name:
1072 def_id = self._field_get(cr, uid, obj._name, prop)
1073 company_id.append(company_obj._company_default_get(cr, uid, obj._name,
1074 def_id, context=context))
1075 domain = [('fields_id.model', '=', obj._name), ('fields_id.name','in',prop_name),
1076 ('company_id','in', company_id)]
1072 domain += [('res_id','in', [obj._name + ',' + str(oid) for oid in ids])]1077 domain += [('res_id','in', [obj._name + ',' + str(oid) for oid in ids])]
1073 nids = properties.search(cr, uid, domain, context=context)1078 nids = properties.search(cr, uid, domain, context=context)
1074 default_val,replaces = self._get_defaults(obj, cr, uid, prop_name, context)1079 default_val,replaces = self._get_defaults(obj, cr, uid, prop_name, context)