diff options
Diffstat (limited to 'FS')
| -rw-r--r-- | FS/FS/cust_pkg.pm | 23 | 
1 files changed, 19 insertions, 4 deletions
| diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index 3df6f3086..a3dccc663 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -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 | 
