Index: trunk/grails-app/controllers/InventoryMovementDetailedController.groovy
===================================================================
--- trunk/grails-app/controllers/InventoryMovementDetailedController.groovy	(revision 405)
+++ trunk/grails-app/controllers/InventoryMovementDetailedController.groovy	(revision 406)
@@ -54,5 +54,7 @@
         if(!result.error) {
             flash.message = "InventoryMovement ${params.id} deleted"
-            redirect(controller:"taskDetailed", action:"show", id:result.taskId)
+            if(result.taskId)
+                redirect(controller:"taskDetailed", action:"show", id:result.taskId)
+            redirect(controller:"inventoryItemDetailed", action:"show", id:result.inventoryItemInstance?.id)
         }
         else {
Index: trunk/grails-app/services/InventoryMovementService.groovy
===================================================================
--- trunk/grails-app/services/InventoryMovementService.groovy	(revision 405)
+++ trunk/grails-app/services/InventoryMovementService.groovy	(revision 406)
@@ -30,8 +30,8 @@
                 }
 
-                def inventoryItem = InventoryItem.lock(result.inventoryMovementInstance.inventoryItem.id)
+                result.inventoryItemInstance = InventoryItem.lock(result.inventoryMovementInstance.inventoryItem.id)
                 result.taskId = result.inventoryMovementInstance.task?.id
 
-                if(!inventoryItem) {
+                if(!result.inventoryItemInstance) {
                         status.setRollbackOnly()
                         result.inventoryMovementInstance.errors.rejectValue('inventoryItem', "inventoryMovement.inventoryItem.notFound")
@@ -40,18 +40,11 @@
                 }
 
-                if(result.inventoryMovementInstance.task.taskStatus.id == 3) {
-                    status.setRollbackOnly()
-                    result.inventoryMovementInstance.errors.rejectValue('task', "task.operationNotPermittedOnCompleteTask")
-                    result.error = true
-                    return result
-                }
-
                 // Reverse the movement of inventory.
                 if(!result.inventoryMovementInstance.inventoryMovementType.incrementsInventory) {
-                    inventoryItem.unitsInStock += result.inventoryMovementInstance.quantity
+                    result.inventoryItemInstance.unitsInStock += result.inventoryMovementInstance.quantity
                 }
                 else {
-                    if(inventoryItem.unitsInStock >= result.inventoryMovementInstance.quantity) {
-                        inventoryItem.unitsInStock -= result.inventoryMovementInstance.quantity
+                    if(result.inventoryItemInstance.unitsInStock >= result.inventoryMovementInstance.quantity) {
+                        result.inventoryItemInstance.unitsInStock -= result.inventoryMovementInstance.quantity
                     }
                     else {
@@ -63,5 +56,5 @@
                 }
 
-                if(inventoryItem.save() ) {
+                if(result.inventoryItemInstance.save() ) {
                     // All went well if we get to this point.
                     result.inventoryMovementInstance.delete()
