Skip to content

Instantly share code, notes, and snippets.

@rvalyi
Created January 3, 2014 14:27
Show Gist options
  • Save rvalyi/8238688 to your computer and use it in GitHub Desktop.
Save rvalyi/8238688 to your computer and use it in GitHub Desktop.
=== modified file 'openerp/osv/fields.py'
--- openerp/osv/fields.py 2012-10-05 15:33:16 +0000
+++ openerp/osv/fields.py 2012-12-11 20:12:33 +0000
@@ -566,12 +566,14 @@
return
_table = obj.pool.get(self._obj)._table
obj = obj.pool.get(self._obj)
for act in values:
if act[0] == 0:
act[2][self._fields_id] = id
id_new = obj.create(cr, user, act[2], context=context)
result += obj._store_get_values(cr, user, [id_new], act[2].keys(), context)
elif act[0] == 1:
+ context["skip_objects"] = [context.get("calling_object")]
obj.write(cr, user, [act[1]], act[2], context=context)
elif act[0] == 2:
obj.unlink(cr, user, [act[1]], context=context)
=== modified file 'openerp/osv/orm.py'
--- openerp/osv/orm.py 2012-10-05 15:33:16 +0000
+++ openerp/osv/orm.py 2012-12-11 20:12:33 +0000
@@ -3868,6 +3868,7 @@
self._check_concurrency(cr, ids, context)
self.check_write(cr, user)
+#FIXME
result = self._store_get_values(cr, user, ids, vals.keys(), context) or []
# No direct update of parent_left/right
@@ -3952,8 +3953,9 @@
for field in upd_todo:
for id in ids:
+ rel_context["calling_object"] = self._name
+ rel_context["store_fields"] = result
result += self._columns[field].set(cr, self, id, field, vals[field], user, context=rel_context) or []
-
unknown_fields = updend[:]
for table in self._inherits:
col = self._inherits[table]
@@ -4031,11 +4033,14 @@
cr.execute('update '+self._table+' set parent_right=parent_right+%s where parent_right>=%s', (distance, position))
cr.execute('update '+self._table+' set parent_left=parent_left-%s, parent_right=parent_right-%s where parent_left>=%s and parent_left<%s', (pleft-position+distance, pleft-position+distance, pleft+distance, pright+distance))
- result += self._store_get_values(cr, user, ids, vals.keys(), context)
+#FIXME
+ result += self._store_get_values(cr, user, ids, vals.keys(), context) or []
result.sort()
done = {}
for order, object, ids_to_update, fields_to_recompute in result:
+ if object in context.get("skip_objects", []):
+ continue
key = (object, tuple(fields_to_recompute))
done.setdefault(key, {})
# avoid to do several times the same computation
@@ -4045,7 +4050,7 @@
done[key][id] = True
todo.append(id)
self.pool.get(object)._store_set_values(cr, user, todo, fields_to_recompute, context)
wf_service = netsvc.LocalService("workflow")
for id in ids:
wf_service.trg_write(user, self._name, id, cr)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment