From d1014a727cefa5d9813153594541f62ec15fc8b9 Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 12 Aug 2009 02:36:25 +0000 Subject: [PATCH] fix multiple pkgpart search, RT#5924 --- FS/FS/cust_pkg.pm | 23 +++++++++++++++++++---- httemplate/misc/bulk_change_pkg.cgi | 20 +++++++++++++------- httemplate/search/cust_pkg.cgi | 24 ++++++++++++++---------- 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 @@
- -% for my $param (qw(agentnum magic status classnum pkgpart)) { - +%# some false laziness w/search/cust_pkg.cgi + + +% for my $param (qw(agentnum magic status classnum custom censustract)) { + % } % +% foreach my $pkgpart ($cgi->param('pkgpart')) { + +% } +% % foreach my $field (qw( setup last_bill bill adjourn susp expire cancel )) { % - "> - "> - "> - "> + "> + "> + "> + "> % } <% 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'); -- 2.11.0