diff options
author | Ivan Kohler <ivan@freeside.biz> | 2016-03-09 11:17:03 -0800 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2016-03-09 11:17:03 -0800 |
commit | d9f0a98539cd8dd957ea9a4b5d77fbb739d43d2e (patch) | |
tree | 7965730b96115c1bfb5dd4e5dc6b31f98a873bb4 /httemplate | |
parent | 796780078517c26803a7689ccd80931381de23ea (diff) |
package filters in a large package list, RT#39822
Diffstat (limited to 'httemplate')
-rw-r--r-- | httemplate/elements/select-cust_location.html | 65 | ||||
-rw-r--r-- | httemplate/elements/select-table.html | 2 | ||||
-rw-r--r-- | httemplate/elements/tr-select-cust_location.html | 35 | ||||
-rwxr-xr-x | httemplate/view/cust_main/packages.html | 94 |
4 files changed, 163 insertions, 33 deletions
diff --git a/httemplate/elements/select-cust_location.html b/httemplate/elements/select-cust_location.html new file mode 100644 index 000000000..29563c50e --- /dev/null +++ b/httemplate/elements/select-cust_location.html @@ -0,0 +1,65 @@ +<SELECT NAME = "locationnum" + ID = "locationnum" +% if ( $opt{onchange} ) { + onchange = "<% $opt{onchange} %>" +% } + > + +% #false laziness w/select-table.html +% my @pre_options = $opt{pre_options} ? @{ $opt{pre_options} } : (); +% while ( @pre_options ) { +% my $pre_opt = shift(@pre_options); +% my $pre_label = shift(@pre_options); +% my $selected = #$opt{'all_selected'} +% # || ( ref($locationnum) && $locationnum->{$pre_opt} ) +% # || +% ( $locationnum eq $pre_opt ); + <OPTION VALUE="<% $pre_opt %>" + <% $selected ? 'SELECTED' : '' %> + ><% $pre_label %> +% } + +% if ( $cust_main ) { +% my $selected = ( $locationnum == $cust_main->ship_locationnum ); + <OPTION VALUE="<% $cust_main->ship_locationnum %>" + <% $selected ? 'SELECTED' : '' %> + ><% $opt{'empty_label'} || '(default service address)' |h %> +% } + +% if ( $opt{'is_optional'} ) { + <OPTION VALUE="-2" <% $locationnum == -2 ? 'SELECTED' : ''%>><% $opt{'optional_label'} || '(not required)' |h %> +% } + +% foreach my $loc ( @{ $opt{cust_location} } ) { +% # don't show the ship_location redundantly +% next if $cust_main && $cust_main->ship_locationnum == $loc->locationnum; + <OPTION VALUE="<% $loc->locationnum %>" + <% $locationnum == $loc->locationnum ? 'SELECTED' : '' %> + ><% $loc->line( cust_main => $cust_main, + countrydefault => $countrydefault, + ) + |h %> +% } + +% if ( $addnew ) { + <OPTION VALUE="-1" + <% $locationnum == -1 ? 'SELECTED' : '' %> + >Add new location +% } + +</SELECT> +<%init> + +my $conf = new FS::Conf; +my $countrydefault = $conf->config('countrydefault') || 'US'; + +my %opt = @_; +my $cust_main = $opt{'cust_main'}; +my $locationnum = $opt{'curr_value'}; + +$opt{'cust_location'} ||= [ $cust_main ? $cust_main->cust_location : () ]; + +my $addnew = exists($opt{addnew}) ? $opt{addnew} + : $cust_main ? 1 : ( $locationnum>0 ? 0 : 1 ); + +</%init> diff --git a/httemplate/elements/select-table.html b/httemplate/elements/select-table.html index d7ec015f3..6fb6b388b 100644 --- a/httemplate/elements/select-table.html +++ b/httemplate/elements/select-table.html @@ -159,7 +159,7 @@ my $key = $opt{'value_col'} || $dbdef_table->primary_key; my $name_col = $opt{'name_col'}; -my $value = $opt{'curr_value'} || $opt{'value'}; +my $value = exists($opt{'curr_value'}) ? $opt{'curr_value'} : $opt{'value'}; $value = [ split(/\s*,\s*/, $value) ] if $opt{'multiple'} && $value =~ /,/; #my $addl_from = $opt{'addl_from'} || ''; diff --git a/httemplate/elements/tr-select-cust_location.html b/httemplate/elements/tr-select-cust_location.html index 7a5b43bb8..3078f2cbe 100644 --- a/httemplate/elements/tr-select-cust_location.html +++ b/httemplate/elements/tr-select-cust_location.html @@ -183,33 +183,14 @@ Example: <TR> <<%$th%> ALIGN="right"><% $opt{'label'} || emt('Service location') %></<%$th%>> <TD COLSPAN=7> - <SELECT NAME = "locationnum" - ID = "locationnum" - onchange = "locationnum_changed(this);" - > -% if ( $cust_main ) { - <OPTION VALUE="<% $cust_main->ship_locationnum %>"><% $opt{'empty_label'} || '(default service address)' |h %> -% } -% if ( $opt{'is_optional'} ) { - <OPTION VALUE="-2" <% $locationnum == -2 ? 'SELECTED' : ''%>><% $opt{'optional_label'} || '(not required)' |h %> -% } -% -% foreach my $loc ( @cust_location ) { -% # don't show the ship_location redundantly -% next if $cust_main && $cust_main->ship_locationnum == $loc->locationnum; - <OPTION VALUE="<% $loc->locationnum %>" - <% $locationnum == $loc->locationnum ? 'SELECTED' : '' %> - ><% $loc->line( cust_main => $cust_main, - countrydefault => $countrydefault, - ) - |h %> -% } -% if ( $addnew ) { - <OPTION VALUE="-1" - <% $locationnum == -1 ? 'SELECTED' : '' %> - >Add new location -% } - </SELECT> + + <& /elements/select-cust_location.html, + %opt, + 'curr_value' => $locationnum, + 'cust_location' => \@cust_location, + 'onchange' => 'locationnum_changed(this);', + &> + </TD> </TR> diff --git a/httemplate/view/cust_main/packages.html b/httemplate/view/cust_main/packages.html index ddd92b3b0..9add4b2ad 100755 --- a/httemplate/view/cust_main/packages.html +++ b/httemplate/view/cust_main/packages.html @@ -44,6 +44,7 @@ table.hiddenrows { } </STYLE> + % # activate rolldown buttons for hidden package blocks <SCRIPT TYPE="text/javascript"> function toggle_rolldown() { @@ -79,10 +80,71 @@ for (var i = 0; i < all_buttons.length; i++) { if ( el ) el.scrollIntoView(true); </&> </SCRIPT> + <TABLE> <TR> <TD ALIGN="left" VALIGN="top"> +% my $br = 0; + +% if ( $total_pkgs > $maxrecords ) { + +% if ( 1 ) { #FS::pkg_class->num_pkg_class ) { + <% $br++ ? ' | ' : '' %> + Class: <& /elements/select-cust-pkg_class.html, + curr_value => scalar($cgi->param('classnum')), + onchange => 'classnum_changed(this);', + pre_options => [ '-1' => 'all', + '0' => '(none)', + ], + &> +% } + + <% $br++ ? ' | ' : '' %> + Status: <& /elements/select-cust_pkg-status.html, + curr_value => scalar($cgi->param('status')), + onchange => 'status_changed(this);', + &> + +% if ( 1 ) { #$cust_main->num_cust_location ) { + <% $br++ ? ' | ' : '' %> + Location: <& /elements/select-cust_location.html, + cust_main => $cust_main, + curr_value => scalar($cgi->param('locationnum')), + addnew => 0, + onchange => 'locationnum_changed(this);', + pre_options => [ '-1' => 'all', ], + &> +% } + + <SCRIPT TYPE="text/javascript"> + + function classnum_changed(what) { +% my $classnum = $cgi->param('classnum'); +% $cgi->delete('classnum'); + window.location = '<% $cgi->self_url %>;classnum=' + what.options[what.selectedIndex].value; +% $cgi->param('classnum', $classnum); + } + + function status_changed(what) { +% my $status = $cgi->param('status'); +% $cgi->delete('status'); + window.location = '<% $cgi->self_url %>;status=' + what.options[what.selectedIndex].value; +% $cgi->param('status', $status); + } + + function locationnum_changed(what) { +% my $locationnum = $cgi->param('locationnum'); +% $cgi->delete('locationnum'); + window.location = '<% $cgi->self_url %>;locationnum=' + what.options[what.selectedIndex].value; +% $cgi->param('locationnum', $locationnum); + } + + </SCRIPT> + +% } + +<% $br++ ? ' | ' : '' %> % if ( $cust_main->num_cancelled_pkgs ) { % if ( $cgi->param('showcancelledpackages') eq '0' #see if it was set by me % || ( $conf->exists('hidecancelledpackages') @@ -92,24 +154,25 @@ if ( el ) el.scrollIntoView(true); % { % my $prev = $cgi->param('showcancelledpackages'); % $cgi->param('showcancelledpackages', 1); - ( <a href="<% $cgi->self_url %>"><% mt('show') |h %> + <a href="<% $cgi->self_url %>"><% mt('show') |h %> % $cgi->param('showcancelledpackages', $prev); % } else { % $cgi->param('showcancelledpackages', 0); - ( <a href="<% $cgi->self_url %>"><% mt('hide') |h %> + <a href="<% $cgi->self_url %>"><% mt('hide') |h %> % $cgi->param('showcancelledpackages', 1); % } - <% mt('cancelled packages') |h %></a> ) + <% mt('cancelled packages') |h %></a> % } +<% $br++ ? ' | ' : '' %> % if ( $cgi->param('showoldpackages') ) { % $cgi->param('showoldpackages', 0); - ( <a href="<% $cgi->self_url %>"><% mt('hide old packages') |h %></a> ) + <a href="<% $cgi->self_url %>"><% mt('hide old packages') |h %></a> % $cgi->param('showoldpackages', 1); % } else { % $cgi->param('showoldpackages', 1); - ( <a href="<% $cgi->self_url %>"><% mt('show old packages') |h %></a> ) + <a href="<% $cgi->self_url %>"><% mt('show old packages') |h %></a> % $cgi->param('showoldpackages', 0); % } @@ -218,6 +281,27 @@ unless ( $cgi->param('showoldpackages') ) { )"; } +if ( $cgi->param('classnum') =~ /^(\d+)$/ ) { + my $classnum = $1; + if ( $classnum == 0 ) { + $extra_sql .= " AND part_pkg.classnum IS NULL "; + } else { + $extra_sql .= " AND part_pkg.classnum = $classnum "; + } +} + +if ( $cgi->param('status') =~ /^([\w ]+)$/ ) { + my $status = $1; + $extra_sql .= ' AND '. FS::cust_pkg->status_sql. " = '$status' "; +} + +if ( $cgi->param('locationnum') =~ /^(\d+)$/ ) { + my $locationnum = $1; + $extra_sql .= " AND cust_pkg.locationnum = $locationnum "; +} + +my $total_pkgs = $cust_main->all_pkgs; + my $num_method = $hide_cancelled ? 'ncancelled_pkgs' : 'all_pkgs'; my $num_pkgs = $cust_main->$num_method({ 'addl_from' => $addl_from, |