Changeset 405


Ignore:
Timestamp:
Feb 23, 2010, 10:14:19 PM (10 years ago)
Author:
gav
Message:

Add estimatedUnitPrice to InventoryItem.
Change InventoryItem to use serviced controller and shared messages.

Location:
trunk/grails-app
Files:
8 edited

Legend:

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

    r403 r405  
    126126            params.action='show'
    127127
    128         if(!InventoryItem.exists(params.id)) {
    129             flash.message = "InventoryItem not found with id ${params.id}"
     128        def result = inventoryItemService.show(params)
     129
     130        if(!result.error) {
     131
     132            def model = [ inventoryItemInstance: result.inventoryItemInstance,
     133                                    inventoryMovementList: result.inventoryMovementList,
     134                                    inventoryMovementListTotal: result.inventoryMovementListTotal,
     135                                    inventoryMovementListMax: result.inventoryMovementListMax,
     136                                    showTab: result.showTab]
     137
     138            if(session.inventoryMovementTaskId) {
     139                model.inventoryMovementInstance = new InventoryMovement()
     140                model.inventoryMovementInstance.task = Task.get(session.inventoryMovementTaskId)
     141                model.inventoryMovementInstance.quantity = 1
     142            }
     143
     144            // Success.
     145            return model
     146        }
     147
     148        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
     149        redirect(action:search)
     150        return
     151    }
     152
     153    def delete = {
     154        def result = inventoryItemService.delete(params)
     155
     156        if(!result.error) {
     157            flash.message = g.message(code: "default.delete.success", args: ["InventoryItem", params.id])
     158            redirect(action:list)
     159            return
     160        }
     161
     162        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
     163
     164        if(result.error.code == "default.not.found") {
    130165            redirect(action:search)
    131166            return
    132167        }
    133168
    134         def result = inventoryItemService.prepareShowData(params)
    135 
    136         if(result.error) {
    137             flash.message = "Could not to prepare the data to show item with id: ${params.id}."
    138             redirect(action:search)
    139             return
    140         }
    141 
    142         def model = [ inventoryItemInstance: result.inventoryItemInstance,
    143                                 inventoryMovementList: result.inventoryMovementList,
    144                                 inventoryMovementListTotal: result.inventoryMovementListTotal,
    145                                 inventoryMovementListMax: result.inventoryMovementListMax,
    146                                 showTab: result.showTab]
    147 
    148         if(session.inventoryMovementTaskId) {
    149             model.inventoryMovementInstance = new InventoryMovement()
    150             model.inventoryMovementInstance.task = Task.get(session.inventoryMovementTaskId)
    151             model.inventoryMovementInstance.quantity = 1
    152         }
    153 
    154         return model
    155     }
    156 
    157     def delete = {
    158         def inventoryItemInstance = InventoryItem.get( params.id )
    159         if(inventoryItemInstance) {
    160             try {
    161                 inventoryItemInstance.delete(flush:true)
    162                 flash.message = "InventoryItem ${params.id} deleted"
    163                 redirect(action:search)
    164             }
    165             catch(org.springframework.dao.DataIntegrityViolationException e) {
    166                 flash.message = "InventoryItem ${params.id} could not be deleted"
    167                 redirect(action:show,id:params.id)
    168             }
    169         }
    170         else {
    171             flash.message = "InventoryItem not found with id ${params.id}"
    172             redirect(action:search)
    173         }
     169        redirect(action:show, id: params.id)
    174170    }
    175171
     
    180176            params.action='edit'
    181177
    182         def inventoryItemInstance = InventoryItem.get( params.id )
    183 
    184         if(!inventoryItemInstance) {
    185             flash.message = "InventoryItem not found with id ${params.id}"
     178        def result = inventoryItemService.edit(params)
     179
     180        if(!result.error)
     181            return [ inventoryItemInstance : result.inventoryItemInstance ]
     182
     183        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
     184        redirect(action:search)
     185    }
     186
     187    def update = {
     188        def result = inventoryItemService.update(params)
     189
     190        if(!result.error) {
     191            flash.message = g.message(code: "default.update.success", args: ["InventoryItem", params.id])
     192            redirect(action:show, id: params.id)
     193            return
     194        }
     195
     196        if(result.error.code == "default.not.found") {
     197            flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
    186198            redirect(action:search)
    187         }
    188         else {
    189             return [ inventoryItemInstance : inventoryItemInstance ]
    190         }
    191     }
    192 
    193     def update = {
    194         def inventoryItemInstance = InventoryItem.get( params.id )
    195         if(inventoryItemInstance) {
    196             if(params.version) {
    197                 def version = params.version.toLong()
    198                 if(inventoryItemInstance.version > version) {
    199                    
    200                     inventoryItemInstance.errors.rejectValue("version", "default.optimistic.locking.failure")
    201                     render(view:'edit',model:[inventoryItemInstance:inventoryItemInstance])
    202                     return
    203                 }
    204             }
    205             inventoryItemInstance.properties = params
    206             if(!inventoryItemInstance.hasErrors() && inventoryItemInstance.save(flush: true)) {
    207                 flash.message = "InventoryItem ${params.id} updated"
    208                 redirect(action:show,id:inventoryItemInstance.id)
    209             }
    210             else {
    211                 render(view:'edit',model:[inventoryItemInstance:inventoryItemInstance])
    212             }
    213         }
    214         else {
    215             flash.message = "InventoryItem not found with id ${params.id}"
    216             redirect(action:search)
    217         }
     199            return
     200        }
     201
     202        render(view:'edit', model:[inventoryItemInstance: result.inventoryItemInstance.attach()])
    218203    }
    219204
    220205    def create = {
    221         def inventoryItemInstance = new InventoryItem()
    222         inventoryItemInstance.properties = params
    223         return ['inventoryItemInstance':inventoryItemInstance]
     206        def result = inventoryItemService.create(params)
     207
     208        if(!result.error)
     209            return [inventoryItemInstance: result.inventoryItemInstance]
     210
     211        //flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
     212        redirect(action: search)
    224213    }
    225214
    226215    def save = {
    227         def inventoryItemInstance = new InventoryItem(params)
    228         if(!inventoryItemInstance.hasErrors() && inventoryItemInstance.save(flush: true)) {
    229             flash.message = "InventoryItem ${inventoryItemInstance.id} created"
    230             redirect(action:show,id:inventoryItemInstance.id)
    231         }
    232         else {
    233             render(view:'create',model:[inventoryItemInstance:inventoryItemInstance])
    234         }
     216        def result = inventoryItemService.save(params)
     217
     218        if(!result.error) {
     219            flash.message = g.message(code: "default.create.success", args: ["InventoryItem", result.inventoryItemInstance.id])
     220            redirect(action:show, id: result.inventoryItemInstance.id)
     221            return
     222        }
     223
     224        //flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
     225        render(view:'create', model:[inventoryItemInstance: result.inventoryItemInstance])
    235226    }
    236227
     
    252243                def p = [:]
    253244                p.id = result.inventoryMovementInstance.inventoryItem?.id
    254                 def r = inventoryItemService.prepareShowData(p)
     245                def r = inventoryItemService.show(p)
    255246
    256247                def model = [ inventoryItemInstance: r.inventoryItemInstance,
  • trunk/grails-app/domain/InventoryItem.groovy

    r182 r405  
    99    String description = ""
    1010    String manufacturersPartNumber
     11    BigDecimal estimatedUnitPriceAmount
     12    Currency estimatedUnitPriceCurrency
    1113    String suppliersPartNumber
    1214    Integer unitsInStock = 0
     
    3638        unitsInStock(min:0)
    3739        unitOfMeasure()
     40        estimatedUnitPriceAmount(nullable:true, max: new BigDecimal(999999999999))
     41        estimatedUnitPriceCurrency(nullable:true)
    3842        reorderPoint()
    3943        enableReorder()
  • trunk/grails-app/i18n/messages.properties

    r402 r405  
    119119task.associatedAssets=Associated Assets
    120120task.associatedAssets.help=These assets are to be associated with this task, but costs will not be assigned.
    121 
    122 
    123 inventoryItem.notFound=Could not complete operation, inventory item not found.
    124121
    125122inventoryMovement.quantity.insufficientItemsInStock=Could not complete operation, insufficient items in stock.
  • trunk/grails-app/services/InventoryItemService.groovy

    r226 r405  
    1111    * @param params The incoming params as normally passed to the show view
    1212    * primarily including the id of the inventoryItem.
    13     * @returns A map containing result.error=true (if any error) and result.inventoryItemInstance (if available)
    14     * and
     13    * @returns A map containing result.error, if any error, otherwise result.inventoryItemInstance.
    1514    */
    16     def prepareShowData(params) {
     15    def show(params) {
    1716        def result = [:]
    18 
    19         def fail = { Object[] args ->
    20             if(args.size() == 2) result.errors = [args[0], args[1]]
    21             result.error = true
     17        def fail = { Map m ->
     18            result.error = [ code: m.code, args: ["InventoryItem", params.id] ]
    2219            return result
    2320        }
     21
     22        result.inventoryItemInstance = InventoryItem.get( params.id )
     23
     24        if(!result.inventoryItemInstance)
     25            return fail(code:"default.not.found")
    2426
    2527        result.showTab = [:]
     
    3537        }
    3638
    37         result.inventoryItemInstance = InventoryItem.get( params.id )
    38 
    39         if(!result.inventoryItemInstance)
    40             return fail("inventoryItem", "inventoryItem.notFound")
    41 
    4239        def p = [:]
    4340        p.max = result.inventoryMovementListMax = 10
     
    4744        result.inventoryMovementListTotal = InventoryMovement.countByInventoryItem(result.inventoryItemInstance)
    4845
    49         // Success
     46        // Success.
    5047        return result
    5148
    52     } // end prepareShowData()
     49    } // end show()
     50
     51    def delete(params) {
     52        def result = [:]
     53        def fail = { Map m ->
     54            result.error = [ code: m.code, args: ["InventoryItem", params.id] ]
     55            return result
     56        }
     57
     58        result.inventoryItemInstance = InventoryItem.get(params.id)
     59
     60        if(!result.inventoryItemInstance)
     61            return fail(code:"default.not.found")
     62
     63        try {
     64            result.inventoryItemInstance.delete(flush:true)
     65            return result //Success.
     66        }
     67        catch(org.springframework.dao.DataIntegrityViolationException e) {
     68            return fail(code:"default.delete.failure")
     69        }
     70
     71    }
     72
     73    def edit(params) {
     74        def result = [:]
     75        def fail = { Map m ->
     76            result.error = [ code: m.code, args: ["InventoryItem", params.id] ]
     77            return result
     78        }
     79
     80        result.inventoryItemInstance = InventoryItem.get(params.id)
     81
     82        if(!result.inventoryItemInstance)
     83            return fail(code:"default.not.found")
     84
     85        // Success.
     86        return result
     87    }
     88
     89    def update(params) {
     90        InventoryItem.withTransaction { status ->
     91            def result = [:]
     92
     93            def fail = { Map m ->
     94                status.setRollbackOnly()
     95                if(result.inventoryItemInstance && m.field)
     96                    result.inventoryItemInstance.errors.rejectValue(m.field, m.code)
     97                result.error = [ code: m.code, args: ["InventoryItem", params.id] ]
     98                return result
     99            }
     100
     101            result.inventoryItemInstance = InventoryItem.get(params.id)
     102
     103            if(!result.inventoryItemInstance)
     104                return fail(code:"default.not.found")
     105
     106            // Optimistic locking check.
     107            if(params.version) {
     108                if(result.inventoryItemInstance.version > params.version.toLong())
     109                    return fail(field:"version", code:"default.optimistic.locking.failure")
     110            }
     111
     112            result.inventoryItemInstance.properties = params
     113
     114            if(result.inventoryItemInstance.hasErrors() || !result.inventoryItemInstance.save())
     115                return fail(code:"default.update.failure")
     116
     117            // Success.
     118            return result
     119
     120        } //end withTransaction
     121    }  // end update()
     122
     123    def create(params) {
     124        def result = [:]
     125        def fail = { Map m ->
     126            result.error = [ code: m.code, args: ["InventoryItem", params.id] ]
     127            return result
     128        }
     129
     130        result.inventoryItemInstance = new InventoryItem()
     131        result.inventoryItemInstance.properties = params
     132
     133        // success
     134        return result
     135    }
     136
     137    def save(params) {
     138        InventoryItem.withTransaction { status ->
     139            def result = [:]
     140
     141            def fail = { Map m ->
     142                status.setRollbackOnly()
     143                if(result.inventoryItemInstance && m.field)
     144                    result.inventoryItemInstance.errors.rejectValue(m.field, m.code)
     145                result.error = [ code: m.code, args: ["InventoryItem", params.id] ]
     146                return result
     147            }
     148
     149            result.inventoryItemInstance = new InventoryItem(params)
     150
     151            if(result.inventoryItemInstance.hasErrors() || !result.inventoryItemInstance.save())
     152                return fail(code:"default.create.failure")
     153
     154            // success
     155            return result
     156
     157        } //end withTransaction
     158    }
     159
    53160
    54161} // end class
  • trunk/grails-app/views/inventoryItemDetailed/create.gsp

    r392 r405  
    1313        </div>
    1414        <div class="body">
    15             <g:if test="${flash.message}">
    16             <div class="message">${flash.message}</div>
    17             </g:if>
     15            <g:render template="/shared/messages" />
    1816            <g:hasErrors bean="${inventoryItemInstance}">
    1917            <div class="errors">
     
    118116                            <tr class="prop">
    119117                                <td valign="top" class="name">
     118                                    <label for="averageDeliveryTime">Estimated Unit Price:</label>
     119                                </td>
     120                                <td valign="top">
     121                                    <input  class="medium ${hasErrors(bean:inventoryItemInstance,field:'estimatedUnitPriceAmount','errors')}"
     122                                                    type="text" id="estimatedUnitPriceAmount" name="estimatedUnitPriceAmount"
     123                                                    value="${fieldValue(bean:inventoryItemInstance,field:'estimatedUnitPriceAmount')}" />
     124                                    <g:currencySelect name="estimatedUnitPriceCurrency"
     125                                                                        value="${inventoryItemInstance.estimatedUnitPriceCurrency}" />
     126                                </td>
     127                            </tr>
     128                       
     129                            <tr class="prop">
     130                                <td valign="top" class="name">
    120131                                    <label for="suppliersPartNumber">Suppliers Part Number:</label>
    121132                                </td>
  • trunk/grails-app/views/inventoryItemDetailed/edit.gsp

    r392 r405  
    1414        </div>
    1515        <div class="body">
    16             <g:if test="${flash.message}">
    17             <div class="message">${flash.message}</div>
    18             </g:if>
     16            <g:render template="/shared/messages" />
    1917            <g:hasErrors bean="${inventoryItemInstance}">
    2018            <div class="errors">
     
    152150                                                        noSelection="['null':'--None--']">
    153151                                    </g:select>
     152                                </td>
     153                            </tr>
     154                       
     155                            <tr class="prop">
     156                                <td valign="top" class="name">
     157                                    <label for="averageDeliveryTime">Estimated Unit Price:</label>
     158                                </td>
     159                                <td valign="top">
     160                                    <input  class="medium ${hasErrors(bean:inventoryItemInstance,field:'estimatedUnitPriceAmount','errors')}"
     161                                                    type="text" id="estimatedUnitPriceAmount" name="estimatedUnitPriceAmount"
     162                                                    value="${inventoryItemInstance.estimatedUnitPriceAmount}" />
     163                                    <g:currencySelect name="estimatedUnitPriceCurrency"
     164                                                                        value="${inventoryItemInstance.estimatedUnitPriceCurrency}" />
    154165                                </td>
    155166                            </tr>
  • trunk/grails-app/views/inventoryItemDetailed/search.gsp

    r392 r405  
    1616        </div>
    1717        <div class="body">
    18             <g:if test="${flash.message}">
    19             <div class="message">${flash.message}</div>
    20             </g:if>
     18            <g:render template="/shared/messages" />
    2119            <filterpane:currentCriteria domainBean="InventoryItem"
    2220                                    action="search"
  • trunk/grails-app/views/inventoryItemDetailed/show.gsp

    r392 r405  
    1515        </div>
    1616        <div class="body">
     17            <g:render template="/shared/messages" />
    1718            <g:hasErrors bean="${inventoryMovementInstance}">
    18             <div class="errors">
    19                 <g:renderErrors bean="${inventoryMovementInstance}" as="list" />
    20             </div>
     19                <div class="errors">
     20                    <g:renderErrors bean="${inventoryMovementInstance}" as="list" />
     21                </div>
    2122            </g:hasErrors>
    22             <g:if test="${flash.message}">
    23                 <div class="message">${flash.message}</div>
    24             </g:if>
    2523
    2624            <g:hasErrors bean="${inventoryItemInstance}">
    27             <div class="errors">
    28                 <g:renderErrors bean="${inventoryItemInstance}" as="list" />
    29             </div>
     25                <div class="errors">
     26                    <g:renderErrors bean="${inventoryItemInstance}" as="list" />
     27                </div>
    3028            </g:hasErrors>
    3129
     
    223221                                        <td valign="top" class="name">Recommended Reorder Point:</td>
    224222                                        <td valign="top" class="value">${fieldValue(bean:inventoryItemInstance, field:'recommendedReorderPoint')}</td>
     223                                    </tr>
     224
     225                                    <tr class="prop">
     226                                        <td valign="top" class="name">Estimated Unit Price:</td>
     227
     228                                        <td valign="top" class="value">
     229                                            <g:if test="${inventoryItemInstance.estimatedUnitPriceAmount}">
     230                                                ${inventoryItemInstance.estimatedUnitPriceAmount.encodeAsHTML()}
     231                                                ${inventoryItemInstance.estimatedUnitPriceCurrency.encodeAsHTML()}
     232                                            </g:if>
     233                                        </td>
    225234                                    </tr>
    226235
Note: See TracChangeset for help on using the changeset viewer.