Index: /trunk/grails-app/controllers/TaskDetailedController.groovy =================================================================== --- /trunk/grails-app/controllers/TaskDetailedController.groovy (revision 475) +++ /trunk/grails-app/controllers/TaskDetailedController.groovy (revision 476) @@ -2,4 +2,5 @@ import org.codehaus.groovy.grails.commons.ConfigurationHolder import com.zeddware.grails.plugins.filterpane.FilterUtils +import org.springframework.web.servlet.support.RequestContextUtils as RCU @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager']) @@ -35,4 +36,17 @@ @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser']) + def setSearchCalendarParamsMax = { + def max = 1000 + if(params.newMax.isInteger()) { + def i = params.newMax.toInteger() + if(i > 0 && i <= max) + session.taskSearchCalendarParamsMax = params.newMax + if(i > max) + session.taskSearchCalendarParamsMax = max + } + forward(action: 'searchCalendar', params: params) + } + + @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser']) def search = { @@ -41,45 +55,44 @@ // Protect filterPane. - params.max = Math.min( params.max ? params.max.toInteger() : 10, 1000 ) + params.max = Math.min( params.max ? params.max.toInteger() : 20, 1000 ) def taskInstanceList = [] def taskInstanceTotal - def filterParams = [:] - def personInstance = authService.currentUser - - // Quick Search: - if(!FilterUtils.isFilterApplied(params)) { - - if(params.quickSearch == "searchMyTodays") { - taskInstanceList = taskSearchService.getMyTodays(params) - if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks for ${personInstance.firstName} ${personInstance.lastName}." } - else { params.message = "No tasks found for today." } - } - else if(params.quickSearch == "searchInTheLastWeek") { - taskInstanceList = taskSearchService.getInTheLastWeek(params) - if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week." } - else { params.message = "No tasks found for the last week." } - } - else if(params.quickSearch == "searchMyInTheLastWeek") { - taskInstanceList = taskSearchService.getMyInTheLastWeek(params) - if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week for ${personInstance.firstName} ${personInstance.lastName}." } - else { params.message = "No tasks found for the last week." } - } - else { - //Default: - taskInstanceList = taskSearchService.getTodays(params) - if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks." } - else { params.message = "No tasks found for today." } - params.quickSearch = "searchTodays" - } - - taskInstanceTotal = taskInstanceList.totalCount - filterParams.quickSearch = params.quickSearch - } - else { + def filterParams = com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params) + def isFilterApplied = FilterUtils.isFilterApplied(params) + + // Restore search unless a new search is being requested. + if(!params.quickSearch && !filterParams) { + if(session.taskSearchQuickSearch) + params.quickSearch = session.taskSearchQuickSearch + else if(session.taskSearchFilterParams) { + session.taskSearchFilterParams.each() { params[it.key] = it.value } + params.filter = session.taskSearchFilter + isFilterApplied = FilterUtils.isFilterApplied(params) + } + } + + if(isFilterApplied) { // filterPane: taskInstanceList = filterService.filter( params, Task ) taskInstanceTotal = filterService.count( params, Task ) filterParams = com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params) + // Remember search. + session.taskSearchFilterParams = new LinkedHashMap(filterParams) + session.taskSearchFilter = new LinkedHashMap(params.filter) + session.taskSearchQuickSearch = null + } + else { + // Quick Search: + if(!params.quickSearch) params.quickSearch = "myTodays" + def result = taskSearchService.getQuickSearch(params, RCU.getLocale(request)) + taskInstanceList = result.taskInstanceList + taskInstanceTotal = result.taskInstanceList.totalCount + params.message = result.message + filterParams.quickSearch = result.quickSearch + // Remember search. + session.taskSearchFilterParams = null + session.taskSearchFilter = null + session.taskSearchQuickSearch = result.quickSearch } @@ -93,5 +106,5 @@ String title if(params.quickSearch) - title = "${params.quickSearch} tasks." + title = params.message else title = "Filtered tasks." @@ -116,118 +129,123 @@ return[ taskInstanceList: taskInstanceList, - taskInstanceTotal: taskInstanceTotal, - filterParams: filterParams ] - - } // end search() + taskInstanceTotal: taskInstanceTotal, + filterParams: filterParams, + params: params ] + + } // search @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser']) def searchCalendar = { - if(session.taskSearchParamsMax) - params.max = session.taskSearchParamsMax + // No pagination for calendar. + params.offset = 0 + + // Restore params.max + if(session.taskSearchCalendarParamsMax) + params.max = session.taskSearchCalendarParamsMax // Protect filterPane. - params.max = Math.min( params.max ? params.max.toInteger() : 10, 100) - - // Set the month to show. - def showMonth = new Date() - if(session.taskSearchCalendarShowMonth) - showMonth = session.taskSearchCalendarShowMonth - - if(params.nextMonth) - showMonth = dateUtilService.getNextMonth(showMonth) - else if(params.previousMonth) - showMonth = dateUtilService.getPreviousMonth(showMonth) - session.taskSearchCalendarShowMonth = showMonth - - // Quick Search: - if(!FilterUtils.isFilterApplied(params)) { - def taskInstanceList = [] - def personInstance = authService.currentUser - - if(params.quickSearch == "searchMyTodays") { - taskInstanceList = taskSearchService.getMyTodays(params) - if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks for ${personInstance.firstName} ${personInstance.lastName}." } - else { params.message = "No tasks found for today." } - if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" } - } - else if(params.quickSearch == "searchInTheLastWeek") { - taskInstanceList = taskSearchService.getInTheLastWeek(params) - if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week." } - else { params.message = "No tasks found for the last week." } - if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" } - } - else if(params.quickSearch == "searchMyInTheLastWeek") { - taskInstanceList = taskSearchService.getMyInTheLastWeek(params) - if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week for ${personInstance.firstName} ${personInstance.lastName}." } - else { params.message = "No tasks found for the last week." } - if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" } - } - else { - //Default: - taskInstanceList = taskSearchService.getTodays(params) - if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks." } - else { params.message = "No tasks found for today." } - if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" } - params.quickSearch = "searchTodays" - } - return[taskInstanceList: taskInstanceList, taskInstanceTotal: taskInstanceList.totalCount, showMonth: showMonth, filterParams: params] - } - // filterPane: - def taskInstanceTotal = filterService.count( params, Task ) - if(taskInstanceTotal > params.max) { params.message = "Too many results, only the first ${params.max} shown" } - return[ taskInstanceList: filterService.filter( params, Task ), - taskInstanceTotal: taskInstanceTotal, - filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params), - showMonth: showMonth, - params:params ] - } - - @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser']) - def budget = { - params.max = Math.min( params.max ? params.max.toInteger() : 10, 100 ) - - // Quick Search: - if(!FilterUtils.isFilterApplied(params)) { - def taskInstanceList = [] - def personInstance = authService.currentUser - - if(params.quickSearch == "budgetUnplanned") { - taskInstanceList = taskSearchService.getBudgetUnplanned(params) - if(taskInstanceList.totalCount > 0) { params.message = "Budget unplanned tasks in the last week." } - else { params.message = "No tasks found." } - } - //else if(params.quickSearch == "budgetPlanned") { - else { - //Default: - taskInstanceList = taskSearchService.getBudgetPlanned(params) - if(taskInstanceList.totalCount > 0) { params.message = "Budget planned Tasks in the last week." } - else { params.message = "No tasks found.." } - } - // export plugin: - if(params?.format && params.format != "html") { - - def dateFmt = { date -> - formatDate(format: "EEE, dd-MMM-yyyy", date: date) - } - response.contentType = ConfigurationHolder.config.grails.mime.types[params.format] - response.setHeader("Content-disposition", "attachment; filename=tasks.${params.extension}") - List fields = ["id", "targetStartDate", "description", "leadPerson", "taskStatus", "taskType"] - Map labels = ["id": "ID", "targetStartDate": "Target Start Date", "description": "Description", - "leadPerson": "Lead Person", "taskStatus": "Task Status", "taskType": "Task Type"] - Map formatters = [ targetStartDate: dateFmt] - String title = "${params.quickSearch} tasks in the last week." - Map parameters = [title: title, separator: ","] - - exportService.export(params.format, response.outputStream, taskInstanceList, fields, labels, formatters, parameters) - } - return[taskInstanceList: taskInstanceList, taskInstanceTotal: taskInstanceList.totalCount, filterParams: params] - } - // filterPane: - return[ taskInstanceList: filterService.filter( params, Task ), - taskInstanceTotal: filterService.count( params, Task ), - filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params), - params:params ] - } + params.max = Math.min( params.max ? params.max.toInteger() : 100, 1000 ) + + def taskInstanceList = [] + def taskInstanceTotal + def filterParams = com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params) + def isFilterApplied = FilterUtils.isFilterApplied(params) + + // Restore search unless a new search is being requested. + if(!params.quickSearch && !filterParams) { + if(session.taskSearchCalendarQuickSearch) + params.quickSearch = session.taskSearchCalendarQuickSearch + else if(session.taskSearchCalendarFilterParams) { + session.taskSearchCalendarFilterParams.each() { params[it.key] = it.value } + params.filter = session.taskSearchCalendarFilter + isFilterApplied = FilterUtils.isFilterApplied(params) + } + } + + // The date the calendar will use to determine the month to show. + // Use session, if not specified in params, otherwise use today. + def showDate = new Date() + if(params.showMonth) { + if(params.showYear) + showDate = dateUtilService.makeDate(params.showYear, params.showMonth) + else + showDate = dateUtilService.makeDate(dateUtilService.getYearFromDate(showDate), params.showMonth) + // Remember the showDate. + session.taskSearchCalendarShowDate = showDate + } + else if(session.taskSearchCalendarShowDate) + showDate = session.taskSearchCalendarShowDate + + // Get the dates for the calendar month controls. + def calendarMonthControls = getCalendarMonthControls(showDate) + + if(isFilterApplied) { + // filterPane: + taskInstanceList = filterService.filter( params, Task ) + taskInstanceTotal = filterService.count( params, Task ) + filterParams = com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params) + // Remember search. + session.taskSearchCalendarFilterParams = new LinkedHashMap(filterParams) + session.taskSearchCalendarFilter = new LinkedHashMap(params.filter) + session.taskSearchCalendarQuickSearch = null + } + else { + // Quick Search: + def result = taskSearchService.getQuickSearch(params, RCU.getLocale(request)) + taskInstanceList = result.taskInstanceList + taskInstanceTotal = result.taskInstanceList.totalCount + params.message = result.message + filterParams.quickSearch = result.quickSearch + // Remember search. + session.taskSearchCalendarFilterParams = null + session.taskSearchCalendarFilter = null + session.taskSearchCalendarQuickSearch = result.quickSearch + } + + // export plugin: + if(params?.format && params.format != "html") { + + def dateFmt = { date -> + formatDate(format: "EEE, dd-MMM-yyyy", date: date) + } + + String title + if(params.quickSearch) + title = params.message + else + title = "Filtered tasks." + + response.contentType = ConfigurationHolder.config.grails.mime.types[params.format] + response.setHeader("Content-disposition", "attachment; filename=Tasks.${params.extension}") + List fields = ["id", "targetStartDate", "description", "leadPerson", "taskPriority", "taskType", "taskStatus"] + Map labels = ["id": "ID", "targetStartDate": "Target Start Date", "description": "Description", + "leadPerson": "Lead Person", "taskPriority": "Task Priority", + "taskType": "Task Type", "taskStatus": "Task Status"] + Map formatters = [ targetStartDate: dateFmt] + Map parameters = [title: title, separator: ","] + + exportService.export(params.format, response.outputStream, taskInstanceList, fields, labels, formatters, parameters) + } + + if(taskInstanceTotal > params.max) + params.errorMessage = g.message(code:"task.search.calendar.text.too.many.results", args:[params.max]) + + // Add some basic params to filterParams. + filterParams.max = params.max + filterParams.offset = params.offset?.toInteger() ?: 0 + + return[taskInstanceList: taskInstanceList, + taskInstanceTotal: taskInstanceTotal, + filterParams: filterParams, + params: params, + showDate: showDate, + today: calendarMonthControls.today, + previousMonth: calendarMonthControls.previousMonth, + nextMonth: calendarMonthControls.nextMonth, + previousYear: calendarMonthControls.previousYear, + nextYear: calendarMonthControls.nextYear] + + } // searchCalendar @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser']) @@ -559,6 +577,9 @@ // Set the targetStartDate if specified, used by searchCalendar view. - if(params.year && params.month && params.day) - taskInstance.targetStartDate = dateUtilService.makeDate(params.year, params.month, params.day) + if(params.year && params.month && params.day) { + def date = dateUtilService.makeDate(params.year, params.month, params.day) + taskInstance.targetStartDate = date + taskInstance.targetCompletionDate = date + } // Default leadPerson to current user, unless supplied in params. @@ -712,3 +733,31 @@ } + /** + * Get some integers for use by the month control links. + */ + private getCalendarMonthControls(Date showDate) { + def result = [:] + result.today = [:] + result.today.date = new Date() + result.today.month = dateUtilService.getMonthFromDate(result.today.date) + result.today.year = dateUtilService.getYearFromDate(result.today.date) + result.nextMonth = [:] + result.nextMonth.date = dateUtilService.getNextMonth(showDate) + result.nextMonth.month = dateUtilService.getMonthFromDate(result.nextMonth.date) + result.nextMonth.year = dateUtilService.getYearFromDate(result.nextMonth.date) + result.previousMonth = [:] + result.previousMonth.date = dateUtilService.getPreviousMonth(showDate) + result.previousMonth.month = dateUtilService.getMonthFromDate(result.previousMonth.date) + result.previousMonth.year = dateUtilService.getYearFromDate(result.previousMonth.date) + result.nextYear = [:] + result.nextYear.date = dateUtilService.getNextYear(showDate) + result.nextYear.month = dateUtilService.getMonthFromDate(result.nextYear.date) + result.nextYear.year = dateUtilService.getYearFromDate(result.nextYear.date) + result.previousYear = [:] + result.previousYear.date = dateUtilService.getPreviousYear(showDate) + result.previousYear.month = dateUtilService.getMonthFromDate(result.previousYear.date) + result.previousYear.year = dateUtilService.getYearFromDate(result.previousYear.date) + return result + } + } // end of class. Index: /trunk/grails-app/i18n/messages.properties =================================================================== --- /trunk/grails-app/i18n/messages.properties (revision 475) +++ /trunk/grails-app/i18n/messages.properties (revision 476) @@ -161,8 +161,4 @@ assignedPerson.task.not.found=Please select a task and then ''Add Assigned Person''. -default.close.text=Close -default.options.text=Options -default.none.text=None - default.list.failure=Could not generate list for class {0}. default.not.found={0} {1} not found, it may have been deleted. @@ -196,5 +192,10 @@ default.paginate.prev=Previous +default.paginate.prev.abbrev=Prev default.paginate.next=Next + +default.close.text=Close +default.options.text=Options +default.none.text=None # Rich UI plugin - Calendar @@ -259,2 +260,27 @@ fp.property.text.inventoryItemPurchaseType.name=Type + +# TaskSearch Service +task.search.text.my.todays=Today''s tasks for {0}. +task.search.text.my.todays.none.found=No tasks found for {0} today. +task.search.text.my.yesterdays=Yesterday''s tasks for {0}. +task.search.text.my.yesterdays.none.found=No tasks found for {0} yesterday. +task.search.text.my.tomorrows=Tomorrow''s tasks for {0}. +task.search.text.my.tomorrows.none.found=No tasks found for {0} tomorrow. +task.search.text.todays=Today's tasks. +task.search.text.todays.none.found=No tasks found for today. +task.search.text.yesterdays=Yesterday's tasks. +task.search.text.yesterdays.none.found=No tasks found for yesterday. +task.search.text.tomorrows=Tomorrow's tasks. +task.search.text.tomorrows.none.found=No tasks found for tomorrow. +task.search.text.past.week=Tasks with 'Target Start Date' in the past week. +task.search.text.past.week.none.found=No tasks found with 'Target Start Date' in the past week. +task.search.text.my.past.week=Tasks with ''Target Start Date'' in the past week for {0}. +task.search.text.my.past.week.none.found=No tasks found with ''Target Start Date'' in the past week for {0}. +task.search.text.budget.unplanned=Tasks with budget status of 'unplanned', in the past week. +task.search.text.budget.unplanned.none.found=No tasks found with budget status of 'unplanned', in the past week. +task.search.text.budget.planned=Tasks with budget status of 'planned', in the past week. +task.search.text.budget.planned.none.found=No tasks found with budget status of 'planned', in the past week. +task.search.text.planners.range=Planners Range - Tasks in the past week and two weeks ahead. +task.search.text.planners.range.none.found=No tasks found in the past week or two weeks ahead. +task.search.calendar.text.too.many.results=Too many results, only {0} are shown. Index: /trunk/grails-app/services/DateUtilService.groovy =================================================================== --- /trunk/grails-app/services/DateUtilService.groovy (revision 475) +++ /trunk/grails-app/services/DateUtilService.groovy (revision 476) @@ -99,4 +99,26 @@ /** + * Get the date one year in the future. + * @param date The Date object to start with. + * @returns A Date object one year in the future. + */ + public static Date getNextYear(Date date) { + use(TimeCategory) { + date + 1.years + } + } + + /** + * Get the date one year ago. + * @param date The Date object to start with. + * @returns A Date object one year ago. + */ + public static Date getPreviousYear(Date date) { + use(TimeCategory) { + date - 1.years + } + } + + /** * Make a date object from supplied year, month, day values. * The Calendar.getInstance() or Calendar.instance factory returns a new calendar instance, usually @@ -104,9 +126,9 @@ * The time fields are set to zero and cal.getTime() or cal.time returns a java.util.Date object. * @param year The year as a string or integer. - * @param month The month as a string or integer. - * @param day The day as a string or integer. + * @param month The month as a string or integer, defaults to 1 (i.e. January). + * @param day The day as a string or integer, defaults to 1. * @returns A Date object having the given date and all time fields set to 0, so the very start of the given day. */ - public static Date makeDate(year, month, day) { + public static Date makeDate(year, month=1, day=1) { Calendar cal = Calendar.instance cal.clear() @@ -116,3 +138,36 @@ } + /** + * Get the day of month from supplied date. + * @param date The date to extract the day of month from. + * @returns An integer representing the day of the month. + */ + public static Integer getDayFromDate(Date date) { + Calendar cal = Calendar.instance + cal.setTime(date) + cal.get(Calendar.DAY_OF_MONTH) + } + + /** + * Get the month from supplied date. + * @param date The date to extract the month from. + * @returns An integer representing the month. + */ + public static Integer getMonthFromDate(Date date) { + Calendar cal = Calendar.instance + cal.setTime(date) + cal.get(Calendar.MONTH) + 1 // Stupid month is 0-based, grumble. + } + + /** + * Get the year from supplied date. + * @param date The date to extract the year from. + * @returns An integer representing the year. + */ + public static Integer getYearFromDate(Date date) { + Calendar cal = Calendar.instance + cal.setTime(date) + cal.get(Calendar.YEAR) + } + } Index: /trunk/grails-app/services/TaskSearchService.groovy =================================================================== --- /trunk/grails-app/services/TaskSearchService.groovy (revision 475) +++ /trunk/grails-app/services/TaskSearchService.groovy (revision 476) @@ -1,86 +1,215 @@ +/** +* Service class that encapsulates the business logic for Task searches. +*/ class TaskSearchService { boolean transactional = false + def authService def dateUtilService - def authenticateService - - def paramsMax = 99999 - - def getTodays(params) { - params.max = Math.min(params?.max?.toInteger() ?: 10, paramsMax) - params.offset = params?.offset?.toInteger() ?: 0 - params.sort = params?.sort ?: "attentionFlag" - params.order = params?.order ?: "desc" - - def taskInstanceList = Task.createCriteria().list( - max: params.max, - offset: params.offset, - sort: params.sort, - order: params.order) { - ge("targetStartDate", dateUtilService.today) - lt("targetStartDate", dateUtilService.getTomorrow()) - eq("trash", false) - } - } - - def getMyTodays(params) { - params.max = Math.min(params?.max?.toInteger() ?: 10, paramsMax) - params.offset = params?.offset?.toInteger() ?: 0 - params.sort = params?.sort ?: "attentionFlag" - params.order = params?.order ?: "desc" - - def taskInstanceList = Task.createCriteria().list( - max: params.max, - offset: params.offset, - sort: params.sort, - order: params.order) { - eq("leadPerson", Person.get(authenticateService.userDomain().id)) - ge("targetStartDate", dateUtilService.today) - lt("targetStartDate", dateUtilService.getTomorrow()) - eq("trash", false) - } - } - - def getInTheLastWeek(params) { - params.max = Math.min(params?.max?.toInteger() ?: 10, paramsMax) - params.offset = params?.offset?.toInteger() ?: 0 - params.sort = params?.sort ?: "attentionFlag" - params.order = params?.order ?: "desc" - - def taskInstanceList = Task.createCriteria().list( - max: params.max, - offset: params.offset, - sort: params.sort, - order: params.order) { - ge("targetStartDate", dateUtilService.oneWeekAgo) - lt("targetStartDate", dateUtilService.getTomorrow()) - eq("trash", false) - } - } - - def getMyInTheLastWeek(params) { - params.max = Math.min(params?.max?.toInteger() ?: 10, paramsMax) - params.offset = params?.offset?.toInteger() ?: 0 - params.sort = params?.sort ?: "attentionFlag" - params.order = params?.order ?: "desc" - - def taskInstanceList = Task.createCriteria().list( - max: params.max, - offset: params.offset, - sort: params.sort, - order: params.order) { - eq("leadPerson", Person.get(authenticateService.userDomain().id)) - ge("targetStartDate", dateUtilService.oneWeekAgo) - lt("targetStartDate", dateUtilService.getTomorrow()) - eq("trash", false) - } - } + def messageSource + + def paramsMax = 100000 + + /** + * Selects and returns the correct search results based on the supplied quickSearch. + * @param params The request params, may contain params.quickSearch string to specify the search. + * @param locale The locale to use when generating result.message. + */ + def getQuickSearch(params, locale) { + def result = [:] + def currentUser = authService.currentUser + result.quickSearch = params.quickSearch ?: "searchPlannersRange" + + def getMessage = { Map m -> + messageSource.getMessage(m.code, m.args == null ? null : m.args.toArray(), locale) + } + + switch (result.quickSearch) { + case "myTodays": + result.taskInstanceList = getMyTodays(params) + if(result.taskInstanceList.totalCount > 0) + result.message = getMessage(code:"task.search.text.my.todays", args:[currentUser]) + else + result.message = getMessage(code:"task.search.text.my.todays.none.found", args:[currentUser]) + break + case "myYesterdays": + result.taskInstanceList = getMyTodays(params, -1) + if(result.taskInstanceList.totalCount > 0) + result.message = getMessage(code:"task.search.text.my.yesterdays", args:[currentUser]) + else + result.message = getMessage(code:"task.search.text.my.yesterdays.none.found", args:[currentUser]) + break + case "myTomorrows": + result.taskInstanceList = getMyTodays(params, 1) + if(result.taskInstanceList.totalCount > 0) + result.message = getMessage(code:"task.search.text.my.tomorrows", args:[currentUser]) + else + result.message = getMessage(code:"task.search.text.my.tomorrows.none.found", args:[currentUser]) + break + case "myPastWeek": + result.taskInstanceList = getMyPastWeek(params) + if(result.taskInstanceList.totalCount > 0) + result.message = getMessage(code:"task.search.text.my.past.week", args:[currentUser]) + else + result.message = getMessage(code:"task.search.text.my.past.week.none.found", args:[currentUser]) + break + case "todays": + result.taskInstanceList = getTodays(params) + if(result.taskInstanceList.totalCount > 0) + result.message = getMessage(code:"task.search.text.todays") + else + result.message = getMessage(code:"task.search.text.todays.none.found") + break + case "yesterdays": + result.taskInstanceList = getTodays(params, -1) + if(result.taskInstanceList.totalCount > 0) + result.message = getMessage(code:"task.search.text.yesterdays") + else + result.message = getMessage(code:"task.search.text.yesterdays.none.found") + break + case "tomorrows": + result.taskInstanceList = getTodays(params, 1) + if(result.taskInstanceList.totalCount > 0) + result.message = getMessage(code:"task.search.text.tomorrows") + else + result.message = getMessage(code:"task.search.text.tomorrows.none.found") + break + case "pastWeek": + result.taskInstanceList = getPastWeek(params) + if(result.taskInstanceList.totalCount > 0) + result.message = getMessage(code:"task.search.text.past.week") + else + result.message = getMessage(code:"task.search.text.past.week.none.found") + break + case "budgetUnplanned": + result.taskInstanceList = getBudgetUnplanned(params) + if(result.taskInstanceList.totalCount > 0) + result.message = getMessage(code:"task.search.text.budget.unplanned") + else + result.message = getMessage(code:"task.search.text.budget.unplanned.none.found") + break + case "budgetPlanned": + result.taskInstanceList = getBudgetPlanned(params) + if(result.taskInstanceList.totalCount > 0) + result.message = getMessage(code:"task.search.text.budget.planned") + else + result.message = getMessage(code:"task.search.text.budget.planned.none.found") + break + default: + result.taskInstanceList = getPlannersRange(params) + if(result.taskInstanceList.totalCount > 0) + result.message = getMessage(code:"task.search.text.planners.range") + else + result.message = getMessage(code:"task.search.text.planners.range.none.found") + break + } // switch. + + // Success. + return result + + } // getQuickSearch + + def getTodays(params, dayAdjustment=0) { + params.max = Math.min(params?.max?.toInteger() ?: 10, paramsMax) + params.offset = params?.offset?.toInteger() ?: 0 + params.sort = params?.sort ?: "attentionFlag" + params.order = params?.order ?: "desc" + + def taskInstanceList = Task.createCriteria().list( + max: params.max, + offset: params.offset, + sort: params.sort, + order: params.order) { + ge("targetStartDate", dateUtilService.today+dayAdjustment) + lt("targetStartDate", dateUtilService.tomorrow+dayAdjustment) + eq("trash", false) + } + } + + def getMyTodays(params, dayAdjustment=0) { + params.max = Math.min(params?.max?.toInteger() ?: 10, paramsMax) + params.offset = params?.offset?.toInteger() ?: 0 + params.sort = params?.sort ?: "attentionFlag" + params.order = params?.order ?: "desc" + + def currentUser = authService.currentUser + + def taskInstanceList = Task.createCriteria().list( + max: params.max, + offset: params.offset, + sort: params.sort, + order: params.order) { + ge("targetStartDate", dateUtilService.today+dayAdjustment) + lt("targetStartDate", dateUtilService.tomorrow+dayAdjustment) + eq("trash", false) + eq("approved", true) + or { + eq("leadPerson", currentUser) + assignedPersons { + eq("person", currentUser) + } + assignedGroups { + currentUser.personGroups.each() { + eq("personGroup", it) + } + } // assignedGroups + } // or + } // criteria + } // getMyTodays + + def getPastWeek(params) { + params.max = Math.min(params?.max?.toInteger() ?: 10, paramsMax) + params.offset = params?.offset?.toInteger() ?: 0 + params.sort = params?.sort ?: "attentionFlag" + params.order = params?.order ?: "desc" + + def taskInstanceList = Task.createCriteria().list( + max: params.max, + offset: params.offset, + sort: params.sort, + order: params.order) { + ge("targetStartDate", dateUtilService.oneWeekAgo) + lt("targetStartDate", dateUtilService.tomorrow) + eq("trash", false) + } + } + + def getMyPastWeek(params) { + params.max = Math.min(params?.max?.toInteger() ?: 10, paramsMax) + params.offset = params?.offset?.toInteger() ?: 0 + params.sort = params?.sort ?: "attentionFlag" + params.order = params?.order ?: "desc" + + def currentUser = authService.currentUser + + def taskInstanceList = Task.createCriteria().list( + max: params.max, + offset: params.offset, + sort: params.sort, + order: params.order) { + ge("targetStartDate", dateUtilService.oneWeekAgo) + lt("targetStartDate", dateUtilService.tomorrow) + eq("trash", false) + eq("approved", true) + or { + eq("leadPerson", currentUser) + assignedPersons { + eq("person", currentUser) + } + assignedGroups { + currentUser.personGroups.each() { + eq("personGroup", it) + } + } // assignedGroups + } // or + } // criteria + } // getMyPastWeek def getBudgetPlanned(params) { params.max = Math.min(params?.max?.toInteger() ?: 10, paramsMax) params.offset = params?.offset?.toInteger() ?: 0 - params.sort = params?.sort ?: "attentionFlag" - params.order = params?.order ?: "desc" + params.sort = params?.sort ?: "targetStartDate" + params.order = params?.order ?: "asc" def taskInstanceList = Task.createCriteria().list( @@ -89,5 +218,5 @@ sort: params.sort, order: params.order) { - eq("taskBudgetStatus", TaskBudgetStatus.get(2)) + eq("taskBudgetStatus", TaskBudgetStatus.read(2)) ge("targetStartDate", dateUtilService.oneWeekAgo) lt("targetStartDate", dateUtilService.tomorrow) @@ -99,6 +228,6 @@ params.max = Math.min(params?.max?.toInteger() ?: 10, paramsMax) params.offset = params?.offset?.toInteger() ?: 0 - params.sort = params?.sort ?: "attentionFlag" - params.order = params?.order ?: "desc" + params.sort = params?.sort ?: "targetStartDate" + params.order = params?.order ?: "asc" def taskInstanceList = Task.createCriteria().list( @@ -107,7 +236,24 @@ sort: params.sort, order: params.order) { - eq("taskBudgetStatus", TaskBudgetStatus.get(1)) - ge("targetStartDate", dateUtilService.oneWeekAgo) - lt("targetStartDate", dateUtilService.getTomorrow()) + eq("taskBudgetStatus", TaskBudgetStatus.read(1)) + ge("targetStartDate", dateUtilService.oneWeekAgo) + lt("targetStartDate", dateUtilService.tomorrow) + eq("trash", false) + } + } + + def getPlannersRange(params) { + 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" + + def taskInstanceList = Task.createCriteria().list( + max: params.max, + offset: params.offset, + sort: params.sort, + order: params.order) { + ge("targetStartDate", dateUtilService.oneWeekAgo) + lt("targetStartDate", dateUtilService.today + 15) eq("trash", false) } Index: /trunk/grails-app/views/appCore/manager.gsp =================================================================== --- /trunk/grails-app/views/appCore/manager.gsp (revision 475) +++ /trunk/grails-app/views/appCore/manager.gsp (revision 476) @@ -33,5 +33,5 @@
- - |
---|
${fieldValue(bean:taskInstance, field:'id')} | - -${fieldValue(bean:taskInstance, field:'description')} | - -${fieldValue(bean:taskInstance, field:'leadPerson')} | - -${fieldValue(bean:taskInstance, field:'taskPriority')} | - -${fieldValue(bean:taskInstance, field:'taskStatus')} | - -
- |
-
-
-