source: trunk/grails-app/controllers/TaskDetailedController.groovy @ 214

Last change on this file since 214 was 214, checked in by gav, 14 years ago

Clicking on a searchCalendar day allows user to create a task with that day preset as targetStartDate.

File size: 19.4 KB
RevLine 
[69]1import org.codehaus.groovy.grails.plugins.springsecurity.Secured
[165]2import org.codehaus.groovy.grails.commons.ConfigurationHolder
[209]3import com.zeddware.grails.plugins.filterpane.FilterUtils
[69]4
[85]5class TaskDetailedController extends BaseController {
[66]6
[185]7    def personService
[180]8    def taskService
[143]9    def taskSearchService
[140]10    def filterService
[165]11    def exportService
[214]12    def dateUtilService
[139]13
[181]14    // these actions only accept POST requests
15    static allowedMethods = [save:'POST', update:'POST', restore:'POST', trash:'POST', approve:'POST', renegeApproval:'POST', complete:'POST', reopen:'POST']
[66]16
[196]17    def index = { redirect(action: 'search', params: params) }
[140]18
[66]19    def list = {
[143]20        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100 )
[124]21        [ taskInstanceList: Task.list( params ), taskInstanceTotal: Task.count() ]
[66]22    }
[143]23
[139]24    def search = {
[143]25        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100 )
26
[155]27        // Quick Search:
[209]28        if(!FilterUtils.isFilterApplied(params)) {
[144]29            def taskInstanceList = []
[185]30            def personInstance = personService.currentUser()
[143]31
[155]32            if(params.quickSearch == "searchMyTodays") {
[144]33                taskInstanceList = taskSearchService.getMyTodays(params)
34                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks for ${personInstance.firstName} ${personInstance.lastName}." }
35                else { params.message = "No tasks found for today." }
36            }
[155]37            else if(params.quickSearch == "searchInTheLastWeek") {
[144]38                taskInstanceList = taskSearchService.getInTheLastWeek(params)
39                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week." }
[185]40                else { params.message = "No tasks found for the last week." }
[144]41            }
[155]42            else if(params.quickSearch == "searchMyInTheLastWeek") {
[144]43                taskInstanceList = taskSearchService.getMyInTheLastWeek(params)
44                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week for ${personInstance.firstName} ${personInstance.lastName}." }
[185]45                else { params.message = "No tasks found for the last week." }
[144]46            }
47            else {
48                //Default:
49                taskInstanceList = taskSearchService.getTodays(params)
50                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks." }
51                else { params.message = "No tasks found for today." }
[155]52                params.quickSearch = "searchTodays"
[144]53            }
[155]54            return[taskInstanceList: taskInstanceList, taskInstanceTotal: taskInstanceList.totalCount, filterParams: params]
[139]55        }
[143]56        // filterPane:
57        return[ taskInstanceList: filterService.filter( params, Task ),
58            taskInstanceTotal: filterService.count( params, Task ),
59            filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params),
60            params:params ]
[140]61    }
[143]62
[155]63    def searchCalendar = {
64        params.max = 30
[140]65
[155]66        // Quick Search:
[209]67        if(!FilterUtils.isFilterApplied(params)) {
[155]68            def taskInstanceList = []
[185]69            def personInstance = personService.currentUser()
[155]70
71            if(params.quickSearch == "searchMyTodays") {
72                taskInstanceList = taskSearchService.getMyTodays(params)
73                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks for ${personInstance.firstName} ${personInstance.lastName}." }
74                else { params.message = "No tasks found for today." }
75                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
76            }
77            else if(params.quickSearch == "searchInTheLastWeek") {
78                taskInstanceList = taskSearchService.getInTheLastWeek(params)
79                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week." }
[185]80                else { params.message = "No tasks found for the last week." }
[155]81                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
82            }
83            else if(params.quickSearch == "searchMyInTheLastWeek") {
84                taskInstanceList = taskSearchService.getMyInTheLastWeek(params)
85                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week for ${personInstance.firstName} ${personInstance.lastName}." }
[185]86                else { params.message = "No tasks found for the last week." }
[155]87                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
88            }
89            else {
90                //Default:
91                taskInstanceList = taskSearchService.getTodays(params)
92                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks." }
93                else { params.message = "No tasks found for today." }
94                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
95                params.quickSearch = "searchTodays"
96            }
97            return[taskInstanceList: taskInstanceList, taskInstanceTotal: taskInstanceList.totalCount, filterParams: params]
[139]98        }
[155]99        // filterPane:
100        def taskInstanceTotal = filterService.count( params, Task )
101        if(taskInstanceTotal > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
102        return[ taskInstanceList: filterService.filter( params, Task ),
103            taskInstanceTotal: taskInstanceTotal,
104            filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params),
105            params:params ]
[139]106    }
[140]107
[165]108    def budget = {
109        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100 )
110
111        // Quick Search:
[209]112        if(!FilterUtils.isFilterApplied(params)) {
[165]113            def taskInstanceList = []
[185]114            def personInstance = personService.currentUser()
[165]115
116            if(params.quickSearch == "budgetUnplanned") {
117                taskInstanceList = taskSearchService.getBudgetUnplanned(params)
118                if(taskInstanceList.totalCount > 0) { params.message = "Budget unplanned tasks in the last week." }
119                else { params.message = "No tasks found." }
120            }
121            //else if(params.quickSearch == "budgetPlanned") {
122            else {
123                //Default:
124                taskInstanceList = taskSearchService.getBudgetPlanned(params)
125                if(taskInstanceList.totalCount > 0) { params.message = "Budget planned Tasks in the last week." }
126                else { params.message = "No tasks found.." }
127            }
128            // export plugin:
129            if(params?.format && params.format != "html") {
130                response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]
131                response.setHeader("Content-disposition", "attachment; filename=tasks.${params.extension}")
132                List fields = ["id", "targetStartDate", "description", "leadPerson", "taskStatus", "taskType"]
133                Map labels = ["id": "ID", "targetStartDate": "Target Start Date", "description": "Description",
134                                        "leadPerson": "Lead Person", "taskStatus": "Task Status", "taskType": "Task Type"]
135                Map formatters = [:]
136                String title = "${params.quickSearch} tasks in the last week."
137                Map parameters = [title: title]
138
139                exportService.export(params.format, response.outputStream, taskInstanceList, fields, labels, formatters, parameters) 
140            }
141            return[taskInstanceList: taskInstanceList, taskInstanceTotal: taskInstanceList.totalCount, filterParams: params]
142        }
143        // filterPane:
144        return[ taskInstanceList: filterService.filter( params, Task ),
145            taskInstanceTotal: filterService.count( params, Task ),
146            filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params),
147            params:params ]
148    }
149
[66]150    def show = {
[147]151
[139]152        // In the case of an actionSubmit button, rewrite action name from 'index'.
153        if(params._action_Show)
154        { params.action='show' }
155
[66]156        def taskInstance = Task.get( params.id )
157
158        if(!taskInstance) {
159            flash.message = "Task not found with id ${params.id}"
[196]160            redirect(action: 'search')
[66]161        }
[133]162        else {
[179]163            params.max = 10
164            params.order = "desc"
165            params.sort = "id"
[134]166
[179]167            def entryWorkDoneList = Entry.withCriteria {
[190]168                                                                eq("entryType", EntryType.get(2))
[179]169                                                                eq("task", taskInstance)
170                                                        }
171
172            def entryFaultList = Entry.withCriteria {
[190]173                                                                eq("entryType", EntryType.get(1))
[179]174                                                                eq("task", taskInstance)
175                                                        }
176
[196]177            def subTaskInstanceList = Task.findAllByParentTaskAndTrash(taskInstance, false, params)
178            def subTaskInstanceTotal = Task.countByParentTaskAndTrash(taskInstance, false)
[134]179            def showTaskTab = new String("true")
180
[175]181            def inventoryMovementList = InventoryMovement.findAllByTask(taskInstance, [max:100, sort:"id", order:"desc", offset:0])
182
[180]183            def taskModificationList = TaskModification.findAllByTask(taskInstance, [max:100, sort:"id", order:"asc", offset:0])
184
[133]185            def taskProcedureInstance = TaskProcedure.get(taskInstance.taskProcedure?.id)
186            def taskProcedureExits = new Boolean("true")
187            if(!taskProcedureInstance) {
188                taskProcedureExits = false
189            }
[175]190
191            params.order = "asc"
192            params.sort = "procedureStepNumber"
193            def maintenanceActionList = MaintenanceAction.findAllByTaskProcedure(taskProcedureInstance, params)
194
[134]195            def taskRecurringScheduleInstance = TaskRecurringSchedule.get(taskInstance.taskRecurringSchedule?.id)
196            def taskRecurringScheduleExits= new Boolean("true")
[175]197            if(!taskRecurringScheduleInstance) {
[134]198                taskRecurringScheduleExits = false
199            }
[179]200
[137]201            return [ taskInstance: taskInstance,
[179]202                            entryWorkDoneList: entryWorkDoneList,
203                            entryFaultList: entryFaultList,
[133]204                            taskProcedureInstance: taskProcedureInstance,
205                            taskProcedureExits: taskProcedureExits,
[134]206                            showTaskTab: showTaskTab,
[179]207                            subTaskInstanceList: subTaskInstanceList,
208                            subTaskInstanceTotal: subTaskInstanceTotal,
209                            subTaskInstanceMax: params.max,
210                            maintenanceActionList: maintenanceActionList,
211                            taskRecurringScheduleInstance: taskRecurringScheduleInstance,
212                            taskRecurringScheduleExits: taskRecurringScheduleExits,
[180]213                            inventoryMovementList: inventoryMovementList,
214                            taskModificationList: taskModificationList]
[131]215        }
[66]216    }
217
[181]218    def restore = {
219
220        if(!Task.exists(params.id)) {
221            flash.message = "Task not found with id ${params.id}"
[196]222            redirect(action: 'search')
[181]223        }
224
225        def result = taskService.restore(params)
226
227        if(!result.error) {
228                flash.message = "Task ${params.id} has been restored."
[196]229                redirect(action: 'show', id: result.taskInstance.id)
[181]230        }
231        else {
232            if(result.taskInstance) {
233                render(view:'edit',model:[taskInstance:result.taskInstance])
[96]234            }
[181]235            else {
236                flash.message = "Task could not be updated."
[196]237                redirect(action: 'search')
[96]238            }
[66]239        }
[181]240
241    }
242
243    def trash = {
244
245        if(!Task.exists(params.id)) {
246            flash.message = "Task not found with id ${params.id}."
[196]247            redirect(action: 'search')
[181]248        }
249
250        def result = taskService.trash(params)
251
252        if(!result.error) {
253                flash.message = "Task ${params.id} has been moved to trash."
[196]254                redirect(action: 'search')
[181]255        }
[66]256        else {
[181]257            if(result.taskInstance) {
258                render(view:'edit',model:[taskInstance:result.taskInstance])
259            }
260            else {
261                flash.message = "Task could not be updated."
[196]262                redirect(action: 'search')
[181]263            }
[66]264        }
[181]265
[66]266    }
267
[181]268    def approve = {
269
270        if(!Task.exists(params.id)) {
271            flash.message = "Task not found with id ${params.id}."
[196]272            redirect(action: 'search')
[181]273        }
274
275        def result = taskService.approve(params)
276
277        if(!result.error) {
278                flash.message = "Task ${params.id} has been approved."
[196]279                redirect(action: 'show', id: result.taskInstance.id)
[181]280        }
281        else {
282            if(result.taskInstance) {
283                render(view:'edit',model:[taskInstance:result.taskInstance])
284            }
285            else {
286                flash.message = "Task could not be updated."
[196]287                redirect(action: 'search')
[181]288            }
289        }
290
291    }
292
293    def renegeApproval = {
294
295        if(!Task.exists(params.id)) {
296            flash.message = "Task not found with id ${params.id}."
[196]297            redirect(action: 'search')
[181]298        }
299
300        def result = taskService.renegeApproval(params)
301
302        if(!result.error) {
303                flash.message = "Task ${params.id} has had approval removed."
[196]304                redirect(action: 'show', id: result.taskInstance.id)
[181]305        }
306        else {
307            if(result.taskInstance) {
308                render(view:'edit',model:[taskInstance:result.taskInstance])
309            }
310            else {
311                flash.message = "Task could not be updated."
[196]312                redirect(action: 'search')
[181]313            }
314        }
315
316    }
317
318    def complete = {
319
320        if(!Task.exists(params.id)) {
321            flash.message = "Task not found with id ${params.id}."
[196]322            redirect(action: 'search')
[181]323        }
324
325        def result = taskService.complete(params)
326
327        if(!result.error) {
328                flash.message = "Task ${params.id} has been completed."
[196]329                redirect(action: 'show', id: result.taskInstance.id)
[181]330        }
331        else {
332            if(result.taskInstance) {
333                render(view:'edit',model:[taskInstance:result.taskInstance])
334            }
335            else {
336                flash.message = "Task could not be updated."
[196]337                redirect(action: 'search')
[181]338            }
339        }
340
341    }
342
343    def reopen = {
344
345        if(!Task.exists(params.id)) {
346            flash.message = "Task not found with id ${params.id}."
[196]347            redirect(action: 'search')
[181]348        }
349
350        def result = taskService.reopen(params)
351
352        if(!result.error) {
353                flash.message = "Task ${params.id} has been reopened."
[196]354                redirect(action: 'show', id: result.taskInstance.id)
[181]355        }
356        else {
357            if(result.taskInstance) {
358                render(view:'edit',model:[taskInstance:result.taskInstance])
359            }
360            else {
361                flash.message = "Task could not be updated."
[196]362                redirect(action: 'search')
[181]363            }
364        }
365
366    }
367
[66]368    def edit = {
[147]369
[139]370        // In the case of an actionSubmit button, rewrite action name from 'index'.
371        if(params._action_Edit)
372        { params.action='edit' }
[169]373
[66]374        def taskInstance = Task.get( params.id )
375
376        if(!taskInstance) {
377            flash.message = "Task not found with id ${params.id}"
[196]378            redirect(action: 'search')
[66]379        }
380        else {
[181]381            if(taskInstance.trash) {
[196]382                flash.message = "You may not edit tasks that are in the trash."
383                redirect(action: 'show', id: taskInstance.id)
384                return
[181]385            }
[196]386            def possibleParentList = taskService.possibleParentList(taskInstance)
[169]387            return [ taskInstance : taskInstance, possibleParentList: possibleParentList ]
[84]388        }
389    }
390
[66]391    def update = {
[179]392
[180]393        if(!Task.exists(params.id)) {
394            flash.message = "Task not found with id ${params.id}"
[196]395            redirect(action: 'search')
[180]396        }
397
398        def result = taskService.update(params)
399
400        if(!result.error) {
[66]401                flash.message = "Task ${params.id} updated"
[196]402                redirect(action: 'show', id: result.taskInstance.id)
[180]403        }
404        else {
[206]405            render(view:'edit',model:[taskInstance:result.taskInstance.attach()])
[66]406        }
[180]407
[66]408    }
409
410    def create = {
411        def taskInstance = new Task()
[214]412
413        // Set the targetStartDate if specified, used by searchCalendar view.
414        if(params.year && params.month && params.day)
415            taskInstance.targetStartDate = dateUtilService.makeDate(params.year, params.month, params.day)
416
[196]417        // Default leadPerson to current user, unless supplied in params.
[185]418        taskInstance.leadPerson = personService.currentUser()
[66]419        taskInstance.properties = params
[196]420        return ['taskInstance': taskInstance]
[66]421    }
422
423    def save = {
[180]424        def result = taskService.create(params)
425
426        if(!result.error) {
427            flash.message = "Task ${result.taskInstance.id} created."
[196]428            redirect(action: 'show', id: result.taskInstance.id)
[66]429        }
430        else {
[180]431            if(result.taskInstance) {
[196]432                render(view:'create', model:[taskInstance:result.taskInstance])
[180]433            }
434            else {
435                flash.message = "Could not create task."
[196]436                redirect(action: 'search')
[180]437            }
438
[66]439        }
440    }
[179]441
442    def listSubTasks = {
443        def parentTaskInstance = Task.get(params.id)
444
[134]445        if(!parentTaskInstance) {
446            flash.message = "Task not found with id ${params.id}"
[196]447            redirect(action: 'search')
[133]448        }
449        else {
[179]450        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
[196]451        def subTaskInstanceList = Task.findAllByParentTaskAndTrash(parentTaskInstance, false, params)
452        def subTaskInstanceTotal = Task.countByParentTaskAndTrash(parentTaskInstance, false)
[179]453
[134]454        [ taskInstanceList: subTaskInstanceList,
[179]455            taskInstanceTotal:  subTaskInstanceTotal,
456            parentTaskInstance: parentTaskInstance]
457        }
458    }
459
[196]460    def createSubTask = {
461        def parentTaskInstance = Task.get(params.id)
462
463        if(parentTaskInstance) {
464
465            def result = taskService.createSubTask(parentTaskInstance)
466            if(!result.error) {
467                flash.message = "Sub Task ${result.taskInstance.id} created, please edit and update to your requirements."
468                redirect(action: 'edit', id: result.taskInstance.id)
469            }
470            else {
471                if(result.taskInstance.errors.hasFieldErrors("parentTask")) {
472                    flash.message = g.message(code:"task.operationNotPermittedOnTaskInTrash")
473                    redirect(action: 'show', id:  parentTaskInstance.id)
474                }
475                else {
476                    render(view: 'create', model:[taskInstance: result.taskInstance])
477                }
478            }
479        }
480
481        else {
482            flash.message = "Task not found with id ${params.id}"
483            redirect(action: 'search')
484        }
485    }
486
487} // end of class.
Note: See TracBrowser for help on using the repository browser.