[FIX] purchase: all problems related to standard prices update should be solved by now
bzr revid: qdp-launchpad@openerp.com-20130909154754-vol18yq4gr3q22p0
This commit is contained in:
parent
b84b805a36
commit
bf74a4c81e
|
@ -202,12 +202,14 @@ class stock_move(osv.osv):
|
||||||
_inherit = "stock.move"
|
_inherit = "stock.move"
|
||||||
|
|
||||||
def action_done(self, cr, uid, ids, context=None):
|
def action_done(self, cr, uid, ids, context=None):
|
||||||
self.product_price_update(cr, uid, ids, context=context)
|
self.product_price_update_before_done(cr, uid, ids, context=context)
|
||||||
super(stock_move, self).action_done(cr, uid, ids, context=context)
|
super(stock_move, self).action_done(cr, uid, ids, context=context)
|
||||||
|
self.product_price_update_after_done(cr, uid, ids, context=context)
|
||||||
|
|
||||||
def _store_average_cost_price(self, cr, uid, move, context=None):
|
def _store_average_cost_price(self, cr, uid, move, context=None):
|
||||||
''' move is a browe record '''
|
''' move is a browe record '''
|
||||||
product_obj = self.pool.get('product.product')
|
product_obj = self.pool.get('product.product')
|
||||||
|
move.refresh()
|
||||||
if any([q.qty <= 0 for q in move.quant_ids]):
|
if any([q.qty <= 0 for q in move.quant_ids]):
|
||||||
#if there is a negative quant, the standard price shouldn't be updated
|
#if there is a negative quant, the standard price shouldn't be updated
|
||||||
return
|
return
|
||||||
|
@ -219,10 +221,7 @@ class stock_move(osv.osv):
|
||||||
product_obj.write(cr, uid, move.product_id.id, {'standard_price': average_valuation_price}, context=context)
|
product_obj.write(cr, uid, move.product_id.id, {'standard_price': average_valuation_price}, context=context)
|
||||||
self.write(cr, uid, move.id, {'price_unit': average_valuation_price}, context=context)
|
self.write(cr, uid, move.id, {'price_unit': average_valuation_price}, context=context)
|
||||||
|
|
||||||
def product_price_update(self, cr, uid, ids, context=None):
|
def product_price_update_before_done(self, cr, uid, ids, context=None):
|
||||||
'''
|
|
||||||
This method adapts the price on the product when necessary
|
|
||||||
'''
|
|
||||||
product_obj = self.pool.get('product.product')
|
product_obj = self.pool.get('product.product')
|
||||||
for move in self.browse(cr, uid, ids, context=context):
|
for move in self.browse(cr, uid, ids, context=context):
|
||||||
#adapt standard price on incomming moves if the product cost_method is 'average'
|
#adapt standard price on incomming moves if the product cost_method is 'average'
|
||||||
|
@ -236,10 +235,15 @@ class stock_move(osv.osv):
|
||||||
else:
|
else:
|
||||||
# Get the standard price
|
# Get the standard price
|
||||||
amount_unit = product.price_get('standard_price', context=ctx)[product.id]
|
amount_unit = product.price_get('standard_price', context=ctx)[product.id]
|
||||||
new_std_price = (amount_unit * (product_avail - move.product_qty) + (move.price_unit * move.product_qty)) / product_avail
|
new_std_price = ((amount_unit * product_avail) + (move.price_unit * move.product_qty)) / (product_avail + move.product_qty)
|
||||||
# Write the field according to price type field
|
# Write the field according to price type field
|
||||||
product_obj.write(cr, uid, [product.id], {'standard_price': new_std_price}, context=context)
|
product_obj.write(cr, uid, [product.id], {'standard_price': new_std_price}, context=context)
|
||||||
|
|
||||||
|
def product_price_update_after_done(self, cr, uid, ids, context=None):
|
||||||
|
'''
|
||||||
|
This method adapts the price on the product when necessary
|
||||||
|
'''
|
||||||
|
for move in self.browse(cr, uid, ids, context=context):
|
||||||
#adapt standard price on outgoing moves if the product cost_method is 'real', so that a return
|
#adapt standard price on outgoing moves if the product cost_method is 'real', so that a return
|
||||||
#or an inventory loss is made using the last value used for an outgoing valuation.
|
#or an inventory loss is made using the last value used for an outgoing valuation.
|
||||||
if move.product_id.cost_method == 'real' and move.location_dest_id.usage != 'internal':
|
if move.product_id.cost_method == 'real' and move.location_dest_id.usage != 'internal':
|
||||||
|
|
Loading…
Reference in New Issue