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

index 396ae07..4e57fbf 100644 (file)
@@ -2295,7 +2295,7 @@ active, inactive, suspended, one-time charge, inactive, cancel (or cancelled)
 
 =item pkgpart
 
 
 =item pkgpart
 
-list specified how?
+pkgpart or arrayref or hashref of pkgparts
 
 =item setup
 
 
 =item setup
 
@@ -2463,9 +2463,24 @@ sub search_sql {
   # parse part_pkg
   ###
 
   # 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
 
   ###
   # parse dates
index 3bb6775..7f47a84 100755 (executable)
@@ -7,17 +7,23 @@
 
 <FORM ACTION="<% $p %>misc/process/bulk_change_pkg.cgi" METHOD=POST>
 
 
 <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 )) {
 % 
 % 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') %>
 % }
 
 <% ntable('#cccccc') %>
index f6a3620..f03bbc2 100755 (executable)
@@ -158,18 +158,22 @@ my $money_char = $conf->config('money_char') || '$';
 
 # my %part_pkg = map { $_->pkgpart => $_ } qsearch('part_pkg', {});
 
 
 # my %part_pkg = map { $_->pkgpart => $_ } qsearch('part_pkg', {});
 
-  my %search_hash = ();
+my %search_hash = ();
+
+#some false laziness w/misc/bulk_change_pkg.cgi
   
   
-  $search_hash{'query'} = $cgi->keywords;
+$search_hash{'query'} = $cgi->keywords;
   
   
-  for ( qw(agentnum magic status classnum pkgpart custom ) ) {
-    $search_hash{$_} = $cgi->param($_) if $cgi->param($_);
-  }
-
-  for my $param ( qw(censustract) ) {
-    $search_hash{$param} = $cgi->param($param) || ''
-      if ( grep { /$param/ } $cgi->param );
-  }
+for (qw( agentnum magic status classnum custom )) {
+  $search_hash{$_} = $cgi->param($_) if $cgi->param($_);
+}
+
+$search_hash{'pkgpart'} = [ $cgi->param('pkgpart') ];
+
+for my $param ( qw(censustract) ) {
+  $search_hash{$param} = $cgi->param($param) || ''
+    if ( grep { /$param/ } $cgi->param );
+}
 
 my @report_option = $cgi->param('report_option')
   if $cgi->param('report_option');
 
 my @report_option = $cgi->param('report_option')
   if $cgi->param('report_option');