Ignore:
Timestamp:
Dec 8, 2009, 4:03:29 AM (14 years ago)
Author:
gav
Message:

Complete inventory movement implementation as per ticket #24.
Refactor showTab function in both Task and Inventory (which now has tabs).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/InventoryItemDetailedController.groovy

    r178 r225  
    44
    55    def filterService
     6    def inventoryItemService
     7    def inventoryMovementService
    68
    79    def index = { redirect(action:search, params:params) }
    810
    911    // the delete, save and update actions only accept POST requests
    10     static allowedMethods = [delete:'POST', save:'POST', update:'POST']
     12    static allowedMethods = [delete:'POST', save:'POST', update:'POST', useInventoryItem:'POST']
    1113
    1214    def list = {
     
    2931    }
    3032
     33    /**
     34    * Simply assigns a passed in task id to a session variable and redirects to search.
     35    */
     36    def findInventoryItemForMovement = {
     37        if(!params.task?.id) {
     38            flash.message = "No task id supplied, please select a task then the inventory tab."
     39            redirect(controller: "taskDetailed", action: "search")
     40            return
     41        }
     42
     43        session.inventoryMovementTaskId = params.task.id
     44        flash.message = "Please find and then select the inventory item."
     45        redirect(action: search)
     46    }
     47
    3148    def show = {
    32        
     49
    3350        // In the case of an actionSubmit button, rewrite action name from 'index'.
    3451        if(params._action_Show)
    3552        { params.action='show' }
    36        
    37         def inventoryItemInstance = InventoryItem.get( params.id )
    3853
    39         if(!inventoryItemInstance) {
     54        if(!InventoryItem.exists(params.id)) {
    4055            flash.message = "InventoryItem not found with id ${params.id}"
    4156            redirect(action:search)
     57            return
    4258        }
    43         else { return [ inventoryItemInstance : inventoryItemInstance ] }
     59
     60        def result = inventoryItemService.prepareShowData(params)
     61
     62        if(result.error) {
     63            flash.message = "Could not to prepare the data to show item with id: ${params.id}."
     64            redirect(action:search)
     65            return
     66        }
     67
     68        def model = [ inventoryItemInstance: result.inventoryItemInstance,
     69                                inventoryMovementList: result.inventoryMovementList,
     70                                inventoryMovementListTotal: result.inventoryMovementListTotal,
     71                                inventoryMovementListMax: result.inventoryMovementListMax,
     72                                showTab: result.showTab]
     73
     74        if(session.inventoryMovementTaskId) {
     75            model.inventoryMovementInstance = new InventoryMovement()
     76            model.inventoryMovementInstance.task = Task.get(session.inventoryMovementTaskId)
     77            model.inventoryMovementInstance.quantity = 1
     78        }
     79
     80        return model
    4481    }
    4582
     
    123160        }
    124161    }
     162
     163    /**
     164    * Handles the use inventory item form submit in the show view.
     165    */
     166    def useInventoryItem = {
     167
     168        params.inventoryMovementType = InventoryMovementType.get(1) // used.
     169        def result = inventoryMovementService.move(params)
     170
     171        if(!result.error) {
     172            flash.message = "Inventory Movement for ${result.inventoryMovementInstance.inventoryItem.name.encodeAsHTML()} created."
     173            redirect(controller:"taskDetailed", action:"show", id: result.taskId)
     174        }
     175        else {
     176            if(result.inventoryMovementInstance) {
     177                def p = [:]
     178                p.id = result.inventoryMovementInstance.inventoryItem?.id
     179                def r = inventoryItemService.prepareShowData(p)
     180
     181                def model = [ inventoryItemInstance: r.inventoryItemInstance,
     182                                        inventoryMovementList: r.inventoryMovementList,
     183                                        inventoryMovementListTotal: r.inventoryMovementListTotal,
     184                                        inventoryMovementListMax: r.inventoryMovementListMax,
     185                                        showTab: r.showTab]
     186
     187                model.inventoryMovementInstance = result.inventoryMovementInstance
     188
     189                render(view: 'show', model: model)
     190            }
     191            else {
     192                flash.message = "Could not create inventory movement."
     193                redirect(action:"search")
     194            }
     195
     196        }
     197    }
     198
    125199}
Note: See TracChangeset for help on using the changeset viewer.