Index: /trunk/grails-app/controllers/ReportController.groovy
===================================================================
--- /trunk/grails-app/controllers/ReportController.groovy	(revision 707)
+++ /trunk/grails-app/controllers/ReportController.groovy	(revision 708)
@@ -91,8 +91,14 @@
         params.endDateString = g.formatDate(format: "EEE, dd-MMM-yyyy", date: params.endDate)
 
-        def dataModel = taskReportService.getReactiveRatio(params, RCU.getLocale(request))
-
-        // Jasper plugin controller expects data to be a Collection.
-        chain(controller:'jasper', action:'index', model:[data: [dataModel]], params:params)
+        def result = taskReportService.getReactiveRatio(params, RCU.getLocale(request))
+
+        if(!result.error) {
+            // Jasper plugin controller expects data to be a Collection.
+            chain(controller:'jasper', action:'index', model:[data: [result]], params:params)
+            return
+        }
+
+        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
+        redirect(controller: 'appCore', action: 'start', params: [showTab:'showReportsTab'])
 
     } // reactiveRatio
Index: /trunk/grails-app/i18n/messages.properties
===================================================================
--- /trunk/grails-app/i18n/messages.properties	(revision 707)
+++ /trunk/grails-app/i18n/messages.properties	(revision 708)
@@ -264,4 +264,6 @@
 default.file.no.header=The supplied file does not have the correct header lines, please see the template file.
 default.not.development.environment.failure=Could not complete operation, dev environment not detected.
+default.end.date.before.start.date=The end date must be equal to or greater than \
+    the start date.
 
 default.doesnt.match.message=Property [{0}] of class [{1}] with value [{2}] does not match the required pattern [{3}]
Index: /trunk/grails-app/services/TaskReportService.groovy
===================================================================
--- /trunk/grails-app/services/TaskReportService.groovy	(revision 707)
+++ /trunk/grails-app/services/TaskReportService.groovy	(revision 708)
@@ -24,8 +24,18 @@
         def result = [:]
 
+        def fail = { Map m ->
+            result.error = [ code: m.code, args: [] ]
+            return result
+        }
+
         def namedParams = [:]
         namedParams.startDate = params.startDate ?: dateUtilService.today
         namedParams.endDate = params.endDate ?: dateUtilService.today
+
+        if(namedParams.endDate < namedParams.startDate)
+            return fail(code: "default.end.date.before.start.date")
+
         namedParams.endDate++ // Start of next day required.
+
         namedParams.immediateCallout = TaskType.read(1)
         namedParams.unscheduledBreakin = TaskType.read(2)
@@ -94,12 +104,12 @@
         }
         catch(ArithmeticException e) {
-            log.error "Could not calculate: Assets on Tasks Percentages: "+e
+            log.info "Could not calculate: Assets on Tasks Percentages: "+e
         }
 
         // Work Done.
-        result.immediateCalloutWorkDone = [total:0, hours:0, minutes:0, percentage:0]
+        result.immediateCalloutWorkDone = [total:0, hours:0, minutes:0, percentage: new BigDecimal(0)]
         result.unscheduledBreakinWorkDone = [total:0, hours:0, minutes:0]
         result.preventativeMaintenanceWorkDone = [total:0, hours:0, minutes:0]
-        result.totalPreventativeWorkDone = [total:0, hours:0, minutes:0, percentage:0]
+        result.totalPreventativeWorkDone = [total:0, hours:0, minutes:0, percentage: new BigDecimal(0)]
         result.totalWorkDone = [total:0, hours:0, minutes:0]
 
@@ -139,9 +149,9 @@
         // Work Done Percentages.
         try {
-            result.immediateCalloutWorkDone.percentage = (result.immediateCalloutWorkDone.total / result.totalWorkDone.total)*100
-            result.totalPreventativeWorkDone.percentage = (result.totalPreventativeWorkDone.total / result.totalWorkDone.total)*100
+            result.immediateCalloutWorkDone.percentage = (BigDecimal)(result.immediateCalloutWorkDone.total / result.totalWorkDone.total)*100
+            result.totalPreventativeWorkDone.percentage = (BigDecimal)(result.totalPreventativeWorkDone.total / result.totalWorkDone.total)*100
         }
         catch(ArithmeticException e) {
-            log.error "Could not calculate: Work Done Percentages: "+e
+            log.info "Could not calculate: Work Done Percentages: "+e
         }
 
