summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Simonis <chs@openerp.com>2014-01-10 13:54:33 +0100
committerChristophe Simonis <chs@openerp.com>2014-01-10 13:54:33 +0100
commit7dd16a558eab6f71db0f77bf6ff07170201ffaa7 (patch)
tree6a85dd195e74fd2215815fa01ace9db02668bcaa
parent3ed5b49e7a51b96ad7df37e33a2cd5ff8363ae89 (diff)
[FIX] decimal_precision: signal workers to restart their registry when decimal precision change.
bzr revid: chs@openerp.com-20140110125433-soimmrpz2icvob60
-rw-r--r--addons/decimal_precision/decimal_precision.py20
1 files changed, 13 insertions, 7 deletions
diff --git a/addons/decimal_precision/decimal_precision.py b/addons/decimal_precision/decimal_precision.py
index d4d3d29dce0..890a57a998b 100644
--- a/addons/decimal_precision/decimal_precision.py
+++ b/addons/decimal_precision/decimal_precision.py
@@ -22,6 +22,7 @@
from openerp import SUPERUSER_ID
from openerp import pooler, tools
from openerp.osv import osv, fields
+from openerp.modules.registry import RegistryManager
class decimal_precision(osv.osv):
_name = 'decimal.precision'
@@ -43,23 +44,28 @@ class decimal_precision(osv.osv):
res = cr.fetchone()
return res[0] if res else 2
+ def clear_cache(self, cr):
+ """clear cache and update models. Notify other workers to restart their registry."""
+ self.precision_get.clear_cache(self)
+ for obj in self.pool.obj_list():
+ for colname, col in self.pool.get(obj)._columns.items():
+ if isinstance(col, (fields.float, fields.function)):
+ col.digits_change(cr)
+ RegistryManager.signal_registry_change(cr.dbname)
+
def create(self, cr, uid, data, context=None):
res = super(decimal_precision, self).create(cr, uid, data, context=context)
- self.precision_get.clear_cache(self)
+ self.clear_cache(cr)
return res
def unlink(self, cr, uid, ids, context=None):
res = super(decimal_precision, self).unlink(cr, uid, ids, context=context)
- self.precision_get.clear_cache(self)
+ self.clear_cache(cr)
return res
def write(self, cr, uid, ids, data, *args, **argv):
res = super(decimal_precision, self).write(cr, uid, ids, data, *args, **argv)
- self.precision_get.clear_cache(self)
- for obj in self.pool.obj_list():
- for colname, col in self.pool.get(obj)._columns.items():
- if isinstance(col, (fields.float, fields.function)):
- col.digits_change(cr)
+ self.clear_cache(cr)
return res
decimal_precision()