From df21571ae9b56b8645c53053fdabc78ca6eeffed Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Mon, 28 Mar 2016 17:29:35 -0700 Subject: [PATCH] optimize customer list, RT#30173 --- FS/FS/cust_main.pm | 6 +++++- httemplate/search/cust_main.cgi | 18 ++++++++++++++---- 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; % -- 2.11.0