Index: trunk/grails-app/controllers/ReportController.groovy
===================================================================
--- trunk/grails-app/controllers/ReportController.groovy	(revision 674)
+++ trunk/grails-app/controllers/ReportController.groovy	(revision 676)
@@ -213,3 +213,20 @@
     }
 
+    def inventoryValueOverviewGsp = {
+        render(view: 'inventoryValueOverview')
+    }
+
+    def inventoryValueOverview = {
+
+        params.reportTitle = "Inventory Value Overview"
+        params.logoUrl = grailsApplication.mainContext.getResource('images/logo.png').getURL()
+        params.currentUser = authService.currentUser
+
+        def dataModel = inventoryReportService.getInventoryValueOverview(params, RCU.getLocale(request))
+
+        // Jasper plugin controller expects data to be a Collection.
+        chain(controller:'jasper', action:'index', model:[data: [dataModel]], params:params)
+
+    }
+
 } // end of class.
Index: trunk/grails-app/services/InventoryReportService.groovy
===================================================================
--- trunk/grails-app/services/InventoryReportService.groovy	(revision 674)
+++ trunk/grails-app/services/InventoryReportService.groovy	(revision 676)
@@ -243,3 +243,103 @@
     } // getInventoryValueDetailed()
 
+    /**
+    * Get the data for the inventory overiew value.
+    * @param params The request params, may contain params to specify the search.
+    * @param locale The locale to use when generating result.message.
+    */
+    def getInventoryValueOverview(params, locale) {
+        def result = [:]
+
+        result.inventoryItemCount = 0
+        result.inventoryItemTotalValue = new BigDecimal(0)
+        result.currency = null
+        result.errorMessage = null
+        result.summaryOfCalculationMethod = "This report does not convert between different currency.\n"
+        result.summaryOfCalculationMethod += "Therefore all item's are checked to ensure that currency is the same."
+
+        result.site = Site.get(params.site.id.toLong())
+
+        if(params.inventoryTypes)
+            result.inventoryTypes = params.inventoryTypes.collect { InventoryType.get(it.toInteger()) }
+        else
+            result.inventoryTypes = InventoryType.findAllByIsActive(true, [max:254, sort:'name'])
+
+        if(params.inventoryGroups)
+            result.inventoryGroups = params.inventoryGroups.collect { InventoryGroup.get(it.toInteger()) }
+        else
+            result.inventoryGroups = InventoryGroup.findAllByIsActive(true, [max:254, sort:'name'])
+
+        def fail = { Map m ->
+            result.error = [ code: m.code, args: m.args ]
+            result.errorMessage = g.message(result.error)
+            result.currency = null
+            //result.inventoryItemTotalValue = new BigDecimal(0)
+            return result
+        }
+
+        // Base query.
+        def q = new HqlBuilder().query {
+            select ''
+            from 'InventoryItem as inventoryItem',
+                    'left join inventoryItem.inventoryLocation as inventoryLocation',
+                    'left join inventoryLocation.inventoryStore as inventoryStore'
+            where 'inventoryItem.isActive = true'
+                namedParams.siteId = result.site.id
+                and 'inventoryStore.site.id = :siteId'
+        }
+        def baseWhereLogic = new ArrayList(q.whereClauseTerms)
+
+        // Count the inventoryItems.
+        q.select = 'count(distinct inventoryItem)'
+        result.inventoryItemCount = InventoryItem.executeQuery(q.query, q.namedParams, q.paginateParams)[0]
+
+        // Get the first currency found on this site.
+        q.paginateParams.max = 1
+        q.select = 'inventoryItem.estimatedUnitPriceCurrency'
+        result.currency = InventoryItem.executeQuery(q.query, q.namedParams, q.paginateParams)[0]
+
+        // Count the distinct currency found.
+        q.select = 'count(distinct inventoryItem.estimatedUnitPriceCurrency)'
+        def currencyCount = InventoryItem.executeQuery(q.query, q.namedParams)[0]
+
+        // Get total value.
+        q.select = 'sum (inventoryItem.estimatedUnitPriceAmount * inventoryItem.unitsInStock)'
+        result.inventoryItemTotalValue = InventoryItem.executeQuery(q.query, q.namedParams)[0]
+
+        // Get values for each group.
+        q.and 'inventoryItem.inventoryGroup.id = :groupId'
+        def tempGroups = []
+        result.inventoryGroups.each() { group ->
+            q.namedParams.groupId = group.id
+            def groupValue = InventoryItem.executeQuery(q.query, q.namedParams)[0] ?: 0
+            tempGroups << [name: group.name, value: groupValue]
+        }
+
+        // Cleanup and reset query.
+        q.namedParams.remove('groupId')
+        q.whereClauseTerms = baseWhereLogic
+        result.inventoryGroups = tempGroups
+
+        // Get values for each type.
+        q.and 'inventoryItem.inventoryType.id = :typeId'
+        def tempTypes = []
+        result.inventoryTypes.each() { type ->
+            q.namedParams.typeId = type.id
+            def typeValue = InventoryItem.executeQuery(q.query, q.namedParams)[0] ?: 0
+            tempTypes << [name: type.name, value: typeValue]
+        }
+
+        // Cleanup and reset query.
+        q.namedParams.remove('typeId')
+        q.whereClauseTerms = baseWhereLogic
+        result.inventoryTypes = tempTypes
+
+        if(currencyCount != 1)
+            fail(code:'report.error.multiple.currency.found') // No return, populate errors but continue report.
+
+        // Success.
+        return result
+
+    } // getInventoryValueOverview()
+
 } // end class
Index: trunk/grails-app/views/appCore/start.gsp
===================================================================
--- trunk/grails-app/views/appCore/start.gsp	(revision 674)
+++ trunk/grails-app/views/appCore/start.gsp	(revision 676)
@@ -201,4 +201,9 @@
                                         </td>
                                         <td valign="top" class="value">
+                                                <g:link controller="report" action="inventoryValueOverviewGsp">
+                                                    Total Value (Overview)
+                                                </g:link>
+                                                <br />
+                                                <br />
                                                 <g:link controller="report" action="inventoryValueDetailedGsp">
                                                     Detailed Value
Index: trunk/grails-app/views/report/inventoryValueOverview.gsp
===================================================================
--- trunk/grails-app/views/report/inventoryValueOverview.gsp	(revision 676)
+++ trunk/grails-app/views/report/inventoryValueOverview.gsp	(revision 676)
@@ -0,0 +1,82 @@
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+        <meta name="layout" content="main" />
+        <title>Inventory Overview Value Report</title>
+        <nav:resources override="true"/>
+    </head>
+    <body>
+        <div class="nav">
+            <nav:renderSubItems group="nav"/>
+        </div>
+        <div class="body">
+            <h1>Inventory Overview Value Report</h1>
+            <g:render template="/shared/messages" />
+            <div class="dialog">
+                <table>
+                    <tbody>
+
+                        <g:jasperForm controller="report"
+                                                    action="inventoryValueOverview"
+                                                    jasper="inventoryValueOverview"
+                                                    name="Inventory Value Overview">
+
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label>Site:</label>
+                                </td>
+                                <td valign="top" class="value">
+                                    <g:select optionKey="id"
+                                                        from="${Site.findAllByIsActive(true).sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }}"
+                                                        name="site.id">
+                                    </g:select>
+                                </td>
+                            </tr>
+
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label>Inventory Types:</label>
+                                </td>
+                                <td valign="top" class="value">
+                                    <custom:checkBoxList name="inventoryTypes"
+                                                                            from="${InventoryType.findAllByIsActive(true)}"
+                                                                            optionKey="id"
+                                                                            sortBy="name"
+                                                                            linkController="inventoryTypeDetailed"
+                                                                            linkAction="show"
+                                                                            height="150px"/>
+                                </td>
+                            </tr>
+
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label>Inventory Groups:</label>
+                                </td>
+                                <td valign="top" class="value">
+                                    <custom:checkBoxList name="inventoryGroups"
+                                                                            from="${InventoryGroup.findAllByIsActive(true)}"
+                                                                            optionKey="id"
+                                                                            sortBy="name"
+                                                                            linkController="inventoryGroupDetailed"
+                                                                            linkAction="show"
+                                                                            height="150px"/>
+                                </td>
+                            </tr>
+
+                            <tr class="prop">
+                                <td valign="top" class="name">
+                                    <label>Report:</label>
+                                </td>
+                                <td valign="top" class="value">
+                                    <custom:jasperButtons jasper="inventoryValueOverview" format="PDF, XLS" text="PDF" />
+                                </td>
+                            </tr>
+
+                        </g:jasperForm>
+
+                    </tbody>
+                </table>
+            </div> <!--End dialog-->
+        </div> <!--End body-->
+    </body>
+</html>
