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

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

AJAX PM Entry, first draft.

File size: 5.6 KB
RevLine 
[91]1import org.codehaus.groovy.grails.plugins.springsecurity.Secured
2
[298]3@Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_TaskManager', 'ROLE_TaskUser'])
[91]4class EntryDetailedController extends BaseController {
5
[291]6    def authService
[186]7    def taskService
[147]8
[91]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}"
[186]24            redirect(controller: 'taskDetailed', action: 'search')
[91]25        }
26        else { return [ entryInstance : entryInstance ] }
27    }
28
29    def delete = {
30        def entryInstance = Entry.get( params.id )
31        if(entryInstance) {
[291]32            if(entryInstance.enteredBy.loginName == authService.currentUser.loginName) {
[185]33                def taskID = entryInstance.task.id
34                entryInstance.delete(flush:true)
[98]35                flash.message = "Entry ${params.id} deleted"
[185]36                redirect(controller: 'taskDetailed', action: 'show', id: taskID)
[98]37            }
38            else {
39                flash.message = "You may only delete your own entries."
40                redirect(action:show,id:entryInstance.id)
41            }
42
[91]43        }
44        else {
45            flash.message = "Entry not found with id ${params.id}"
[186]46            redirect(controller: "taskDetailed", action:"search")
[91]47        }
48    }
49
50    def edit = {
51        def entryInstance = Entry.get( params.id )
52        if(!entryInstance) {
[98]53                flash.message = "Entry not found with id ${params.id}"
[186]54                redirect(controller: "taskDetailed", action:"search")
[91]55        }
56        else {
[98]57
[291]58            if(entryInstance.enteredBy.loginName == authService.currentUser.loginName) {
[98]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
[91]66        }
67    }
68
69    def update = {
70        def entryInstance = Entry.get( params.id )
71        if(entryInstance) {
[185]72            // The update method only accepts post requests, so this is just in case.
[291]73            if(entryInstance.enteredBy.loginName == authService.currentUser.loginName) {
[185]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                }
[91]82            }
83            else {
[185]84                flash.message = "You may only edit your own entries."
85                redirect(action:show,id:entryInstance.id)
[91]86            }
87        }
88        else {
89            flash.message = "Entry not found with id ${params.id}"
[186]90            redirect(controller: "taskDetailed", action:"search")
[91]91        }
92    }
93
[826]94    def ajaxCreate = {
95        if(!params.taskId || !params.entryTypeId) {
96            flash.message = g.message(code:"entry.create.no.params")
97            redirect(controller:"taskDetailed", action:"search")
98            return
99        }
[822]100
[826]101        def taskInstance = Task.read(params.taskId)
[822]102
[826]103        if(!taskInstance) {
104            flash.message = g.message(code:"task.notFound")
105            redirect(controller:"taskDetailed", action:"search")
106            return
107        }
108
109        // Check for Complete task.
110        if(taskInstance.taskStatus.id == 3) {
111            flash.errorMessage = g.message(code:"task.operationNotPermittedOnCompleteTask")
112            redirect(controller:"taskDetailed", action:"show", id: taskInstance.id)
113            return
114        }
115
116        def entryInstance = new Entry()
117        entryInstance.task = taskInstance
118        entryInstance.entryType = EntryType.read(params.entryTypeId)
119        render(template: "create", model: ['entryInstance': entryInstance])
[822]120    }
121
[91]122    def create = {
[482]123        if(!params.taskInstance?.id || !params.entryType?.id) {
124            flash.message = g.message(code:"entry.create.no.params")
125            redirect(controller:"taskDetailed", action:"search")
126            return
[98]127        }
[482]128
129        def taskInstance = Task.read(params.taskInstance.id)
130
131        if(!taskInstance) {
132            flash.message = g.message(code:"task.notFound")
[186]133            redirect(controller:"taskDetailed", action:"search")
[482]134            return
[98]135        }
[91]136
[482]137        // Check for Complete task.
138        if(taskInstance.taskStatus.id == 3) {
139            flash.errorMessage = g.message(code:"task.operationNotPermittedOnCompleteTask")
140            redirect(controller:"taskDetailed", action:"show", id: taskInstance.id)
141            return
142        }
143
144        def entryInstance = new Entry()
145        entryInstance.task = taskInstance
146        entryInstance.entryType = EntryType.read(params.entryType.id)
147        return ['entryInstance': entryInstance]
148    } // create
149
[91]150    def save = {
[394]151        def result = taskService.saveEntry(params)
[91]152
[186]153        if(!result.error) {
154            flash.message = "Entry created."
155            redirect(controller: "taskDetailed", action: "show", id: result.taskId)
[482]156            return
[91]157        }
[186]158
[482]159        if(result.error.code != "default.create.failure") {
160            params.errorMessage = g.message(code: result.error.code)
[91]161        }
[186]162
[482]163        render(view:'create',model:[entryInstance: result.entryInstance])
164    } // save
165
166} // end class
Note: See TracBrowser for help on using the repository browser.