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

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

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

File size: 5.0 KB
Line 
1class InventoryMovementService {
2
3    boolean transactional = false
4
5    def personService
6
7    def reverseMove(params) {
8        InventoryMovement.withTransaction { status ->
9            def result = [:]
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
14
15                if(!inventoryItem) {
16                        status.setRollbackOnly()
17                        result.inventoryMovementInstance.errors.rejectValue('inventoryItem', "inventoryMovement.inventoryItem.notFound")
18                        result.error = true
19                        return result
20                }
21
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
29                // Reverse the movement of inventory.
30                if(!result.inventoryMovementInstance.inventoryMovementType.incrementsInventory) {
31                    inventoryItem.unitsInStock += result.inventoryMovementInstance.quantity
32                }
33                else {
34                    if(inventoryItem.unitsInStock >= result.inventoryMovementInstance.quantity) {
35                        inventoryItem.unitsInStock -= result.inventoryMovementInstance.quantity
36                    }
37                    else {
38                        status.setRollbackOnly()
39                        result.inventoryMovementInstance.errors.rejectValue('quantity', "inventoryMovement.quantity.insufficientItemsInStock")
40                        result.error = true
41                        return result
42                    }
43                }
44
45                if(inventoryItem.save() ) {
46                    // All went well if we get to this point.
47                    result.inventoryMovementInstance.delete()
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 = [:]
68            result.inventoryMovementInstance = new InventoryMovement(params)
69
70            result.inventoryMovementInstance.person = personService.currentUser
71
72            if(result.inventoryMovementInstance.validate()) {
73                def inventoryItem = InventoryItem.lock(result.inventoryMovementInstance.inventoryItem.id)
74                result.taskId = result.inventoryMovementInstance.task.id
75
76                if(!inventoryItem) {
77                    status.setRollbackOnly()
78                    result.inventoryMovementInstance.errors.rejectValue('inventoryItem', "inventoryMovement.inventoryItem.notFound")
79                    result.error = true
80                    return result
81                }
82
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
90                // Perform the movement of inventory.
91                if(result.inventoryMovementInstance.inventoryMovementType.incrementsInventory) {
92                    inventoryItem.unitsInStock += result.inventoryMovementInstance.quantity
93                }
94                else {
95                    if(inventoryItem.unitsInStock >= result.inventoryMovementInstance.quantity) {
96                        inventoryItem.unitsInStock -= result.inventoryMovementInstance.quantity
97                    }
98                    else {
99                        status.setRollbackOnly()
100                        result.inventoryMovementInstance.errors.rejectValue('quantity', "inventoryMovement.quantity.insufficientItemsInStock")
101                        result.error = true
102                        return result
103                    }
104                }
105
106                if(inventoryItem.save() && result.inventoryMovementInstance.save()) {
107                    // All went well if we get to this point.
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.