optimize customer list, RT#20173
[freeside.git] / FS / FS / cust_svc.pm
index 9d7eb7a..7d29749 100644 (file)
@@ -2,7 +2,7 @@ package FS::cust_svc;
 
 use strict;
 use vars qw( @ISA $DEBUG $me $ignore_quantity $conf $ticket_system );
-use Carp;
+use Carp qw(cluck);
 #use Scalar::Util qw( blessed );
 use List::Util qw( max );
 use FS::Conf;
@@ -32,6 +32,15 @@ FS::UID->install_callback( sub {
   $ticket_system = $conf->config('ticket_system')
 });
 
+our $cache_enabled = 0;
+
+sub _simplecache {
+  my( $self, $hashref ) = @_;
+  if ( $cache_enabled && $hashref->{'svc'} ) {
+    $self->{'_svcpart'} = FS::part_svc->new($hashref);
+  }
+}
+
 sub _cache {
   my $self = shift;
   my ( $hashref, $cache ) = @_;
@@ -492,9 +501,9 @@ L<FS::part_svc>).
 
 sub part_svc {
   my $self = shift;
-  $self->{'_svcpart'}
-    ? $self->{'_svcpart'}
-    : qsearchs( 'part_svc', { 'svcpart' => $self->svcpart } );
+  return $self->{_svcpart} if $self->{_svcpart};
+  cluck 'cust_svc->part_svc called' if $DEBUG;
+  qsearchs( 'part_svc', { 'svcpart' => $self->svcpart } );
 }
 
 =item cust_pkg
@@ -1119,7 +1128,7 @@ sub _check_provision_hold {
 
   # check status of cust_pkg
   my $cust_pkg = $self->cust_pkg;
-  return '' unless $cust_pkg->status eq 'on hold';
+  return '' unless $cust_pkg && $cust_pkg->status eq 'on hold';
 
   # check flag on this svc
   # small false laziness with $self->pkg_svc