X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_main%2FPackages.pm;h=343112da1a18188890447af5c732592989cc09f8;hb=7b5d2054b431a0fedf269bb98909a3c4cf8e1ba2;hp=19ee63aa43f2588e81a74d9735be5abc77cd59f1;hpb=9049947bceb63fd795aab13ee5a17b17f180a4aa;p=freeside.git diff --git a/FS/FS/cust_main/Packages.pm b/FS/FS/cust_main/Packages.pm index 19ee63aa4..343112da1 100644 --- a/FS/FS/cust_main/Packages.pm +++ b/FS/FS/cust_main/Packages.pm @@ -1,7 +1,7 @@ package FS::cust_main::Packages; use strict; -use vars qw( $DEBUG $me ); +use vars qw( $DEBUG $me $skip_label_sort ); use List::Util qw( min ); use FS::UID qw( dbh ); use FS::Record qw( qsearch qsearchs ); @@ -12,6 +12,7 @@ use FS::cust_location; # $DEBUG = 0; $me = '[FS::cust_main::Packages]'; +$skip_label_sort = 0; =head1 NAME @@ -419,7 +420,9 @@ sub all_pkgs { @cust_pkg = $self->_cust_pkg($extra_qsearch); } + local($skip_label_sort) = 1 if $extra_qsearch->{skip_label_sort}; map { $_ } sort sort_packages @cust_pkg; + } =item cust_pkg @@ -467,10 +470,31 @@ sub ncancelled_pkgs { } + local($skip_label_sort) = 1 if $extra_qsearch->{skip_label_sort}; sort sort_packages @cust_pkg; } +=item cancelled_pkgs [ EXTRA_QSEARCH_PARAMS_HASHREF ] + +Returns all cancelled packages (see L) for this customer. + +=cut + +sub cancelled_pkgs { + my $self = shift; + my $extra_qsearch = ref($_[0]) ? shift : { @_ }; + + return $self->num_cancelled_pkgs($extra_qsearch) unless wantarray; + + $extra_qsearch->{'extra_sql'} .= + ' AND cust_pkg.cancel IS NOT NULL AND cust_pkg.cancel > 0 '; + + local($skip_label_sort) = 1 if $extra_qsearch->{skip_label_sort}; + + sort sort_packages $self->_cust_pkg($extra_qsearch); +} + sub _cust_pkg { my $self = shift; my $extra_qsearch = ref($_[0]) ? shift : {}; @@ -509,7 +533,8 @@ sub sort_packages { return 0 if !$a_num_cust_svc && !$b_num_cust_svc; return -1 if $a_num_cust_svc && !$b_num_cust_svc; return 1 if !$a_num_cust_svc && $b_num_cust_svc; - return 0 if $a_num_cust_svc + $b_num_cust_svc > 20; #for perf, just give up + return 0 if $skip_label_sort + || $a_num_cust_svc + $b_num_cust_svc > 20; #for perf, just give up my @a_cust_svc = $a->cust_svc_unsorted; my @b_cust_svc = $b->cust_svc_unsorted; return 0 if !scalar(@a_cust_svc) && !scalar(@b_cust_svc); @@ -532,12 +557,14 @@ sub suspended_pkgs { grep { $_->susp } $self->ncancelled_pkgs; } -=item unflagged_suspended_pkgs - -Returns all unflagged suspended packages (see L) for this -customer (thouse packages without the `manual_flag' set). - -=cut +### This appears to be unused, will be going away +# +#=item unflagged_suspended_pkgs +# +#Returns all unflagged suspended packages (see L) for this +#customer (thouse packages without the `manual_flag' set). +# +#=cut sub unflagged_suspended_pkgs { my $self = shift; @@ -574,6 +601,21 @@ sub active_pkgs { $self->unsuspended_pkgs; } +=item ncancelled_active_pkgs + +Returns all non-cancelled packages (see L) for this customer that +are active (recurring). + +=cut + +sub ncancelled_active_pkgs { + my $self = shift; + grep { my $part_pkg = $_->part_pkg; + $part_pkg->freq ne '' && $part_pkg->freq ne '0'; + } + $self->ncancelled_pkgs; +} + =item billing_pkgs Returns active packages, and also any suspended packages which are set to