From: Olivier Dony Date: Mon, 4 Nov 2013 17:12:45 +0000 (+0100) Subject: [FIX] stock: programming error in average price computation for multiple lines of... X-Git-Tag: InsPy_master01~464^2~294 X-Git-Url: http://git.inspyration.org/?a=commitdiff_plain;h=a6ca3b043fd898cfcb714b3fb4d24b9377e8d00c;p=odoo%2Fodoo.git [FIX] stock: programming error in average price computation for multiple lines of the same product While processing a picking we must keep track of previously processed lines as they modify the stock on hand but are not yet included in the `qty_available` function. Negative stock on hand is handled as if the stock was zero as far as the average price computation is concerned. bzr revid: odo@openerp.com-20131104171245-z1lgsplyu4cdz9gc --- diff --git a/addons/stock/stock.py b/addons/stock/stock.py index fb595d7..d65689e 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -1275,9 +1275,8 @@ class stock_picking(osv.osv): context['currency_id'] = move_currency_id qty = uom_obj._compute_qty(cr, uid, product_uom, product_qty, product.uom_id.id) - if product.id in product_avail: - product_avail[product.id] += qty - else: + if product.id not in product_avail: + # keep track of stock on hand including processed lines not yet marked as done product_avail[product.id] = product.qty_available if qty > 0: @@ -1285,7 +1284,8 @@ class stock_picking(osv.osv): move_currency_id, product_price) new_price = uom_obj._compute_price(cr, uid, product_uom, new_price, product.uom_id.id) - if product.qty_available <= 0: + if product_avail[product.id] <= 0: + product_avail[product.id] = 0 new_std_price = new_price else: # Get the standard price @@ -1301,6 +1301,9 @@ class stock_picking(osv.osv): {'price_unit': product_price, 'price_currency_id': product_currency}) + product_avail[product.id] += qty + + for move in too_few: product_qty = move_product_qty[move.id]