Index: /trunk/grails-app/controllers/ReportController.groovy
===================================================================
--- /trunk/grails-app/controllers/ReportController.groovy	(revision 545)
+++ /trunk/grails-app/controllers/ReportController.groovy	(revision 546)
@@ -8,4 +8,5 @@
     def dateUtilService
     def taskReportService
+    def inventoryReportService
 
     def index = { redirect(action:templatePortrait,params:params) }
@@ -111,3 +112,29 @@
     } // immediateCallouts
 
+    def stockTakeOverview = {
+
+        params.reportTitle = "Stock Take Overview"
+        params.logoUrl = grailsApplication.mainContext.getResource('images/logo.png').getURL()
+        params.currentUser = authService.currentUser
+
+        def dataModel = inventoryReportService.getStockTakeOverview(params, RCU.getLocale(request))
+
+        // Jasper plugin controller expects data to be a Collection.
+        chain(controller:'jasper', action:'index', model:[data: [dataModel]], params:params)
+
+    } // stockTakeOverview
+
+    def stockTakeByLocation = {
+
+        params.reportTitle = "Stock Take By Location"
+        params.logoUrl = grailsApplication.mainContext.getResource('images/logo.png').getURL()
+        params.currentUser = authService.currentUser
+
+        def dataModel = inventoryReportService.getStockTakeByLocation(params, RCU.getLocale(request))
+
+        // Jasper plugin controller expects data to be a Collection.
+        chain(controller:'jasper', action:'index', model:[data: [dataModel]], params:params)
+
+    } // stockTakeByLocation
+
 } // end of class.
Index: /trunk/grails-app/i18n/messages.properties
===================================================================
--- /trunk/grails-app/i18n/messages.properties	(revision 545)
+++ /trunk/grails-app/i18n/messages.properties	(revision 546)
@@ -313,2 +313,9 @@
 inventoryItem.search.text.recently.used.description=Items used in the last {0} days.
 inventoryItem.search.text.recently.used.none.found=No items used in the last {0} days.
+
+# Reports
+report.stock.take.overview=Stock Take (Overview)
+report.stock.take.overview.help=Use this report to manage inventory stock take. Use in conjunction with the Stock Take (By Location) report.
+report.stock.take.by.location=Stock Take (Location)
+report.stock.take.by.location.help=Enter a comma separated list of inventory locations. \
+    Use the Stock Take (Overview) report to get the list of locations. A % symbol may be used as a wild card, e.g: X1, X2, Y%, Z%7
Index: /trunk/grails-app/services/InventoryReportService.groovy
===================================================================
--- /trunk/grails-app/services/InventoryReportService.groovy	(revision 546)
+++ /trunk/grails-app/services/InventoryReportService.groovy	(revision 546)
@@ -0,0 +1,103 @@
+
+/**
+* Service class that encapsulates the business logic for Inventory Reports.
+*/
+class InventoryReportService {
+
+    boolean transactional = false
+
+//     def authService
+//     def dateUtilService
+//     def messageSource
+
+    def g = new org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib()
+
+//     def paramsMax = 100000
+
+    /**
+    * Get the data for the inventory stock take overiew report.
+    * @param params The request params, may contain params to specify the search.
+    * @param locale The locale to use when generating result.message.
+    */
+    def getStockTakeOverview(params, locale) {
+        def result = [:]
+
+        result.summaryOfCalculationMethod = 'This report should be used in conjunction with the `Stock Take (By Location)` Report.'
+
+        def namedParams = [:]
+
+        result.query = "from InventoryLocation as inventoryLocation \
+                                        left join inventoryLocation.inventoryStore as inventoryStore \
+                                        where (inventoryLocation.isActive = true \
+                                                    ) \
+                                        order by inventoryStore.name, inventoryLocation.name"
+
+        result.query = "select new Map(inventoryLocation.name as location, inventoryStore.name as store) " + result.query
+        result.queryResult = InventoryLocation.executeQuery(result.query, namedParams)
+        result.inventoryLocationCount = result.queryResult.size()
+
+        result.inventoryLocationList = result.queryResult
+
+        // Success.
+        return result
+
+    } // getStockTakeOverview()
+
+    /**
+    * Get the data for the inventory stock take by location report.
+    * @param params The request params, may contain params to specify the search.
+    * @param locale The locale to use when generating result.message.
+    */
+    def getStockTakeByLocation(params, locale) {
+        def result = [:]
+
+        result.summaryOfCalculationMethod = 'This report should be used in conjunction with the `Stock Take (Overview)` Report.'
+
+        // Sanitise the locations string and convert to a list.
+        result.locations = params.locationString.trim()
+        if(result.locations.startsWith('e.g:'))
+            result.locations = result.locations.split(':')[-1].trim()
+        result.locations = result.locations.split(',')
+        result.locations = result.locations.collect {it.trim()}
+
+        def namedParams = [:]
+        namedParams.locationList = [null] // null protects against HQL unexpected end of subtree exception with an empty list.
+
+        // Fill namedParams.locationList
+        result.locations.each() {
+            InventoryLocation.findAllByNameIlike(it).each() {
+                namedParams.locationList << it
+            }
+        }
+
+        // Note: HQL docs advise not using fetch aliases in where clause (or any other clause).
+        // Access is via the parent object, however that does not work for the order by clause in this case.
+        result.query = "from InventoryItem as inventoryItem \
+                                        left join fetch inventoryItem.unitOfMeasure as unitOfMeasure \
+                                        left join fetch inventoryItem.inventoryLocation as inventoryLocation \
+                                        left join fetch inventoryLocation.inventoryStore as inventoryStore \
+                                        left join fetch inventoryItem.picture as picture \
+                                        left join fetch picture.images as Image \
+                                        where (inventoryItem.isActive = true \
+                                                    and  inventoryItem.inventoryLocation in (:locationList) \
+                                                    ) \
+                                        order by inventoryStore.name, inventoryLocation.name"
+
+        result.query = "select distinct inventoryItem " + result.query
+        result.queryResult = InventoryLocation.executeQuery(result.query, namedParams)
+        result.inventoryItemCount = result.queryResult.size()
+
+        // Return the actual locations as a string.
+        if(namedParams.locationList.size() > 1)
+            result.locations = namedParams.locationList[1..-1].toString()[1..-2]
+        else
+            result.locations = g.message(code: 'default.none.text')
+
+        result.inventoryItemList = result.queryResult
+
+        // Success.
+        return result
+
+    } // getStockTakeOverview()
+
+} // end class
Index: /trunk/grails-app/views/appCore/start.gsp
===================================================================
--- /trunk/grails-app/views/appCore/start.gsp	(revision 545)
+++ /trunk/grails-app/views/appCore/start.gsp	(revision 546)
@@ -123,11 +123,29 @@
                                             <br />
                                             <g:jasperReport controller="report"
+                                                                            action="stockTakeOverview"
+                                                                            jasper="stockTakeOverview"
+                                                                            name="Stock Take (Overview)"
+                                                                            format="PDF, XLS">
+                                                <g:helpBalloon class="helpballoon" code="report.stock.take.overview" />
+                                            </g:jasperReport>
+                                            <br />
+                                            <g:jasperReport controller="report"
+                                                                            action="stockTakeByLocation"
+                                                                            jasper="stockTakeByLocation"
+                                                                            name="Stock Take (By Location)"
+                                                                            format="PDF, XLS">
+                                                <g:textField name="locationString" value="e.g: A1%, C55" />
+                                                <g:helpBalloon class="helpballoon" code="report.stock.take.by.location" />
+                                            </g:jasperReport>
+                                            <br />
+                                            <g:jasperReport controller="report"
                                                                             action="templatePortrait"
                                                                             jasper="templatePortrait"
                                                                             name="Template (Portrait)"
-                                                                            format="PDF, XLS"/>
-                                            <g:link controller="report" action="downloadTemplate" params="[fileName: 'templatePortrait.jrxml']">
-                                                Download
-                                            </g:link>
+                                                                            format="PDF, XLS">
+                                                <g:link controller="report" action="downloadTemplate" params="[fileName: 'templatePortrait.jrxml']">
+                                                    Download
+                                                </g:link>
+                                            </g:jasperReport>
                                             <br />
                                             <g:jasperReport controller="report"
@@ -135,8 +153,9 @@
                                                                             jasper="templateLandscape"
                                                                             name="Template (Landscape)"
-                                                                            format="PDF, XLS"/>
-                                            <g:link controller="report" action="downloadTemplate" params="[fileName: 'templateLandscape.jrxml']">
-                                                Download
-                                            </g:link>
+                                                                            format="PDF, XLS">
+                                                <g:link controller="report" action="downloadTemplate" params="[fileName: 'templateLandscape.jrxml']">
+                                                    Download
+                                                </g:link>
+                                            </g:jasperReport>
                                             <br />
                                         </td>
Index: /trunk/web-app/reports/stockTakeByLocation.jrxml
===================================================================
--- /trunk/web-app/reports/stockTakeByLocation.jrxml	(revision 546)
+++ /trunk/web-app/reports/stockTakeByLocation.jrxml	(revision 546)
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="reportName" language="groovy" pageWidth="842" pageHeight="595" orientation="Landscape" whenNoDataType="NoDataSection" columnWidth="782" leftMargin="30" rightMargin="30" topMargin="12" bottomMargin="12" isSummaryNewPage="true" isSummaryWithPageHeaderAndFooter="true">
+	<property name="ireport.scriptlethandling" value="0"/>
+	<property name="ireport.encoding" value="UTF-8"/>
+	<property name="ireport.zoom" value="1.0"/>
+	<property name="ireport.x" value="0"/>
+	<property name="ireport.y" value="0"/>
+	<import value="net.sf.jasperreports.engine.*"/>
+	<import value="java.util.*"/>
+	<import value="net.sf.jasperreports.engine.data.*"/>
+	<style name="Crosstab Data Text" isDefault="false" hAlign="Center"/>
+	<style name="table" isDefault="false" fill="Solid" fontSize="12" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false">
+		<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
+			<pen lineWidth="0.0" lineColor="#000000"/>
+			<topPen lineWidth="0.0"/>
+			<leftPen lineWidth="0.0"/>
+			<bottomPen lineWidth="0.0"/>
+			<rightPen lineWidth="0.0"/>
+		</box>
+	</style>
+	<style name="table_TH" isDefault="false" mode="Opaque" backcolor="#C7C7C7" fontSize="12" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false">
+		<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
+			<pen lineWidth="1.0" lineColor="#000000"/>
+			<topPen lineWidth="1.0"/>
+			<leftPen lineWidth="0.0"/>
+			<bottomPen lineWidth="1.0"/>
+			<rightPen lineWidth="0.0"/>
+		</box>
+	</style>
+	<style name="table_CH" isDefault="false" mode="Opaque" backcolor="#FFFFFF" fontSize="12" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false">
+		<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
+			<pen lineWidth="1.0" lineColor="#000000"/>
+			<topPen lineWidth="0.0"/>
+			<leftPen lineWidth="0.0"/>
+			<bottomPen lineWidth="1.0"/>
+			<rightPen lineWidth="0.0"/>
+		</box>
+	</style>
+	<style name="table_TD" isDefault="false" mode="Opaque" backcolor="#FFFFFF" fontSize="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false">
+		<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
+			<pen lineWidth="1.0" lineColor="#000000"/>
+			<topPen lineWidth="1.0"/>
+			<leftPen lineWidth="0.0"/>
+			<bottomPen lineWidth="1.0"/>
+			<rightPen lineWidth="0.0"/>
+		</box>
+		<conditionalStyle>
+			<conditionExpression><![CDATA[new Boolean($V{REPORT_COUNT}.intValue()%2==0)]]></conditionExpression>
+			<style isDefault="false" style="table_TD" backcolor="#F7F7F7"/>
+		</conditionalStyle>
+	</style>
+	<style name="table_CF" isDefault="false" mode="Opaque" backcolor="#EDEDED" fontSize="12" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false">
+		<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
+			<pen lineWidth="1.0"/>
+			<topPen lineWidth="1.0"/>
+			<leftPen lineWidth="0.0"/>
+			<bottomPen lineWidth="1.0"/>
+			<rightPen lineWidth="0.0"/>
+		</box>
+	</style>
+	<subDataset name="dataset1">
+		<field name="name" class="java.lang.String"/>
+		<field name="unitsInStock" class="java.lang.Integer"/>
+		<field name="inventoryLocation" class="java.lang.Object"/>
+		<field name="picture" class="java.lang.Object"/>
+		<field name="unitOfMeasure" class="java.lang.Object"/>
+		<field name="description" class="java.lang.String"/>
+		<group name="group1">
+			<groupExpression><![CDATA[$F{inventoryLocation}.name]]></groupExpression>
+		</group>
+	</subDataset>
+	<parameter name="reportTitle" class="java.lang.String"/>
+	<parameter name="currentUser" class="java.lang.String"/>
+	<parameter name="logoUrl" class="java.lang.String"/>
+	<parameter name="startDateString" class="java.lang.String"/>
+	<parameter name="endDateString" class="java.lang.String"/>
+	<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
+		<defaultValueExpression><![CDATA["C:\\Documents and Settings\\kromhoutg\\My Documents\\reports\\"]]></defaultValueExpression>
+	</parameter>
+	<queryString language="SQL">
+		<![CDATA[]]>
+	</queryString>
+	<field name="inventoryItemList" class="java.util.List"/>
+	<field name="summaryOfCalculationMethod" class="java.lang.String"/>
+	<field name="inventoryItemCount" class="java.lang.Integer"/>
+	<field name="locations" class="java.lang.String"/>
+	<background>
+		<band splitType="Stretch"/>
+	</background>
+	<pageHeader>
+		<band height="93" splitType="Stretch">
+			<textField>
+				<reportElement key="staticText-1" mode="Transparent" x="0" y="50" width="340" height="25" backcolor="#FFFFFF"/>
+				<textElement textAlignment="Center" verticalAlignment="Top" markup="none">
+					<font size="20"/>
+				</textElement>
+				<textFieldExpression class="java.lang.String"><![CDATA[$P{reportTitle}]]></textFieldExpression>
+			</textField>
+			<image>
+				<reportElement x="0" y="0" width="340" height="50"/>
+				<imageExpression class="java.net.URL"><![CDATA[new URL($P{logoUrl})]]></imageExpression>
+			</image>
+			<textField isStretchWithOverflow="true" pattern="dd-MMM-yyyy" isBlankWhenNull="true">
+				<reportElement x="0" y="75" width="340" height="17"/>
+				<textElement textAlignment="Center" verticalAlignment="Middle" markup="none"/>
+				<textFieldExpression class="java.lang.String"><![CDATA["Inventory Items: "+$F{inventoryItemCount}+", Locations: "+$F{locations}+"."]]></textFieldExpression>
+			</textField>
+		</band>
+	</pageHeader>
+	<columnHeader>
+		<band splitType="Stretch"/>
+	</columnHeader>
+	<detail>
+		<band height="438" splitType="Stretch">
+			<componentElement>
+				<reportElement key="table 1" x="0" y="0" width="782" height="438"/>
+				<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
+					<datasetRun subDataset="dataset1">
+						<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{inventoryItemList})]]></dataSourceExpression>
+					</datasetRun>
+					<jr:column width="127">
+						<jr:groupHeader groupName="group1">
+							<jr:cell height="20" rowSpan="1">
+								<textField>
+									<reportElement x="0" y="0" width="127" height="20"/>
+									<textElement verticalAlignment="Middle">
+										<font size="12" isBold="true"/>
+									</textElement>
+									<textFieldExpression class="java.lang.String"><![CDATA[$F{inventoryLocation}.name+" in "+$F{inventoryLocation}.inventoryStore.name]]></textFieldExpression>
+								</textField>
+							</jr:cell>
+						</jr:groupHeader>
+						<jr:columnHeader style="table_CH" height="20" rowSpan="1"/>
+						<jr:detailCell style="table_TD" height="51" rowSpan="1">
+							<image>
+								<reportElement x="39" y="0" width="88" height="51"/>
+								<imageExpression class="java.awt.Image"><![CDATA[net.sf.jasperreports.engine.util.JRImageLoader.loadImage($F{picture}.images.first().data)]]></imageExpression>
+							</image>
+						</jr:detailCell>
+					</jr:column>
+					<jr:column width="237">
+						<jr:columnHeader style="table_CH" height="20" rowSpan="1">
+							<textField>
+								<reportElement x="0" y="0" width="237" height="20"/>
+								<textElement verticalAlignment="Middle">
+									<font isBold="true"/>
+								</textElement>
+								<textFieldExpression class="java.lang.String"><![CDATA["Inventory Item"]]></textFieldExpression>
+							</textField>
+						</jr:columnHeader>
+						<jr:detailCell style="table_TD" height="51" rowSpan="1">
+							<textField isStretchWithOverflow="true">
+								<reportElement x="0" y="0" width="237" height="25"/>
+								<textElement verticalAlignment="Top"/>
+								<textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression>
+							</textField>
+							<textField isStretchWithOverflow="true">
+								<reportElement x="0" y="25" width="237" height="25"/>
+								<textElement/>
+								<textFieldExpression class="java.lang.String"><![CDATA[$F{description}]]></textFieldExpression>
+							</textField>
+						</jr:detailCell>
+					</jr:column>
+					<jr:column width="104">
+						<jr:columnHeader style="table_CH" height="20" rowSpan="1">
+							<textField>
+								<reportElement x="0" y="0" width="104" height="20"/>
+								<textElement textAlignment="Center" verticalAlignment="Middle">
+									<font isBold="true"/>
+								</textElement>
+								<textFieldExpression class="java.lang.String"><![CDATA["In Stock"]]></textFieldExpression>
+							</textField>
+						</jr:columnHeader>
+						<jr:detailCell style="table_TD" height="51" rowSpan="1">
+							<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
+								<leftPen lineWidth="0.0"/>
+								<rightPen lineWidth="0.0"/>
+							</box>
+							<textField isStretchWithOverflow="true">
+								<reportElement x="0" y="0" width="104" height="51"/>
+								<textElement textAlignment="Center" verticalAlignment="Middle"/>
+								<textFieldExpression class="java.lang.String"><![CDATA[$F{unitsInStock}+" "+$F{unitOfMeasure}.name]]></textFieldExpression>
+							</textField>
+						</jr:detailCell>
+					</jr:column>
+					<jr:column width="90">
+						<jr:columnHeader style="table_CH" height="20" rowSpan="1">
+							<textField>
+								<reportElement x="0" y="0" width="90" height="20"/>
+								<textElement textAlignment="Center" verticalAlignment="Middle">
+									<font isBold="true"/>
+								</textElement>
+								<textFieldExpression class="java.lang.String"><![CDATA["Actual Stock"]]></textFieldExpression>
+							</textField>
+						</jr:columnHeader>
+						<jr:detailCell style="table_TD" height="51" rowSpan="1">
+							<rectangle>
+								<reportElement x="5" y="8" width="80" height="35"/>
+							</rectangle>
+						</jr:detailCell>
+					</jr:column>
+					<jr:column width="82">
+						<jr:columnHeader style="table_CH" height="20" rowSpan="1">
+							<textField isStretchWithOverflow="true">
+								<reportElement x="0" y="0" width="82" height="20"/>
+								<textElement textAlignment="Center" verticalAlignment="Middle">
+									<font isBold="true"/>
+								</textElement>
+								<textFieldExpression class="java.lang.String"><![CDATA["Correction Required"]]></textFieldExpression>
+							</textField>
+						</jr:columnHeader>
+						<jr:detailCell style="table_TD" height="51" rowSpan="1">
+							<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
+								<leftPen lineWidth="0.0"/>
+								<rightPen lineWidth="0.0"/>
+							</box>
+							<rectangle radius="10">
+								<reportElement x="31" y="15" width="30" height="20"/>
+							</rectangle>
+						</jr:detailCell>
+					</jr:column>
+					<jr:column width="139">
+						<jr:columnHeader style="table_CH" height="20" rowSpan="1">
+							<textField>
+								<reportElement x="0" y="0" width="139" height="20"/>
+								<textElement verticalAlignment="Middle">
+									<font isBold="true"/>
+								</textElement>
+								<textFieldExpression class="java.lang.String"><![CDATA["Notes"]]></textFieldExpression>
+							</textField>
+						</jr:columnHeader>
+						<jr:detailCell style="table_TD" height="51" rowSpan="1"/>
+					</jr:column>
+				</jr:table>
+			</componentElement>
+		</band>
+	</detail>
+	<columnFooter>
+		<band splitType="Stretch"/>
+	</columnFooter>
+	<pageFooter>
+		<band height="34" splitType="Stretch">
+			<textField pattern="dd-MMM-yyyy">
+				<reportElement x="82" y="0" width="200" height="17"/>
+				<textElement/>
+				<textFieldExpression class="java.util.Date"><![CDATA[new java.util.Date()]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="662" y="14" width="80" height="20"/>
+				<textElement textAlignment="Right"/>
+				<textFieldExpression class="java.lang.String"><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression>
+			</textField>
+			<textField evaluationTime="Report">
+				<reportElement x="742" y="14" width="40" height="20"/>
+				<textElement/>
+				<textFieldExpression class="java.lang.String"><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="0" y="0" width="82" height="17"/>
+				<textElement markup="none"/>
+				<textFieldExpression class="java.lang.String"><![CDATA["Generated: "]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="82" y="17" width="200" height="17"/>
+				<textElement markup="none"/>
+				<textFieldExpression class="java.lang.String"><![CDATA[$P{currentUser}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="0" y="17" width="82" height="17"/>
+				<textElement markup="none"/>
+				<textFieldExpression class="java.lang.String"><![CDATA["By: "]]></textFieldExpression>
+			</textField>
+		</band>
+	</pageFooter>
+	<lastPageFooter>
+		<band height="34">
+			<textField evaluationTime="Report">
+				<reportElement x="742" y="14" width="40" height="20"/>
+				<textElement/>
+				<textFieldExpression class="java.lang.String"><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
+			</textField>
+			<textField pattern="dd-MMM-yyyy">
+				<reportElement x="82" y="0" width="200" height="17"/>
+				<textElement/>
+				<textFieldExpression class="java.util.Date"><![CDATA[new java.util.Date()]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="0" y="0" width="82" height="17"/>
+				<textElement markup="none"/>
+				<textFieldExpression class="java.lang.String"><![CDATA["Generated: "]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="0" y="17" width="82" height="17"/>
+				<textElement markup="none"/>
+				<textFieldExpression class="java.lang.String"><![CDATA["By: "]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="82" y="17" width="200" height="17"/>
+				<textElement markup="none"/>
+				<textFieldExpression class="java.lang.String"><![CDATA[$P{currentUser}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="662" y="14" width="80" height="20"/>
+				<textElement textAlignment="Right"/>
+				<textFieldExpression class="java.lang.String"><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression>
+			</textField>
+		</band>
+	</lastPageFooter>
+	<summary>
+		<band height="369">
+			<textField>
+				<reportElement key="staticText-1" x="221" y="12" width="340" height="30"/>
+				<textElement textAlignment="Center" verticalAlignment="Top" markup="none">
+					<font size="20"/>
+				</textElement>
+				<textFieldExpression class="java.lang.String"><![CDATA["Summary"]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="0" y="60" width="782" height="309"/>
+				<textElement/>
+				<textFieldExpression class="java.lang.String"><![CDATA[$F{summaryOfCalculationMethod}]]></textFieldExpression>
+			</textField>
+		</band>
+	</summary>
+	<noData>
+		<band height="85" splitType="Stretch">
+			<textField>
+				<reportElement x="0" y="35" width="782" height="50"/>
+				<textElement textAlignment="Center" markup="none">
+					<font size="14" isBold="true"/>
+				</textElement>
+				<textFieldExpression class="java.lang.String"><![CDATA["No data to display. \n"+
+"Please run report again."]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement key="staticText-1" x="0" y="0" width="782" height="35"/>
+				<textElement textAlignment="Center" markup="none">
+					<font size="20"/>
+				</textElement>
+				<textFieldExpression class="java.lang.String"><![CDATA[$P{reportTitle}]]></textFieldExpression>
+			</textField>
+		</band>
+	</noData>
+</jasperReport>
Index: /trunk/web-app/reports/stockTakeOverview.jrxml
===================================================================
--- /trunk/web-app/reports/stockTakeOverview.jrxml	(revision 546)
+++ /trunk/web-app/reports/stockTakeOverview.jrxml	(revision 546)
@@ -0,0 +1,319 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="reportName" language="groovy" pageWidth="595" pageHeight="842" whenNoDataType="NoDataSection" columnWidth="535" leftMargin="30" rightMargin="30" topMargin="20" bottomMargin="20" isSummaryNewPage="true" isSummaryWithPageHeaderAndFooter="true">
+	<property name="ireport.scriptlethandling" value="0"/>
+	<property name="ireport.encoding" value="UTF-8"/>
+	<property name="ireport.zoom" value="1.0"/>
+	<property name="ireport.x" value="0"/>
+	<property name="ireport.y" value="589"/>
+	<import value="net.sf.jasperreports.engine.*"/>
+	<import value="java.util.*"/>
+	<import value="net.sf.jasperreports.engine.data.*"/>
+	<style name="Crosstab Data Text" isDefault="false" hAlign="Center"/>
+	<style name="table" isDefault="false" fill="Solid" fontSize="12" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false">
+		<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
+			<pen lineWidth="0.0" lineColor="#000000"/>
+			<topPen lineWidth="0.0"/>
+			<leftPen lineWidth="0.0"/>
+			<bottomPen lineWidth="0.0"/>
+			<rightPen lineWidth="0.0"/>
+		</box>
+	</style>
+	<style name="table_TH" isDefault="false" mode="Opaque" backcolor="#C7C7C7" fontSize="12" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false">
+		<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
+			<pen lineWidth="1.0" lineColor="#000000"/>
+			<topPen lineWidth="1.0"/>
+			<leftPen lineWidth="0.0"/>
+			<bottomPen lineWidth="1.0"/>
+			<rightPen lineWidth="0.0"/>
+		</box>
+	</style>
+	<style name="table_CH" isDefault="false" mode="Opaque" backcolor="#FFFFFF" fontSize="12" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false">
+		<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
+			<pen lineWidth="1.0" lineColor="#000000"/>
+			<topPen lineWidth="0.0"/>
+			<leftPen lineWidth="0.0"/>
+			<bottomPen lineWidth="1.0"/>
+			<rightPen lineWidth="0.0"/>
+		</box>
+	</style>
+	<style name="table_TD" isDefault="false" mode="Opaque" backcolor="#FFFFFF" fontSize="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false">
+		<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
+			<pen lineWidth="1.0" lineColor="#000000"/>
+			<topPen lineWidth="1.0"/>
+			<leftPen lineWidth="0.0"/>
+			<bottomPen lineWidth="1.0"/>
+			<rightPen lineWidth="0.0"/>
+		</box>
+		<conditionalStyle>
+			<conditionExpression><![CDATA[new Boolean($V{REPORT_COUNT}.intValue()%2==0)]]></conditionExpression>
+			<style isDefault="false" style="table_TD" backcolor="#F7F7F7"/>
+		</conditionalStyle>
+	</style>
+	<style name="table_CF" isDefault="false" mode="Opaque" backcolor="#EDEDED" fontSize="12" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false">
+		<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
+			<pen lineWidth="1.0"/>
+			<topPen lineWidth="1.0"/>
+			<leftPen lineWidth="0.0"/>
+			<bottomPen lineWidth="1.0"/>
+			<rightPen lineWidth="0.0"/>
+		</box>
+	</style>
+	<subDataset name="dataset1">
+		<field name="store" class="java.lang.String"/>
+		<field name="location" class="java.lang.String"/>
+		<group name="group1">
+			<groupExpression><![CDATA[$F{store}]]></groupExpression>
+		</group>
+	</subDataset>
+	<parameter name="reportTitle" class="java.lang.String"/>
+	<parameter name="currentUser" class="java.lang.String"/>
+	<parameter name="logoUrl" class="java.lang.String"/>
+	<parameter name="startDateString" class="java.lang.String"/>
+	<parameter name="endDateString" class="java.lang.String"/>
+	<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
+		<defaultValueExpression><![CDATA["C:\\Documents and Settings\\kromhoutg\\My Documents\\reports\\"]]></defaultValueExpression>
+	</parameter>
+	<queryString language="SQL">
+		<![CDATA[]]>
+	</queryString>
+	<field name="inventoryLocationList" class="java.util.List"/>
+	<field name="summaryOfCalculationMethod" class="java.lang.String"/>
+	<field name="inventoryLocationCount" class="java.lang.Integer"/>
+	<background>
+		<band splitType="Stretch"/>
+	</background>
+	<pageHeader>
+		<band height="121" splitType="Stretch">
+			<textField>
+				<reportElement key="staticText-1" x="0" y="57" width="340" height="30"/>
+				<textElement textAlignment="Center" verticalAlignment="Top" markup="none">
+					<font size="20"/>
+				</textElement>
+				<textFieldExpression class="java.lang.String"><![CDATA[$P{reportTitle}]]></textFieldExpression>
+			</textField>
+			<image>
+				<reportElement x="0" y="0" width="340" height="57"/>
+				<imageExpression class="java.net.URL"><![CDATA[new URL($P{logoUrl})]]></imageExpression>
+			</image>
+			<textField pattern="dd-MMM-yyyy" isBlankWhenNull="true">
+				<reportElement x="0" y="87" width="340" height="20"/>
+				<textElement textAlignment="Center" verticalAlignment="Middle" markup="none"/>
+				<textFieldExpression class="java.lang.String"><![CDATA["Total Locations: "+$F{inventoryLocationCount}]]></textFieldExpression>
+			</textField>
+		</band>
+	</pageHeader>
+	<columnHeader>
+		<band splitType="Stretch"/>
+	</columnHeader>
+	<detail>
+		<band height="641" splitType="Stretch">
+			<componentElement>
+				<reportElement key="table 1" x="0" y="0" width="535" height="641"/>
+				<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
+					<datasetRun subDataset="dataset1">
+						<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{inventoryLocationList})]]></dataSourceExpression>
+					</datasetRun>
+					<jr:column width="127">
+						<jr:groupHeader groupName="group1">
+							<jr:cell height="30" rowSpan="1">
+								<textField>
+									<reportElement x="0" y="0" width="127" height="30"/>
+									<textElement verticalAlignment="Middle">
+										<font size="12" isBold="true"/>
+									</textElement>
+									<textFieldExpression class="java.lang.String"><![CDATA[$F{store}]]></textFieldExpression>
+								</textField>
+							</jr:cell>
+						</jr:groupHeader>
+						<jr:columnHeader style="table_CH" height="30" rowSpan="1">
+							<textField>
+								<reportElement x="0" y="0" width="127" height="30"/>
+								<textElement verticalAlignment="Middle">
+									<font size="12" isBold="true"/>
+								</textElement>
+								<textFieldExpression class="java.lang.String"><![CDATA["Store: "+$F{store}]]></textFieldExpression>
+							</textField>
+						</jr:columnHeader>
+						<jr:detailCell style="table_TD" height="30" rowSpan="1"/>
+					</jr:column>
+					<jr:column width="91">
+						<jr:columnHeader style="table_CH" height="30" rowSpan="1">
+							<textField>
+								<reportElement x="0" y="0" width="91" height="30"/>
+								<textElement verticalAlignment="Middle">
+									<font size="12" isBold="true"/>
+								</textElement>
+								<textFieldExpression class="java.lang.String"><![CDATA["Location"]]></textFieldExpression>
+							</textField>
+						</jr:columnHeader>
+						<jr:detailCell style="table_TD" height="30" rowSpan="1">
+							<textField>
+								<reportElement x="0" y="0" width="91" height="30"/>
+								<textElement verticalAlignment="Middle"/>
+								<textFieldExpression class="java.lang.String"><![CDATA[$F{location}]]></textFieldExpression>
+							</textField>
+						</jr:detailCell>
+					</jr:column>
+					<jr:column width="104">
+						<jr:columnHeader style="table_CH" height="30" rowSpan="1">
+							<textField>
+								<reportElement x="0" y="0" width="104" height="30"/>
+								<textElement textAlignment="Center" verticalAlignment="Middle">
+									<font size="12" isBold="true"/>
+								</textElement>
+								<textFieldExpression class="java.lang.String"><![CDATA["Location Report Prepared"]]></textFieldExpression>
+							</textField>
+						</jr:columnHeader>
+						<jr:detailCell style="table_TD" height="30" rowSpan="1">
+							<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
+								<leftPen lineWidth="0.0"/>
+								<rightPen lineWidth="0.0"/>
+							</box>
+							<rectangle radius="10">
+								<reportElement x="37" y="5" width="30" height="20"/>
+							</rectangle>
+						</jr:detailCell>
+					</jr:column>
+					<jr:column width="107">
+						<jr:columnHeader style="table_CH" height="30" rowSpan="1">
+							<textField>
+								<reportElement x="0" y="0" width="107" height="30"/>
+								<textElement textAlignment="Center" verticalAlignment="Middle">
+									<font size="12" isBold="true"/>
+								</textElement>
+								<textFieldExpression class="java.lang.String"><![CDATA["Stock Take Complete"]]></textFieldExpression>
+							</textField>
+						</jr:columnHeader>
+						<jr:detailCell style="table_TD" height="30" rowSpan="1">
+							<box topPadding="0" leftPadding="0" bottomPadding="0" rightPadding="0">
+								<leftPen lineWidth="0.0"/>
+								<rightPen lineWidth="0.0"/>
+							</box>
+							<rectangle radius="10">
+								<reportElement x="38" y="5" width="30" height="20"/>
+							</rectangle>
+						</jr:detailCell>
+					</jr:column>
+					<jr:column width="107">
+						<jr:columnHeader style="table_CH" height="30" rowSpan="1">
+							<textField>
+								<reportElement x="0" y="0" width="107" height="30"/>
+								<textElement verticalAlignment="Middle">
+									<font size="12" isBold="true"/>
+								</textElement>
+								<textFieldExpression class="java.lang.String"><![CDATA["Notes"]]></textFieldExpression>
+							</textField>
+						</jr:columnHeader>
+						<jr:detailCell style="table_TD" height="30" rowSpan="1"/>
+					</jr:column>
+				</jr:table>
+			</componentElement>
+		</band>
+	</detail>
+	<columnFooter>
+		<band splitType="Stretch"/>
+	</columnFooter>
+	<pageFooter>
+		<band height="40" splitType="Stretch">
+			<textField pattern="dd-MMM-yyyy">
+				<reportElement x="82" y="0" width="200" height="20"/>
+				<textElement/>
+				<textFieldExpression class="java.util.Date"><![CDATA[new java.util.Date()]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="415" y="20" width="80" height="20"/>
+				<textElement textAlignment="Right"/>
+				<textFieldExpression class="java.lang.String"><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression>
+			</textField>
+			<textField evaluationTime="Report">
+				<reportElement x="495" y="20" width="40" height="20"/>
+				<textElement/>
+				<textFieldExpression class="java.lang.String"><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="0" y="0" width="82" height="20"/>
+				<textElement markup="none"/>
+				<textFieldExpression class="java.lang.String"><![CDATA["Generated: "]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="82" y="20" width="200" height="20"/>
+				<textElement markup="none"/>
+				<textFieldExpression class="java.lang.String"><![CDATA[$P{currentUser}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="0" y="20" width="82" height="20"/>
+				<textElement markup="none"/>
+				<textFieldExpression class="java.lang.String"><![CDATA["By: "]]></textFieldExpression>
+			</textField>
+		</band>
+	</pageFooter>
+	<lastPageFooter>
+		<band height="40">
+			<textField evaluationTime="Report">
+				<reportElement x="495" y="20" width="40" height="20"/>
+				<textElement/>
+				<textFieldExpression class="java.lang.String"><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
+			</textField>
+			<textField pattern="dd-MMM-yyyy">
+				<reportElement x="82" y="0" width="200" height="20"/>
+				<textElement/>
+				<textFieldExpression class="java.util.Date"><![CDATA[new java.util.Date()]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="0" y="0" width="82" height="20"/>
+				<textElement markup="none"/>
+				<textFieldExpression class="java.lang.String"><![CDATA["Generated: "]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="0" y="20" width="82" height="20"/>
+				<textElement markup="none"/>
+				<textFieldExpression class="java.lang.String"><![CDATA["By: "]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="82" y="20" width="200" height="20"/>
+				<textElement markup="none"/>
+				<textFieldExpression class="java.lang.String"><![CDATA[$P{currentUser}]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="415" y="20" width="80" height="20"/>
+				<textElement textAlignment="Right"/>
+				<textFieldExpression class="java.lang.String"><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression>
+			</textField>
+		</band>
+	</lastPageFooter>
+	<summary>
+		<band height="369">
+			<textField>
+				<reportElement key="staticText-1" x="97" y="12" width="340" height="30"/>
+				<textElement textAlignment="Center" verticalAlignment="Top" markup="none">
+					<font size="20"/>
+				</textElement>
+				<textFieldExpression class="java.lang.String"><![CDATA["Summary"]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement x="0" y="60" width="535" height="309"/>
+				<textElement/>
+				<textFieldExpression class="java.lang.String"><![CDATA[$F{summaryOfCalculationMethod}]]></textFieldExpression>
+			</textField>
+		</band>
+	</summary>
+	<noData>
+		<band height="85" splitType="Stretch">
+			<textField>
+				<reportElement x="0" y="35" width="535" height="50"/>
+				<textElement textAlignment="Center" markup="none">
+					<font size="14" isBold="true"/>
+				</textElement>
+				<textFieldExpression class="java.lang.String"><![CDATA["No data to display. \n"+
+"Please run report again."]]></textFieldExpression>
+			</textField>
+			<textField>
+				<reportElement key="staticText-1" x="0" y="0" width="535" height="35"/>
+				<textElement textAlignment="Center" markup="none">
+					<font size="20"/>
+				</textElement>
+				<textFieldExpression class="java.lang.String"><![CDATA[$P{reportTitle}]]></textFieldExpression>
+			</textField>
+		</band>
+	</noData>
+</jasperReport>
