fix multiple pkgpart search, RT#5924
authorivan <ivan>
Wed, 12 Aug 2009 02:36:41 +0000 (02:36 +0000)
committerivan <ivan>
Wed, 12 Aug 2009 02:36:41 +0000 (02:36 +0000)
FS/FS/cust_pkg.pm
httemplate/misc/bulk_change_pkg.cgi
httemplate/search/cust_pkg.cgi

index 3df6f30..a3dccc6 100644 (file)
@@ -1800,7 +1800,7 @@ active, inactive, suspended, one-time charge, inactive, cancel (or cancelled)
 
 =item pkgpart
 
-list specified how?
+pkgpart or arrayref or hashref of pkgparts
 
 =item setup
 
@@ -1926,9 +1926,24 @@ sub search_sql {
   # parse part_pkg
   ###
 
-  my $pkgpart = join (' OR pkgpart=',
-                      grep {$_} map { /^(\d+)$/; } ($params->{'pkgpart'}));
-  push @where,  '(pkgpart=' . $pkgpart . ')' if $pkgpart;
+  if ( ref($params->{'pkgpart'}) ) {
+
+    my @pkgpart = ();
+    if ( ref($params->{'pkgpart'}) eq 'HASH' ) {
+      @pkgpart = grep $params->{'pkgpart'}{$_}, keys %{ $params->{'pkgpart'} };
+    } elsif ( ref($params->{'pkgpart'}) eq 'ARRAY' ) {
+      @pkgpart = @{ $params->{'pkgpart'} };
+    } else {
+      die 'unhandled pkgpart ref '. $params->{'pkgpart'};
+    }
+
+    @pkgpart = grep /^(\d+)$/, @pkgpart;
+
+    push @where, 'pkgpart IN ('. join(',', @pkgpart). ')';
+
+  } elsif ( $params->{'pkgpart'} =~ /^(\d+)$/ ) {
+    push @where, "pkgpart = $1";
+  } 
 
   ###
   # parse dates
index 9334985..845cf36 100755 (executable)
@@ -7,17 +7,23 @@
 
 <FORM ACTION="<% $p %>misc/process/bulk_change_pkg.cgi" METHOD=POST>
 
-<INPUT TYPE="hidden" NAME="query" VALUE="<% $cgi->keywords %>">
-%  for my $param (qw(agentnum magic status classnum pkgpart)) {
-<INPUT TYPE="hidden" NAME="<% $param %>" VALUE="<% $cgi->param($param) %>">
+%# some false laziness w/search/cust_pkg.cgi
+
+<INPUT TYPE="hidden" NAME="query" VALUE="<% $cgi->keywords |h %>">
+%  for my $param (qw(agentnum magic status classnum custom censustract)) {
+<INPUT TYPE="hidden" NAME="<% $param %>" VALUE="<% $cgi->param($param) |h %>">
 %  }
 %
+% foreach my $pkgpart ($cgi->param('pkgpart')) {
+<INPUT TYPE="hidden" NAME="pkgpart" VALUE="<% $pkgpart |h %>">
+% }
+%
 % foreach my $field (qw( setup last_bill bill adjourn susp expire cancel )) {
 % 
-  <INPUT TYPE="hidden" NAME="<% $field %>begin" VALUE="<% $cgi->param("${field}.begin") %>">
-  <INPUT TYPE="hidden" NAME="<% $field %>beginning" VALUE="<% $cgi->param("${field}beginning") %>">
-  <INPUT TYPE="hidden" NAME="<% $field %>end" VALUE="<% $cgi->param("${field}.end") %>">
-  <INPUT TYPE="hidden" NAME="<% $field %>ending" VALUE="<% $cgi->param("${field}.ending") %>">
+  <INPUT TYPE="hidden" NAME="<% $field %>begin" VALUE="<% $cgi->param("${field}.begin") |h %>">
+  <INPUT TYPE="hidden" NAME="<% $field %>beginning" VALUE="<% $cgi->param("${field}beginning") |h %>">
+  <INPUT TYPE="hidden" NAME="<% $field %>end" VALUE="<% $cgi->param("${field}.end") |h %>">
+  <INPUT TYPE="hidden" NAME="<% $field %>ending" VALUE="<% $cgi->param("${field}.ending") |h %>">
 % }
 
 <% ntable('#cccccc') %>
index 8ad3dc5..1d5349d 100755 (executable)
@@ -138,16 +138,16 @@ die "access denied"
 
 # my %part_pkg = map { $_->pkgpart => $_ } qsearch('part_pkg', {});
 
-
 my %search_hash = ();
 
 $search_hash{'query'} = $cgi->keywords;
 
-for my $param (qw(agentnum magic status classnum pkgpart)) {
-  $search_hash{$param} = $cgi->param($param)
-    if $cgi->param($param);
+for my $param (qw( agentnum magic status classnum )) {
+  $search_hash{$param} = $cgi->param($param) if $cgi->param($param);
 }
 
+$search_hash{'pkgpart'} = [ $cgi->param('pkgpart') ];
+
 ###
 # parse dates
 ###