[FIX] stock: programming error in average price computation for multiple lines of...
authorOlivier Dony <odo@openerp.com>
Mon, 4 Nov 2013 17:12:45 +0000 (18:12 +0100)
committerOlivier Dony <odo@openerp.com>
Mon, 4 Nov 2013 17:12:45 +0000 (18:12 +0100)
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

addons/stock/stock.py

index fb595d7..d65689e 100644 (file)
@@ -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]