Ravi Gohil (OpenERP) has proposed merging 
lp:~openerp-dev/openobject-server/6.0-opw-18390-rgo into 
lp:openobject-server/6.0.

Requested reviews:
  Olivier (Open ERP) (olt)
  nel (nel-tinyerp)
Related bugs:
  Bug #878104 in OpenERP Server: "Cannot overwrite stored function field with 
non-stored field"
  https://bugs.launchpad.net/openobject-server/+bug/878104

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/6.0-opw-18390-rgo/+merge/80312

Hello Sir,

There is an issue with fields.function field when it's been overridden with 
other than fields.function field and when we try to save the record with some 
values in overridden fields.function field, system raises an error message.

This solves the issue. I have back-ported it from Trunk.

Thanks.
-- 
https://code.launchpad.net/~openerp-dev/openobject-server/6.0-opw-18390-rgo/+merge/80312
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-server/6.0-opw-18390-rgo.
=== modified file 'bin/osv/orm.py'
--- bin/osv/orm.py	2011-09-30 12:22:46 +0000
+++ bin/osv/orm.py	2011-10-25 10:25:13 +0000
@@ -2784,14 +2784,17 @@
             f = self._columns[store_field]
             if hasattr(f, 'digits_change'):
                 f.digits_change(cr)
+            def not_this_field(stored_func):
+                x, y, z, e, f, l = stored_func
+                return x != self._name or y != store_field
+            self.pool._store_function[self._name] = filter(not_this_field, self.pool._store_function.get(self._name, []))
             if not isinstance(f, fields.function):
                 continue
             if not f.store:
                 continue
-            if self._columns[store_field].store is True:
+            sm = f.store
+            if sm 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
@@ -2802,14 +2805,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, fields2, 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