Index: trunk/grails-app/controllers/ReportController.groovy
===================================================================
--- trunk/grails-app/controllers/ReportController.groovy	(revision 544)
+++ trunk/grails-app/controllers/ReportController.groovy	(revision 545)
@@ -1,3 +1,4 @@
 import org.codehaus.groovy.grails.plugins.springsecurity.Secured
+import org.codehaus.groovy.grails.commons.ConfigurationHolder
 import org.springframework.web.servlet.support.RequestContextUtils as RCU
 
@@ -14,32 +15,69 @@
 
     def templatePortrait = {
-        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
+
+        params.startDate = new Date()
+        params.endDate = new Date()
 
         params.reportTitle = "Template Report (Portrait)"
+        params.logoUrl = grailsApplication.mainContext.getResource('images/logo.png').getURL()
         params.currentUser = authService.currentUser
+        params.startDateString = g.formatDate(format: "EEE, dd-MMM-yyyy", date: params.startDate)
+        params.endDateString = g.formatDate(format: "EEE, dd-MMM-yyyy", date: params.endDate)
+
         def dataModel = createTemplateData()
 
-        chain(controller:'jasper', action:'index', model:[data: dataModel], params:params)
-    }
+        // Jasper plugin controller expects data to be a Collection.
+        chain(controller:'jasper', action:'index', model:[data: [dataModel]], params:params)
+
+    } // templatePortrait
 
     def templateLandscape = {
-        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
+
+        params.startDate = new Date()
+        params.endDate = new Date()
 
         params.reportTitle = "Template Report (Landscape)"
+        params.logoUrl = grailsApplication.mainContext.getResource('images/logo.png').getURL()
         params.currentUser = authService.currentUser
+        params.startDateString = g.formatDate(format: "EEE, dd-MMM-yyyy", date: params.startDate)
+        params.endDateString = g.formatDate(format: "EEE, dd-MMM-yyyy", date: params.endDate)
+
         def dataModel = createTemplateData()
 
-        chain(controller:'jasper', action:'index', model:[data: dataModel], params:params)
-    }
+        // Jasper plugin controller expects data to be a Collection.
+        chain(controller:'jasper', action:'index', model:[data: [dataModel]], params:params)
+
+    } // templateLandscape
 
     private createTemplateData() {
-        def dataModel = []
+
+        def result = [:]
+        result.summaryOfCalculationMethod = "Summary string of the calculations performed."
+        result.dataList = []
         for(i in 1..5) {
-            def data = [:]
-            data.description = "Data description " + i.toString()
-            dataModel.add(data)
+            def dataDetails = [:]
+            dataDetails.description = "Data description " + i.toString()
+            result.dataList << dataDetails
         }
-        return dataModel
-    }
+
+        // Success.
+        return result
+
+    } // createTemplateData
+
+    def downloadTemplate = {
+
+        // params.fileName is not used directly to negate any security issues..
+        def fileName = (params.fileName == 'templateLandscape.jrxml') ? 'templateLandscape.jrxml' : 'templatePortrait.jrxml'
+        def f = grailsApplication.mainContext.getResource("reports/${fileName}").getFile()
+        if(f.isFile()) {
+            response.contentType = ConfigurationHolder.config.grails.mime.types["text"]
+            response.setHeader("Content-disposition", "attachment; filename=${fileName}")
+            render f.text
+        }
+        else
+            render(status:404, text: "File Not Found: ${f}")
+
+    } // downLoadTemplate
 
     def reactiveRatio = {
@@ -51,8 +89,10 @@
         params.endDateString = g.formatDate(format: "EEE, dd-MMM-yyyy", date: params.endDate)
 
-        def dataModel = [taskReportService.getReactiveRatio(params, RCU.getLocale(request))]
+        def dataModel = taskReportService.getReactiveRatio(params, RCU.getLocale(request))
 
-        chain(controller:'jasper', action:'index', model:[data: dataModel], params:params)
-    }
+        // Jasper plugin controller expects data to be a Collection.
+        chain(controller:'jasper', action:'index', model:[data: [dataModel]], params:params)
+
+    } // reactiveRatio
 
     def immediateCallouts = {
@@ -64,10 +104,10 @@
         params.endDateString = g.formatDate(format: "EEE, dd-MMM-yyyy", date: params.endDate)
 
-        def dataModel = [taskReportService.getImmediateCallouts(params, RCU.getLocale(request))]
+        def dataModel = taskReportService.getImmediateCallouts(params, RCU.getLocale(request))
 
-//         render dataModel
-        chain(controller:'jasper', action:'index', model:[data: dataModel], params:params)
+        // Jasper plugin controller expects data to be a Collection.
+        chain(controller:'jasper', action:'index', model:[data: [dataModel]], params:params)
 
-    }
+    } // immediateCallouts
 
 } // end of class.
Index: trunk/grails-app/services/TaskReportService.groovy
===================================================================
--- trunk/grails-app/services/TaskReportService.groovy	(revision 544)
+++ trunk/grails-app/services/TaskReportService.groovy	(revision 545)
@@ -1,3 +1,2 @@
-import grails.orm.PagedResultList
 
 /**
@@ -10,5 +9,4 @@
     def authService
     def dateUtilService
-    def sessionFactory
 //     def messageSource
 
Index: trunk/grails-app/views/appCore/start.gsp
===================================================================
--- trunk/grails-app/views/appCore/start.gsp	(revision 544)
+++ trunk/grails-app/views/appCore/start.gsp	(revision 545)
@@ -127,4 +127,7 @@
                                                                             name="Template (Portrait)"
                                                                             format="PDF, XLS"/>
+                                            <g:link controller="report" action="downloadTemplate" params="[fileName: 'templatePortrait.jrxml']">
+                                                Download
+                                            </g:link>
                                             <br />
                                             <g:jasperReport controller="report"
@@ -133,4 +136,7 @@
                                                                             name="Template (Landscape)"
                                                                             format="PDF, XLS"/>
+                                            <g:link controller="report" action="downloadTemplate" params="[fileName: 'templateLandscape.jrxml']">
+                                                Download
+                                            </g:link>
                                             <br />
                                         </td>
