[FIX] stock: on action_done() of a move, automatically trigger a check on the linked procurements (otherwise a SO won't be set as 'delivered' as soon as the delivery is set to 'done')

bzr revid: qdp-launchpad@openerp.com-20131009080452-qgd57use2p2x1ba6
This commit is contained in:
Quentin (OpenERP) 2013-10-09 10:04:52 +02:00
parent b6ff6e4d0a
commit b52d479de8
2 changed files with 13 additions and 9 deletions

View File

@ -169,13 +169,14 @@ class procurement_order(osv.osv):
return True
def check(self, cr, uid, ids, context=None):
done = []
done_ids = []
for procurement in self.browse(cr, uid, ids, context=context):
result = self._check(cr, uid, procurement, context=context)
if result:
self.write(cr, uid, [procurement.id], {'state': 'done'}, context=context)
done.append(procurement.id)
return done
done_ids.append(procurement.id)
if done_ids:
self.write(cr, uid, done_ids, {'state': 'done'}, context=context)
return done_ids
#
# Method to overwrite in different procurement modules

View File

@ -1663,12 +1663,12 @@ class stock_move(osv.osv):
self.action_confirm(cr, uid, todo, context=context)
pickings = set()
procurement_ids = []
for move in self.browse(cr, uid, ids, context=context):
# if negatives and negatives[move.id]:
# for ops in negatives[move.id].keys():
# quants_to_move = [(None, negatives[move.id, x) for x in negatives]
# quant_obj.quants_move(cr, uid, quants_to_move, move, context=context)
if move.picking_id:
pickings.add(move.picking_id.id)
@ -1701,19 +1701,22 @@ class stock_move(osv.osv):
else:
pack_obj.write(cr, uid, [ops.package_id.id], {'parent_id': ops.result_package_id and ops.result_package_id.id or False}, context=context)
else:
quants = quant_obj.quants_get(cr, uid, move.location_id, move.product_id, qty, domain=dom, prefered_order = prefered_order, context=context)
quants = quant_obj.quants_get(cr, uid, move.location_id, move.product_id, qty, domain=dom, prefered_order=prefered_order, context=context)
#Will move all quants_get and as such create negative quants
quant_obj.quants_move(cr, uid, quants, move, context=context)
quant_obj.quants_unreserve(cr, uid, move, context=context)
#
#Check moves that were pushed
if move.move_dest_id.state in ('waiting', 'confirmed'):
other_upstream_move_ids = self.search(cr, uid, [('id','!=',move.id),('state','not in',['done','cancel']),
('move_dest_id','=',move.move_dest_id.id)], context=context)
other_upstream_move_ids = self.search(cr, uid, [('id', '!=', move.id), ('state', 'not in', ['done', 'cancel']),
('move_dest_id', '=', move.move_dest_id.id)], context=context)
#If no other moves for the move that got pushed:
if not other_upstream_move_ids and move.move_dest_id.state in ('waiting', 'confirmed'):
self.action_assign(cr, uid, [move.move_dest_id.id], context=context)
if move.procurement_id:
procurement_ids.append(move.procurement_id.id)
self.write(cr, uid, ids, {'state': 'done', 'date': time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)}, context=context)
self.pool.get('procurement.order').check(cr, uid, procurement_ids, context=context)
return True
def unlink(self, cr, uid, ids, context=None):