source: trunk/grails-app/controllers/TaskDetailedController.groovy @ 180

Last change on this file since 180 was 180, checked in by gav, 14 years ago

Add support for taskModification audit/change log, the create and update modifications are complete.
Moved create and update of tasks to taskService.
Small Assset domain class adjustment to prevent blank asset name.
Removed "static scope = 'request'" from services since I don't believe it is required and it limits where the service may be used.

File size: 15.9 KB
Line 
1import org.codehaus.groovy.grails.plugins.springsecurity.Secured
2import org.codehaus.groovy.grails.commons.ConfigurationHolder
3
4class TaskDetailedController extends BaseController {
5
6    def authenticateService
7    def dateUtilService
8    def taskService
9    def taskSearchService
10    def filterService
11    def exportService
12
13    // the delete, save and update actions only accept POST requests
14    static allowedMethods = [delete:'POST', save:'POST', update:'POST']
15
16    def index = { redirect(action:search,params:params) }
17
18    def list = {
19        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100 )
20        [ taskInstanceList: Task.list( params ), taskInstanceTotal: Task.count() ]
21    }
22
23    def search = {
24//         println params
25        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100 )
26
27        // Quick Search:
28        if(!params.filter)
29        {
30            def taskInstanceList = []
31            def personInstance = Person.get(authenticateService.userDomain().id)
32
33            if(params.quickSearch == "searchMyTodays") {
34                taskInstanceList = taskSearchService.getMyTodays(params)
35                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks for ${personInstance.firstName} ${personInstance.lastName}." }
36                else { params.message = "No tasks found for today." }
37            }
38            else if(params.quickSearch == "searchInTheLastWeek") {
39                taskInstanceList = taskSearchService.getInTheLastWeek(params)
40                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week." }
41                else { params.message = "No tasks found for today." }
42            }
43            else if(params.quickSearch == "searchMyInTheLastWeek") {
44                taskInstanceList = taskSearchService.getMyInTheLastWeek(params)
45                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week for ${personInstance.firstName} ${personInstance.lastName}." }
46                else { params.message = "No tasks found for today." }
47            }
48            else {
49                //Default:
50                taskInstanceList = taskSearchService.getTodays(params)
51                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks." }
52                else { params.message = "No tasks found for today." }
53                params.quickSearch = "searchTodays"
54            }
55            return[taskInstanceList: taskInstanceList, taskInstanceTotal: taskInstanceList.totalCount, filterParams: params]
56        }
57        // filterPane:
58        return[ taskInstanceList: filterService.filter( params, Task ),
59            taskInstanceTotal: filterService.count( params, Task ),
60            filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params),
61            params:params ]
62    }
63
64    def searchCalendar = {
65//         println params
66        params.max = 30
67
68        // Quick Search:
69        if(!params.filter)
70        {
71            def taskInstanceList = []
72            def personInstance = Person.get(authenticateService.userDomain().id)
73
74            if(params.quickSearch == "searchMyTodays") {
75                taskInstanceList = taskSearchService.getMyTodays(params)
76                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks for ${personInstance.firstName} ${personInstance.lastName}." }
77                else { params.message = "No tasks found for today." }
78                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
79            }
80            else if(params.quickSearch == "searchInTheLastWeek") {
81                taskInstanceList = taskSearchService.getInTheLastWeek(params)
82                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week." }
83                else { params.message = "No tasks found for today." }
84                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
85            }
86            else if(params.quickSearch == "searchMyInTheLastWeek") {
87                taskInstanceList = taskSearchService.getMyInTheLastWeek(params)
88                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week for ${personInstance.firstName} ${personInstance.lastName}." }
89                else { params.message = "No tasks found for today." }
90                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
91            }
92            else {
93                //Default:
94                taskInstanceList = taskSearchService.getTodays(params)
95                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks." }
96                else { params.message = "No tasks found for today." }
97                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
98                params.quickSearch = "searchTodays"
99            }
100            return[taskInstanceList: taskInstanceList, taskInstanceTotal: taskInstanceList.totalCount, filterParams: params]
101        }
102        // filterPane:
103        def taskInstanceTotal = filterService.count( params, Task )
104        if(taskInstanceTotal > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
105        return[ taskInstanceList: filterService.filter( params, Task ),
106            taskInstanceTotal: taskInstanceTotal,
107            filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params),
108            params:params ]
109    }
110
111    def budget = {
112//         println params
113        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100 )
114
115        // Quick Search:
116        if(!params.filter)
117        {
118            def taskInstanceList = []
119            def personInstance = Person.get(authenticateService.userDomain().id)
120
121            if(params.quickSearch == "budgetUnplanned") {
122                taskInstanceList = taskSearchService.getBudgetUnplanned(params)
123                if(taskInstanceList.totalCount > 0) { params.message = "Budget unplanned tasks in the last week." }
124                else { params.message = "No tasks found." }
125            }
126            //else if(params.quickSearch == "budgetPlanned") {
127            else {
128                //Default:
129                taskInstanceList = taskSearchService.getBudgetPlanned(params)
130                if(taskInstanceList.totalCount > 0) { params.message = "Budget planned Tasks in the last week." }
131                else { params.message = "No tasks found.." }
132            }
133            // export plugin:
134            if(params?.format && params.format != "html") {
135                response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]
136                response.setHeader("Content-disposition", "attachment; filename=tasks.${params.extension}")
137                List fields = ["id", "targetStartDate", "description", "leadPerson", "taskStatus", "taskType"]
138                Map labels = ["id": "ID", "targetStartDate": "Target Start Date", "description": "Description",
139                                        "leadPerson": "Lead Person", "taskStatus": "Task Status", "taskType": "Task Type"]
140                Map formatters = [:]
141                String title = "${params.quickSearch} tasks in the last week."
142                Map parameters = [title: title]
143
144                exportService.export(params.format, response.outputStream, taskInstanceList, fields, labels, formatters, parameters) 
145            }
146            return[taskInstanceList: taskInstanceList, taskInstanceTotal: taskInstanceList.totalCount, filterParams: params]
147        }
148        // filterPane:
149        return[ taskInstanceList: filterService.filter( params, Task ),
150            taskInstanceTotal: filterService.count( params, Task ),
151            filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params),
152            params:params ]
153    }
154
155    def show = {
156
157        // In the case of an actionSubmit button, rewrite action name from 'index'.
158        if(params._action_Show)
159        { params.action='show' }
160
161        def taskInstance = Task.get( params.id )
162
163        if(!taskInstance) {
164            flash.message = "Task not found with id ${params.id}"
165            redirect(action:search)
166        }
167        else {
168            params.max = 10
169            params.order = "desc"
170            params.sort = "id"
171
172            def entryWorkDoneList = Entry.withCriteria {
173                                                                def entryType = EntryType.findByName("WorkDone")
174                                                                eq("entryType", entryType)
175                                                                eq("task", taskInstance)
176                                                        }
177
178            def entryFaultList = Entry.withCriteria {
179                                                                def entryType = EntryType.findByName("Fault")
180                                                                eq("entryType", entryType)
181                                                                eq("task", taskInstance)
182                                                        }
183
184            def subTaskInstanceList = Task.findAllByParentTask(taskInstance, params)
185            def subTaskInstanceTotal = Task.countByParentTask(taskInstance)
186            def showTaskTab = new String("true")
187
188            def inventoryMovementList = InventoryMovement.findAllByTask(taskInstance, [max:100, sort:"id", order:"desc", offset:0])
189
190            def taskModificationList = TaskModification.findAllByTask(taskInstance, [max:100, sort:"id", order:"asc", offset:0])
191
192            def taskProcedureInstance = TaskProcedure.get(taskInstance.taskProcedure?.id)
193            def taskProcedureExits = new Boolean("true")
194            if(!taskProcedureInstance) {
195                taskProcedureExits = false
196            }
197
198            params.order = "asc"
199            params.sort = "procedureStepNumber"
200            def maintenanceActionList = MaintenanceAction.findAllByTaskProcedure(taskProcedureInstance, params)
201
202            def taskRecurringScheduleInstance = TaskRecurringSchedule.get(taskInstance.taskRecurringSchedule?.id)
203            def taskRecurringScheduleExits= new Boolean("true")
204            if(!taskRecurringScheduleInstance) {
205                taskRecurringScheduleExits = false
206            }
207
208            return [ taskInstance: taskInstance,
209                            entryWorkDoneList: entryWorkDoneList,
210                            entryFaultList: entryFaultList,
211                            taskProcedureInstance: taskProcedureInstance,
212                            taskProcedureExits: taskProcedureExits,
213                            showTaskTab: showTaskTab,
214                            subTaskInstanceList: subTaskInstanceList,
215                            subTaskInstanceTotal: subTaskInstanceTotal,
216                            subTaskInstanceMax: params.max,
217                            maintenanceActionList: maintenanceActionList,
218                            taskRecurringScheduleInstance: taskRecurringScheduleInstance,
219                            taskRecurringScheduleExits: taskRecurringScheduleExits,
220                            inventoryMovementList: inventoryMovementList,
221                            taskModificationList: taskModificationList]
222        }
223    }
224
225    def delete = {
226        def taskInstance = Task.get( params.id )
227        if(taskInstance) {
228            try {
229                taskInstance.isActive = false
230                flash.message = "Task ${params.id} has been set to inactive."
231                redirect(action:search)
232            }
233            catch(org.springframework.dao.DataIntegrityViolationException e) {
234                flash.message = "Task ${params.id} could not be deleted"
235                redirect(action:show,id:params.id)
236            }
237        }
238        else {
239            flash.message = "Task not found with id ${params.id}"
240            redirect(action:search)
241        }
242    }
243
244    def edit = {
245
246        // In the case of an actionSubmit button, rewrite action name from 'index'.
247        if(params._action_Edit)
248        { params.action='edit' }
249
250        def taskInstance = Task.get( params.id )
251
252        if(!taskInstance) {
253            flash.message = "Task not found with id ${params.id}"
254            redirect(action:search)
255        }
256        else {
257            def criteria = taskInstance.createCriteria()
258            def possibleParentList = criteria {
259                and {
260                    notEqual('id', taskInstance.id)
261                    taskInstance.subTasks.each() { notEqual('id', it.id) }
262                    }
263            }
264            return [ taskInstance : taskInstance, possibleParentList: possibleParentList ]
265        }
266    }
267
268    def update = {
269
270        if(!Task.exists(params.id)) {
271            flash.message = "Task not found with id ${params.id}"
272            redirect(action:'search')
273        }
274
275        def result = taskService.update(params)
276
277        if(!result.error) {
278                flash.message = "Task ${params.id} updated"
279                redirect(action:show,id:result.taskInstance.id)
280        }
281        else {
282            if(result.taskInstance) {
283                render(view:'edit',model:[taskInstance:result.taskInstance])
284            }
285            else {
286                flash.message = "Task could not be updated."
287                redirect(action:'search')
288            }
289        }
290
291    }
292
293//     def update = {
294//         def taskInstance = Task.get( params.id )
295//         if(taskInstance) {
296//             if(params.version) {
297//                 def version = params.version.toLong()
298//                 if(taskInstance.version > version) {
299//
300//                     taskInstance.errors.rejectValue("version", "task.optimistic.locking.failure", "Another user has updated this Task while you were editing.")
301//                     render(view:'edit',model:[taskInstance:taskInstance])
302//                     return
303//                 }
304//             }
305//             taskInstance.properties = params
306//             if(!taskInstance.hasErrors() && taskInstance.save(flush: true)) {
307//                 flash.message = "Task ${params.id} updated"
308//                 redirect(action:show,id:taskInstance.id)
309//             }
310//             else {
311//                 render(view:'edit',model:[taskInstance:taskInstance])
312//             }
313//         }
314//         else {
315//             flash.message = "Task not found with id ${params.id}"
316//             redirect(action:edit,id:params.id)
317//         }
318//     }
319
320    def create = {
321        def taskInstance = new Task()
322        taskInstance.properties = params
323        return ['taskInstance':taskInstance]
324    }
325
326    def save = {
327        def result = taskService.create(params)
328
329        if(!result.error) {
330            flash.message = "Task ${result.taskInstance.id} created."
331            redirect(action: show,id: result.taskInstance.id)
332        }
333        else {
334            if(result.taskInstance) {
335                render(view:'create',model:[taskInstance:result.taskInstance])
336            }
337            else {
338                flash.message = "Could not create task."
339                redirect(action:"search")
340            }
341
342        }
343    }
344
345    def listSubTasks = {
346        def parentTaskInstance = Task.get(params.id)
347
348        if(!parentTaskInstance) {
349            flash.message = "Task not found with id ${params.id}"
350            redirect(action:search)
351        }
352        else {
353        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
354        def subTaskInstanceList = Task.findAllByParentTask(parentTaskInstance, params)
355        def subTaskInstanceTotal = Task.countByParentTask(parentTaskInstance)
356
357        [ taskInstanceList: subTaskInstanceList,
358            taskInstanceTotal:  subTaskInstanceTotal,
359            parentTaskInstance: parentTaskInstance]
360        }
361    }
362
363}
Note: See TracBrowser for help on using the repository browser.