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

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

Replace personService.currentUser() with the more groovy personService.getCurrentUser() so that personService.currentUser can be called.

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 = []
[216]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 = []
[216]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 = []
[216]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.
[216]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.