RT#28526: Package tab takes a long time to load with lots of packages
authorJonathan Prykop <jonathan@freeside.biz>
Tue, 28 Apr 2015 19:22:20 +0000 (14:22 -0500)
committerJonathan Prykop <jonathan@freeside.biz>
Tue, 28 Apr 2015 19:22:20 +0000 (14:22 -0500)
FS/FS/cust_pkg.pm
httemplate/view/cust_main/packages/section.html
httemplate/view/cust_main/packages/status.html

index 6b9a846..07e02f9 100644 (file)
@@ -3495,6 +3495,9 @@ cust_pkg status is 'suspended' and expire is set
 to cancel package within the next day (or however
 many days are set in global config part_pkg-delay_cancel-days.
 
+Accepts option I<part_pkg-delay_cancel-days> which should be
+the value of the config setting, to avoid looking it up again.
+
 This is not a real status, this only meant for hacking display 
 values, because otherwise treating the package as suspended is 
 really the whole point of the delay_cancel option.
@@ -3502,15 +3505,18 @@ really the whole point of the delay_cancel option.
 =cut
 
 sub is_status_delay_cancel {
-  my ($self) = @_;
+  my ($self,%opt) = @_;
   if ( $self->main_pkgnum and $self->pkglinknum ) {
     return $self->main_pkg->is_status_delay_cancel;
   }
   return 0 unless $self->part_pkg->option('delay_cancel',1);
   return 0 unless $self->status eq 'suspended';
   return 0 unless $self->expire;
-  my $conf = new FS::Conf;
-  my $expdays = $conf->config('part_pkg-delay_cancel-days') || 1;
+  my $expdays = $opt{'part_pkg-delay_cancel-days'};
+  unless ($expdays) {
+    my $conf = new FS::Conf;
+    $expdays = $conf->config('part_pkg-delay_cancel-days') || 1;
+  }
   my $expsecs = 60*60*24*$expdays;
   return 0 unless $self->expire < time + $expsecs;
   return 1;
index ce965c5..7a85d6b 100755 (executable)
@@ -116,6 +116,7 @@ my %conf_opt = (
   #for status.html
   'cust_pkg-show_autosuspend' => $conf->exists('cust_pkg-show_autosuspend'),
   'pkg_attached'              => $pkg_attached,
+  'part_pkg-delay_cancel-days' => $conf->config('part_pkg-delay_cancel-days') || 1,
   #for status.html pkg-balances
   'pkg-balances'              => $conf->exists('pkg-balances'),
   'money_char'                => ( $conf->config('money_char') || '$' ),
index 5dbffb2..af2bb06 100644 (file)
@@ -55,7 +55,7 @@
 
 %     } else { #status: suspended
 %       my ($cpr,$susplabel);
-%       if ($cust_pkg->is_status_delay_cancel) {
+%       if ($cust_pkg->is_status_delay_cancel(%opt)) {
 %         $cpr = $cust_pkg->last_cust_pkg_reason('expire');
 %         $susplabel = 'Suspended (Cancelled)';
 %       } else {