source: trunk/grails-app/services/InventoryMovementService.groovy @ 217

Last change on this file since 217 was 217, checked in by gav, 14 years ago

Record person performing the inventory movement as per ticket #24.

File size: 5.0 KB
RevLine 
[177]1class InventoryMovementService {
2
3    boolean transactional = false
4
[217]5    def personService
6
[177]7    def reverseMove(params) {
8        InventoryMovement.withTransaction { status ->
9            def result = [:]
[191]10            result.inventoryMovementInstance = InventoryMovement.lock(params.id)
11            if(result.inventoryMovementInstance) {
12                def inventoryItem = InventoryItem.lock(result.inventoryMovementInstance.inventoryItem.id)
13                result.taskId = result.inventoryMovementInstance.task.id
[177]14
15                if(!inventoryItem) {
16                        status.setRollbackOnly()
[191]17                        result.inventoryMovementInstance.errors.rejectValue('inventoryItem', "inventoryMovement.inventoryItem.notFound")
[177]18                        result.error = true
19                        return result
20                }
21
[191]22                if(result.inventoryMovementInstance.task.taskStatus.id == 3) {
23                    status.setRollbackOnly()
24                    result.inventoryMovementInstance.errors.rejectValue('task', "task.operationNotPermittedOnCompleteTask")
25                    result.error = true
26                    return result
27                }
28
[177]29                // Reverse the movement of inventory.
[191]30                if(!result.inventoryMovementInstance.inventoryMovementType.incrementsInventory) {
31                    inventoryItem.unitsInStock += result.inventoryMovementInstance.quantity
[177]32                }
33                else {
[191]34                    if(inventoryItem.unitsInStock >= result.inventoryMovementInstance.quantity) {
35                        inventoryItem.unitsInStock -= result.inventoryMovementInstance.quantity
[177]36                    }
37                    else {
38                        status.setRollbackOnly()
[191]39                        result.inventoryMovementInstance.errors.rejectValue('quantity', "inventoryMovement.quantity.insufficientItemsInStock")
[177]40                        result.error = true
41                        return result
42                    }
43                }
44
45                if(inventoryItem.save() ) {
[191]46                    // All went well if we get to this point.
47                    result.inventoryMovementInstance.delete()
[177]48                    return result
49                }
50                else {
51                    status.setRollbackOnly()
52                    result.error = true
53                    return result
54                }
55
56            }
57            else {
58                result.error = true
59                return result
60            }
61
62        } // end withTransaction
63    } //end reverseMove()
64
65    def move(params) {
66        InventoryMovement.withTransaction { status ->
67            def result = [:]
[191]68            result.inventoryMovementInstance = new InventoryMovement(params)
[177]69
[217]70            result.inventoryMovementInstance.person = personService.currentUser
71
[191]72            if(result.inventoryMovementInstance.validate()) {
73                def inventoryItem = InventoryItem.lock(result.inventoryMovementInstance.inventoryItem.id)
74                result.taskId = result.inventoryMovementInstance.task.id
[177]75
76                if(!inventoryItem) {
[191]77                    status.setRollbackOnly()
78                    result.inventoryMovementInstance.errors.rejectValue('inventoryItem', "inventoryMovement.inventoryItem.notFound")
79                    result.error = true
80                    return result
[177]81                }
82
[191]83                if(result.inventoryMovementInstance.task.taskStatus.id == 3) {
84                    status.setRollbackOnly()
85                    result.inventoryMovementInstance.errors.rejectValue('task', "task.operationNotPermittedOnCompleteTask")
86                    result.error = true
87                    return result
88                }
89
[177]90                // Perform the movement of inventory.
[191]91                if(result.inventoryMovementInstance.inventoryMovementType.incrementsInventory) {
92                    inventoryItem.unitsInStock += result.inventoryMovementInstance.quantity
[177]93                }
94                else {
[191]95                    if(inventoryItem.unitsInStock >= result.inventoryMovementInstance.quantity) {
96                        inventoryItem.unitsInStock -= result.inventoryMovementInstance.quantity
[177]97                    }
98                    else {
99                        status.setRollbackOnly()
[191]100                        result.inventoryMovementInstance.errors.rejectValue('quantity', "inventoryMovement.quantity.insufficientItemsInStock")
[177]101                        result.error = true
102                        return result
103                    }
104                }
105
[191]106                if(inventoryItem.save() && result.inventoryMovementInstance.save()) {
107                    // All went well if we get to this point.
[177]108                    return result
109                }
110                else {
111                    status.setRollbackOnly()
112                    result.error = true
113                    return result
114                }
115
116            }
117            else {
118                result.error = true
119                return result
120            }
121
122        } // end withTransaction
123    } // end move()
124
125} // end class
Note: See TracBrowser for help on using the repository browser.