Ignore:
Timestamp:
Nov 19, 2009, 9:16:21 PM (10 years ago)
Author:
gav
Message:

Improve entry creation so that entryType is passed in with the associated submitButton.
Refactor InventoryMovementService and prevent create/delete of invenotryMovements on complete task.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/services/InventoryMovementService.groovy

    r177 r191  
    66        InventoryMovement.withTransaction { status ->
    77            def result = [:]
    8             def inventoryMovementInstance = InventoryMovement.lock(params.id)
    9             if(inventoryMovementInstance) {
    10                 def inventoryItem = InventoryItem.lock(inventoryMovementInstance.inventoryItem.id)
    11                 result.taskId = inventoryMovementInstance.task.id
     8            result.inventoryMovementInstance = InventoryMovement.lock(params.id)
     9            if(result.inventoryMovementInstance) {
     10                def inventoryItem = InventoryItem.lock(result.inventoryMovementInstance.inventoryItem.id)
     11                result.taskId = result.inventoryMovementInstance.task.id
    1212
    1313                if(!inventoryItem) {
    1414                        status.setRollbackOnly()
    15                         inventoryMovementInstance.errors.rejectValue('inventoryItem', "inventoryMovement.inventoryItem.notFound")
    16                         result.inventoryMovementInstance = inventoryMovementInstance
     15                        result.inventoryMovementInstance.errors.rejectValue('inventoryItem', "inventoryMovement.inventoryItem.notFound")
    1716                        result.error = true
    1817                        return result
    1918                }
    2019
     20                if(result.inventoryMovementInstance.task.taskStatus.id == 3) {
     21                    status.setRollbackOnly()
     22                    result.inventoryMovementInstance.errors.rejectValue('task', "task.operationNotPermittedOnCompleteTask")
     23                    result.error = true
     24                    return result
     25                }
     26
    2127                // Reverse the movement of inventory.
    22                 if(!inventoryMovementInstance.inventoryMovementType.incrementsInventory) {
    23                     inventoryItem.unitsInStock += inventoryMovementInstance.quantity
     28                if(!result.inventoryMovementInstance.inventoryMovementType.incrementsInventory) {
     29                    inventoryItem.unitsInStock += result.inventoryMovementInstance.quantity
    2430                }
    2531                else {
    26                     if(inventoryItem.unitsInStock >= inventoryMovementInstance.quantity) {
    27                         inventoryItem.unitsInStock -= inventoryMovementInstance.quantity
     32                    if(inventoryItem.unitsInStock >= result.inventoryMovementInstance.quantity) {
     33                        inventoryItem.unitsInStock -= result.inventoryMovementInstance.quantity
    2834                    }
    2935                    else {
    3036                        status.setRollbackOnly()
    31                         inventoryMovementInstance.errors.rejectValue('quantity', "inventoryMovement.quantity.insufficientItemsInStock")
    32                         result.inventoryMovementInstance = inventoryMovementInstance
     37                        result.inventoryMovementInstance.errors.rejectValue('quantity', "inventoryMovement.quantity.insufficientItemsInStock")
    3338                        result.error = true
    3439                        return result
     
    3742
    3843                if(inventoryItem.save() ) {
    39                     inventoryMovementInstance.delete()
     44                    // All went well if we get to this point.
     45                    result.inventoryMovementInstance.delete()
    4046                    return result
    4147                }
     
    5864        InventoryMovement.withTransaction { status ->
    5965            def result = [:]
    60             def inventoryMovementInstance = new InventoryMovement(params)
     66            result.inventoryMovementInstance = new InventoryMovement(params)
    6167
    62             if(inventoryMovementInstance.validate()) {
    63                 def inventoryItem = InventoryItem.lock(inventoryMovementInstance.inventoryItem.id)
    64                 result.taskId = inventoryMovementInstance.task.id
     68            if(result.inventoryMovementInstance.validate()) {
     69                def inventoryItem = InventoryItem.lock(result.inventoryMovementInstance.inventoryItem.id)
     70                result.taskId = result.inventoryMovementInstance.task.id
    6571
    6672                if(!inventoryItem) {
    67                         status.setRollbackOnly()
    68                         inventoryMovementInstance.errors.rejectValue('inventoryItem', "inventoryMovement.inventoryItem.notFound")
    69                         result.inventoryMovementInstance = inventoryMovementInstance
    70                         result.error = true
    71                         return result
     73                    status.setRollbackOnly()
     74                    result.inventoryMovementInstance.errors.rejectValue('inventoryItem', "inventoryMovement.inventoryItem.notFound")
     75                    result.error = true
     76                    return result
     77                }
     78
     79                if(result.inventoryMovementInstance.task.taskStatus.id == 3) {
     80                    status.setRollbackOnly()
     81                    result.inventoryMovementInstance.errors.rejectValue('task', "task.operationNotPermittedOnCompleteTask")
     82                    result.error = true
     83                    return result
    7284                }
    7385
    7486                // Perform the movement of inventory.
    75                 if(inventoryMovementInstance.inventoryMovementType.incrementsInventory) {
    76                     inventoryItem.unitsInStock += inventoryMovementInstance.quantity
     87                if(result.inventoryMovementInstance.inventoryMovementType.incrementsInventory) {
     88                    inventoryItem.unitsInStock += result.inventoryMovementInstance.quantity
    7789                }
    7890                else {
    79                     if(inventoryItem.unitsInStock >= inventoryMovementInstance.quantity) {
    80                         inventoryItem.unitsInStock -= inventoryMovementInstance.quantity
     91                    if(inventoryItem.unitsInStock >= result.inventoryMovementInstance.quantity) {
     92                        inventoryItem.unitsInStock -= result.inventoryMovementInstance.quantity
    8193                    }
    8294                    else {
    8395                        status.setRollbackOnly()
    84                         inventoryMovementInstance.errors.rejectValue('quantity', "inventoryMovement.quantity.insufficientItemsInStock")
    85                         result.inventoryMovementInstance = inventoryMovementInstance
     96                        result.inventoryMovementInstance.errors.rejectValue('quantity', "inventoryMovement.quantity.insufficientItemsInStock")
    8697                        result.error = true
    8798                        return result
     
    89100                }
    90101
    91                 if(inventoryItem.save() && inventoryMovementInstance.save()) {
    92                     result.inventoryMovementInstance = inventoryMovementInstance
     102                if(inventoryItem.save() && result.inventoryMovementInstance.save()) {
     103                    // All went well if we get to this point.
    93104                    return result
    94105                }
    95106                else {
    96107                    status.setRollbackOnly()
    97                     result.inventoryMovementInstance = inventoryMovementInstance
    98108                    result.error = true
    99109                    return result
     
    102112            }
    103113            else {
    104                 result.inventoryMovementInstance = inventoryMovementInstance
    105114                result.error = true
    106115                return result
Note: See TracChangeset for help on using the changeset viewer.