diff --git a/tryton/common/cellrendererfloat.py b/tryton/common/cellrendererfloat.py index 4a19c26ac4..170a3cb1df 100644 --- a/tryton/common/cellrendererfloat.py +++ b/tryton/common/cellrendererfloat.py @@ -12,6 +12,8 @@ class CellRendererFloat(CellRendererInteger): def __init__(self): super(CellRendererFloat, self).__init__() self.digits = None + self.monetary = False + self.convert = float def on_editing_started(self, editable, path): super().on_editing_started(editable, path) @@ -43,11 +45,12 @@ class CellRendererFloat(CellRendererInteger): new_value = value[:position] + new_text + value[position:] if new_value not in {'-', self.__decimal_point, self.__thousands_sep}: try: - value = locale.atof(new_value) + value = self.convert( + locale.delocalize(new_value, self.monetary)) except ValueError: return False - if (self.digits - and not (round(value, self.digits[1]) == float(value))): + if (value and self.digits is not None + and round(value, self.digits[1]) != value): return False return True diff --git a/tryton/gui/window/view_form/view/list_gtk/widget.py b/tryton/gui/window/view_form/view/list_gtk/widget.py index 320b093068..a5225c85f8 100644 --- a/tryton/gui/window/view_form/view/list_gtk/widget.py +++ b/tryton/gui/window/view_form/view/list_gtk/widget.py @@ -506,6 +506,7 @@ class Float(Int): if renderer is None: renderer = CellRendererFloat super(Float, self).__init__(view, attrs, renderer=renderer) + self.renderer.monetary = attrs.get('monetary', False) @realized def setter(self, column, cell, store, iter_, user_data=None):