optimize customer list, RT#30173
[freeside.git] / FS / FS / cust_main.pm
index 906b0f3..38edd04 100644 (file)
@@ -104,7 +104,6 @@ our $custnum_display_length;
 #$FS::UID::callback{'FS::cust_main'} = sub { 
 install_callback FS::UID sub { 
   $conf = new FS::Conf;
-  #yes, need it for stuff below (prolly should be cached)
   $ignore_invalid_card    = $conf->exists('allow_invalid_cards');
   $default_agent_custid   = $conf->exists('cust_main-default_agent_custid');
   $custnum_display_length = $conf->config('cust_main-custnum-display_length');
@@ -3804,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;
+    }
   }
 }