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

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

Add create unsheduled task feature.
Refactor task priorities.
Limit task types and priorites during task creation.
Add work around for show and edit navigation links in task views.

File size: 28.7 KB
Line 
1import org.codehaus.groovy.grails.plugins.springsecurity.Secured
2import org.codehaus.groovy.grails.commons.ConfigurationHolder
3import com.zeddware.grails.plugins.filterpane.FilterUtils
4
5@Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager'])
6class TaskDetailedController extends BaseController {
7
8    def authService
9    def taskService
10    def taskSearchService
11    def filterService
12    def exportService
13    def dateUtilService
14
15    // these actions only accept POST requests
16    static allowedMethods = [save:'POST',update:'POST',restore:'POST', trash:'POST',
17                                                approve:'POST', renegeApproval:'POST', complete:'POST',
18                                                reopen:'POST', setAttentionFlag:'POST', clearAttentionFlag:'POST']
19
20    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
21    def index = { redirect(action: 'search', params: params) }
22
23    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
24    def setSearchParamsMax = {
25        def max = 1000
26        if(params.newMax.isInteger()) {
27            def i = params.newMax.toInteger()
28            if(i > 0 && i <= max)
29                session.taskSearchParamsMax = params.newMax
30            if(i > max)
31                session.taskSearchParamsMax = max
32        }
33        forward(action: 'search', params: params)
34    }
35
36    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
37    def search = {
38
39        if(session.taskSearchParamsMax)
40            params.max = session.taskSearchParamsMax
41
42        // TaskSearchService protects itself but filterPane does not.
43        params.max = Math.min( params.max ? params.max.toInteger() : 10,  1000 )
44
45        def taskInstanceList = []
46        def taskInstanceTotal
47        def filterParams = [:]
48        def personInstance = authService.currentUser
49
50        // Quick Search:
51        if(!FilterUtils.isFilterApplied(params)) {
52
53            if(params.quickSearch == "searchMyTodays") {
54                taskInstanceList = taskSearchService.getMyTodays(params)
55                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks for ${personInstance.firstName} ${personInstance.lastName}." }
56                else { params.message = "No tasks found for today." }
57            }
58            else if(params.quickSearch == "searchInTheLastWeek") {
59                taskInstanceList = taskSearchService.getInTheLastWeek(params)
60                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week." }
61                else { params.message = "No tasks found for the last week." }
62            }
63            else if(params.quickSearch == "searchMyInTheLastWeek") {
64                taskInstanceList = taskSearchService.getMyInTheLastWeek(params)
65                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week for ${personInstance.firstName} ${personInstance.lastName}." }
66                else { params.message = "No tasks found for the last week." }
67            }
68            else {
69                //Default:
70                taskInstanceList = taskSearchService.getTodays(params)
71                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks." }
72                else { params.message = "No tasks found for today." }
73                params.quickSearch = "searchTodays"
74            }
75
76            taskInstanceTotal = taskInstanceList.totalCount
77            filterParams.quickSearch = params.quickSearch
78        }
79        else {
80            // filterPane:
81            taskInstanceList = filterService.filter( params, Task )
82            taskInstanceTotal = filterService.count( params, Task )
83            filterParams = com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params)
84        }
85
86        // export plugin:
87        if(params?.format && params.format != "html") {
88
89            def dateFmt = { date ->
90                formatDate(format: "EEE, dd-MMM-yyyy", date: date)
91            }
92
93            String title
94            if(params.quickSearch)
95                title = "${params.quickSearch} tasks."
96            else
97                title = "Filtered tasks."
98
99            response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]
100            response.setHeader("Content-disposition", "attachment; filename=Tasks.${params.extension}")
101            List fields = ["id", "targetStartDate", "description", "leadPerson", "taskPriority", "taskStatus"]
102            Map labels = ["id": "ID", "targetStartDate": "Target Start Date", "description": "Description",
103                                    "leadPerson": "Lead Person", "taskPriority": "Task Priority", "taskStatus": "Task Status"]
104            Map formatters = [ targetStartDate: dateFmt]
105            Map parameters = [title: title, separator: ","]
106
107            exportService.export(params.format, response.outputStream, taskInstanceList, fields, labels, formatters, parameters)
108        }
109
110        // Add some basic params to filterParams.
111        filterParams.max = params.max
112        filterParams.offset = params.offset?.toInteger() ?: 0
113        filterParams.sort = params.sort ?: "attentionFlag"
114        filterParams.order = params.order ?: "desc"
115
116        return[ taskInstanceList: taskInstanceList,
117                taskInstanceTotal: taskInstanceTotal,
118                filterParams: filterParams ]
119
120    } // end search()
121
122    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
123    def searchCalendar = {
124        params.max = 30
125
126        // Quick Search:
127        if(!FilterUtils.isFilterApplied(params)) {
128            def taskInstanceList = []
129            def personInstance = authService.currentUser
130
131            if(params.quickSearch == "searchMyTodays") {
132                taskInstanceList = taskSearchService.getMyTodays(params)
133                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks for ${personInstance.firstName} ${personInstance.lastName}." }
134                else { params.message = "No tasks found for today." }
135                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
136            }
137            else if(params.quickSearch == "searchInTheLastWeek") {
138                taskInstanceList = taskSearchService.getInTheLastWeek(params)
139                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week." }
140                else { params.message = "No tasks found for the last week." }
141                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
142            }
143            else if(params.quickSearch == "searchMyInTheLastWeek") {
144                taskInstanceList = taskSearchService.getMyInTheLastWeek(params)
145                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week for ${personInstance.firstName} ${personInstance.lastName}." }
146                else { params.message = "No tasks found for the last week." }
147                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
148            }
149            else {
150                //Default:
151                taskInstanceList = taskSearchService.getTodays(params)
152                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks." }
153                else { params.message = "No tasks found for today." }
154                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
155                params.quickSearch = "searchTodays"
156            }
157            return[taskInstanceList: taskInstanceList, taskInstanceTotal: taskInstanceList.totalCount, filterParams: params]
158        }
159        // filterPane:
160        def taskInstanceTotal = filterService.count( params, Task )
161        if(taskInstanceTotal > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
162        return[ taskInstanceList: filterService.filter( params, Task ),
163            taskInstanceTotal: taskInstanceTotal,
164            filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params),
165            params:params ]
166    }
167
168    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
169    def budget = {
170        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100 )
171
172        // Quick Search:
173        if(!FilterUtils.isFilterApplied(params)) {
174            def taskInstanceList = []
175            def personInstance = authService.currentUser
176
177            if(params.quickSearch == "budgetUnplanned") {
178                taskInstanceList = taskSearchService.getBudgetUnplanned(params)
179                if(taskInstanceList.totalCount > 0) { params.message = "Budget unplanned tasks in the last week." }
180                else { params.message = "No tasks found." }
181            }
182            //else if(params.quickSearch == "budgetPlanned") {
183            else {
184                //Default:
185                taskInstanceList = taskSearchService.getBudgetPlanned(params)
186                if(taskInstanceList.totalCount > 0) { params.message = "Budget planned Tasks in the last week." }
187                else { params.message = "No tasks found.." }
188            }
189            // export plugin:
190            if(params?.format && params.format != "html") {
191
192                def dateFmt = { date ->
193                    formatDate(format: "EEE, dd-MMM-yyyy", date: date)
194                }
195                response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]
196                response.setHeader("Content-disposition", "attachment; filename=tasks.${params.extension}")
197                List fields = ["id", "targetStartDate", "description", "leadPerson", "taskStatus", "taskType"]
198                Map labels = ["id": "ID", "targetStartDate": "Target Start Date", "description": "Description",
199                                        "leadPerson": "Lead Person", "taskStatus": "Task Status", "taskType": "Task Type"]
200                Map formatters = [ targetStartDate: dateFmt]
201                String title = "${params.quickSearch} tasks in the last week."
202                Map parameters = [title: title, separator: ","]
203
204                exportService.export(params.format, response.outputStream, taskInstanceList, fields, labels, formatters, parameters) 
205            }
206            return[taskInstanceList: taskInstanceList, taskInstanceTotal: taskInstanceList.totalCount, filterParams: params]
207        }
208        // filterPane:
209        return[ taskInstanceList: filterService.filter( params, Task ),
210            taskInstanceTotal: filterService.count( params, Task ),
211            filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params),
212            params:params ]
213    }
214
215    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
216    def show = {
217
218        // In the case of an actionSubmit button, rewrite action name from 'index'.
219        if(params._action_Show)
220            params.action='show'
221
222        // Used by navigation.
223        if(params.id == 'nav') {
224            params.id = session.currentTaskId ?: null
225            redirect(action: show, id: params.id)
226            return
227        }
228
229        def showTab = [:]
230        switch (params.showTab) {
231            case "showProcedureTab":
232                showTab.procedure =  new String("true")
233                break
234            case "showRecurrenceTab":
235                showTab.recurrence =  new String("true")
236                break
237            case "showInventoryTab":
238                showTab.inventory = new String("true")
239                break
240            case "showSubTasksTab":
241                showTab.subTasks = new String("true")
242                break
243            default:
244                showTab.task = new String("true")
245        }
246
247        def taskInstance = Task.get( params.id )
248
249        if(!taskInstance) {
250            flash.message = "Task not found with id ${params.id}"
251            redirect(action: 'search')
252        }
253        else {
254            // Remember the current task id for use with navigation.
255            session.currentTaskId = params.id
256
257            params.max = 10
258            params.order = "desc"
259            params.sort = "id"
260
261            def entryFaultList = Entry.withCriteria {
262                                                                eq("entryType", EntryType.get(1))
263                                                                eq("task", taskInstance)
264                                                        }
265
266            def entryCauseList = Entry.withCriteria {
267                                                                eq("entryType", EntryType.get(2))
268                                                                eq("task", taskInstance)
269                                                        }
270
271            def entryWorkDoneList = Entry.withCriteria {
272                                                                eq("entryType", EntryType.get(3))
273                                                                eq("task", taskInstance)
274                                                        }
275
276            def subTaskInstanceList = Task.findAllByParentTaskAndTrash(taskInstance, false, params)
277            def subTaskInstanceTotal = Task.countByParentTaskAndTrash(taskInstance, false)
278
279            def inventoryMovementList = InventoryMovement.findAllByTask(taskInstance, [max:100, sort:"id", order:"desc", offset:0])
280
281            def taskModificationList = TaskModification.findAllByTask(taskInstance, [max:100, sort:"id", order:"asc", offset:0])
282
283            def assignedGroupList = taskInstance.assignedGroups.sort { p1, p2 -> p1.personGroup.name.compareToIgnoreCase(p2.personGroup.name) }
284            def assignedPersonList = taskInstance.assignedPersons.sort { p1, p2 -> p1.person.firstName.compareToIgnoreCase(p2.person.firstName) }
285
286            def taskProcedureInstance = TaskProcedure.get(taskInstance.taskProcedure?.id)
287            def taskProcedureExits = new Boolean("true")
288            if(!taskProcedureInstance) {
289                taskProcedureExits = false
290            }
291
292            params.order = "asc"
293            params.sort = "procedureStepNumber"
294            def maintenanceActionList = MaintenanceAction.findAllByTaskProcedure(taskProcedureInstance, params)
295
296            def taskRecurringScheduleInstance = TaskRecurringSchedule.get(taskInstance.taskRecurringSchedule?.id)
297            def taskRecurringScheduleExits= new Boolean("true")
298            if(!taskRecurringScheduleInstance) {
299                taskRecurringScheduleExits = false
300            }
301
302            return [ taskInstance: taskInstance,
303                            entryFaultList: entryFaultList,
304                            entryCauseList: entryCauseList,
305                            entryWorkDoneList: entryWorkDoneList,
306                            taskProcedureInstance: taskProcedureInstance,
307                            taskProcedureExits: taskProcedureExits,
308                            showTab: showTab,
309                            subTaskInstanceList: subTaskInstanceList,
310                            subTaskInstanceTotal: subTaskInstanceTotal,
311                            subTaskInstanceMax: params.max,
312                            maintenanceActionList: maintenanceActionList,
313                            taskRecurringScheduleInstance: taskRecurringScheduleInstance,
314                            taskRecurringScheduleExits: taskRecurringScheduleExits,
315                            inventoryMovementList: inventoryMovementList,
316                            taskModificationList: taskModificationList,
317                            assignedGroupList: assignedGroupList,
318                            assignedPersonList: assignedPersonList]
319        }
320    }
321
322    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
323    def restore = {
324
325        def result = taskService.restore(params)
326
327        if(!result.error) {
328                flash.message = "Task ${params.id} has been restored."
329                redirect(action: show, id: params.id)
330                return
331        }
332
333        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
334
335        if(result.taskInstance)
336            redirect(action: show, id: params.id)
337        else
338            redirect(action: 'search')
339
340    }
341
342    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
343    def trash = {
344
345        def result = taskService.trash(params)
346
347        if(!result.error) {
348                flash.message = "Task ${params.id} has been moved to trash."
349                redirect(action: 'search')
350                return
351        }
352
353        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
354
355        if(result.taskInstance)
356            redirect(action: show, id: params.id)
357        else
358            redirect(action: 'search')
359
360    }
361
362    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager'])
363    def approve = {
364
365        def result = taskService.approve(params)
366
367        if(!result.error) {
368                flash.message = "Task ${params.id} has been approved."
369                redirect(action: show, id: params.id)
370                return
371        }
372
373        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
374
375        if(result.taskInstance)
376            redirect(action: show, id: params.id)
377        else
378            redirect(action: 'search')
379
380    }
381
382    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
383    def renegeApproval = {
384
385        def result = taskService.renegeApproval(params)
386
387        if(!result.error) {
388                flash.message = "Task ${params.id} has had approval removed."
389                redirect(action: show, id: params.id)
390                return
391        }
392
393        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
394
395        if(result.taskInstance)
396            redirect(action: show, id: params.id)
397        else
398            redirect(action: 'search')
399
400    }
401
402    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
403    def complete = {
404
405        def result = taskService.complete(params)
406
407        if(!result.error) {
408                flash.message = "Task ${params.id} has been completed."
409                redirect(action: show, id: params.id)
410                return
411        }
412
413        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
414
415        if(result.taskInstance)
416            redirect(action: show, id: params.id)
417        else
418            redirect(action: 'search')
419
420    }
421
422    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
423    def setAttentionFlag = {
424
425        def result = taskService.setAttentionFlag(params)
426
427        if(!result.error) {
428                flash.message = "Task ${params.id} has been flagged for attention."
429                redirect(action: show, id: params.id)
430                return
431        }
432
433        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
434
435        if(result.taskInstance)
436            redirect(action: show, id: params.id)
437        else
438            redirect(action: 'search')
439
440    }
441
442    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
443    def clearAttentionFlag = {
444
445        def result = taskService.clearAttentionFlag(params)
446
447        if(!result.error) {
448                flash.message = "Task ${params.id} attention flag cleared."
449                redirect(action: show, id: params.id)
450                return
451        }
452
453        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
454
455        if(result.taskInstance)
456            redirect(action: show, id: params.id)
457        else
458            redirect(action: 'search')
459
460    }
461
462    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
463    def reopen = {
464
465        def result = taskService.reopen(params)
466
467        if(!result.error) {
468                flash.message = "Task ${params.id} has been reopened."
469                redirect(action: show, id: params.id)
470                return
471        }
472
473        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
474
475        if(result.taskInstance)
476            redirect(action: show, id: params.id)
477        else
478            redirect(action: 'search')
479
480    }
481
482    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
483    def edit = {
484
485        // In the case of an actionSubmit button, rewrite action name from 'index'.
486        if(params._action_Edit)
487            params.action='edit'
488
489        // Used by navigation.
490        if(params.id == 'nav') {
491            params.id = session.currentTaskId ?: null
492            redirect(action: edit, id: params.id)
493            return
494        }
495
496        def taskInstance = Task.get( params.id )
497
498        if(!taskInstance) {
499            flash.message = "Task not found with id ${params.id}"
500            redirect(action: 'search')
501        }
502        else {
503            // Remember the current task id for use with navigation.
504            session.currentTaskId = params.id
505
506            if(taskInstance.trash) {
507                flash.message = "You may not edit tasks that are in the trash."
508                redirect(action: 'show', id: taskInstance.id)
509                return
510            }
511//             def possibleParentList = taskService.possibleParentList(taskInstance)
512//             return [ taskInstance : taskInstance, possibleParentList: possibleParentList ]
513            return [ taskInstance : taskInstance ]
514        }
515    }
516
517    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
518    def update = {
519
520        def result = taskService.update(params)
521
522        if(!result.error) {
523                flash.message = "Task ${params.id} updated"
524                redirect(action: show, id: params.id)
525                return
526        }
527
528        if(result.error.code == "task.modifications.failedToSave")
529            flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
530
531        render(view:'edit',model:[taskInstance:result.taskInstance.attach()])
532
533    }
534
535    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
536    def create = {
537        def taskInstance = new Task()
538
539        // Set the targetStartDate if specified, used by searchCalendar view.
540        if(params.year && params.month && params.day)
541            taskInstance.targetStartDate = dateUtilService.makeDate(params.year, params.month, params.day)
542
543        // Default leadPerson to current user, unless supplied in params.
544        taskInstance.leadPerson = authService.currentUser
545        taskInstance.properties = params
546
547        def scheduledTaskTypes = taskService.scheduledTaskTypes
548        def scheduledTaskPriorities = taskService.scheduledTaskPriorities
549        taskInstance.taskPriority = scheduledTaskPriorities.default
550        return ['taskInstance': taskInstance,
551                    'scheduledTaskTypes': scheduledTaskTypes,
552                    'scheduledTaskPriorities': scheduledTaskPriorities.list]
553    }
554
555    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
556    def save = {
557        def result = taskService.save(params)
558
559        if(!result.error) {
560            flash.message = "Task ${result.taskInstance.id} created."
561            redirect(action: 'show', id: result.taskInstance.id)
562            return
563        }
564
565        if(result.error.code == "task.modifications.failedToSave")
566            flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
567
568
569        def scheduledTaskTypes = taskService.scheduledTaskTypes
570        def scheduledTaskPriorities = taskService.scheduledTaskPriorities
571        render(view:'create', model:[taskInstance:result.taskInstance,
572                                                    'scheduledTaskTypes': scheduledTaskTypes,
573                                                    'scheduledTaskPriorities': scheduledTaskPriorities.list])
574    }
575
576    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
577    def listSubTasks = {
578        def parentTaskInstance = Task.get(params.id)
579
580        if(!parentTaskInstance) {
581            flash.message = "Task not found with id ${params.id}"
582            redirect(action: 'search')
583        }
584        else {
585        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
586        def subTaskInstanceList = Task.findAllByParentTaskAndTrash(parentTaskInstance, false, params)
587        def subTaskInstanceTotal = Task.countByParentTaskAndTrash(parentTaskInstance, false)
588
589        [ taskInstanceList: subTaskInstanceList,
590            taskInstanceTotal:  subTaskInstanceTotal,
591            parentTaskInstance: parentTaskInstance]
592        }
593    }
594
595    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
596    def createSubTask = {
597        def parentTaskInstance = Task.get(params.id)
598
599        if(parentTaskInstance) {
600
601            def result = taskService.createSubTask(parentTaskInstance)
602            if(!result.error) {
603                flash.message = "Sub Task ${result.taskInstance.id} created, please edit and update to your requirements."
604                redirect(action: 'edit', id: result.taskInstance.id)
605            }
606            else {
607                if(result.taskInstance.errors.hasFieldErrors("parentTask")) {
608                    flash.errorMessage = g.message(code:"task.operationNotPermittedOnTaskInTrash")
609                    redirect(action: 'show', id:  parentTaskInstance.id)
610                }
611                else {
612                    render(view: 'create', model:[taskInstance: result.taskInstance])
613                }
614            }
615        }
616
617        else {
618            flash.message = "Task not found with id ${params.id}"
619            redirect(action: 'search')
620        }
621    }
622
623    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
624    def createUnscheduled = {
625        def taskInstance = new Task()
626
627        // Default leadPerson to current user, unless supplied in params.
628        taskInstance.leadPerson = authService.currentUser
629        taskInstance.properties = params
630
631        // Always for Unscheduled task.
632        taskInstance.taskType = TaskType.get(2) // Unscheduled Breakin.
633        def unscheduledTaskPriorities = taskService.unscheduledTaskPriorities
634        taskInstance.taskPriority = unscheduledTaskPriorities.default
635
636        return ['taskInstance': taskInstance, 'unscheduledTaskPriorities': unscheduledTaskPriorities.list]
637    }
638
639    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
640    def saveUnscheduled = {
641        def result = taskService.saveUnscheduled(params)
642
643        if(!result.error) {
644            flash.message = "Task ${result.taskInstance.id} created."
645            redirect(action: 'show', id: result.taskInstance.id)
646            return
647        }
648
649        if(result.error.code == "task.modifications.failedToSave")
650            flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
651
652        def unscheduledTaskPriorities = taskService.unscheduledTaskPriorities
653
654        render(view:'createUnscheduled',
655                    model: ['taskInstance': result.taskInstance, 'unscheduledTaskPriorities': unscheduledTaskPriorities.list])
656    }
657
658    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
659    def createImmediateCallout = {
660        def taskInstance = new Task()
661
662        def entryFaultInstance = new Entry(entryType: EntryType.get(1))  // Fault.
663        def entryCauseInstance = new Entry(entryType: EntryType.get(2))  // Cause.
664        def entryWorkDoneInstance = new Entry(entryType: EntryType.get(3))  // Work Done.
665
666        return ['taskInstance': taskInstance,
667                        'entryFaultInstance': entryFaultInstance,
668                        'entryCauseInstance': entryCauseInstance,
669                        'entryWorkDoneInstance': entryWorkDoneInstance]
670    }
671
672    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
673    def saveImmediateCallout = {
674        def result = taskService.saveImmediateCallout(params)
675
676        if(!result.error) {
677            flash.message = "Task ${result.taskInstance.id} created."
678            redirect(action: 'show', id: result.taskInstance.id)
679            return
680        }
681
682        if(result.error.code == "task.modifications.failedToSave")
683            flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
684
685        render(view:'createImmediateCallout',
686                    model: ['taskInstance': result.taskInstance,
687                                'entryFaultInstance': result.entryFaultInstance,
688                                'entryCauseInstance': result.entryCauseInstance,
689                                'entryWorkDoneInstance': result.entryWorkDoneInstance])
690
691    }
692
693} // end of class.
Note: See TracBrowser for help on using the repository browser.