Index: trunk/application.properties
===================================================================
--- trunk/application.properties	(revision 139)
+++ trunk/application.properties	(revision 140)
@@ -1,4 +1,4 @@
 #utf-8
-#Sun Sep 20 20:21:33 EST 2009
+#Wed Sep 30 21:48:49 EST 2009
 plugins.acegi=0.5.1
 plugins.navigation=1.1
@@ -12,2 +12,3 @@
 app.name=gnuMims
 app.grails.version=1.1.1
+plugins.filterpane=0.6.2
Index: trunk/grails-app/conf/BootStrap.groovy
===================================================================
--- trunk/grails-app/conf/BootStrap.groovy	(revision 139)
+++ trunk/grails-app/conf/BootStrap.groovy	(revision 140)
@@ -281,5 +281,5 @@
                  taskPriority:TaskPriority.get(2),
                  taskType:TaskType.get(1),
-                 leadPerson:Person.get(3),
+                 leadPerson:Person.get(2),
                  description:"Check specific level sensor",
                  comment:"Has been noted as problematic, try recalibrating.")
Index: trunk/grails-app/conf/Config.groovy
===================================================================
--- trunk/grails-app/conf/Config.groovy	(revision 139)
+++ trunk/grails-app/conf/Config.groovy	(revision 140)
@@ -86,5 +86,6 @@
     [order:20, controller:'taskDetailed', title:'tasks', action:'search',
         subItems: [
-            [order:10, controller:'taskDetailed', title:'Search', action:'search', isVisible: { true }],
+            [order:10, controller:'taskDetailed', title:'Search', action:'search', isVisible: { params.action != 'advancedSearch'}],
+            [order:11, controller:'taskDetailed', title:'Advanced Search', action:'advancedSearch', isVisible: { params.action == 'advancedSearch' }],
             [order:20, controller:'taskDetailed', title:'Create', action:'create', isVisible: { true }],
             [order:90, controller:'taskDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
Index: trunk/grails-app/conf/SecurityConfig.groovy
===================================================================
--- trunk/grails-app/conf/SecurityConfig.groovy	(revision 139)
+++ trunk/grails-app/conf/SecurityConfig.groovy	(revision 140)
@@ -42,4 +42,5 @@
     '/plugins/richui-0.6/**': ['IS_AUTHENTICATED_FULLY'],
     '/plugins/navigation-1.1/**': ['IS_AUTHENTICATED_FULLY'],
+    '/plugins/filterpane-0.6.2/**': ['IS_AUTHENTICATED_FULLY'],
     '/plugins/class-diagram-0.3/**': ['IS_AUTHENTICATED_FULLY'],
     '/classDiagram*': ['IS_AUTHENTICATED_FULLY'],
Index: trunk/grails-app/controllers/TaskDetailedController.groovy
===================================================================
--- trunk/grails-app/controllers/TaskDetailedController.groovy	(revision 139)
+++ trunk/grails-app/controllers/TaskDetailedController.groovy	(revision 140)
@@ -3,42 +3,178 @@
 class TaskDetailedController extends BaseController {
 
-    def index = { 
-        println "index called"
-        redirect(action:search,params:params) 
-    }
+    def authenticateService
+    def dateUtilService
+    def filterService
 
     // the delete, save and update actions only accept POST requests
     static allowedMethods = [delete:'POST', save:'POST', update:'POST']
 
+    def index = { redirect(action:search,params:params) }
+
     def list = {
         params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
         [ taskInstanceList: Task.list( params ), taskInstanceTotal: Task.count() ]
     }
-
+    
     def search = {
         params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
         
-        if(!params.order) {
-            params.sort = "id"
-            params.order = "desc"
-        }
-        
-        if(params.search == "ShowAll")
-        {
+        if(!params._action_search)
+        {
+            // Default:
             def taskInstanceActivesList = Task.findAllByIsActive(true, params)
             def taskInstanceActivesTotal = Task.countByIsActive(true)
             return [taskInstanceList: taskInstanceActivesList, taskInstanceTotal: taskInstanceActivesTotal]
         }
-        if(params.search == "ShowDeleted")
-        {
-            def taskInstanceActivesList = Task.findAllByIsActive(false, params)
-            def taskInstanceActivesTotal = Task.countByIsActive(false)
+        render( view:'search', 
+            model:[ taskInstanceList: filterService.filter( params, Task ), 
+            taskInstanceTotal: filterService.count( params, Task ), 
+            filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params), 
+            params:params ] )
+    }
+    
+    def advancedSearch = {
+        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
+
+        if(!params._action_advancedSearch)
+        {
+            // Default:
+            def taskInstanceActivesList = Task.findAllByIsActive(true, params)
+            def taskInstanceActivesTotal = Task.countByIsActive(true)
             return [taskInstanceList: taskInstanceActivesList, taskInstanceTotal: taskInstanceActivesTotal]
         }
-        // Default:
-        def taskInstanceActivesList = Task.findAllByIsActive(true, params)
-        def taskInstanceActivesTotal = Task.countByIsActive(true)
-        [taskInstanceList: taskInstanceActivesList, taskInstanceTotal: taskInstanceActivesTotal]
-    }
+        render( view:'advancedSearch', 
+            model:[ taskInstanceList: filterService.filter( params, Task ), 
+            taskInstanceTotal: filterService.count( params, Task ), 
+            filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params), 
+            params:params ] )
+    }
+    
+    def searchTodays = {
+        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
+            
+        def taskInstanceList = Task.createCriteria().list() {
+                eq("targetStartDate", dateUtilService.getToday())
+                eq("isActive", true)
+        }
+            
+        def taskInstanceTotal = Task.createCriteria().count() {
+                eq("targetStartDate", dateUtilService.getToday())
+                eq("isActive", true)
+        }
+        
+        if(taskInstanceTotal > 0)
+        {
+            flash.message = "Today's tasks"
+        }
+        else { flash.message = "No tasks found for today" }
+        
+        render( view:'search', 
+            model:[ taskInstanceList: taskInstanceList, 
+            taskInstanceTotal: taskInstanceTotal])
+    }
+    
+    def searchMyTodays = {
+        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
+            
+        def taskInstanceList = Task.createCriteria().list() {
+                eq("leadPerson", Person.get(authenticateService.userDomain().id))
+                ge("targetStartDate", dateUtilService.getToday())
+                eq("isActive", true)
+        }
+            
+        def taskInstanceTotal = Task.createCriteria().count() {
+                eq("leadPerson", Person.get(authenticateService.userDomain().id))
+                ge("targetStartDate", dateUtilService.getToday())
+                eq("isActive", true)
+        }
+        
+        if(taskInstanceTotal > 0)
+        {
+            flash.message = "Today's tasks"
+        }
+        else { flash.message = "No tasks found for today" }
+        
+        render( view:'search', 
+            model:[ taskInstanceList: taskInstanceList, 
+            taskInstanceTotal: taskInstanceTotal])
+    }
+    
+    def searchInTheLastWeek = {
+        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
+            
+        def taskInstanceList = Task.createCriteria().list() {
+                ge("targetStartDate", dateUtilService.getToday()-7)
+                eq("isActive", true)
+        }
+            
+        def taskInstanceTotal = Task.createCriteria().count() {
+                ge("targetStartDate", dateUtilService.getToday()-7)
+                eq("isActive", true)
+        }
+        
+        if(taskInstanceTotal > 0)
+        {
+            flash.message = "Tasks with target start date in the last week."
+        }
+        
+        else {flash.message = "No tasks found with target start date in the last week." }
+        
+        render( view:'search', 
+            model:[ taskInstanceList: taskInstanceList, 
+            taskInstanceTotal: taskInstanceTotal])
+    }
+    
+    def searchMyInTheLastWeek = {
+        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
+            
+        def taskInstanceList = Task.createCriteria().list() {
+                eq("leadPerson", Person.get(authenticateService.userDomain().id))
+                ge("targetStartDate", dateUtilService.getToday()-7)
+                eq("isActive", true)
+        }
+            
+        def taskInstanceTotal = Task.createCriteria().count() {
+                eq("leadPerson", Person.get(authenticateService.userDomain().id))
+                ge("targetStartDate", dateUtilService.getToday()-7)
+                eq("isActive", true)
+        }
+        
+        if(taskInstanceTotal > 0)
+        {
+            flash.message = "Tasks with target start date in the last week."
+        }
+        else { flash.message = "No tasks found with target start date in the last week." }
+        
+        render( view:'search', 
+            model:[ taskInstanceList: taskInstanceList, 
+            taskInstanceTotal: taskInstanceTotal])
+    }
+
+//     def search = {
+//         params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
+//         
+//         if(!params.order) {
+//             params.sort = "id"
+//             params.order = "desc"
+//         }
+//         
+//         if(params.search == "ShowAll")
+//         {
+//             def taskInstanceActivesList = Task.findAllByIsActive(true, params)
+//             def taskInstanceActivesTotal = Task.countByIsActive(true)
+//             return [taskInstanceList: taskInstanceActivesList, taskInstanceTotal: taskInstanceActivesTotal]
+//         }
+//         if(params.search == "ShowDeleted")
+//         {
+//             def taskInstanceActivesList = Task.findAllByIsActive(false, params)
+//             def taskInstanceActivesTotal = Task.countByIsActive(false)
+//             return [taskInstanceList: taskInstanceActivesList, taskInstanceTotal: taskInstanceActivesTotal]
+//         }
+//         // Default:
+//         def taskInstanceActivesList = Task.findAllByIsActive(true, params)
+//         def taskInstanceActivesTotal = Task.countByIsActive(true)
+//         [taskInstanceList: taskInstanceActivesList, taskInstanceTotal: taskInstanceActivesTotal]
+//     }
     
     def searchShowAll = {
Index: trunk/grails-app/views/appCore/start.gsp
===================================================================
--- trunk/grails-app/views/appCore/start.gsp	(revision 139)
+++ trunk/grails-app/views/appCore/start.gsp	(revision 140)
@@ -36,5 +36,45 @@
                         <br />
                         <br />
-                        Prepared quick links
+                        <div class="dialog">
+                            <table>
+                                <tbody>
+                        
+                                    <tr class="prop">
+                                        <td valign="top" class="name">
+                                            <label>My Tasks:</label>
+                                        </td>
+                                        <td valign="top" class="value">
+                                            <g:link controller="taskDetailed" 
+                                                            action="searchMyTodays">
+                                                            Today's
+                                            </g:link>
+                                            <br />
+                                            <g:link controller="taskDetailed" 
+                                                            action="searchMyInTheLastWeek">
+                                                            In the last week
+                                            </g:link>
+                                        </td>
+                                    </tr>
+                        
+                                    <tr class="prop">
+                                        <td valign="top" class="name">
+                                            <label>Tasks:</label>
+                                        </td>
+                                        <td valign="top" class="value">
+                                            <g:link controller="taskDetailed" 
+                                                            action="searchTodays">
+                                                            Today's
+                                            </g:link>
+                                            <br />
+                                            <g:link controller="taskDetailed" 
+                                                            action="searchInTheLastWeek">
+                                                            In the last week
+                                            </g:link>
+                                        </td>
+                                    </tr>
+                                    
+                                </tbody>
+                            </table>
+                        </div>
                         <br />
                         <br />
Index: trunk/grails-app/views/taskDetailed/advancedSearch.gsp
===================================================================
--- trunk/grails-app/views/taskDetailed/advancedSearch.gsp	(revision 140)
+++ trunk/grails-app/views/taskDetailed/advancedSearch.gsp	(revision 140)
@@ -0,0 +1,97 @@
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+        <meta name="layout" content="main" />
+        <title>Task Advanced Search</title>
+        <filterpane:includes />
+        <nav:resources override="true"/>
+    </head>
+    <body>
+        <div class="nav">
+            <nav:renderSubItems group="nav"/>
+        </div>
+        
+        <div class="body">
+            <g:if test="${flash.message}">
+                <div class="message">${flash.message}</div>
+            </g:if>
+            <g:hasErrors bean="${appCore}">
+                <div class="errors">
+                    <g:renderErrors bean="${appCore}" as="list" />
+                </div>
+            </g:hasErrors>
+            <filterpane:currentCriteria domainBean="Task"
+                                    action="advancedSearch"
+                                    dateFormat="${'EEE, dd-MMM-yyyy'}"
+                                    removeImgDir="images" 
+                                    removeImgFile="bullet_delete.png"
+                                    title="Advanced Search"/>
+            
+            <div class="list">                
+                <table>
+                    <thead>
+                        <tr>
+                        
+                   	        <g:sortableColumn property="id" title="Id" params="${filterParams}" />
+                        
+                   	        <g:sortableColumn property="targetStartDate" title="Target Start Date" params="${filterParams}" />
+                        
+                   	        <g:sortableColumn property="description" title="Description" params="${filterParams}" />
+                        
+                   	        <g:sortableColumn  property="leadPerson" title="Lead Person" params="${filterParams}" />
+                        
+                            <g:sortableColumn  property="taskPriority" title="Task Priority" params="${filterParams}" />
+                        
+                            <g:sortableColumn  property="taskStatus" title="Task Status" params="${filterParams}" />
+
+                            <th></th>
+                   	    
+                        </tr>
+                    </thead>
+                    <tbody>
+                    <g:each in="${taskInstanceList}" status="i" var="taskInstance">
+                    <tr class="${(i % 2) == 0 ? 'clickableOdd' : 'clickableEven'}" onclick='window.location = "${request.getContextPath()}/taskDetailed/show/${taskInstance.id}"'/>
+
+                            <td>${fieldValue(bean:taskInstance, field:'id')}</td>
+                        
+                            <td><g:formatDate date="${taskInstance.targetStartDate}" format="EEE, dd-MMM-yyyy"/></td>
+                        
+                            <td>${fieldValue(bean:taskInstance, field:'description')}</td>
+                        
+                            <td>${fieldValue(bean:taskInstance, field:'leadPerson')}</td>
+                        
+                            <td>${fieldValue(bean:taskInstance, field:'taskPriority')}</td>
+                        
+                            <td>${fieldValue(bean:taskInstance, field:'taskStatus')}</td>
+
+                            <td>
+                                <g:link action="show" id="${taskInstance.id}">
+                                    <img  src="${createLinkTo(dir:'images/skin',file:'database_go.png')}" alt="Show" />
+                                </g:link>
+                            </td>
+                        
+                        </tr>
+                    </g:each>
+                    </tbody>
+                </table>
+            </div>
+            <div class="paginateButtons">
+                <g:paginate total="${taskInstanceTotal}" params="${filterParams}" />
+                <filterpane:filterButton text="Search" appliedText="Change Search" />
+                Results:${taskInstanceTotal}
+                <g:link action="search">Goto: Quick Search</g:link>
+            </div>
+            
+            <filterpane:filterPane domainBean="Task"
+                                    title="Advanced Search"
+                                    action="advancedSearch"
+                                    additionalProperties="id"
+                                    associatedProperties="leadPerson.lastName, taskGroup.name, taskPriority.name"
+                                    filterPropertyValues="${['taskPriority.name':[values:TaskPriority.list()],
+                                                                                'leadPerson.lastName':[values:Person.executeQuery('select t.lastName from Person t')],
+                                                                                'taskGroup.name':[values:TaskGroup.list()],
+                                                                                targetCompletionDate:[years:2020..2000,precision:'day'], 
+                                                                                targetStartDate:[years:2020..2000,precision:'day']]}"/>
+        </div> <!-- end body div -->
+    </body>
+</html>
Index: trunk/grails-app/views/taskDetailed/create.gsp
===================================================================
--- trunk/grails-app/views/taskDetailed/create.gsp	(revision 139)
+++ trunk/grails-app/views/taskDetailed/create.gsp	(revision 140)
@@ -6,5 +6,5 @@
         <nav:resources override="true"/>
     </head>
-    <body>
+    <body onload="document.createTaskForm.description.focus();">
         <div class="nav">
             <nav:renderSubItems group="nav"/>
@@ -19,5 +19,5 @@
             </div>
             </g:hasErrors>
-            <g:form action="save" method="post" >
+            <g:form id='createTaskForm' name='createTaskForm' action="save" method="post" >
                 <div class="dialog">
                     <table>
Index: trunk/grails-app/views/taskDetailed/search.gsp
===================================================================
--- trunk/grails-app/views/taskDetailed/search.gsp	(revision 139)
+++ trunk/grails-app/views/taskDetailed/search.gsp	(revision 140)
@@ -4,6 +4,6 @@
         <meta name="layout" content="main" />
         <title>Task Search</title>
+        <filterpane:includes />
         <nav:resources override="true"/>
-        <resource:tabView skin="tabviewCustom" />
     </head>
     <body>
@@ -21,67 +21,27 @@
                 </div>
             </g:hasErrors>
-
-            <richui:tabView id="tabView">
-
-                <richui:tabLabels>
-                    <richui:tabLabel selected="true" title="Quick" />
-                    <richui:tabLabel selected="${0}" title="Basic" />
-                    <richui:tabLabel selected="${0}" title="Advanced" />
-                </richui:tabLabels>
-
-                <richui:tabContents>
-
-<!-- Quick tab -->
-                    <richui:tabContent>
-                        <br />
-                        <br />
-                        <g:form controller="taskDetailed">
-                            Task ID:
-                            <input type="text" name="id" value="${taskInstance?.id}" />
-                            <span class="button"><g:actionSubmit class="show" value="Show" /></span>
-                        </g:form>
-                        <br />
-                        <br />
-                        Show:
-                        <g:link action="searchShowAll">Active</g:link>
-                        /
-                        <g:link action="searchShowDeleted">Inactive</g:link>
-                    </richui:tabContent>
-<!-- End Quick tab -->
-
-<!-- Basic tab -->
-                    <richui:tabContent>
-                        <br />
-                        <br />
-
-                    </richui:tabContent>
-<!-- End Basic tab  -->
-
-<!-- Advanced tab -->
-                    <richui:tabContent>
-                        <br />
-                        <br />
-                    </richui:tabContent>
-<!-- End Advanced tab -->
-
-                </richui:tabContents>
-            </richui:tabView>
+            <filterpane:currentCriteria domainBean="Task"
+                                    action="search"
+                                    dateFormat="${'EEE, dd-MMM-yyyy'}"
+                                    removeImgDir="images" 
+                                    removeImgFile="bullet_delete.png"
+                                    title="Quick Search"/>
             
-            <div class="list">
+            <div class="list">                
                 <table>
                     <thead>
                         <tr>
                         
-                   	        <g:sortableColumn property="id" title="Id" />
+                   	        <g:sortableColumn property="id" title="Id" params="${filterParams}" />
                         
-                   	        <g:sortableColumn property="targetStartDate" title="Target Start Date" />
+                   	        <g:sortableColumn property="targetStartDate" title="Target Start Date" params="${filterParams}" />
                         
-                   	        <g:sortableColumn property="description" title="Description" />
+                   	        <g:sortableColumn property="description" title="Description" params="${filterParams}" />
                         
-                   	        <g:sortableColumn  property="leadPerson" title="Lead Person" />
+                   	        <g:sortableColumn  property="leadPerson" title="Lead Person" params="${filterParams}" />
                         
-                            <g:sortableColumn  property="taskPriority" title="Task Priority" />
+                            <g:sortableColumn  property="taskPriority" title="Task Priority" params="${filterParams}" />
                         
-                            <g:sortableColumn  property="taskStatus" title="Task Status" />
+                            <g:sortableColumn  property="taskStatus" title="Task Status" params="${filterParams}" />
 
                             <th></th>
@@ -117,7 +77,19 @@
             </div>
             <div class="paginateButtons">
-                <g:paginate total="${taskInstanceTotal}" />
+                <g:paginate total="${taskInstanceTotal}" params="${filterParams}" />
+                <filterpane:filterButton text="Search" appliedText="Change Search" />
+                Results:${taskInstanceTotal}
+                <g:link action="advancedSearch">Goto: Advanced Search</g:link>
             </div>
             
+            <filterpane:filterPane domainBean="Task"
+                                    title="Quick Search"
+                                    action="search"
+                                    additionalProperties="id"
+                                    excludeProperties="isActive, comment, targetCompletionDate"
+                                    associatedProperties="leadPerson.lastName, taskPriority.name"
+                                    filterPropertyValues="${['taskPriority.name':[values:TaskPriority.list()],
+                                                                                'leadPerson.lastName':[values:Person.executeQuery('select t.lastName from Person t')],
+                                                                                targetStartDate:[years:2020..2000,precision:'day']]}"/>
         </div> <!-- end body div -->
     </body>
