openerp-community-reviewer team mailing list archive
-
openerp-community-reviewer team
-
Mailing list archive
-
Message #08092
[Merge] lp:~therp-nl/ocb-server/6.1-fix_o2m_write_date_and_user into lp:ocb-server/6.1
Stefan Rijnhart (Therp) has proposed merging lp:~therp-nl/ocb-server/6.1-fix_o2m_write_date_and_user into lp:ocb-server/6.1.
Requested reviews:
OpenERP Community Backports (ocb)
For more details, see:
https://code.launchpad.net/~therp-nl/ocb-server/6.1-fix_o2m_write_date_and_user/+merge/249936
[FIX] orm: Ignore orm (4, *) operations on one2many if link already exists.
Web client returns (4, ) operations for unchanged line in one2many widgets.
This allows to skip orm write on object where potentially has no access (eg: timesheet line with another user). (opw 599494)
Additionally, this prevents the reset of o2m resource write date and user
Verbatim backport of http://bazaar.launchpad.net/~openerp/openobject-server/7.0/revision/5162
and http://bazaar.launchpad.net/~openerp/openobject-server/7.0/revision/5267
--
Your team OpenERP Community Backports is requested to review the proposed merge of lp:~therp-nl/ocb-server/6.1-fix_o2m_write_date_and_user into lp:ocb-server/6.1.
=== modified file 'openerp/osv/fields.py'
--- openerp/osv/fields.py 2013-09-10 14:15:41 +0000
+++ openerp/osv/fields.py 2015-02-17 10:02:55 +0000
@@ -584,8 +584,13 @@
else:
cr.execute('update '+_table+' set '+self._fields_id+'=null where id=%s', (act[1],))
elif act[0] == 4:
- # Must use write() to recompute parent_store structure if needed
- obj.write(cr, user, [act[1]], {self._fields_id:id}, context=context or {})
+ # table of the field (parent_model in case of inherit)
+ field_model = self._fields_id in obj.pool[self._obj]._columns and self._obj or obj.pool[self._obj]._all_columns[self._fields_id].parent_model
+ field_table = obj.pool[field_model]._table
+ cr.execute("select 1 from {0} where id=%s and {1}=%s".format(field_table, self._fields_id), (act[1], id))
+ if not cr.fetchone():
+ # Must use write() to recompute parent_store structure if needed and check access rules
+ obj.write(cr, user, [act[1]], {self._fields_id:id}, context=context or {})
elif act[0] == 5:
reverse_rel = obj._all_columns.get(self._fields_id)
assert reverse_rel, 'Trying to unlink the content of a o2m but the pointed model does not have a m2o'
Follow ups