[IMP] fields: reset decimal precision on new-style fields

When a decimal_precision record is created/modified, the float fields of the
models in the registry must be reset.  This was done on old-API columns only.
It is now handled by the new-API fields.
This commit is contained in:
Raphael Collet 2014-09-18 10:31:18 +02:00
parent e31d25c867
commit 764c5acd81
3 changed files with 18 additions and 9 deletions

View File

@ -48,10 +48,11 @@ class decimal_precision(orm.Model):
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 hasattr(col, 'digits_change'):
col.digits_change(cr)
env = openerp.api.Environment(cr, SUPERUSER_ID, {})
for model in self.pool.values():
for field in model._fields.values():
if field.type == 'float':
field._setup_digits(env)
RegistryManager.signal_caches_change(cr.dbname)
def create(self, cr, uid, data, context=None):

View File

@ -933,9 +933,16 @@ class Float(Field):
def __init__(self, string=None, digits=None, **kwargs):
super(Float, self).__init__(string=string, _digits=digits, **kwargs)
def _setup_digits(self, env):
""" Setup the digits for `self` and its corresponding column """
self.digits = self._digits(env.cr) if callable(self._digits) else self._digits
if self.store:
column = env[self.model_name]._columns[self.name]
column.digits_change(env.cr)
def _setup_regular(self, env):
super(Float, self)._setup_regular(env)
self.digits = self._digits(env.cr) if callable(self._digits) else self._digits
self._setup_digits(env)
_related_digits = property(attrgetter('digits'))

View File

@ -415,10 +415,11 @@ class RegistryManager(object):
# One possible reason caches have been invalidated is the
# use of decimal_precision.write(), in which case we need
# to refresh fields.float columns.
for model in registry.models.values():
for column in model._columns.values():
if hasattr(column, 'digits_change'):
column.digits_change(cr)
env = openerp.api.Environment(cr, SUPERUSER_ID, {})
for model in registry.values():
for field in model._fields.values():
if field.type == 'float':
field._setup_digits(env)
registry.base_registry_signaling_sequence = r
registry.base_cache_signaling_sequence = c
finally: