Ignore:
Timestamp:
Oct 1, 2010, 3:22:05 PM (14 years ago)
Author:
gav
Message:

New report: Inventory Value.

File:
1 edited

Legend:

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

    r649 r668  
     1
     2import net.kromhouts.HqlBuilder
    13
    24/**
     
    164166    } // getStockTakeOverview()
    165167
     168    /**
     169    * Get the data for the inventory value.
     170    * @param params The request params, may contain params to specify the search.
     171    * @param locale The locale to use when generating result.message.
     172    */
     173    def getInventoryValue(params, locale) {
     174        def result = [:]
     175
     176        result.inventoryItemList = []
     177        result.inventoryItemCount = 0
     178        result.inventoryItemTotalValue = new BigDecimal(0)
     179        result.currency = null
     180        result.errorMessage = null
     181        result.summaryOfCalculationMethod = "This report does not convert between different currency.\n"
     182        result.summaryOfCalculationMethod += "Therefore all item's are checked to ensure that currency is the same."
     183
     184        result.site = Site.get(params.site.id.toLong())
     185        result.inventoryTypes = params.inventoryTypes.collect { InventoryType.get(it.toInteger()) }
     186        result.inventoryGroups = params.inventoryGroups.collect { InventoryGroup.get(it.toInteger()) }
     187
     188        def fail = { Map m ->
     189            result.error = [ code: m.code, args: m.args ]
     190            result.errorMessage = g.message(result.error)
     191            result.currency = null
     192            result.inventoryItemTotalValue = new BigDecimal(0)
     193            return result
     194        }
     195
     196        def q = new HqlBuilder().query {
     197            select 'distinct inventoryItem'
     198            from 'InventoryItem as inventoryItem',
     199                    'left join fetch inventoryItem.inventoryLocation as inventoryLocation',
     200                    'left join fetch inventoryLocation.inventoryStore as inventoryStore',
     201                    'left join fetch inventoryItem.unitOfMeasure as unitOfMeasure',
     202                    'left join fetch inventoryItem.picture as picture',
     203                    'left join fetch picture.images as Image'
     204            where 'inventoryItem.isActive = true'
     205                namedParams.siteId = result.site.id
     206                and 'inventoryStore.site.id = :siteId'
     207                if(result.inventoryTypes) {
     208                    namedParams.inventoryTypeIds = result.inventoryTypes.collect {it.id}
     209                    and 'inventoryItem.inventoryType.id in(:inventoryTypeIds)'
     210                }
     211                if(result.inventoryGroups) {
     212                    namedParams.inventoryGroupIds = result.inventoryGroups.collect {it.id}
     213                    and 'inventoryItem.inventoryGroup.id in(:inventoryGroupIds)'
     214                }
     215            order 'by inventoryItem.name asc'
     216        }
     217
     218        result.inventoryItemList = InventoryItem.executeQuery(q.query, q.namedParams)
     219        result.inventoryItemCount = result.inventoryItemList.size()
     220        result.currency = result.inventoryItemList[0]?.estimatedUnitPriceCurrency
     221
     222        for(inventoryItem in result.inventoryItemList) {
     223            // Check all currency is the same.
     224            if(result.currency != inventoryItem.estimatedUnitPriceCurrency) {
     225                fail(code:'report.error.multiple.currency.found') // No return, populate errors but continue report.
     226                break
     227            }
     228            result.inventoryItemTotalValue += inventoryItem.estimatedUnitPriceAmount * inventoryItem.unitsInStock
     229        } // for
     230
     231        // Success.
     232        return result
     233
     234    } // getInventoryValueByGroupAndType()
     235
    166236} // end class
Note: See TracChangeset for help on using the changeset viewer.