Changeset 155 for trunk


Ignore:
Timestamp:
Oct 17, 2009, 1:41:59 PM (15 years ago)
Author:
gav
Message:

Work on Task searching.
Add calendar view for Tasks.
Cleaner look for search and paginate buttons.
OverlayPane? css and javascript to fix filterPane width on smaller screens and for quick search panes.

Location:
trunk
Files:
2 added
1 deleted
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/README

    r138 r155  
    22    Copyright (C) 2008-2009 Gavin Kromhout
    33    Copyright (C) 2008-2009 Steven Tucker
    4  
     4
    55    This program is free software: you can redistribute it and/or modify
    66    it under the terms of the GNU Affero General Public License as published by
  • trunk/grails-app/conf/Config.groovy

    r149 r155  
    8686    [order:20, controller:'taskDetailed', title:'tasks', action:'search',
    8787        subItems: [
    88             [order:10, controller:'taskDetailed', title:'Search', action:'search', isVisible: { params.action != 'advancedSearch'}],
    89             [order:11, controller:'taskDetailed', title:'Advanced Search', action:'advancedSearch', isVisible: { params.action == 'advancedSearch' }],
     88            [order:10, controller:'taskDetailed', title:'Search', action:'search', isVisible: { params.action != 'searchCalendar'}],
     89            [order:11, controller:'taskDetailed', title:'Calendar', action:'searchCalendar', isVisible: { params.action == 'searchCalendar' }],
    9090            [order:20, controller:'taskDetailed', title:'Create', action:'create', isVisible: { true }],
    9191            [order:90, controller:'taskDetailed', title:'Show', action:'show', isVisible: { params.action == 'show' }],
  • trunk/grails-app/controllers/TaskDetailedController.groovy

    r147 r155  
    2222        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100 )
    2323
    24         // Search urls:
     24        // Quick Search:
    2525        if(!params.filter)
    2626        {
     
    2828            def personInstance = Person.get(authenticateService.userDomain().id)
    2929
    30             if(params.searchMyTodays) {
     30            if(params.quickSearch == "searchMyTodays") {
    3131                taskInstanceList = taskSearchService.getMyTodays(params)
    3232                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks for ${personInstance.firstName} ${personInstance.lastName}." }
    3333                else { params.message = "No tasks found for today." }
    3434            }
    35             else if(params.searchInTheLastWeek) {
     35            else if(params.quickSearch == "searchInTheLastWeek") {
    3636                taskInstanceList = taskSearchService.getInTheLastWeek(params)
    3737                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week." }
    3838                else { params.message = "No tasks found for today." }
    3939            }
    40             else if(params.searchMyInTheLastWeek) {
     40            else if(params.quickSearch == "searchMyInTheLastWeek") {
    4141                taskInstanceList = taskSearchService.getMyInTheLastWeek(params)
    4242                if(taskInstanceList.totalCount > 0) { params.message = "Tasks with Target Start Date in the last week for ${personInstance.firstName} ${personInstance.lastName}." }
     
    4848                if(taskInstanceList.totalCount > 0) { params.message = "Today's tasks." }
    4949                else { params.message = "No tasks found for today." }
    50             }
    51 
    52             return[ taskInstanceList: taskInstanceList, taskInstanceTotal: taskInstanceList.totalCount]
     50                params.quickSearch = "searchTodays"
     51            }
     52            return[taskInstanceList: taskInstanceList, taskInstanceTotal: taskInstanceList.totalCount, filterParams: params]
    5353        }
    5454        // filterPane:
     
    5959    }
    6060
    61     def advancedSearch = {
    62         params.max = Math.min( params.max ? params.max.toInteger() : 10,  100 )
    63 
    64         if(!params._action_advancedSearch)
     61    def searchCalendar = {
     62//         println params
     63        params.max = 30
     64
     65        // Quick Search:
     66        if(!params.filter)
    6567        {
    66             // Default:
    67             def taskInstanceActivesList = Task.findAllByIsActive(true, params)
    68             def taskInstanceActivesTotal = Task.countByIsActive(true)
    69             return [taskInstanceList: taskInstanceActivesList, taskInstanceTotal: taskInstanceActivesTotal]
    70         }
    71         render( view:'advancedSearch',
    72             model:[ taskInstanceList: filterService.filter( params, Task ),
    73             taskInstanceTotal: filterService.count( params, Task ),
    74             filterParams: com.zeddware.grails.plugins.filterpane.FilterUtils.extractFilterParams(params),
    75             params:params ] )
    76     }
    77    
    78 //     def searchTodays = {
    79 //         def taskInstanceList = taskSearchService.getTodays(params)
    80 //         
    81 //         if(taskInstanceList.totalCount > 0)
    82 //         {
    83 //             flash.message = "Today's tasks"
    84 //         }
    85 //         else { flash.message = "No tasks found for today" }
    86 //         
    87 //         render( view:'search',
    88 //             model:[ taskInstanceList: taskInstanceList,
    89 //             taskInstanceTotal: taskInstanceList.totalCount])
    90 //     }
    91    
    92 //     def searchMyTodays = {
    93 //         params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
    94 //             
    95 //         def taskInstanceList = Task.createCriteria().list() {
    96 //                 eq("leadPerson", Person.get(authenticateService.userDomain().id))
    97 //                 ge("targetStartDate", dateUtilService.getToday())
    98 //                 eq("isActive", true)
    99 //         }
    100 //             
    101 //         def taskInstanceTotal = Task.createCriteria().count() {
    102 //                 eq("leadPerson", Person.get(authenticateService.userDomain().id))
    103 //                 ge("targetStartDate", dateUtilService.getToday())
    104 //                 eq("isActive", true)
    105 //         }
    106 //         
    107 //         if(taskInstanceTotal > 0)
    108 //         {
    109 //             flash.message = "Today's tasks"
    110 //         }
    111 //         else { flash.message = "No tasks found for today" }
    112 //         
    113 //         render( view:'search',
    114 //             model:[ taskInstanceList: taskInstanceList,
    115 //             taskInstanceTotal: taskInstanceTotal])
    116 //     }
    117    
    118     def searchInTheLastWeek = {
    119         params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
    120            
    121         def taskInstanceList = Task.createCriteria().list() {
    122                 ge("targetStartDate", dateUtilService.getToday()-7)
    123                 eq("isActive", true)
    124         }
    125            
    126         def taskInstanceTotal = Task.createCriteria().count() {
    127                 ge("targetStartDate", dateUtilService.getToday()-7)
    128                 eq("isActive", true)
    129         }
    130        
    131         if(taskInstanceTotal > 0)
    132         {
    133             flash.message = "Tasks with target start date in the last week."
    134         }
    135        
    136         else {flash.message = "No tasks found with target start date in the last week." }
    137        
    138         render( view:'search',
    139             model:[ taskInstanceList: taskInstanceList,
    140             taskInstanceTotal: taskInstanceTotal])
    141     }
    142    
    143     def searchMyInTheLastWeek = {
    144         params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
    145            
    146         def taskInstanceList = Task.createCriteria().list() {
    147                 eq("leadPerson", Person.get(authenticateService.userDomain().id))
    148                 ge("targetStartDate", dateUtilService.getToday()-7)
    149                 eq("isActive", true)
    150         }
    151            
    152         def taskInstanceTotal = Task.createCriteria().count() {
    153                 eq("leadPerson", Person.get(authenticateService.userDomain().id))
    154                 ge("targetStartDate", dateUtilService.getToday()-7)
    155                 eq("isActive", true)
    156         }
    157        
    158         if(taskInstanceTotal > 0)
    159         {
    160             flash.message = "Tasks with target start date in the last week."
    161         }
    162         else { flash.message = "No tasks found with target start date in the last week." }
    163        
    164         render( view:'search',
    165             model:[ taskInstanceList: taskInstanceList,
    166             taskInstanceTotal: taskInstanceTotal])
    167     }
    168 
    169 //     def search = {
    170 //         params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
    171 //         
    172 //         if(!params.order) {
    173 //             params.sort = "id"
    174 //             params.order = "desc"
    175 //         }
    176 //         
    177 //         if(params.search == "ShowAll")
    178 //         {
    179 //             def taskInstanceActivesList = Task.findAllByIsActive(true, params)
    180 //             def taskInstanceActivesTotal = Task.countByIsActive(true)
    181 //             return [taskInstanceList: taskInstanceActivesList, taskInstanceTotal: taskInstanceActivesTotal]
    182 //         }
    183 //         if(params.search == "ShowDeleted")
    184 //         {
    185 //             def taskInstanceActivesList = Task.findAllByIsActive(false, params)
    186 //             def taskInstanceActivesTotal = Task.countByIsActive(false)
    187 //             return [taskInstanceList: taskInstanceActivesList, taskInstanceTotal: taskInstanceActivesTotal]
    188 //         }
    189 //         // Default:
    190 //         def taskInstanceActivesList = Task.findAllByIsActive(true, params)
    191 //         def taskInstanceActivesTotal = Task.countByIsActive(true)
    192 //         [taskInstanceList: taskInstanceActivesList, taskInstanceTotal: taskInstanceActivesTotal]
    193 //     }
    194    
    195     def searchShowAll = {
    196         redirect(action:'search', params:[search:"ShowAll"])
    197     }
    198    
    199     def searchShowDeleted = {
    200         redirect(action:'search', params:[search:"ShowDeleted"])
     68            def taskInstanceList = []
     69            def personInstance = Person.get(authenticateService.userDomain().id)
     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 today." }
     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 today." }
     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 ]
    201106    }
    202107
  • trunk/grails-app/controllers/TaskProcedureDetailedController.groovy

    r147 r155  
    22
    33class TaskProcedureDetailedController extends BaseController {
     4
     5    def filterService
    46
    57    def index = { redirect(action:list,params:params) }
     
    113115        } else {
    114116            flash.message = "Please select a task, then the Procedure tab.'"
    115             redirect(controller:"taskDetailed", action:"list")
     117            redirect(controller:"taskDetailed", action:"search")
    116118        }
    117119    }
  • trunk/grails-app/i18n/messages.properties

    r147 r155  
    4646default.paginate.next=Next
    4747
     48# Rich UI plugin - Calendar
     49default.time=Time
     50default.week=Week
     51default.monday=Mon
     52default.tuesday=Tues
     53default.wednesday=Wed
     54default.thursday=Thu
     55default.friday=Fri
     56default.saturday=Sat
     57default.sunday=Sun
     58
    4859# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
    4960typeMismatch.java.net.URL=Property {0} must be a valid URL
  • trunk/grails-app/views/appCore/start.gsp

    r147 r155  
    11<html>
    22<head>
    3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    4 <meta name="layout" content="main" />
    5 <title>Start</title>
    6 <nav:resources override="true"/>
    7 <resource:tabView skin="tabviewCustom" />
     3    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
     4    <meta name="layout" content="main" />
     5    <title>Start</title>
     6    <nav:resources override="true"/>
     7    <resource:tabView skin="tabviewCustom" />
    88</head>
    99    <body>
     
    3939                            <table>
    4040                                <tbody>
    41                        
     41
    4242                                    <tr class="prop">
    4343                                        <td valign="top" class="name">
     
    4545                                        </td>
    4646                                        <td valign="top" class="value">
    47                                             <g:link controller="taskDetailed" 
     47                                            <g:link controller="taskDetailed"
    4848                                                            action="search"
    49                                                             params="[searchMyTodays:'true']">
     49                                                            params="[quickSearch: 'searchMyTodays']">
    5050                                                            Today's
    5151                                            </g:link>
     
    5353                                            <g:link controller="taskDetailed"
    5454                                                            action="search"
    55                                                             params="[searchMyInTheLastWeek:'true']">
     55                                                            params="[quickSearch: 'searchMyInTheLastWeek']">
    5656                                                            In the last week
    5757                                            </g:link>
    5858                                        </td>
    5959                                    </tr>
    60                        
     60           
    6161                                    <tr class="prop">
    6262                                        <td valign="top" class="name">
     
    6565                                        <td valign="top" class="value">
    6666                                            <g:link controller="taskDetailed"
    67                                                             action="search">
    68                                                             Today's
    69                                             </g:link>
    70                                             <br />
    71                                             <g:link controller="taskDetailed"
    72                                                             action="search"
    73                                                             params="[searchInTheLastWeek:'true']">
    74                                                             In the last week
     67                                                            action="searchCalendar"
     68                                                            params="[quickSearch: 'searchInTheLastWeek']">
     69                                                            Calendar
    7570                                            </g:link>
    7671                                        </td>
    7772                                    </tr>
    78                                    
     73
     74<!--                                    More Quick Links:
     75                                    Open Tasks
     76                                    Closed Tasks
     77                                    Tasks I lead.
     78                                    Week calender
     79                                    Recent
     80                                    Today's Entries
     81                                    My Entries.
     82                                    Date ranges-->
     83
    7984                                </tbody>
    8085                            </table>
    81                         </div>
    82                         <br />
    83                         <br />
     86                        </div> <!--End dialog-->
    8487                    </richui:tabContent>
    8588<!-- End Tasks tab -->
     
    143146                </richui:tabContents>
    144147            </richui:tabView>
    145            
    146         </div>
     148
     149        </div> <!--End body-->
    147150    </body>
    148151</html>
  • trunk/grails-app/views/person/list.gsp

    r151 r155  
    2222                                removeImgFile="bullet_delete.png"
    2323                                title="Search"/>
     24
     25        <div class="paginateButtons">
     26            <filterpane:filterButton text="Search" appliedText="Change Search" />
     27            Results:${personTotal}
     28        </div>
     29
    2430        <div class="list">
    2531            <table>
     
    5662        <div class="paginateButtons">
    5763            <g:paginate total="${personTotal}" params="${filterParams}" />
    58             <filterpane:filterButton text="Search" appliedText="Change Search" />
    59             Results:${personTotal}
    6064        </div>
    6165
     
    6367                                title="Search"
    6468                                action="list"
     69                                class="overlayPane"
    6570                                excludeProperties="password, sessionTimeout, emailShow"
    6671                                associatedProperties="authorities.authority, personGroups.name"
  • trunk/grails-app/views/taskDetailed/search.gsp

    r151 r155  
    55        <title>Task Search</title>
    66        <filterpane:includes />
     7        <g:javascript src="overlayPane.js" />
    78        <nav:resources override="true"/>
    89    </head>
     
    2930                                    removeImgDir="images"
    3031                                    removeImgFile="bullet_delete.png"
    31                                     title="Quick Search"/>
     32                                    title="Advanced Search"/>
     33
     34            <div class="paginateButtons">
     35                <a href='' onclick="showElement('searchPane'); return false;">Quick</a>
     36                Results:${taskInstanceTotal}
     37                <filterpane:filterButton text="Advanced" appliedText="Advanced" />
     38            </div>
    3239
    3340            <div class="list">
     
    8188            <div class="paginateButtons">
    8289                <g:paginate total="${taskInstanceTotal}" params="${filterParams}" />
    83                 <filterpane:filterButton text="Search" appliedText="Change Search" />
    84                 Results:${taskInstanceTotal}
    85                 <g:link action="advancedSearch">Goto: Advanced Search</g:link>
    8690            </div>
    8791
    8892            <filterpane:filterPane domainBean="Task"
    89                                     title="Quick Search"
     93                                    title="Advanced Search"
    9094                                    action="search"
     95                                    class="overlayPane"
    9196                                    additionalProperties="id"
    92                                     excludeProperties="isActive, comment, targetCompletionDate"
    93                                     associatedProperties="leadPerson.lastName, taskPriority.name"
     97                                    associatedProperties="leadPerson.lastName, taskGroup.name, taskPriority.name"
    9498                                    filterPropertyValues="${['taskPriority.name':[values:TaskPriority.list()],
    9599                                                                                'leadPerson.lastName':[values:Person.executeQuery('select t.lastName from Person t')],
     100                                                                                'taskGroup.name':[values:TaskGroup.list()],
     101                                                                                targetCompletionDate:[years:2020..2000,precision:'day'],
    96102                                                                                targetStartDate:[years:2020..2000,precision:'day']]}"/>
    97         </div> <!-- end body div -->
     103        </div> <!-- end body  -->
     104
     105        <!-- Start Search Pane -->
     106        <div class="overlayPane" id="searchPane" style="display:none;">
     107            <h2>Quick Search</h2>
     108            <g:form method="post" id="searchForm" name="searchForm" >
     109                <table>
     110                    <tbody>
     111
     112                        <tr class="prop">
     113                            <td valign="top" class="name">
     114                                <label>My Tasks:</label>
     115                            </td>
     116                            <td valign="top" class="value">
     117                                <g:link controller="taskDetailed"
     118                                                action="search"
     119                                                params="[quickSearch: 'searchMyTodays']">
     120                                                Today's
     121                                </g:link>
     122                                <br />
     123                                <g:link controller="taskDetailed"
     124                                                action="search"
     125                                                params="[quickSearch: 'searchMyInTheLastWeek']">
     126                                                In the last week
     127                                </g:link>
     128                            </td>
     129                        </tr>
     130
     131                        <tr class="prop">
     132                            <td valign="top" class="name">
     133                                <label>Tasks:</label>
     134                            </td>
     135                            <td valign="top" class="value">
     136                                <g:link controller="taskDetailed"
     137                                                action="search"
     138                                                params="[quickSearch: 'searchTodays']">
     139                                                Today's
     140                                </g:link>
     141                                <br />
     142                                <g:link controller="taskDetailed"
     143                                                action="search"
     144                                                params="[quickSearch: 'searchInTheLastWeek']">
     145                                                In the last week
     146                                </g:link>
     147                            </td>
     148                        </tr>
     149
     150                    </tbody>
     151                </table>
     152                <div class="buttons">
     153                    <span class="button">
     154                        <input type="button" value="${g.message(code:'fp.tag.filterPane.button.cancel.text', default:'Cancel')}" onclick="return hideElement('searchPane');" />
     155                    </span>
     156<!--                    <span class="button">
     157                        <input type="button" value="${g.message(code:'fp.tag.filterPane.button.clear.text', default:'Clear')}" onclick="return clearFilterPane('searchForm');" />
     158                    </span>
     159                    <span class="button">
     160                        <g:actionSubmit class="search" value="Search" />
     161                    </span>-->
     162                </div>
     163            </g:form>
     164        </div> <!-- end search pane -->
     165
    98166    </body>
    99167</html>
  • trunk/grails-app/views/taskProcedureDetailed/list.gsp

    r151 r155  
    1717            <div class="message">${flash.message}</div>
    1818            </g:if>
    19             <filterpane:currentCriteria domainBean="TaskProcedureDetailed"
     19            <filterpane:currentCriteria domainBean="TaskProcedure"
    2020                                    action="list"
    2121                                    dateFormat="${'EEE, dd-MMM-yyyy'}"
     
    2323                                    removeImgFile="bullet_delete.png"
    2424                                    title="Search"/>
     25
     26            <div class="paginateButtons">
     27                <filterpane:filterButton text="Search" appliedText="Change Search" />
     28                Results:${taskProcedureInstanceTotal}
     29            </div>
     30
    2531            <div class="list">
    2632                <table>
     
    6672            <div class="paginateButtons">
    6773                <g:paginate total="${taskProcedureInstanceTotal}" params="${filterParams}" />
    68                 <filterpane:filterButton text="Search" appliedText="Change Search" />
    69                 Results:${askProcedureInstanceTotal}
    7074            </div>
    7175
     
    7377                                    title="Search"
    7478                                    action="list"
     79                                    class="overlayPane"
    7580                                    excludeProperties="" />
    7681        </div>
  • trunk/web-app/css/main.css

    r142 r155  
    279279
    280280.paginateButtons {
    281     background: #fff url(../images/skin/shadow.jpg) bottom repeat-x;
    282     border: 1px solid #ccc;
     281    /*background: #fff url(../images/skin/shadow.jpg) bottom repeat-x;*/
     282   /*border: 1px solid #ccc;*/
    283283    border-top: 0;
    284284    color: #666;
     
    379379  width: 1020px;
    380380  height: 100px;
     381}
     382
     383/* Overlay Pane and filterPane plugin*/
     384div.overlayPane {
     385    position: absolute;
     386    width:70%;
     387    left: 50%;
     388    margin-left: -35%;
     389    top: 50%;
     390    margin-top: -15%;
     391    border: 2px solid #666666;
     392    background-color: white;
     393    padding: 5px;
     394    z-index: 1;
     395}
     396
     397.overlayTable {
     398    width: 100%;
     399}
     400
     401a.remove img {
     402    border:none;
    381403}
    382404
Note: See TracChangeset for help on using the changeset viewer.