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

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

Substantial refactor of the Inventory domain.
InventoryItems can now be added to tasks, no quantity adjustments done yet.
Removed StoredItem and with it the ability to store an inventoryItem in multiple places, just too complex right now.
Svn move StoreLocation to InventoryLocation.

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