diff options
author | ivan <ivan> | 2009-03-30 06:10:18 +0000 |
---|---|---|
committer | ivan <ivan> | 2009-03-30 06:10:18 +0000 |
commit | cec41a47c4cbb9eda007713e376970addc9ac626 (patch) | |
tree | 8276c33daee3ac0789c4b52cc38035bcb7ef8f69 /FS | |
parent | 5a66188aae7af4c05345c358f181b523fb2270fa (diff) |
okay. counts are needed for the package sort, so push the embedded counting into cust_main.pm. sure hope this does it. RT#5083
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/cust_main.pm | 43 | ||||
-rw-r--r-- | FS/FS/cust_pkg.pm | 3 |
2 files changed, 32 insertions, 14 deletions
diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index 256eb732f..cc399838e 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -1819,17 +1819,13 @@ sub all_pkgs { my $self = shift; my $extra_qsearch = ref($_[0]) ? shift : {}; - return $self->num_pkgs unless wantarray; #XXX doesn't work w/$extra_qsearch + return $self->num_pkgs unless wantarray || keys(%$extra_qsearch); my @cust_pkg = (); if ( $self->{'_pkgnum'} ) { @cust_pkg = values %{ $self->{'_pkgnum'}->cache }; } else { - @cust_pkg = qsearch({ - %$extra_qsearch, - 'table' => 'cust_pkg', - 'hashref' => { 'custnum' => $self->custnum }, - }); + @cust_pkg = $self->_cust_pkg($extra_qsearch); } sort sort_packages @cust_pkg; @@ -1885,11 +1881,7 @@ sub ncancelled_pkgs { $extra_qsearch->{'extra_sql'} .= ' AND ( cancel IS NULL OR cancel = 0 ) '; - @cust_pkg = qsearch({ - %$extra_qsearch, - 'table' => 'cust_pkg', - 'hashref' => { 'custnum' => $self->custnum }, - }); + @cust_pkg = $self->_cust_pkg($extra_qsearch); } @@ -1897,6 +1889,27 @@ sub ncancelled_pkgs { } +sub _cust_pkg { + my $self = shift; + my $extra_qsearch = ref($_[0]) ? shift : {}; + + $extra_qsearch->{'select'} ||= '*'; + $extra_qsearch->{'select'} .= + ',( SELECT COUNT(*) FROM cust_svc WHERE cust_pkg.pkgnum = cust_svc.pkgnum ) + AS _num_cust_svc'; + + map { + $_->{'_num_cust_svc'} = $_->get('_num_cust_svc'); + $_; + } + qsearch({ + %$extra_qsearch, + 'table' => 'cust_pkg', + 'hashref' => { 'custnum' => $self->custnum }, + }); + +} + # This should be generalized to use config options to determine order. sub sort_packages { @@ -1906,11 +1919,13 @@ sub sort_packages { #shouldn't get here... return 0; } else { + my $a_num_cust_svc = $a->num_cust_svc; + my $b_num_cust_svc = $b->num_cust_svc; + 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; my @a_cust_svc = $a->cust_svc; my @b_cust_svc = $b->cust_svc; - return 0 if !scalar(@a_cust_svc) && !scalar(@b_cust_svc); - return -1 if scalar(@a_cust_svc) && !scalar(@b_cust_svc); - return 1 if !scalar(@a_cust_svc) && scalar(@b_cust_svc); $a_cust_svc[0]->svc_x->label cmp $b_cust_svc[0]->svc_x->label; } diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index 348b1e498..902b1d325 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -1500,6 +1500,9 @@ sub num_cust_svc { && exists($self->{'_num_cust_svc'}) && $self->{'_num_cust_svc'} =~ /\d/; + cluck "cust_pkg->num_cust_svc called, _num_cust_svc:".$self->{'_num_cust_svc'} + if $DEBUG > 2; + my $sql = 'SELECT COUNT(*) FROM cust_svc WHERE pkgnum = ?'; $sql .= ' AND svcpart = ?' if @_; |