summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2009-03-30 04:15:56 +0000
committerivan <ivan>2009-03-30 04:15:56 +0000
commit613f320ae076de8612ff80fc99c516b544ff3897 (patch)
tree42b8a19bc25b01ecda0f85871f46c3e227dc1794
parentc13fb7ce1d8cba28ae0d56802b71856b0b7995ea (diff)
try not to search for nothing in cust_svc so much, RT#5083
-rw-r--r--FS/FS/cust_pkg.pm29
-rwxr-xr-xhttemplate/view/cust_main/packages.html12
2 files changed, 29 insertions, 12 deletions
diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm
index 44e1210fe..78f4bedb9 100644
--- a/FS/FS/cust_pkg.pm
+++ b/FS/FS/cust_pkg.pm
@@ -2,6 +2,7 @@ package FS::cust_pkg;
use strict;
use vars qw(@ISA $disable_agentcheck $DEBUG);
+use Carp qw(cluck);
use Scalar::Util qw( blessed );
use List::Util qw(max);
use Tie::IxHash;
@@ -1220,14 +1221,11 @@ L<FS::part_pkg>).
=cut
-use Carp qw(cluck);
sub part_pkg {
my $self = shift;
- cluck "part_pkg called" if $DEBUG > 1 && ! $self->{'_pkgpart'};
- #exists( $self->{'_pkgpart'} )
- $self->{'_pkgpart'}
- ? $self->{'_pkgpart'}
- : qsearchs( 'part_pkg', { 'pkgpart' => $self->pkgpart } );
+ return $self->{'_pkgpart'} if $self->{'_pkgpart'};
+ cluck "cust_pkg->part_pkg called" if $DEBUG > 1;
+ qsearchs( 'part_pkg', { 'pkgpart' => $self->pkgpart } );
}
=item old_cust_pkg
@@ -1417,6 +1415,8 @@ services.
sub cust_svc {
my $self = shift;
+ cluck "cust_pkg->cust_svc called" if $DEBUG > 1;
+
if ( @_ ) {
return qsearch( 'cust_svc', { 'pkgnum' => $self->pkgnum,
'svcpart' => shift, } );
@@ -1442,7 +1442,8 @@ is specified, return only the matching services.
sub overlimit {
my $self = shift;
- grep { $_->overlimit } $self->cust_svc;
+ return () unless $self->num_cust_svc(@_);
+ grep { $_->overlimit } $self->cust_svc(@_);
}
=item h_cust_svc END_TIMESTAMP [ START_TIMESTAMP ]
@@ -1491,9 +1492,15 @@ specified, counts only the matching services.
sub num_cust_svc {
my $self = shift;
+
+ return $self->{'_num_cust_svc'}
+ if !@_ && exists($self->{'_num_cust_svc'})
+ && $self->{'_num_cust_svc'} =~ /\d/;
+
my $sql = 'SELECT COUNT(*) FROM cust_svc WHERE pkgnum = ?';
$sql .= ' AND svcpart = ?' if @_;
- my $sth = dbh->prepare($sql) or die dbh->errstr;
+
+ my $sth = dbh->prepare($sql) or die dbh->errstr;
$sth->execute($self->pkgnum, @_) or die $sth->errstr;
$sth->fetchrow_arrayref->[0];
}
@@ -1550,7 +1557,8 @@ sub part_svc {
$part_svc->{'Hash'}{'num_cust_svc'} = $num_cust_svc; #more evil
$part_svc->{'Hash'}{'num_avail'} =
max( 0, $pkg_svc->quantity - $num_cust_svc );
- $part_svc->{'Hash'}{'cust_pkg_svc'} = [ $self->cust_svc($part_svc->svcpart) ];
+ $part_svc->{'Hash'}{'cust_pkg_svc'} =
+ $num_cust_svc ? [ $self->cust_svc($part_svc->svcpart) ] : [];
$part_svc;
} $self->part_pkg->pkg_svc;
@@ -1560,7 +1568,8 @@ sub part_svc {
my $num_cust_svc = $self->num_cust_svc($part_svc->svcpart);
$part_svc->{'Hash'}{'num_cust_svc'} = $num_cust_svc; #speak no evail
$part_svc->{'Hash'}{'num_avail'} = 0; #0-$num_cust_svc ?
- $part_svc->{'Hash'}{'cust_pkg_svc'} = [ $self->cust_svc($part_svc->svcpart) ];
+ $part_svc->{'Hash'}{'cust_pkg_svc'} =
+ $num_cust_svc ? [ $self->cust_svc($part_svc->svcpart) ] : [];
$part_svc;
} $self->extra_part_svc;
diff --git a/httemplate/view/cust_main/packages.html b/httemplate/view/cust_main/packages.html
index 001e6ec82..d98de8e63 100755
--- a/httemplate/view/cust_main/packages.html
+++ b/httemplate/view/cust_main/packages.html
@@ -173,9 +173,17 @@ sub get_packages {
my $part_pkg_fields =
join(', ', map { "part_pkg.$_ AS part_pkg_$_" } fields('part_pkg') );
+ my $group_by =
+ join(', ', map "cust_pkg.$_", fields('cust_pkg') ). ', '.
+ join(', ', map "part_pkg.$_", fields('part_pkg') );
+
+ my $num_cust_svc =
+ '( SELECT COUNT(*) FROM cust_svc WHERE cust_pkg.pkgnum = cust_svc.svcnum )';
+
my @packages = $cust_main->$method( {
- 'select' => "$cust_pkg_fields, $part_pkg_fields",
- 'addl_from' => 'LEFT JOIN part_pkg USING ( pkgpart )'
+ 'select' => " $cust_pkg_fields, $part_pkg_fields, ".
+ " $num_cust_svc AS num_cust_svc ",
+ 'addl_from' => ' LEFT JOIN part_pkg USING ( pkgpart ) ',
} );
my $num_old_packages = scalar(@packages);