From 0fc9a97d20a480a10dc5258dcc22bf5e52b48293 Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Thu, 1 Aug 2019 13:16:58 +0000 Subject: [PATCH] [REF] stock_account: _compute_average_price unit price rounding Since the introduction of the stock valuation layer, unit_cost is rounded in the company currency (actually it is NOT because of an ORM bug that will be fixed later). With the test introduced at [0], fixing that ORM bug shows we have a rounding issue (27.02 instead of 27) due to the company currency rounding on the unit_cost. Since the logic of the anglo saxon will probably always give some rounding issue (we always return a price unit that will be multiply by the invoiced quantity) recomputing a not rounded price unit by using the not rounded value with the not rounded quantity seems a good enough compromise. [0] 13a535a0918f6f75d8c631a465fbc9238ea954bf closes odoo/odoo#35384 Signed-off-by: Simon Lejeune (sle) --- addons/stock_account/models/product.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/stock_account/models/product.py b/addons/stock_account/models/product.py index 18df38c2f1d..dfc58549e9d 100644 --- a/addons/stock_account/models/product.py +++ b/addons/stock_account/models/product.py @@ -585,7 +585,7 @@ class ProductProduct(models.Model): qty_taken_on_candidate = min(qty_to_take_on_candidates, candidate_quantity) qty_to_take_on_candidates -= qty_taken_on_candidate - tmp_value += qty_taken_on_candidate * candidate.unit_cost + tmp_value += qty_taken_on_candidate * (candidate.value / candidate.quantity) if float_is_zero(qty_to_take_on_candidates, precision_rounding=candidate.uom_id.rounding): break