Index: /trunk/grails-app/services/TaskSearchService.groovy
===================================================================
--- /trunk/grails-app/services/TaskSearchService.groovy	(revision 523)
+++ /trunk/grails-app/services/TaskSearchService.groovy	(revision 524)
@@ -252,23 +252,32 @@
     */
     def getBudgetTasks(params, budgetStatus=null, startDate=null, endDate=null) {
-        params.max = Math.min(params?.max?.toInteger() ?: 10, paramsMax)
-        params.offset = params?.offset?.toInteger() ?: 0
-        params.sort = params?.sort ?: "targetStartDate"
-        params.order = params?.order ?: "asc"
-
-        budgetStatus = budgetStatus ?: TaskBudgetStatus.read(2) // Planned.
-        startDate = startDate ?: dateUtilService.today
-        endDate = endDate ?: dateUtilService.tomorrow
-
-        def taskInstanceList = Task.createCriteria().list(
-            max: params.max,
-            offset: params.offset,
-            sort: params.sort,
-            order: params.order) {
-                eq("taskBudgetStatus", budgetStatus)
-                lt("targetStartDate", dateUtilService.tomorrow)
-                ge("targetCompletionDate", dateUtilService.oneWeekAgo)
-                eq("trash", false)
-            } // createCriteria
+        def paginateParams = [:]
+        paginateParams.max = Math.min(params?.max?.toInteger() ?: 10, paramsMax)
+        paginateParams.offset = params?.offset?.toInteger() ?: 0
+
+        def sort = "task." + (params?.sort ?: "targetStartDate")
+        def order = params?.order == "desc" ? "desc" : "asc"
+        def orderBy = " order by " + sort + ' ' + order
+
+        def namedParams = [:]
+        namedParams.budgetStatus = budgetStatus ?: TaskBudgetStatus.read(2) // Planned.
+        namedParams.startDate = startDate ?: dateUtilService.today
+        namedParams.endDate = endDate ?: dateUtilService.oneWeekAgo
+
+        def baseQuery = "from Task as task \
+                                        where (task.trash = false \
+                                                    and task.budgetStatus = :budgetStatus \
+                                                    and task.targetStartDate < :endDate \
+                                                    and task.targetCompletionDate >= :startDate \
+                                        )"
+
+        def searchQuery = "select distinct task " + baseQuery + orderBy
+        def list = Task.executeQuery(searchQuery, namedParams, paginateParams)
+
+        def countQuery = "select count(distinct task) as taskCount " + baseQuery
+        def totalCount = Task.executeQuery(countQuery, namedParams)[0].toInteger()
+
+        def taskInstanceList = new PagedResultList(list, totalCount)
+        return taskInstanceList
     } // getBudgetTasks()
 
