source: trunk/grails-app/controllers/EntryDetailedController.groovy @ 833

Last change on this file since 833 was 833, checked in by gav, 9 years ago

AJAX Work Done and PM Entry, second draft.

File size: 6.7 KB
Line 
1import org.codehaus.groovy.grails.plugins.springsecurity.Secured
2
3@Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
4class EntryDetailedController extends BaseController {
5
6    def authService
7    def taskService
8
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
14    def list = {
15        if(!params.max) params.max = 10
16        [ entryInstanceList: Entry.list( params ) ]
17    }
18
19    def show = {
20        def entryInstance = Entry.get( params.id )
21
22        if(!entryInstance) {
23            flash.message = "Entry not found with id ${params.id}"
24            redirect(controller: 'taskDetailed', action: 'search')
25        }
26        else { return [ entryInstance : entryInstance ] }
27    }
28
29    def delete = {
30        def entryInstance = Entry.get( params.id )
31        if(entryInstance) {
32            if(entryInstance.enteredBy.loginName == authService.currentUser.loginName) {
33                def taskId = entryInstance.task.id
34                entryInstance.delete(flush:true)
35                flash.message = "Entry ${params.id} deleted"
36                redirect(controller: 'taskDetailed', action: 'show', id: taskId)
37            }
38            else {
39                flash.message = "You may only delete your own entries."
40                redirect(action:show,id:entryInstance.id)
41            }
42
43        }
44        else {
45            flash.message = "Entry not found with id ${params.id}"
46            redirect(controller: "taskDetailed", action:"search")
47        }
48    }
49
50    def edit = {
51        def entryInstance = Entry.get( params.id )
52        if(!entryInstance) {
53                flash.message = "Entry not found with id ${params.id}"
54                redirect(controller: "taskDetailed", action:"search")
55        }
56        else {
57
58            if(entryInstance.enteredBy.loginName == authService.currentUser.loginName) {
59                return [ entryInstance : entryInstance ]
60            }
61            else {
62                flash.message = "You may only edit your own entries."
63                redirect(action:show,id:entryInstance.id)
64            }
65
66        }
67    }
68
69    def update = {
70        def entryInstance = Entry.get( params.id )
71        if(entryInstance) {
72            // The update method only accepts post requests, so this is just in case.
73            if(entryInstance.enteredBy.loginName == authService.currentUser.loginName) {
74                entryInstance.properties = params
75                if(!entryInstance.hasErrors() && entryInstance.save(flush: true)) {
76                    flash.message = "Entry ${params.id} updated"
77                    redirect(action:show,id:entryInstance.id)
78                }
79                else {
80                    render(view:'edit',model:[entryInstance:entryInstance])
81                }
82            }
83            else {
84                flash.message = "You may only edit your own entries."
85                redirect(action:show,id:entryInstance.id)
86            }
87        }
88        else {
89            flash.message = "Entry not found with id ${params.id}"
90            redirect(controller: "taskDetailed", action:"search")
91        }
92    }
93
94    def ajaxCreate = {
95        if(!params.taskId || !params.entryTypeId) {
96            response.status = 403
97            params.errorMessage = g.message(code: "entry.create.no.params.ajax")
98            render(template: "/shared/messages")
99            return
100        }
101
102        def taskInstance = Task.read(params.taskId)
103
104        if(!taskInstance) {
105            response.status = 403
106            params.errorMessage = g.message(code:"default.not.found", args:['Task',params.taskId])
107            render(template: "/shared/messages")
108            return
109        }
110
111        // Check for Complete task.
112        if(taskInstance.taskStatus.id == 3) {
113            response.status = 403
114            params.errorMessage = g.message(code:"task.operationNotPermittedOnCompleteTask")
115            render(template: "/shared/messages")
116            return
117        }
118
119        // Success.
120        def entryInstance = new Entry()
121        entryInstance.task = taskInstance
122        entryInstance.entryType = EntryType.read(params.entryTypeId)
123        render(template: "create", model: ['entryInstance': entryInstance])
124    }
125
126    def ajaxSave = {
127        def result = taskService.saveEntry(params)
128
129        // Success.
130        if(!result.error) {
131            def entryList = Entry.withCriteria {
132                                                                eq("entryType", result.entryInstance.entryType)
133                                                                task {
134                                                                    idEq(result.taskId)
135                                                                }
136                                                        }
137            render(template: "list", model: ['entryList': entryList])
138            return
139        }
140
141        if(result.error.code != "default.create.failure") {
142            response.status = 403
143            params.errorMessage = g.message(code: result.error.code)
144            render(template: "/shared/messages")
145            return
146        }
147
148        response.status = 403
149        render(template: "create", model: ['entryInstance': result.entryInstance])
150    } // ajaxSave
151
152    def create = {
153        if(!params.taskInstance?.id || !params.entryType?.id) {
154            flash.message = g.message(code:"entry.create.no.params")
155            redirect(controller:"taskDetailed", action:"search")
156            return
157        }
158
159        def taskInstance = Task.read(params.taskInstance.id)
160
161        if(!taskInstance) {
162            flash.message = g.message(code:"task.notFound")
163            redirect(controller:"taskDetailed", action:"search")
164            return
165        }
166
167        // Check for Complete task.
168        if(taskInstance.taskStatus.id == 3) {
169            flash.errorMessage = g.message(code:"task.operationNotPermittedOnCompleteTask")
170            redirect(controller:"taskDetailed", action:"show", id: taskInstance.id)
171            return
172        }
173
174        def entryInstance = new Entry()
175        entryInstance.task = taskInstance
176        entryInstance.entryType = EntryType.read(params.entryType.id)
177        return ['entryInstance': entryInstance]
178    } // create
179
180    def save = {
181        def result = taskService.saveEntry(params)
182
183        if(!result.error) {
184            flash.message = "Entry created."
185            redirect(controller: "taskDetailed", action: "show", id: result.taskId)
186            return
187        }
188
189        if(result.error.code != "default.create.failure") {
190            params.errorMessage = g.message(code: result.error.code)
191        }
192
193        render(view:'create',model:[entryInstance: result.entryInstance])
194    } // save
195
196} // end class
Note: See TracBrowser for help on using the repository browser.