X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=httemplate%2Fbrowse%2Fpart_pkg.cgi;h=37679958230ddfd61a7e0699e1d95fb7db5066b8;hb=71039cd742898a214fe7ae6f3908beb15a0270c6;hp=fdda4d54267f3fb7f59fb1e9d4b4e92012b7f865;hpb=fd438df9710dce77225b9560a887142f123b78ab;p=freeside.git diff --git a/httemplate/browse/part_pkg.cgi b/httemplate/browse/part_pkg.cgi index fdda4d542..376799582 100755 --- a/httemplate/browse/part_pkg.cgi +++ b/httemplate/browse/part_pkg.cgi @@ -76,12 +76,24 @@ if ( $cgi->param('classnum') =~ /^(\d+)$/ ) { } $cgi->delete('classnum'); +if ( $cgi->param('pkgpartbatch') =~ /^([\w\/\-\:\. ]+)$/ ) { + push @where, "pkgpartbatch = '$1' "; +} + if ( $cgi->param('missing_recur_fee') ) { - push @where, "0 = ( SELECT COUNT(*) FROM part_pkg_option - WHERE optionname = 'recur_fee' - AND part_pkg_option.pkgpart = part_pkg.pkgpart - AND CAST( optionvalue AS NUMERIC ) > 0 - )"; + push @where, "NOT EXISTS ( SELECT 1 FROM part_pkg_option + WHERE optionname = 'recur_fee' + AND part_pkg_option.pkgpart = part_pkg.pkgpart + AND CAST( optionvalue AS NUMERIC ) > 0 + )"; +} + +if ( $cgi->param('ratenum') =~ /^(\d+)$/ ) { + push @where, "EXISTS( SELECT 1 FROM part_pkg_option + WHERE optionname LIKE '%ratenum' + AND optionvalue = '$1' + AND part_pkg_option.pkgpart = part_pkg.pkgpart + )"; } if ( $cgi->param('family') =~ /^(\d+)$/ ) { @@ -108,6 +120,14 @@ my $count_cust_pkg = " WHERE cust_pkg.pkgpart = part_pkg.pkgpart AND $agentnums_sql "; +my $count_cust_pkg_cancel = " + SELECT COUNT(*) FROM cust_pkg LEFT JOIN cust_main USING ( custnum ) + LEFT JOIN cust_pkg AS cust_pkg_next + ON (cust_pkg.pkgnum = cust_pkg_next.change_pkgnum) + WHERE cust_pkg.pkgpart = part_pkg.pkgpart + AND $agentnums_sql + AND cust_pkg.cancel IS NOT NULL AND cust_pkg.cancel != 0 +"; $select = " @@ -137,11 +157,16 @@ $select = " AND ( setup IS NULL OR setup = 0 ) ) AS num_on_hold, - ( $count_cust_pkg - AND cancel IS NOT NULL AND cancel != 0 + ( $count_cust_pkg_cancel + AND (cust_pkg_next.pkgnum IS NULL + OR cust_pkg_next.pkgpart != cust_pkg.pkgpart) ) AS num_cancelled "; +# About the num_cancelled expression: packages that were changed, but +# kept the same pkgpart, are considered "moved", not "canceled" (because +# this is the part_pkg UI). We could show the count of those but it's +# probably not interesting. my $html_init = qq! One or more service definitions are grouped together into a package @@ -392,7 +417,8 @@ push @fields, sub { #agent type if ( $acl_edit_global ) { #really we just want a count, but this is fine unless someone has tons - my @all_agent_types = map {$_->typenum} qsearch('agent_type',{}); + my @all_agent_types = map {$_->typenum} + qsearch('agent_type', { 'disabled'=>'' }); if ( scalar(@all_agent_types) > 1 ) { push @header, 'Agent types'; my $typelink = $p. 'edit/agent_type.cgi?'; @@ -419,15 +445,7 @@ if ( $acl_edit_global ) { #if ( $cgi->param('active') ) { push @header, 'Customer
packages'; - my %col = ( - 'on hold' => '7E0079', #purple! - 'not yet billed' => '009999', #teal? cyan? - 'active' => '00CC00', - 'suspended' => 'FF9900', - 'cancelled' => 'FF0000', - #'one-time charge' => '000000', - 'charge' => '000000', - ); + my %col = %{ FS::cust_pkg->statuscolors }; my $cust_pkg_link = $p. 'search/cust_pkg.cgi?pkgpart='; push @fields, sub { my $part_pkg = shift; [ @@ -527,6 +545,7 @@ push @fields, }, ]; } + sort grep { $options{$_} =~ /\S/ } grep { $_ !~ /^(setup|recur)_fee$/ and $_ !~ /^report_option_\d+$/ }