From 8a7d139a41346ef3333cac5d6c3365b720645fed Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Mon, 24 Feb 2014 14:19:18 +0100 Subject: [PATCH] [FIX] stock: fixed errors introduced during merge with trunk-wms bzr revid: qdp-launchpad@openerp.com-20140224131918-azyc8y3eonqafxdm --- addons/stock/stock.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 2e6b2573290..1bd499b0eda 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -3502,7 +3502,7 @@ class stock_pack_operation(osv.osv): break def _check_quants_reserved(ops): - if ops.package_id and not ops.product_id: + if ops.package_id and not ops.product_id: for quant in quant_obj.browse(cr, uid, package_obj.get_content(cr, uid, [ops.package_id.id]), context=context): if quant.reservation_id and quant.reservation_id.id in [x.id for x in ops.picking_id.move_lines] and (not quants_done.get(quant.id)): #Entire packages means entire quants from those packages @@ -3514,9 +3514,12 @@ class stock_pack_operation(osv.osv): #Check moves with same product for move in [x for x in ops.picking_id.move_lines if ops.product_id.id == x.product_id.id]: for quant in move.reserved_quant_ids: - if not qty > 0: + if not qty > 0: break - bool = bool(pack_obj.search(cr, uid, [('id', 'child_of', [ops.package_id.id]), ('id', '=', quants.package_id.id)], context=context) + if ops.package_id: + bool = quant.package_id and bool(package_obj.search(cr, uid, [('id', 'child_of', [ops.package_id.id]), ('id', '=', quant.package_id.id)], context=context)) or False + else: + bool = not quant.package_id.id bool = bool and ((ops.lot_id and ops.lot_id.id == quant.lot_id.id) or not ops.lot_id) bool = bool and (ops.owner_id.id == quant.owner_id.id) if bool: @@ -3534,20 +3537,26 @@ class stock_pack_operation(osv.osv): qty -= qty_todo link_obj.create(cr, uid, {'move_id': quant.reservation_id.id, 'operation_id': ops.id, 'qty': qty_todo}, context=context) - link_obj = self.pool.get('stock.move.operation.link') uom_obj = self.pool.get('product.uom') package_obj = self.pool.get('stock.quant.package') quant_obj = self.pool.get('stock.quant') - operations = self.browse(cr, uid, op_ids, context=context) - operations.sort(key = lambda x: ((x.package_id and not x.product_id) and -4 or 0) + (x.package_id and -2 or 0) + (x.lot_id and -1 or 0)) quants_done = {} + + operations = self.browse(cr, uid, op_ids, context=context) + operations.sort(key=lambda x: ((x.package_id and not x.product_id) and -4 or 0) + (x.package_id and -2 or 0) + (x.lot_id and -1 or 0)) + sorted_moves = [] for op in operations: + if not sorted_moves: + #sort moves in order to process first the ones that have already reserved quants + sorted_moves = op.picking_id.move_lines + sorted_moves.sort(key=lambda x: x.product_qty - x.reserved_availability) + to_unlink_ids = [x.id for x in op.linked_move_operation_ids] if to_unlink_ids: link_obj.unlink(cr, uid, to_unlink_ids, context=context) _check_quants_reserved(op) - + for op in operations: op.refresh() if op.product_id: