diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index 3e19738c2e7..80be285cd25 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -60,7 +60,6 @@ class stock_journal(osv.osv):
}
stock_journal()
-
#----------------------------------------------------------
# Stock Location
#----------------------------------------------------------
@@ -1090,7 +1089,15 @@ class stock_picking(osv.osv):
if move.state not in ('cancel',):
return False
return True
-
+
+ def allow_cancel(self, cr, uid, ids, context={}):
+ for pick in self.browse(cr, uid, ids, context=context):
+ if not pick.move_lines:
+ return True
+ for move in pick.move_lines:
+ if move.state == 'done':
+ return False
+ return True
def unlink(self, cr, uid, ids, context=None):
move_obj = self.pool.get('stock.move')
if context is None:
diff --git a/addons/stock/stock_workflow.xml b/addons/stock/stock_workflow.xml
index 3254f7b6984..9d4d41260ed 100644
--- a/addons/stock/stock_workflow.xml
+++ b/addons/stock/stock_workflow.xml
@@ -96,11 +96,13 @@
+ allow_cancel()
button_cancel
+ allow_cancel()
button_cancel