From 9fa7624e254bf63df26e39fc8d55295ccb5c3c5e Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Tue, 7 Jul 2015 11:00:58 +0200 Subject: [PATCH] [FIX] stock: onchange_quantity and onchange_uos_quantity use rounding It is necessary to round the quantities with the appropriate precision. Indeed, since onchange_quantity and onchange_uos_quantity trigger each other indirectly, it is quite easy to fall in an infinite loop if the uom and uos precisions are different. Follows commit 6e346f0adbf6b62347b1d86429a345fc0ac2ae26 opw-643651 --- addons/stock/stock.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 7336edd56b7..c234a951b1c 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -29,7 +29,7 @@ from openerp.osv import fields, osv, orm from openerp.tools.translate import _ from openerp import netsvc from openerp import tools -from openerp.tools import float_compare, DEFAULT_SERVER_DATETIME_FORMAT +from openerp.tools import float_compare, float_round, DEFAULT_SERVER_DATETIME_FORMAT import openerp.addons.decimal_precision as dp import logging _logger = logging.getLogger(__name__) @@ -1873,7 +1873,8 @@ class stock_move(osv.osv): break if product_uos and product_uom and (product_uom != product_uos): - result['product_uos_qty'] = product_qty * uos_coeff['uos_coeff'] + precision = self.pool.get('decimal.precision').precision_get(cr, uid, 'Product UoS') + result['product_uos_qty'] = float_round(product_qty * uos_coeff['uos_coeff'], precision_digits=precision) else: result['product_uos_qty'] = product_qty @@ -1903,7 +1904,8 @@ class stock_move(osv.osv): # The clients should call onchange_quantity too anyway if product_uos and product_uom and (product_uom != product_uos): - result['product_qty'] = product_uos_qty / uos_coeff['uos_coeff'] + precision = self.pool.get('decimal.precision').precision_get(cr, uid, 'Product Unit of Measure') + result['product_qty'] = float_round(product_uos_qty / uos_coeff['uos_coeff'], precision_digits=precision) else: result['product_qty'] = product_uos_qty return {'value': result}