[FIX] write() : Correction to avoid overwriting of variable ids and optimization...
authorJay Vora (OpenERP) <jvo@tinyerp.com>
Tue, 18 Jan 2011 21:59:10 +0000 (03:29 +0530)
committerJay Vora (OpenERP) <jvo@tinyerp.com>
Tue, 18 Jan 2011 21:59:10 +0000 (03:29 +0530)
lp bug: https://launchpad.net/bugs/702744 fixed

bzr revid: jvo@tinyerp.com-20110118215910-upzzqerxpzminekv

bin/osv/orm.py

index 50da75f..0554fe8 100644 (file)
@@ -2748,9 +2748,18 @@ class orm(orm_template):
                         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)
-        for order, object, ids, fields in result:
-            self.pool.get(object)._store_set_values(cr, user, ids, fields, context)
-
+        done = {}
+        for order, object, ids_to_update, fields_to_recompute in result:
+            key = (object, tuple(fields_to_recompute))
+            done.setdefault(key, {})
+            # avoid to do several times the same computation
+            todo = []
+            for id in ids_to_update:
+                if id not in done[key]:
+                    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)