source: trunk/grails-app/controllers/TaskRecurringScheduleDetailedController.groovy @ 136

Last change on this file since 136 was 136, checked in by gav, 15 years ago

Work on TaskRecurringSchedule?.

File size: 6.4 KB
Line 
1import org.codehaus.groovy.grails.plugins.springsecurity.Secured
2import org.codehaus.groovy.runtime.TimeCategory
3
4class TaskRecurringScheduleDetailedController extends BaseController {
5   
6    def index = { redirect(action:list,params:params) }
7
8    // the delete, save and update actions only accept POST requests
9    static allowedMethods = [delete:'POST', save:'POST', update:'POST']
10
11    def list = {
12        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
13        [ taskRecurringScheduleInstanceList: TaskRecurringSchedule.list( params ), taskRecurringScheduleInstanceTotal: TaskRecurringSchedule.count() ]
14    }
15
16    def show = {
17        def taskRecurringScheduleInstance = TaskRecurringSchedule.get( params.id )
18
19        if(!taskRecurringScheduleInstance) {
20            flash.message = "TaskRecurringSchedule not found with id ${params.id}"
21            redirect(action:list)
22        }
23        else { return [ taskRecurringScheduleInstance : taskRecurringScheduleInstance ] }
24    }
25
26    def delete = {
27        def taskRecurringScheduleInstance = TaskRecurringSchedule.get( params.id )
28        if(taskRecurringScheduleInstance) {
29            try {
30                taskRecurringScheduleInstance.delete()
31                flash.message = "TaskRecurringSchedule ${params.id} deleted"
32                redirect(action:list)
33            }
34            catch(org.springframework.dao.DataIntegrityViolationException e) {
35                flash.message = "TaskRecurringSchedule ${params.id} could not be deleted"
36                redirect(action:show,id:params.id)
37            }
38        }
39        else {
40            flash.message = "TaskRecurringSchedule not found with id ${params.id}"
41            redirect(action:list)
42        }
43    }
44
45    def edit = {
46        def taskRecurringScheduleInstance = TaskRecurringSchedule.get( params.id )
47
48        if(!taskRecurringScheduleInstance) {
49            flash.message = "TaskRecurringSchedule not found with id ${params.id}"
50            redirect(action:list)
51        }
52        else {
53            return [ taskRecurringScheduleInstance : taskRecurringScheduleInstance ]
54        }
55    }
56
57    def update = {
58        def taskRecurringScheduleInstance = TaskRecurringSchedule.get( params.id )
59        if(taskRecurringScheduleInstance) {
60            if(params.version) {
61                def version = params.version.toLong()
62                if(taskRecurringScheduleInstance.version > version) {
63                   
64                    taskRecurringScheduleInstance.errors.rejectValue("version", "taskRecurringSchedule.optimistic.locking.failure", "Another user has updated this TaskRecurringSchedule while you were editing.")
65                    render(view:'edit',model:[taskRecurringScheduleInstance:taskRecurringScheduleInstance])
66                    return
67                }
68            }
69//             taskRecurringScheduleInstance.properties = params
70            setUpdateProperties()
71                   
72            if(!taskRecurringScheduleInstance.hasErrors() && taskRecurringScheduleInstance.save()) {
73                flash.message = "TaskRecurringSchedule ${params.id} updated"
74                redirect(action:show,id:taskRecurringScheduleInstance.id)
75            }
76            else {
77                render(view:'edit',model:[taskRecurringScheduleInstance:taskRecurringScheduleInstance])
78            }
79        }
80        else {
81            flash.message = "TaskRecurringSchedule not found with id ${params.id}"
82            redirect(action:edit,id:params.id)
83        }
84    }
85       
86    def create = {
87        try {
88            def taskInstance = Task.get(params.taskInstance.id)
89                        def taskRecurringScheduleInstance = new TaskRecurringSchedule()
90            taskRecurringScheduleInstance.task = taskInstance
91            return [taskRecurringScheduleInstance: taskRecurringScheduleInstance]
92        }
93        catch(Exception e) {
94            flash.message = "Please select a task, then Create a Recurring Schedule for it"
95            redirect(controller:"taskDetailed", action:"list")
96        }
97    }
98
99    def save = {
100        def taskRecurringScheduleInstance = new TaskRecurringSchedule(params)
101                def taskInstance = Task.get(params.task.id)
102                               
103                if(taskInstance.taskRecurringSchedule) {
104                        flash.message = "This task already has a recurring schedule"
105                        redirect(controller:"taskDetailed", action:"show", id: params.task.id)
106                }
107                else {
108                       
109                        if(!taskRecurringScheduleInstance.hasErrors() && taskRecurringScheduleInstance.save()) {
110                               
111                                taskInstance.taskRecurringSchedule = taskRecurringScheduleInstance
112                                               
113                                if(taskInstance.save()) {
114                                        flash.message = "TaskRecurringSchedule ${taskRecurringScheduleInstance.id} created"
115                                        redirect(action:show,id:taskRecurringScheduleInstance.id)
116                                }
117                                else {
118                                        flash.message = "Task could not be saved and therefore the Recurring Schedule has been disgarded, cause unknown."                               
119                                        render(view:'create',model:[taskRecurringScheduleInstance:taskRecurringScheduleInstance])
120                                }
121                        }
122                        else {
123                                render(view:'create',model:[taskRecurringScheduleInstance:taskRecurringScheduleInstance])
124                        }
125                }
126
127    }
128               
129    private setUpdateProperties() {
130        def originalStartDate = taskRecurringScheduleInstance.startDate
131       
132        if(taskRecurringScheduleInstance.startDate == params.startDate) {
133            taskRecurringScheduleInstance.properties = params
134        }
135        else {
136            taskRecurringScheduleInstance.properties = params
137            taskRecurringScheduleInstance.nextTargetStartDate = params.startDate
138        }
139       
140    }
141
142/*   
143    private Date calculateNextDueDate(recurEvery, period, startDate) {
144        def nextDue = new Date()
145       
146        switch (period) {
147            case "Day(s)":
148                use(TimeCategory) {
149                    nextDue = startDate + recurEvery.days
150                }
151                return nextDue
152            case "Week(s)":
153                use(TimeCategory) {
154                    nextDue = startDate + recurEvery.weeks
155                }
156                return nextDue
157            case "Month(s)":
158                use(TimeCategory) {
159                    nextDue = startDate + recurEvery.months
160                }
161                return nextDue
162            case "Year(s)":
163                use(TimeCategory) {
164                    nextDue = startDate + recurEvery.years
165                }
166                return nextDue
167            default:
168                return nextDue
169        }
170       
171    }*/
172}
Note: See TracBrowser for help on using the repository browser.