diff --git a/openerp/addons/base/ir/ir_fields.py b/openerp/addons/base/ir/ir_fields.py index 7d3f3b5326f..3bfb957d77e 100644 --- a/openerp/addons/base/ir/ir_fields.py +++ b/openerp/addons/base/ir/ir_fields.py @@ -464,9 +464,19 @@ class ir_fields_converter(orm.Model): """ return werkzeug.utils.escape(value), [] - _html_from_char = _html_from_integer = _html_from_float = \ + _html_from_char = _html_from_integer = \ _html_from_date = _html_from_datetime = _html_from_passthrough + def _html_from_float(self, cr, uid, model, column, value, context=None): + width, precision = column.digits or (None, None) + if precision is None: + fmt = '{value}' + else: + fmt = '{value:.{precision}f}' + + return werkzeug.utils.escape( + fmt.format(value=value, width=width, precision=precision, )), [] + def _html_from_text(self, cr, uid, model, column, value, context=None): """ Escapes the value and converts newlines to br. This is bullshit. diff --git a/openerp/tests/addons/test_converter/models.py b/openerp/tests/addons/test_converter/models.py index 0f6ab3906c1..9be3c9d675e 100644 --- a/openerp/tests/addons/test_converter/models.py +++ b/openerp/tests/addons/test_converter/models.py @@ -8,6 +8,7 @@ class test_model(orm.Model): 'char': fields.char(), 'integer': fields.integer(), 'float': fields.float(), + 'numeric': fields.float(digits=(16, 2)), 'many2one': fields.many2one('test_converter.test_model.sub'), 'binary': fields.binary(), 'date': fields.date(), diff --git a/openerp/tests/addons/test_converter/tests/test_html.py b/openerp/tests/addons/test_converter/tests/test_html.py index d11156db8dc..b4ad5c35679 100644 --- a/openerp/tests/addons/test_converter/tests/test_html.py +++ b/openerp/tests/addons/test_converter/tests/test_html.py @@ -45,6 +45,25 @@ class TestHTMLExport(common.TransactionCase): self.assertEqual(value, "42.0") self.assertEqual(warnings, []) + value, warnings = converter(42.0100) + self.assertEqual(value, "42.01") + self.assertEqual(warnings, []) + + value, warnings = converter(42.01234) + self.assertEqual(value, "42.01234") + self.assertEqual(warnings, []) + + def test_numeric(self): + converter = self.get_converter('numeric') + + value, warnings = converter(42.0) + self.assertEqual(value, '42.00') + self.assertEqual(warnings, []) + + value, warnings = converter(42.01234) + self.assertEqual(value, '42.01') + self.assertEqual(warnings, []) + def test_text(self): converter = self.get_converter('text')