Commit a8ecd7b3 authored by Frank Bergmann's avatar Frank Bergmann

-- added filter "Search by Name"

-- List will only show items that contain search string in their project/task name
-- If item contains sub-elements, they will be shown too
parent b5737873
...@@ -31,6 +31,7 @@ ad_page_contract { ...@@ -31,6 +31,7 @@ ad_page_contract {
{ return_url "" } { return_url "" }
{ show_week_p 1 } { show_week_p 1 }
{ user_id_from_search "" } { user_id_from_search "" }
{ search_task ""}
} }
# --------------------------------------------------------- # ---------------------------------------------------------
...@@ -552,6 +553,7 @@ set sql " ...@@ -552,6 +553,7 @@ set sql "
select select
parent.project_id as top_project_id, parent.project_id as top_project_id,
parent.parent_id as top_parent_id, parent.parent_id as top_parent_id,
parent.project_name as top_parent_project_name,
children.parent_id as parent_id, children.parent_id as parent_id,
children.project_id as project_id, children.project_id as project_id,
children.project_nr as project_nr, children.project_nr as project_nr,
...@@ -726,9 +728,100 @@ set closed_level 0 ...@@ -726,9 +728,100 @@ set closed_level 0
set closed_status [im_project_status_open] set closed_status [im_project_status_open]
set old_parent_project_nr "" set old_parent_project_nr ""
set showing_child_elements_p 0
set top_project_id_saved -1
set parent_project_id_saved -1
set last_level_shown -1
set level_entered_in_showing_child_elements -1
template::multirow foreach hours_multirow { template::multirow foreach hours_multirow {
if { "" != $search_task } {
set search_task [string trim $search_task]
ns_log NOTICE "/intranet-timesheet2/www/hours/new::project_name: $project_name, search_task: $search_task, top_project_id: $top_project_id"
if { !$showing_child_elements_p || $ctr==0 } {
if { [string first [string tolower $search_task] [string tolower $project_name]] == -1 } {
# ns_log NOTICE "/intranet-timesheet2/www/hours/new::String not found continuing ... "
continue
} else {
# ns_log NOTICE "/intranet-timesheet2/www/hours/new:: ------- String found -------"
# ns_log NOTICE "/intranet-timesheet2/www/hours/new:: Setting showing_child_elements_p = 1, setting top_project_id_saved: $top_project_id"
# Set mode
set showing_child_elements_p 1
# Save vars
set parent_project_id_saved $parent_project_id
set last_level_shown $subproject_level
set level_entered_in_showing_child_elements $subproject_level
set top_project_id_saved $top_project_id
}
} else {
# We are in mode "Show child elements"
#ns_log NOTICE "/intranet-timesheet2/www/hours/new::In showing_child_elements_p"
if { $top_project_id_saved != $top_project_id } {
# We are in a new top parent project
# ns_log NOTICE "/intranet-timesheet2/www/hours/new:: top_project_id_saved: $top_project_id_saved != top_project_id:$top_project_id"
# Reset
set showing_child_elements_p 0
# Save vars
set parent_project_id_saved $parent_project_id
set top_project_id_saved $top_project_id
if { [string first [string tolower $search_task] [string tolower $project_name]] == -1 } {
# ns_log NOTICE "/intranet-timesheet2/www/hours/new::String not found continuing ... "
continue
} else {
# ns_log NOTICE "/intranet-timesheet2/www/hours/new:: ------- String found -------"
# Set mode & last_level_shown
set showing_child_elements_p 1
set level_entered_in_showing_child_elements $subproject_level
set last_level_shown $subproject_level
}
} else {
# ns_log NOTICE "/intranet-timesheet2/www/hours/new::Same Top Parent Project ... "
if { $subproject_level == $last_level_shown } {
# ns_log NOTICE "/intranet-timesheet2/www/hours/new:: Current level is equal to the level the last item to show had: resetting"
if { $level_entered_in_showing_child_elements >= $subproject_level} {
# reset last_level_shown
# ns_log NOTICE "/intranet-timesheet2/www/hours/new:: level_entered_in_showing_child_elements: $level_entered_in_showing_child_elements >= subproject_level:$subproject_level -> resetting, check for searchstring"
# Check for searchstring
if { [string first [string tolower $search_task] [string tolower $project_name]] == -1 } {
ns_log NOTICE "/intranet-timesheet2/www/hours/new:: String not found continuing ... "
continue
} else {
# ns_log NOTICE "/intranet-timesheet2/www/hours/new:: ------- String found -------"
set last_level_shown $subproject_level
}
} else {
set last_level_shown $subproject_level
}
} elseif { $subproject_level > $last_level_shown } {
# show in all cases
# ns_log NOTICE "/intranet-timesheet2/www/hours/new:: subproject_level > last_level_shown -> show item"
set last_level_shown $subproject_level
} else {
# ns_log NOTICE "/intranet-timesheet2/www/hours/new:: subproject_level < last_level_shown"
if { $level_entered_in_showing_child_elements >= $subproject_level} {
# ns_log NOTICE "/intranet-timesheet2/www/hours/new:: Check for searchstring"
if { [string first [string tolower $search_task] [string tolower $project_name]] == -1 } {
# ns_log NOTICE "/intranet-timesheet2/www/hours/new::String not found, continuing ... "
continue
} else {
# ns_log NOTICE "/intranet-timesheet2/www/hours/new:: ------- String found -------"
set last_level_shown $subproject_level
}
} else {
set last_level_shown $subproject_level
}
}
}
}
# ns_log NOTICE "/intranet-timesheet2/www/hours/new:: ----------------------------------------------------------------------------"
# set vars
set top_project_id_saved $top_project_id
set parent_project_id_saved $parent_project_id
}
# --------------------------------------------- # ---------------------------------------------
# Deal with the open and closed subprojects # Deal with the open and closed subprojects
# A closed project will prevent all sub-projects from being displayed. # A closed project will prevent all sub-projects from being displayed.
...@@ -832,21 +925,31 @@ template::multirow foreach hours_multirow { ...@@ -832,21 +925,31 @@ template::multirow foreach hours_multirow {
# #
set indent "" set indent ""
set level $subproject_level set level $subproject_level
set dots_for_filter ""
while {$level > 0} { while {$level > 0} {
set indent "$nbsps$indent" set indent "$nbsps$indent"
set level [expr $level-1] set level [expr $level-1]
append dots_for_filter "."
}
if { "" != $dots_for_filter } {
set dots_for_filter "<strong><a href='/intranet/projects/view?project_id=$top_project_id' style='text-decoration: none'><span style='color:#A9D0F5'>$top_parent_project_name $dots_for_filter</span></a></strong>"
} }
# --------------------------------------------- # ---------------------------------------------
# Insert intermediate header for every top-project # Insert intermediate header for every top-project
if {$parent_project_nr != $old_parent_project_nr} { if {$parent_project_nr != $old_parent_project_nr } {
set project_name "<b>$project_name</b>" set project_name "<b>$project_name</b>"
set project_nr "<b>$project_nr</b>" set project_nr "<b>$project_nr</b>"
# Add an empty line after every main project # Add an empty line after every main project
if {"" != $old_parent_project_nr} { if {"" != $old_parent_project_nr || (0 == $ctr && "" != $search_task) } {
if { "" != $search_task } {
append results "<tr class=rowplain><td colspan=99>$dots_for_filter</td></tr>\n"
} else {
append results "<tr class=rowplain><td colspan=99>&nbsp;</td></tr>\n" append results "<tr class=rowplain><td colspan=99>&nbsp;</td></tr>\n"
} }
}
set old_parent_project_nr $parent_project_nr set old_parent_project_nr $parent_project_nr
} }
...@@ -1030,6 +1133,14 @@ if {$add_hours_all_p} { ...@@ -1030,6 +1133,14 @@ if {$add_hours_all_p} {
</tr> </tr>
" "
} }
append left_navbar_html "
<tr>
<td>[lang::message::lookup "" intranet-timesheet2.SearchTask "Search<br>by Name"]:</td>
<td><input type='text' size='17' maxlength='30' name='search_task' value='$search_task'></td>
</tr>
"
append left_navbar_html " append left_navbar_html "
<tr><td></td><td><input type=submit value='Go'></td></tr> <tr><td></td><td><input type=submit value='Go'></td></tr>
</table> </table>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment