summaryrefslogtreecommitdiff
path: root/odoo/addons/base
diff options
context:
space:
mode:
authorJorge Pinna Puissant <jpp@odoo.com>2019-01-30 09:12:18 +0000
committerJorge Pinna Puissant <jpp@odoo.com>2019-02-13 07:05:13 +0000
commite270e9e0cc6574d2c6bdd29983d3b66d12d2ced7 (patch)
tree82e1303f90932a05086a600c1b4d38cbb2fea23c /odoo/addons/base
parent73fa0748da28ac475520aa390459ace55fe076c1 (diff)
[IMP] tools: float_utils, precision rounding must be positive
Adding a new rule to verify that precision_rounding is positive. Before this commit: when a precision_round was 0 or smaller than 0 the float_utils functions gave as results: * float_is_zero(0.0, precision_rounding=0.0) -> False * float_round(1.25, precision_rounding=0.0) -> 0.0 * float_compare(1.0, 1.0, precision_rounding=0.0) -> 1 These results where at least not correct at worst not logic. Now, the function raises an error when the precision_rounding is not positive
Diffstat (limited to 'odoo/addons/base')
-rw-r--r--odoo/addons/base/models/res_currency.py8
-rw-r--r--odoo/addons/base/tests/test_float.py18
2 files changed, 21 insertions, 5 deletions
diff --git a/odoo/addons/base/models/res_currency.py b/odoo/addons/base/models/res_currency.py
index e3624000a0e..c75ddfe0021 100644
--- a/odoo/addons/base/models/res_currency.py
+++ b/odoo/addons/base/models/res_currency.py
@@ -134,11 +134,7 @@ class Currency(models.Model):
:param float amount: the amount to round
:return: rounded float
"""
- # TODO: Need to check why it calls round() from sale.py, _amount_all() with *No* ID after below commits,
- # https://github.com/odoo/odoo/commit/36ee1ad813204dcb91e9f5f20d746dff6f080ac2
- # https://github.com/odoo/odoo/commit/0b6058c585d7d9a57bd7581b8211f20fca3ec3f7
- # Removing self.ensure_one() will make few test cases to break of modules event_sale, sale_mrp and stock_dropshipping.
- #self.ensure_one()
+ self.ensure_one()
return tools.float_round(amount, precision_rounding=self.rounding)
@api.multi
@@ -162,6 +158,7 @@ class Currency(models.Model):
With the new API, call it like: ``currency.compare_amounts(amount1, amount2)``.
"""
+ self.ensure_one()
return tools.float_compare(amount1, amount2, precision_rounding=self.rounding)
@api.multi
@@ -177,6 +174,7 @@ class Currency(models.Model):
With the new API, call it like: ``currency.is_zero(amount)``.
"""
+ self.ensure_one()
return tools.float_is_zero(amount, precision_rounding=self.rounding)
@api.model
diff --git a/odoo/addons/base/tests/test_float.py b/odoo/addons/base/tests/test_float.py
index 4447b9de1c0..4dbf1f5f139 100644
--- a/odoo/addons/base/tests/test_float.py
+++ b/odoo/addons/base/tests/test_float.py
@@ -202,11 +202,29 @@ class TestFloatPrecision(TransactionCase):
float_is_zero(0.01, precision_digits=3, precision_rounding=0.01)
with self.assertRaises(AssertionError):
+ float_is_zero(0.0, precision_rounding=0.0)
+
+ with self.assertRaises(AssertionError):
+ float_is_zero(0.0, precision_rounding=-0.1)
+
+ with self.assertRaises(AssertionError):
float_compare(0.01, 0.02, precision_digits=3, precision_rounding=0.01)
with self.assertRaises(AssertionError):
+ float_compare(1.0, 1.0, precision_rounding=0.0)
+
+ with self.assertRaises(AssertionError):
+ float_compare(1.0, 1.0, precision_rounding=-0.1)
+
+ with self.assertRaises(AssertionError):
float_round(0.01, precision_digits=3, precision_rounding=0.01)
+ with self.assertRaises(AssertionError):
+ float_round(1.25, precision_rounding=0.0)
+
+ with self.assertRaises(AssertionError):
+ float_round(1.25, precision_rounding=-0.1)
+
def test_amount_to_text_10(self):
""" verify that amount_to_text works as expected """
currency = self.env.ref('base.EUR')