source: branches/features/taskProcedureRework/grails-app/controllers/TaskProcedureDetailedController.groovy @ 775

Last change on this file since 775 was 775, checked in by gav, 13 years ago

Add optimistic locking checks and transactional save for TaskProcedure.

File size: 7.0 KB
RevLine 
[133]1import org.codehaus.groovy.grails.plugins.springsecurity.Secured
2
[298]3@Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager'])
[133]4class TaskProcedureDetailedController extends BaseController {
[147]5
[155]6    def filterService
[774]7    def taskProcedureService
[155]8
[133]9    def index = { redirect(action:list,params:params) }
10
11    // the delete, save and update actions only accept POST requests
12    static allowedMethods = [delete:'POST', save:'POST', update:'POST']
13
[298]14    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
[133]15    def list = {
16        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
[147]17
18        if(!params.filter)
19        { return [taskProcedureInstanceList: TaskProcedure.list(params), taskProcedureInstanceTotal: TaskProcedure.count()] }
20
21        // filterPane:
22        return[ taskProcedureInstanceList: filterService.filter( params, TaskProcedure ),
23            taskProcedureInstanceTotal: filterService.count( params, TaskProcedure ),
24            filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params),
25            params:params ]
[133]26    }
[147]27
[298]28    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
[134]29    def search = {
30        redirect(action:list)
31    }
[133]32
[298]33    @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
[133]34    def show = {
[147]35
36        // In the case of an actionSubmit button, rewrite action name from 'index'.
37        if(params._action_Show)
[375]38            params.action='show'
[147]39
[133]40        def taskProcedureInstance = TaskProcedure.get( params.id )
41
42        if(!taskProcedureInstance) {
[770]43            flash.errorMessage = "TaskProcedure not found with id ${params.id}"
44            redirect(controller:'taskDetailed', action:'search')
45            return
[133]46        }
[770]47
48        redirect(controller:'taskDetailed',
49                        action:'show',
50                        id:taskProcedureInstance.linkedTask?.id,
51                        params:[showTab:"showProcedureTab"])
[133]52    }
53
54    def delete = {
55        def taskProcedureInstance = TaskProcedure.get( params.id )
56        if(taskProcedureInstance) {
[770]57            def taskInstance = taskProcedureInstance.linkedTask
[133]58            try {
[758]59                taskProcedureInstance.tasks.each {
60                    it.taskProcedure = null
61                }
[365]62                taskProcedureInstance.delete(flush:true)
[133]63                flash.message = "TaskProcedure ${params.id} deleted"
[770]64                redirect(controller:'taskDetailed',
65                                action:'show',
66                                id:taskInstance.id,
67                                params:[showTab:"showProcedureTab"])
[133]68            }
69            catch(org.springframework.dao.DataIntegrityViolationException e) {
[775]70                flash.errorMessage = "TaskProcedure ${params.id} could not be deleted"
[770]71                redirect(controller:'taskDetailed',
72                                action:'show',
73                                id:taskInstance.id,
74                                params:[showTab:"showProcedureTab"])
[133]75            }
76        }
77        else {
[775]78            flash.errorMessage = "TaskProcedure not found with id ${params.id}"
[133]79            redirect(action:list)
80        }
81    }
82
83    def edit = {
[147]84
85        // In the case of an actionSubmit button, rewrite action name from 'index'.
86        if(params._action_Edit)
[375]87            params.action='edit'
[147]88
[133]89        def taskProcedureInstance = TaskProcedure.get( params.id )
90
91        if(!taskProcedureInstance) {
[775]92            flash.errorMessage = "TaskProcedure not found with id ${params.id}"
[133]93            redirect(action:list)
94        }
95        else {
96            return [ taskProcedureInstance : taskProcedureInstance ]
97        }
98    }
99
100    def update = {
[774]101        def result = taskProcedureService.update(params)
[147]102
[774]103        if(!result.error) {
104            flash.message = g.message(code: "default.update.success", args: ["TaskProcedure", params.id])
105            redirect(controller:'taskDetailed',
106                            action:'show',
107                            id:result.taskProcedureInstance.linkedTask.id,
108                            params:[showTab:"showProcedureTab"])
109            return
110        }
[760]111
[774]112        if(result.error.code == "default.not.found") {
[775]113            flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
[365]114            redirect(action:list)
[774]115            return
[133]116        }
[774]117
[775]118        if(result.error.code == "default.optimistic.locking.failure") {
119            flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
120            redirect(controller:'taskDetailed',
121                            action:'show',
122                            id:result.taskProcedureInstance.linkedTask.id,
123                            params:[showTab:"showProcedureTab"])
124            return
125        }
126
[774]127        render(view:'edit', model:[taskProcedureInstance: result.taskProcedureInstance])
[133]128    }
129
130    def create = {
[147]131
[770]132        if(!params.taskInstance?.id) {
133            flash.errorMessage = "Please select or create a task, then go to the Procedure tab."
[155]134            redirect(controller:"taskDetailed", action:"search")
[770]135            return
[147]136        }
[770]137
138        params.linkedTask = Task.get(params.taskInstance.id)
139
[775]140        // Task already has a taskProcedure.
141        if(params.linkedTask.taskProcedure) {
142            flash.errorMessage = g.message(code: 'default.optimistic.locking.failure')
143            redirect(controller:'taskDetailed',
144                            action:'show',
145                            id:params.linkedTask.id,
146                            params:[showTab:"showProcedureTab"])
147            return
148        }
149
150        // Task does not have a primaryAsset.
[770]151        if(!params.linkedTask?.primaryAsset) {
152            flash.errorMessage = "Please set a Primary Asset first, then go to the Procedure tab."
153            redirect(controller:"taskDetailed", action:"show", id:params.linkedTask?.id)
154            return
155        }
156
157        def taskProcedureInstance = new TaskProcedure()
158        taskProcedureInstance.properties = params
159        return ['taskProcedureInstance':taskProcedureInstance]
[133]160    }
161
162    def save = {
[775]163        def result = taskProcedureService.save(params)
[147]164
[775]165        if(!result.error) {
166            flash.message = g.message(code: "default.create.success", args: ["TaskProcedure", result.taskProcedureInstance.id])
167            redirect(controller:'taskDetailed',
168                            action:'show',
169                            id:result.taskProcedureInstance.linkedTask.id,
170                            params:[showTab:"showProcedureTab"])
171            return
[770]172        }
173
[775]174        if(result.error.code == "default.optimistic.locking.failure") {
175            flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
[770]176            redirect(controller:'taskDetailed',
177                            action:'show',
[775]178                            id:result.taskProcedureInstance.linkedTask.id,
[770]179                            params:[showTab:"showProcedureTab"])
[775]180            return
[133]181        }
[775]182
183        render(view:'create', model:[taskProcedureInstance: result.taskProcedureInstance])
[133]184    }
[770]185
[133]186}
Note: See TracBrowser for help on using the repository browser.