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

Last change on this file since 214 was 214, checked in by gav, 10 years ago

Clicking on a searchCalendar day allows user to create a task with that day preset as targetStartDate.

File size: 19.4 KB
Line 
1import org.codehaus.groovy.grails.plugins.springsecurity.Secured
2import org.codehaus.groovy.grails.commons.ConfigurationHolder
3import com.zeddware.grails.plugins.filterpane.FilterUtils
4
5class TaskDetailedController extends BaseController {
6
7    def personService
8    def taskService
9    def taskSearchService
10    def filterService
11    def exportService
12    def dateUtilService
13
14    // these actions only accept POST requests
15    static allowedMethods = [save:'POST', update:'POST', restore:'POST', trash:'POST', approve:'POST', renegeApproval:'POST', complete:'POST', reopen:'POST']
16
17    def index = { redirect(action: 'search', params: params) }
18
19    def list = {
20        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100 )
21        [ taskInstanceList: Task.list( params ), taskInstanceTotal: Task.count() ]
22    }
23
24    def search = {
25        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100 )
26
27        // Quick Search:
28        if(!FilterUtils.isFilterApplied(params)) {
29            def taskInstanceList = []
30            def personInstance = personService.currentUser()
31
32            if(params.quickSearch == "searchMyTodays") {
33                taskInstanceList = taskSearchService.getMyTodays(params)
34                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks for ${personInstance.firstName} ${personInstance.lastName}." }
35                else { params.message = "No tasks found for today." }
36            }
37            else if(params.quickSearch == "searchInTheLastWeek") {
38                taskInstanceList = taskSearchService.getInTheLastWeek(params)
39                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week." }
40                else { params.message = "No tasks found for the last week." }
41            }
42            else if(params.quickSearch == "searchMyInTheLastWeek") {
43                taskInstanceList = taskSearchService.getMyInTheLastWeek(params)
44                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week for ${personInstance.firstName} ${personInstance.lastName}." }
45                else { params.message = "No tasks found for the last week." }
46            }
47            else {
48                //Default:
49                taskInstanceList = taskSearchService.getTodays(params)
50                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks." }
51                else { params.message = "No tasks found for today." }
52                params.quickSearch = "searchTodays"
53            }
54            return[taskInstanceList: taskInstanceList, taskInstanceTotal: taskInstanceList.totalCount, filterParams: params]
55        }
56        // filterPane:
57        return[ taskInstanceList: filterService.filter( params, Task ),
58            taskInstanceTotal: filterService.count( params, Task ),
59            filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params),
60            params:params ]
61    }
62
63    def searchCalendar = {
64        params.max = 30
65
66        // Quick Search:
67        if(!FilterUtils.isFilterApplied(params)) {
68            def taskInstanceList = []
69            def personInstance = personService.currentUser()
70
71            if(params.quickSearch == "searchMyTodays") {
72                taskInstanceList = taskSearchService.getMyTodays(params)
73                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks for ${personInstance.firstName} ${personInstance.lastName}." }
74                else { params.message = "No tasks found for today." }
75                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
76            }
77            else if(params.quickSearch == "searchInTheLastWeek") {
78                taskInstanceList = taskSearchService.getInTheLastWeek(params)
79                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week." }
80                else { params.message = "No tasks found for the last week." }
81                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
82            }
83            else if(params.quickSearch == "searchMyInTheLastWeek") {
84                taskInstanceList = taskSearchService.getMyInTheLastWeek(params)
85                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week for ${personInstance.firstName} ${personInstance.lastName}." }
86                else { params.message = "No tasks found for the last week." }
87                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
88            }
89            else {
90                //Default:
91                taskInstanceList = taskSearchService.getTodays(params)
92                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks." }
93                else { params.message = "No tasks found for today." }
94                if(taskInstanceList.totalCount > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
95                params.quickSearch = "searchTodays"
96            }
97            return[taskInstanceList: taskInstanceList, taskInstanceTotal: taskInstanceList.totalCount, filterParams: params]
98        }
99        // filterPane:
100        def taskInstanceTotal = filterService.count( params, Task )
101        if(taskInstanceTotal > params.max) { params.message = "Too many results, only the first ${params.max} shown" }
102        return[ taskInstanceList: filterService.filter( params, Task ),
103            taskInstanceTotal: taskInstanceTotal,
104            filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params),
105            params:params ]
106    }
107
108    def budget = {
109        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100 )
110
111        // Quick Search:
112        if(!FilterUtils.isFilterApplied(params)) {
113            def taskInstanceList = []
114            def personInstance = personService.currentUser()
115
116            if(params.quickSearch == "budgetUnplanned") {
117                taskInstanceList = taskSearchService.getBudgetUnplanned(params)
118                if(taskInstanceList.totalCount > 0) { params.message = "Budget unplanned tasks in the last week." }
119                else { params.message = "No tasks found." }
120            }
121            //else if(params.quickSearch == "budgetPlanned") {
122            else {
123                //Default:
124                taskInstanceList = taskSearchService.getBudgetPlanned(params)
125                if(taskInstanceList.totalCount > 0) { params.message = "Budget planned Tasks in the last week." }
126                else { params.message = "No tasks found.." }
127            }
128            // export plugin:
129            if(params?.format && params.format != "html") {
130                response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]
131                response.setHeader("Content-disposition", "attachment; filename=tasks.${params.extension}")
132                List fields = ["id", "targetStartDate", "description", "leadPerson", "taskStatus", "taskType"]
133                Map labels = ["id": "ID", "targetStartDate": "Target Start Date", "description": "Description",
134                                        "leadPerson": "Lead Person", "taskStatus": "Task Status", "taskType": "Task Type"]
135                Map formatters = [:]
136                String title = "${params.quickSearch} tasks in the last week."
137                Map parameters = [title: title]
138
139                exportService.export(params.format, response.outputStream, taskInstanceList, fields, labels, formatters, parameters) 
140            }
141            return[taskInstanceList: taskInstanceList, taskInstanceTotal: taskInstanceList.totalCount, filterParams: params]
142        }
143        // filterPane:
144        return[ taskInstanceList: filterService.filter( params, Task ),
145            taskInstanceTotal: filterService.count( params, Task ),
146            filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params),
147            params:params ]
148    }
149
150    def show = {
151
152        // In the case of an actionSubmit button, rewrite action name from 'index'.
153        if(params._action_Show)
154        { params.action='show' }
155
156        def taskInstance = Task.get( params.id )
157
158        if(!taskInstance) {
159            flash.message = "Task not found with id ${params.id}"
160            redirect(action: 'search')
161        }
162        else {
163            params.max = 10
164            params.order = "desc"
165            params.sort = "id"
166
167            def entryWorkDoneList = Entry.withCriteria {
168                                                                eq("entryType", EntryType.get(2))
169                                                                eq("task", taskInstance)
170                                                        }
171
172            def entryFaultList = Entry.withCriteria {
173                                                                eq("entryType", EntryType.get(1))
174                                                                eq("task", taskInstance)
175                                                        }
176
177            def subTaskInstanceList = Task.findAllByParentTaskAndTrash(taskInstance, false, params)
178            def subTaskInstanceTotal = Task.countByParentTaskAndTrash(taskInstance, false)
179            def showTaskTab = new String("true")
180
181            def inventoryMovementList = InventoryMovement.findAllByTask(taskInstance, [max:100, sort:"id", order:"desc", offset:0])
182
183            def taskModificationList = TaskModification.findAllByTask(taskInstance, [max:100, sort:"id", order:"asc", offset:0])
184
185            def taskProcedureInstance = TaskProcedure.get(taskInstance.taskProcedure?.id)
186            def taskProcedureExits = new Boolean("true")
187            if(!taskProcedureInstance) {
188                taskProcedureExits = false
189            }
190
191            params.order = "asc"
192            params.sort = "procedureStepNumber"
193            def maintenanceActionList = MaintenanceAction.findAllByTaskProcedure(taskProcedureInstance, params)
194
195            def taskRecurringScheduleInstance = TaskRecurringSchedule.get(taskInstance.taskRecurringSchedule?.id)
196            def taskRecurringScheduleExits= new Boolean("true")
197            if(!taskRecurringScheduleInstance) {
198                taskRecurringScheduleExits = false
199            }
200
201            return [ taskInstance: taskInstance,
202                            entryWorkDoneList: entryWorkDoneList,
203                            entryFaultList: entryFaultList,
204                            taskProcedureInstance: taskProcedureInstance,
205                            taskProcedureExits: taskProcedureExits,
206                            showTaskTab: showTaskTab,
207                            subTaskInstanceList: subTaskInstanceList,
208                            subTaskInstanceTotal: subTaskInstanceTotal,
209                            subTaskInstanceMax: params.max,
210                            maintenanceActionList: maintenanceActionList,
211                            taskRecurringScheduleInstance: taskRecurringScheduleInstance,
212                            taskRecurringScheduleExits: taskRecurringScheduleExits,
213                            inventoryMovementList: inventoryMovementList,
214                            taskModificationList: taskModificationList]
215        }
216    }
217
218    def restore = {
219
220        if(!Task.exists(params.id)) {
221            flash.message = "Task not found with id ${params.id}"
222            redirect(action: 'search')
223        }
224
225        def result = taskService.restore(params)
226
227        if(!result.error) {
228                flash.message = "Task ${params.id} has been restored."
229                redirect(action: 'show', id: result.taskInstance.id)
230        }
231        else {
232            if(result.taskInstance) {
233                render(view:'edit',model:[taskInstance:result.taskInstance])
234            }
235            else {
236                flash.message = "Task could not be updated."
237                redirect(action: 'search')
238            }
239        }
240
241    }
242
243    def trash = {
244
245        if(!Task.exists(params.id)) {
246            flash.message = "Task not found with id ${params.id}."
247            redirect(action: 'search')
248        }
249
250        def result = taskService.trash(params)
251
252        if(!result.error) {
253                flash.message = "Task ${params.id} has been moved to trash."
254                redirect(action: 'search')
255        }
256        else {
257            if(result.taskInstance) {
258                render(view:'edit',model:[taskInstance:result.taskInstance])
259            }
260            else {
261                flash.message = "Task could not be updated."
262                redirect(action: 'search')
263            }
264        }
265
266    }
267
268    def approve = {
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.approve(params)
276
277        if(!result.error) {
278                flash.message = "Task ${params.id} has been approved."
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 renegeApproval = {
294
295        if(!Task.exists(params.id)) {
296            flash.message = "Task not found with id ${params.id}."
297            redirect(action: 'search')
298        }
299
300        def result = taskService.renegeApproval(params)
301
302        if(!result.error) {
303                flash.message = "Task ${params.id} has had approval removed."
304                redirect(action: 'show', id: result.taskInstance.id)
305        }
306        else {
307            if(result.taskInstance) {
308                render(view:'edit',model:[taskInstance:result.taskInstance])
309            }
310            else {
311                flash.message = "Task could not be updated."
312                redirect(action: 'search')
313            }
314        }
315
316    }
317
318    def complete = {
319
320        if(!Task.exists(params.id)) {
321            flash.message = "Task not found with id ${params.id}."
322            redirect(action: 'search')
323        }
324
325        def result = taskService.complete(params)
326
327        if(!result.error) {
328                flash.message = "Task ${params.id} has been completed."
329                redirect(action: 'show', id: result.taskInstance.id)
330        }
331        else {
332            if(result.taskInstance) {
333                render(view:'edit',model:[taskInstance:result.taskInstance])
334            }
335            else {
336                flash.message = "Task could not be updated."
337                redirect(action: 'search')
338            }
339        }
340
341    }
342
343    def reopen = {
344
345        if(!Task.exists(params.id)) {
346            flash.message = "Task not found with id ${params.id}."
347            redirect(action: 'search')
348        }
349
350        def result = taskService.reopen(params)
351
352        if(!result.error) {
353                flash.message = "Task ${params.id} has been reopened."
354                redirect(action: 'show', id: result.taskInstance.id)
355        }
356        else {
357            if(result.taskInstance) {
358                render(view:'edit',model:[taskInstance:result.taskInstance])
359            }
360            else {
361                flash.message = "Task could not be updated."
362                redirect(action: 'search')
363            }
364        }
365
366    }
367
368    def edit = {
369
370        // In the case of an actionSubmit button, rewrite action name from 'index'.
371        if(params._action_Edit)
372        { params.action='edit' }
373
374        def taskInstance = Task.get( params.id )
375
376        if(!taskInstance) {
377            flash.message = "Task not found with id ${params.id}"
378            redirect(action: 'search')
379        }
380        else {
381            if(taskInstance.trash) {
382                flash.message = "You may not edit tasks that are in the trash."
383                redirect(action: 'show', id: taskInstance.id)
384                return
385            }
386            def possibleParentList = taskService.possibleParentList(taskInstance)
387            return [ taskInstance : taskInstance, possibleParentList: possibleParentList ]
388        }
389    }
390
391    def update = {
392
393        if(!Task.exists(params.id)) {
394            flash.message = "Task not found with id ${params.id}"
395            redirect(action: 'search')
396        }
397
398        def result = taskService.update(params)
399
400        if(!result.error) {
401                flash.message = "Task ${params.id} updated"
402                redirect(action: 'show', id: result.taskInstance.id)
403        }
404        else {
405            render(view:'edit',model:[taskInstance:result.taskInstance.attach()])
406        }
407
408    }
409
410    def create = {
411        def taskInstance = new Task()
412
413        // Set the targetStartDate if specified, used by searchCalendar view.
414        if(params.year && params.month && params.day)
415            taskInstance.targetStartDate = dateUtilService.makeDate(params.year, params.month, params.day)
416
417        // Default leadPerson to current user, unless supplied in params.
418        taskInstance.leadPerson = personService.currentUser()
419        taskInstance.properties = params
420        return ['taskInstance': taskInstance]
421    }
422
423    def save = {
424        def result = taskService.create(params)
425
426        if(!result.error) {
427            flash.message = "Task ${result.taskInstance.id} created."
428            redirect(action: 'show', id: result.taskInstance.id)
429        }
430        else {
431            if(result.taskInstance) {
432                render(view:'create', model:[taskInstance:result.taskInstance])
433            }
434            else {
435                flash.message = "Could not create task."
436                redirect(action: 'search')
437            }
438
439        }
440    }
441
442    def listSubTasks = {
443        def parentTaskInstance = Task.get(params.id)
444
445        if(!parentTaskInstance) {
446            flash.message = "Task not found with id ${params.id}"
447            redirect(action: 'search')
448        }
449        else {
450        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
451        def subTaskInstanceList = Task.findAllByParentTaskAndTrash(parentTaskInstance, false, params)
452        def subTaskInstanceTotal = Task.countByParentTaskAndTrash(parentTaskInstance, false)
453
454        [ taskInstanceList: subTaskInstanceList,
455            taskInstanceTotal:  subTaskInstanceTotal,
456            parentTaskInstance: parentTaskInstance]
457        }
458    }
459
460    def createSubTask = {
461        def parentTaskInstance = Task.get(params.id)
462
463        if(parentTaskInstance) {
464
465            def result = taskService.createSubTask(parentTaskInstance)
466            if(!result.error) {
467                flash.message = "Sub Task ${result.taskInstance.id} created, please edit and update to your requirements."
468                redirect(action: 'edit', id: result.taskInstance.id)
469            }
470            else {
471                if(result.taskInstance.errors.hasFieldErrors("parentTask")) {
472                    flash.message = g.message(code:"task.operationNotPermittedOnTaskInTrash")
473                    redirect(action: 'show', id:  parentTaskInstance.id)
474                }
475                else {
476                    render(view: 'create', model:[taskInstance: result.taskInstance])
477                }
478            }
479        }
480
481        else {
482            flash.message = "Task not found with id ${params.id}"
483            redirect(action: 'search')
484        }
485    }
486
487} // end of class.
Note: See TracBrowser for help on using the repository browser.