summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2009-08-12 02:36:25 +0000
committerivan <ivan>2009-08-12 02:36:25 +0000
commitd1014a727cefa5d9813153594541f62ec15fc8b9 (patch)
tree91a269d4aff32f51ecb4dfaddfd1751744c66bbf
parentc670aeaa5896a9d62dd1bd093b4b13dba0a52c68 (diff)
fix multiple pkgpart search, RT#5924
-rw-r--r--FS/FS/cust_pkg.pm23
-rwxr-xr-xhttemplate/misc/bulk_change_pkg.cgi20
-rwxr-xr-xhttemplate/search/cust_pkg.cgi24
3 files changed, 46 insertions, 21 deletions
diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm
index 396ae07cc..4e57fbf2d 100644
--- a/FS/FS/cust_pkg.pm
+++ b/FS/FS/cust_pkg.pm
@@ -2295,7 +2295,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
@@ -2463,9 +2463,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
diff --git a/httemplate/misc/bulk_change_pkg.cgi b/httemplate/misc/bulk_change_pkg.cgi
index 3bb677581..7f47a84cf 100755
--- a/httemplate/misc/bulk_change_pkg.cgi
+++ b/httemplate/misc/bulk_change_pkg.cgi
@@ -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') %>
diff --git a/httemplate/search/cust_pkg.cgi b/httemplate/search/cust_pkg.cgi
index f6a3620d3..f03bbc26b 100755
--- a/httemplate/search/cust_pkg.cgi
+++ b/httemplate/search/cust_pkg.cgi
@@ -158,18 +158,22 @@ my $money_char = $conf->config('money_char') || '$';
# 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');