Naresh(OpenERP) has proposed merging 
lp:~openerp-dev/openobject-server/trunk-bug-789576-nch into 
lp:openobject-server.

Requested reviews:
  Vo Minh Thu (OpenERP) (vmt-openerp)
Related bugs:
  Bug #789576 in OpenERP Server: "fields.related override: store function 
persists"
  https://bugs.launchpad.net/openobject-server/+bug/789576

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-bug-789576-nch/+merge/77139
-- 
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-bug-789576-nch/+merge/77139
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-server/trunk-bug-789576-nch.
=== modified file 'openerp/osv/orm.py'
--- openerp/osv/orm.py	2011-09-26 07:51:15 +0000
+++ openerp/osv/orm.py	2011-09-27 11:01:40 +0000
@@ -3306,17 +3306,20 @@
 
         self._columns = self._columns.copy()
         for store_field in self._columns:
-            f = self._columns[store_field]
-            if hasattr(f, 'digits_change'):
-                f.digits_change(cr)
-            if not isinstance(f, fields.function):
-                continue
-            if not f.store:
-                continue
-            if self._columns[store_field].store is True:
+            store_field_obj = self._columns[store_field]
+            if hasattr(store_field_obj, 'digits_change'):
+                store_field_obj.digits_change(cr)
+            fncts = self.pool._store_function.get(self._name, [])
+            for x, y, z, e, f, l in copy.copy(fncts):
+                 if ((x == self._name) and (y == store_field)):
+                     fncts.remove((x, y, z, e, f, l))
+            if not isinstance(store_field_obj, fields.function):
+                continue
+            if not store_field_obj.store:
+                continue
+            sm = store_field_obj.store
+            if store_field_obj.store is True:
                 sm = {self._name: (lambda self, cr, uid, ids, c={}: ids, None, 10, None)}
-            else:
-                sm = self._columns[store_field].store
             for object, aa in sm.items():
                 if len(aa) == 4:
                     (fnct, fields2, order, length) = aa
@@ -3327,14 +3330,8 @@
                     raise except_orm('Error',
                         ('Invalid function definition %s in object %s !\nYou must use the definition: store={object:(fnct, fields, priority, time length)}.' % (store_field, self._name)))
                 self.pool._store_function.setdefault(object, [])
-                ok = True
-                for x, y, z, e, f, l in self.pool._store_function[object]:
-                    if (x==self._name) and (y==store_field) and (e==fields2):
-                        if f == order:
-                            ok = False
-                if ok:
-                    self.pool._store_function[object].append((self._name, store_field, fnct, tuple(fields2) if fields2 else None, order, length))
-                    self.pool._store_function[object].sort(lambda x, y: cmp(x[4], y[4]))
+                self.pool._store_function[object].append((self._name, store_field, fnct, tuple(fields2) if fields2 else None, order, length))
+                self.pool._store_function[object].sort(lambda x, y: cmp(x[4], y[4]))
 
         for (key, _, msg) in self._sql_constraints:
             self.pool._sql_error[self._table+'_'+key] = msg

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to