summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Martinelli <nim@odoo.com>2015-07-07 11:00:58 +0200
committerNicolas Martinelli <nim@odoo.com>2015-07-07 11:25:19 +0200
commit9fa7624e254bf63df26e39fc8d55295ccb5c3c5e (patch)
treec01a556345d6c20b00ff482a07c538069858f2da
parent34b9f43011b1e92d998ed25a5ebbc74a6293c266 (diff)
[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
-rw-r--r--addons/stock/stock.py8
1 files 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}