Index: trunk/grails-app/controllers/InventoryMovementDetailedController.groovy
===================================================================
--- trunk/grails-app/controllers/InventoryMovementDetailedController.groovy	(revision 175)
+++ trunk/grails-app/controllers/InventoryMovementDetailedController.groovy	(revision 177)
@@ -2,4 +2,6 @@
 
 class InventoryMovementDetailedController extends BaseController {
+
+    def inventoryMovementService
 
     def index = { redirect(action:list,params:params) }
@@ -24,20 +26,18 @@
 
     def delete = {
-        def inventoryMovementInstance = InventoryMovement.get( params.id )
-        if(inventoryMovementInstance) {
-            try {
-                def taskId = inventoryMovementInstance.task?.id
-                inventoryMovementInstance.delete(flush:true)
-                flash.message = "InventoryMovement ${params.id} deleted"
-                redirect(controller:"taskDetailed", action:"show", id:taskId)
-            }
-            catch(org.springframework.dao.DataIntegrityViolationException e) {
-                flash.message = "InventoryMovement ${params.id} could not be deleted"
-                redirect(action:show,id:params.id)
-            }
+        def result = inventoryMovementService.reverseMove(params)
+
+        if(!result.error) {
+            flash.message = "InventoryMovement ${params.id} deleted"
+            redirect(controller:"taskDetailed", action:"show", id:result.taskId)
         }
         else {
-            flash.message = "InventoryMovement not found with id ${params.id}"
-            redirect(action:list)
+            if(result.inventoryMovementInstance) {
+                render(view:'show',model:[inventoryMovementInstance:result.inventoryMovementInstance])
+            }
+            else {
+                flash.message = "Could not delete inventory movement."
+                redirect(controller:"taskDetailed", action:"search", id:result.taskId)
+            }
         }
     }
@@ -54,12 +54,21 @@
 
     def save = {
-        def inventoryMovementInstance = new InventoryMovement(params)
-        if(!inventoryMovementInstance.hasErrors() && inventoryMovementInstance.save()) {
-            flash.message = "Inventory Movement for ${inventoryMovementInstance.inventoryItem.name} created."
-            redirect(controller:"taskDetailed", action:"show", id: params.task.id)
+        def result = inventoryMovementService.move(params)
+
+        if(!result.error) {
+            flash.message = "Inventory Movement for ${result.inventoryMovementInstance.inventoryItem.name} created."
+            redirect(controller:"taskDetailed", action:"show", id: result.taskId)
         }
         else {
-            render(view:'create',model:[inventoryMovementInstance:inventoryMovementInstance])
+            if(result.inventoryMovementInstance) {
+                render(view:'create',model:[inventoryMovementInstance:result.inventoryMovementInstance])
+            }
+            else {
+                flash.message = "Could not create inventory movement."
+                redirect(controller:"taskDetailed", action:"search", id:result.taskId)
+            }
+
         }
     }
+
 }
Index: trunk/grails-app/controllers/InventoryMovementTypeController.groovy
===================================================================
--- trunk/grails-app/controllers/InventoryMovementTypeController.groovy	(revision 175)
+++ trunk/grails-app/controllers/InventoryMovementTypeController.groovy	(revision 177)
@@ -27,5 +27,5 @@
         if(inventoryMovementTypeInstance) {
             try {
-                inventoryMovementTypeInstance.delete()
+                inventoryMovementTypeInstance.delete(flush:true)
                 flash.message = "InventoryMovementType ${params.id} deleted"
                 redirect(action:list)
@@ -77,5 +77,5 @@
         else {
             flash.message = "InventoryMovementType not found with id ${params.id}"
-            redirect(action:edit,id:params.id)
+            redirect(action:list)
         }
     }
