summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2016-03-28 17:29:35 -0700
committerIvan Kohler <ivan@freeside.biz>2016-03-28 17:29:35 -0700
commitdf21571ae9b56b8645c53053fdabc78ca6eeffed (patch)
tree63f4ba9772eac6271aa6d831f2685ae9813b4bff
parent588bd40945822ce3a89e4ddd3588ebc107019410 (diff)
optimize customer list, RT#30173
-rw-r--r--FS/FS/cust_main.pm6
-rwxr-xr-xhttemplate/search/cust_main.cgi18
2 files changed, 19 insertions, 5 deletions
diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm
index 4e305fc2b..38edd0493 100644
--- a/FS/FS/cust_main.pm
+++ b/FS/FS/cust_main.pm
@@ -3803,13 +3803,17 @@ sub status { shift->cust_status(@_); }
sub cust_status {
my $self = shift;
+ return $self->hashref->{cust_status} if $self->hashref->{cust_status};
for my $status ( FS::cust_main->statuses() ) {
my $method = $status.'_sql';
my $numnum = ( my $sql = $self->$method() ) =~ s/cust_main\.custnum/?/g;
my $sth = dbh->prepare("SELECT $sql") or die dbh->errstr;
$sth->execute( ($self->custnum) x $numnum )
or die "Error executing 'SELECT $sql': ". $sth->errstr;
- return $status if $sth->fetchrow_arrayref->[0];
+ if ( $sth->fetchrow_arrayref->[0] ) {
+ $self->hashref->{cust_status} = $status;
+ return $status;
+ }
}
}
diff --git a/httemplate/search/cust_main.cgi b/httemplate/search/cust_main.cgi
index e6ab19565..c501c50ea 100755
--- a/httemplate/search/cust_main.cgi
+++ b/httemplate/search/cust_main.cgi
@@ -120,11 +120,18 @@
% foreach my $cust_pkg ( @{$all_pkgs{$custnum}} ) {
% my %cust_svc_by_svcpart;
% my $rows = 0;
-% local($FS::part_pkg::cache_enabled) = 1; #for $cust_pkg->part_svc
+% #local($FS::part_pkg::cache_enabled) = 1; #for $cust_pkg->part_svc
% local($FS::cust_svc::cache_enabled) = 1; #for $cust_svc->part_svc
-% local($FS::pkg_svc::cache_enabled) = 1; #for $pkg_svc->part_svc
+% #local($FS::pkg_svc::cache_enabled) = 1; #for $pkg_svc->part_svc
% foreach my $part_svc (
-% $cust_pkg->part_svc( summarize_size=>$large_pkg_size )
+% #$cust_pkg->part_svc( summarize_size=>$large_pkg_size )
+% qsearch({
+% 'select' => 'part_svc.*, COUNT(*) AS num_cust_svc',
+% 'table' => 'part_svc',
+% 'addl_from' => 'LEFT JOIN cust_svc USING ( svcpart )',
+% 'extra_sql' => 'WHERE pkgnum = ? GROUP BY part_svc.svcpart',
+% 'extra_param' => [ [$cust_pkg->pkgnum,'int'] ],
+% })
% ) {
% my $svcpart = $part_svc->svcpart;
% my $num_cust_svc = $part_svc->num_cust_svc;
@@ -136,7 +143,9 @@
% $rows += 2;
% }
% elsif ( $num_cust_svc ) {
-% $cust_svc_by_svcpart{$svcpart} = $part_svc->cust_pkg_svc;
+% #$cust_svc_by_svcpart{$svcpart} = $part_svc->cust_pkg_svc;
+% #further optimization opportunities: don't need to re-pull in another $part_svc object, sorting this is expensive, etc.
+% $cust_svc_by_svcpart{$svcpart} = [ $cust_pkg->cust_svc($part_svc->svcpart) ];
% $rows += $num_cust_svc;
% } #if summarize
% } #foreach $part_svc
@@ -236,6 +245,7 @@
% my $n1 = '';
% foreach ( @{$all_pkgs{$custnum}} ) {
+% local($FS::cust_svc::cache_enabled) = 1; #for $cust_svc->part_svc
% my $pkgnum = $_->pkgnum;
% my $part_pkg = $_->part_pkg;
%