summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorivan <ivan>2009-03-30 06:10:18 +0000
committerivan <ivan>2009-03-30 06:10:18 +0000
commitcec41a47c4cbb9eda007713e376970addc9ac626 (patch)
tree8276c33daee3ac0789c4b52cc38035bcb7ef8f69 /FS
parent5a66188aae7af4c05345c358f181b523fb2270fa (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.pm43
-rw-r--r--FS/FS/cust_pkg.pm3
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 @_;