From 98d31e411f93f623f459a7bb59f590a89ae5d8b2 Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Tue, 15 Oct 2013 13:20:16 +0200 Subject: [PATCH] [FIX] stock: correctly handle case when we have no child location bzr revid: mat@openerp.com-20131015112016-vj6yr6kfxfe8go2p --- addons/stock/stock.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 6008ce7ab5f..ca6733e5cf0 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -403,14 +403,15 @@ class stock_location(osv.osv): uom_rounding = uom_obj.browse(cr, uid, context.get('uom'), context=context).rounding locations_ids = self.search(cr, uid, [('location_id', 'child_of', ids)]) - # Fetch only the locations in which this product has ever been processed (in or out) - cr.execute("""SELECT l.id FROM stock_location l WHERE l.id in %s AND - EXISTS (SELECT 1 FROM stock_move m WHERE m.product_id = %s - AND ((state = 'done' AND m.location_dest_id = l.id) - OR (state in ('done','assigned') AND m.location_id = l.id))) - """, (tuple(locations_ids), product_id,)) - - for id in [i for (i,) in cr.fetchall()]: + if locations_ids: + # Fetch only the locations in which this product has ever been processed (in or out) + cr.execute("""SELECT l.id FROM stock_location l WHERE l.id in %s AND + EXISTS (SELECT 1 FROM stock_move m WHERE m.product_id = %s + AND ((state = 'done' AND m.location_dest_id = l.id) + OR (state in ('done','assigned') AND m.location_id = l.id))) + """, (tuple(locations_ids), product_id,)) + locations_ids = [i for (i,) in cr.fetchall()] + for id in locations_ids: if lock: try: # Must lock with a separate select query because FOR UPDATE can't be used with