From 14baa53846b075b5b615fd6a017d14f760a2385b Mon Sep 17 00:00:00 2001 From: Mohit Beniwal Date: Mon, 15 May 2023 07:26:33 +0000 Subject: [PATCH] [FIX] uom: prevent set value of ratio as zero in uom ZeroDivsionError: float division to Zero is generated because for assigning value to 'factor' of uom in method '_set_ratio', it tries to divide value by Zero for uom_type 'Bigger'. Steps to reproduce: 1) Install 'Inventory' module. 2) Click on 'Configuration' > 'Settings'. 3) Activate 'Units of Measure' > click on 'Units of Measure' button under it. 4) Click on 'Create' button to create new uom category. 5) Give any name > in 'Units of Measure' page, click on 'Add a line'. 6) Enter name and select type as 'Reference unit of measure for this category'. 7) Now, add another line and select type as 'Bigger than the the Reference unit of measure' and set the 'ratio' value to Zero, Error will be generated. By applying this,it will check for the value of 'ratio' to prevent division by 0 sentry - 4174584503 closes odoo/odoo#122680 X-original-commit: b79e5afeba7f9517e0325a7a4f9b2373bf5317ed Signed-off-by: William Henrotin (whe) --- addons/uom/i18n/uom.pot | 6 ++++++ addons/uom/models/uom_uom.py | 2 ++ addons/uom/tests/test_uom.py | 9 +++++++++ 3 files changed, 17 insertions(+) diff --git a/addons/uom/i18n/uom.pot b/addons/uom/i18n/uom.pot index c773635f0ac..e5f8c4e7cc5 100644 --- a/addons/uom/i18n/uom.pot +++ b/addons/uom/i18n/uom.pot @@ -274,6 +274,12 @@ msgid "" " belong to the same category." msgstr "" +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + #. module: uom #: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type msgid "Type" diff --git a/addons/uom/models/uom_uom.py b/addons/uom/models/uom_uom.py index a23a99f5098..7d84ae13d33 100644 --- a/addons/uom/models/uom_uom.py +++ b/addons/uom/models/uom_uom.py @@ -108,6 +108,8 @@ class UoM(models.Model): uom.ratio = uom.factor def _set_ratio(self): + if self.ratio == 0: + raise ValidationError(_("The value of ratio could not be Zero")) if self.uom_type == 'reference': self.factor = 1 elif self.uom_type == 'bigger': diff --git a/addons/uom/tests/test_uom.py b/addons/uom/tests/test_uom.py index 2c3f7f9d3fd..55260ae2b4c 100644 --- a/addons/uom/tests/test_uom.py +++ b/addons/uom/tests/test_uom.py @@ -97,3 +97,12 @@ class TestUom(UomCommon): 'rounding': 1.0, 'category_id': category.id }) + + def test_50_check_ratio(self): + with self.assertRaises(ValidationError): + self.env['uom.uom'].create({ + 'name': 'Custom UoM', + 'uom_type': 'bigger', + 'ratio': 0, + 'category_id': self.env.ref('uom.product_uom_categ_unit').id + })