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

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

Protect taskRecurringSchedule from creating if one already exists.
Turn some taskInstance text into links.
Work on taskRecurringSchedule detail and creation.

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