Index: trunk/grails-app/services/InventoryReportService.groovy
===================================================================
--- trunk/grails-app/services/InventoryReportService.groovy	(revision 676)
+++ trunk/grails-app/services/InventoryReportService.groovy	(revision 677)
@@ -238,4 +238,11 @@
         } // for
 
+        /// @todo: This protects against a bug in the report layout, remove when solved.
+        if(result.inventoryTypes.size() > 4)
+            result.inventoryTypes = [[name:'More than 4']]
+
+        if(result.inventoryGroups.size() > 4)
+            result.inventoryGroups =  [[name:'More than 4']]
+
         // Success.
         return result
@@ -287,4 +294,8 @@
                 namedParams.siteId = result.site.id
                 and 'inventoryStore.site.id = :siteId'
+                namedParams.groupIds = result.inventoryGroups.collect {it.id}
+                and 'inventoryItem.inventoryGroup.id in(:groupIds)'
+                namedParams.typeIds = result.inventoryTypes.collect {it.id}
+                and 'inventoryItem.inventoryType.id in(:typeIds)'
         }
         def baseWhereLogic = new ArrayList(q.whereClauseTerms)
@@ -292,5 +303,5 @@
         // Count the inventoryItems.
         q.select = 'count(distinct inventoryItem)'
-        result.inventoryItemCount = InventoryItem.executeQuery(q.query, q.namedParams, q.paginateParams)[0]
+        result.inventoryItemCount = InventoryItem.executeQuery(q.query, q.namedParams)[0]
 
         // Get the first currency found on this site.
@@ -308,31 +319,30 @@
 
         // Get values for each group.
-        q.and 'inventoryItem.inventoryGroup.id = :groupId'
         def tempGroups = []
         result.inventoryGroups.each() { group ->
-            q.namedParams.groupId = group.id
+            q.namedParams.groupIds = [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
+        q.namedParams.groupIds = result.inventoryGroups.collect {it.id} // reset.
         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
+            q.namedParams.typeIds = [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
 
+        /// @todo: This protects against a bug in the report layout, remove when solved.
+        if(result.inventoryTypes.size() > 4)
+            result.inventoryTypes = [[name:'More than 4', value: 0]]
+
+        if(result.inventoryGroups.size() > 4)
+            result.inventoryGroups =  [[name:'More than 4', value: 0]]
+
+        // Check all currency is the same.
         if(currencyCount != 1)
             fail(code:'report.error.multiple.currency.found') // No return, populate errors but continue report.
