[FIX]stock,sale,purchase:Fixed=>
1)use price_unit field as currenct cost price 2)this field used at return picking as historical price unit lp bug: https://launchpad.net/bugs/779145 fixed bzr revid: ron@tinyerp.com-20110621092642-3druty1bqzkjczv0
This commit is contained in:
parent
154ee1ca4d
commit
f3168065b6
|
@ -709,6 +709,7 @@ class sale_order(osv.osv):
|
|||
#'state': 'waiting',
|
||||
'note': line.notes,
|
||||
'company_id': order.company_id.id,
|
||||
'price_unit': line.product_id.standard_price or 0.0
|
||||
})
|
||||
|
||||
if line.product_id:
|
||||
|
|
|
@ -1140,6 +1140,19 @@ class stock_picking(osv.osv):
|
|||
move_obj.unlink(cr, uid, ids2, ctx)
|
||||
|
||||
return super(stock_picking, self).unlink(cr, uid, ids, context=context)
|
||||
|
||||
def get_current_cost_price(self, cr, uid, ids, pick, move, product_price, context=None):
|
||||
"""@return: Return Current cost price"""
|
||||
if context is None:
|
||||
context = {}
|
||||
price_unit = 0.0
|
||||
if (pick.type == 'in') and (move.product_id.cost_method == 'average'):
|
||||
price_unit = product_price
|
||||
elif move.price_unit == 0:
|
||||
price_unit = move.product_id.standard_price
|
||||
else:
|
||||
price_unit = move.price_unit
|
||||
return price_unit
|
||||
|
||||
# FIXME: needs refactoring, this code is partially duplicated in stock_move.do_partial()!
|
||||
def do_partial(self, cr, uid, ids, partial_datas, context=None):
|
||||
|
@ -1217,7 +1230,6 @@ class stock_picking(osv.osv):
|
|||
{'price_unit': product_price,
|
||||
'price_currency_id': product_currency})
|
||||
|
||||
|
||||
for move in too_few:
|
||||
product_qty = move_product_qty[move.id]
|
||||
|
||||
|
@ -1229,35 +1241,45 @@ class stock_picking(osv.osv):
|
|||
'state':'draft',
|
||||
})
|
||||
if product_qty != 0:
|
||||
price_unit = self.get_current_cost_price(cr, uid, ids, pick, move, product_price, context=context)
|
||||
defaults = {
|
||||
'product_qty' : product_qty,
|
||||
'product_uos_qty': product_qty, #TODO: put correct uos_qty
|
||||
'picking_id' : new_picking,
|
||||
'state': 'assigned',
|
||||
'move_dest_id': False,
|
||||
'price_unit': move.price_unit,
|
||||
'price_unit': price_unit or 0.0
|
||||
}
|
||||
prodlot_id = prodlot_ids[move.id]
|
||||
if prodlot_id:
|
||||
defaults.update(prodlot_id=prodlot_id)
|
||||
move_obj.copy(cr, uid, move.id, defaults)
|
||||
|
||||
if (pick.type == 'in') and (move.product_id.cost_method == 'average'):
|
||||
new_price_unit = move.product_id.standard_price
|
||||
else:
|
||||
new_price_unit = price_unit
|
||||
move_obj.write(cr, uid, [move.id],
|
||||
{
|
||||
'product_qty' : move.product_qty - product_qty,
|
||||
'product_uos_qty':move.product_qty - product_qty, #TODO: put correct uos_qty
|
||||
'price_unit': new_price_unit or 0.0
|
||||
})
|
||||
|
||||
if new_picking:
|
||||
move_obj.write(cr, uid, [c.id for c in complete], {'picking_id': new_picking})
|
||||
for move in complete:
|
||||
price_unit = self.get_current_cost_price(cr, uid, ids, pick, move, product_price, context=context)
|
||||
defaults = {'price_unit': price_unit or 0.0}
|
||||
if prodlot_ids.get(move.id):
|
||||
move_obj.write(cr, uid, [move.id], {'prodlot_id': prodlot_ids[move.id]})
|
||||
defaults.update({'prodlot_id': prodlot_ids[move.id]})
|
||||
move_obj.write(cr, uid, [move.id], defaults)
|
||||
for move in too_many:
|
||||
price_unit = self.get_current_cost_price(cr, uid, ids, pick, move, product_price, context=context)
|
||||
product_qty = move_product_qty[move.id]
|
||||
defaults = {
|
||||
'product_qty' : product_qty,
|
||||
'product_uos_qty': product_qty, #TODO: put correct uos_qty
|
||||
'price_unit': price_unit or 0.0
|
||||
}
|
||||
prodlot_id = prodlot_ids.get(move.id)
|
||||
if prodlot_ids.get(move.id):
|
||||
|
@ -2489,7 +2511,7 @@ class stock_move(osv.osv):
|
|||
|
||||
for move in complete:
|
||||
if prodlot_ids.get(move.id):
|
||||
self.write(cr, uid, [move.id],{'prodlot_id': prodlot_ids.get(move.id)})
|
||||
self.write(cr, uid, [move.id],{'prodlot_id': prodlot_ids.get(move.id), 'price_unit': move.product_id.standard_price})
|
||||
self.action_done(cr, uid, [move.id], context=context)
|
||||
if move.picking_id.id :
|
||||
# TOCHECK : Done picking if all moves are done
|
||||
|
|
|
@ -33,6 +33,7 @@ class stock_return_picking_memory(osv.osv_memory):
|
|||
'quantity' : fields.float("Quantity", required=True),
|
||||
'wizard_id' : fields.many2one('stock.return.picking', string="Wizard"),
|
||||
'move_id' : fields.many2one('stock.move', "Move"),
|
||||
'price_unit' : fields.float('Cost Price', digits=(16,2), help="Historical cost price of product")
|
||||
}
|
||||
|
||||
stock_return_picking_memory()
|
||||
|
@ -73,7 +74,7 @@ class stock_return_picking(osv.osv_memory):
|
|||
for line in pick.move_lines:
|
||||
qty = line.product_qty - return_history[line.id]
|
||||
if qty > 0:
|
||||
result1.append({'product_id': line.product_id.id, 'quantity': qty,'move_id':line.id})
|
||||
result1.append({'product_id': line.product_id.id, 'quantity': qty,'move_id':line.id, 'price_unit': line.price_unit})
|
||||
if 'product_return_moves' in fields:
|
||||
res.update({'product_return_moves': result1})
|
||||
return res
|
||||
|
@ -180,9 +181,10 @@ class stock_return_picking(osv.osv_memory):
|
|||
'product_qty': new_qty,
|
||||
'product_uos_qty': uom_obj._compute_qty(cr, uid, move.product_uom.id,
|
||||
new_qty, move.product_uos.id),
|
||||
'picking_id':new_picking, 'state':'draft',
|
||||
'location_id':new_location, 'location_dest_id':move.location_id.id,
|
||||
'date':date_cur,})
|
||||
'picking_id': new_picking, 'state': 'draft',
|
||||
'location_id': new_location, 'location_dest_id': move.location_id.id,
|
||||
'date': date_cur,
|
||||
'price_unit': move.price_unit})
|
||||
move_obj.write(cr, uid, [move.id], {'move_history_ids2':[(4,new_move)]})
|
||||
if not returned_lines:
|
||||
raise osv.except_osv(_('Warning !'), _("Please specify at least one non-zero quantity!"))
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<tree editable="bottom" string="Product Moves">
|
||||
<field name="product_id" />
|
||||
<field name="quantity" />
|
||||
|
||||
<field name="price_unit" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -31,6 +31,7 @@
|
|||
<form>
|
||||
<field name="product_id" />
|
||||
<field name="quantity" />
|
||||
<field name="price_unit" />
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
|
Loading…
Reference in New Issue