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

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

Refactor taskService update() and enable optimistic version checking.

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