[FIX] stock_account, purchase: the standard price of a product may not be compatible with the decimal precision 'Account' or the coinage of the main currency, so we need to take care of that when creating the stock valuation entries
bzr revid: qdp-launchpad@openerp.com-20131104164939-jupkxy1zrqqq3lpq
This commit is contained in:
parent
400b50963c
commit
b5645d2386
|
@ -662,7 +662,8 @@ class purchase_order(osv.osv):
|
|||
if order_line.product_uom.id != order_line.product_id.uom_id.id:
|
||||
price_unit *= order_line.product_uom.factor
|
||||
if order.currency_id.id != order.company_id.currency_id.id:
|
||||
price_unit = self.pool.get('res.currency').compute(cr, uid, order.currency_id.id, order.company_id.currency_id.id, price_unit, context=context)
|
||||
#we don't round the price_unit, as we may want to store the standard price with more digits than allowed by the currency
|
||||
price_unit = self.pool.get('res.currency').compute(cr, uid, order.currency_id.id, order.company_id.currency_id.id, price_unit, round=False, context=context)
|
||||
|
||||
return {
|
||||
'name': order_line.name or '',
|
||||
|
|
|
@ -172,10 +172,14 @@ class stock_quant(osv.osv):
|
|||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
currency_obj = self.pool.get('res.currency')
|
||||
if context.get('force_valuation_amount'):
|
||||
valuation_amount = context.get('force_valuation_amount')
|
||||
else:
|
||||
valuation_amount = quant.product_id.cost_method == 'real' and quant.cost or quant.product_id.standard_price
|
||||
#the standard_price of the product may be in another decimal precision, or not compatible with the coinage of
|
||||
#the company currency... so we need to use round() before creating the accounting entries.
|
||||
valuation_amount = currency_obj.round(cr, uid, quant.company_id.currency_id, valuation_amount * quant.qty)
|
||||
partner_id = (move.picking_id.partner_id and self.pool.get('res.partner')._find_accounting_partner(move.picking_id.partner_id).id) or False
|
||||
debit_line_vals = {
|
||||
'name': move.name,
|
||||
|
@ -185,8 +189,8 @@ class stock_quant(osv.osv):
|
|||
'ref': move.picking_id and move.picking_id.name or False,
|
||||
'date': time.strftime('%Y-%m-%d'),
|
||||
'partner_id': partner_id,
|
||||
'debit': valuation_amount > 0 and valuation_amount * quant.qty or 0,
|
||||
'credit': valuation_amount < 0 and -valuation_amount * quant.qty or 0,
|
||||
'debit': valuation_amount > 0 and valuation_amount or 0,
|
||||
'credit': valuation_amount < 0 and -valuation_amount or 0,
|
||||
'account_id': debit_account_id,
|
||||
}
|
||||
credit_line_vals = {
|
||||
|
@ -197,12 +201,11 @@ class stock_quant(osv.osv):
|
|||
'ref': move.picking_id and move.picking_id.name or False,
|
||||
'date': time.strftime('%Y-%m-%d'),
|
||||
'partner_id': partner_id,
|
||||
'credit': valuation_amount > 0 and valuation_amount * quant.qty or 0,
|
||||
'debit': valuation_amount < 0 and -valuation_amount * quant.qty or 0,
|
||||
'credit': valuation_amount > 0 and valuation_amount or 0,
|
||||
'debit': valuation_amount < 0 and -valuation_amount or 0,
|
||||
'account_id': credit_account_id,
|
||||
}
|
||||
res = [(0, 0, debit_line_vals), (0, 0, credit_line_vals)]
|
||||
return res
|
||||
return [(0, 0, debit_line_vals), (0, 0, credit_line_vals)]
|
||||
|
||||
def _create_account_move_line(self, cr, uid, quant, move, credit_account_id, debit_account_id, journal_id, context=None):
|
||||
move_obj = self.pool.get('account.move')
|
||||
|
@ -260,7 +263,7 @@ class stock_move(osv.osv):
|
|||
new_std_price = move.price_unit
|
||||
else:
|
||||
# Get the standard price
|
||||
amount_unit = product.price_get('standard_price', context=ctx)[product.id]
|
||||
amount_unit = product.standard_price
|
||||
new_std_price = ((amount_unit * product_avail) + (move.price_unit * move.product_qty)) / (product_avail + move.product_qty)
|
||||
# Write the standard price, as SUPERUSER_ID because a warehouse manager may not have the right to write on products
|
||||
product_obj.write(cr, SUPERUSER_ID, [product.id], {'standard_price': new_std_price}, context=context)
|
||||
|
|
Loading…
Reference in New Issue