From 65d0561c4d456c2d600acb03a675549d098f5776 Mon Sep 17 00:00:00 2001
From: Ivan Kohler <ivan@freeside.biz>
Date: Tue, 10 Sep 2013 22:19:29 -0700
Subject: [PATCH] improve performance of package ordering, RT#24955, fallout
 from future start dates, RT#20686

---
 FS/FS/part_pkg.pm                 | 27 +++++----------------------
 httemplate/misc/cust-part_pkg.cgi | 12 +++++++++---
 2 files changed, 14 insertions(+), 25 deletions(-)

diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm
index 15c29c4bc..e1874259e 100644
--- a/FS/FS/part_pkg.pm
+++ b/FS/FS/part_pkg.pm
@@ -1089,32 +1089,15 @@ sub can_discount { 0; }
 # whether the plan allows changing the start date
 sub can_start_date { 1; }
   
-# the default start date; takes an FS::cust_main as an argument
-sub default_start_date {
+# the delay start date if present
+sub delay_start_date {
   my $self = shift;
-  my $cust_main = shift;
-  my $conf = FS::Conf->new;
 
-  if ( $self->delay_start ) {
-    my $delay = $self->delay_start;
+  my $delay = $self->delay_start or return '';
     
-    my ($mday,$mon,$year) = (localtime(time))[3,4,5];
-    my $start_date = timelocal(0,0,0,$mday,$mon,$year) + 86400 * $delay;
-    return $start_date;
+  my ($mday,$mon,$year) = (localtime(time))[3,4,5];
+  timelocal(0,0,0,$mday,$mon,$year) + 86400 * $delay;
 
-  } elsif ( $conf->exists('order_pkg-no_start_date') ) {
-
-    return '';
-
-  } elsif ( $cust_main ) {
-    
-    return $cust_main->next_bill_date;
-  
-  } else {
-    
-    return '';
-
-  }
 }
 
 sub can_currency_exchange { 0; }
diff --git a/httemplate/misc/cust-part_pkg.cgi b/httemplate/misc/cust-part_pkg.cgi
index 7aebda40c..6c4524cb7 100644
--- a/httemplate/misc/cust-part_pkg.cgi
+++ b/httemplate/misc/cust-part_pkg.cgi
@@ -3,7 +3,6 @@
 
 my( $custnum, $prospectnum, $classnum ) = $cgi->param('arg');
 
-
 my $agent;
 my $cust_main;
 if ( $custnum ) {
@@ -32,10 +31,17 @@ my @part_pkg = qsearch({
   'order_by'  => 'ORDER BY pkg',
 });
 
-my $date_format = FS::Conf->new->config('date_format') || '%m/%d/%Y';
+my $conf = new FS::Conf;
+
+my $date_format = $conf->config('date_format') || '%m/%d/%Y';
+
+my $default_start_date = $conf->exists('order_pkg-no_start-date')
+                           ? ''
+                           : $cust_main->next_bill_date;
 
 my @return = map  {
-                    my $start_date = $_->default_start_date($cust_main);
+                    my $start_date = $_->delay_start_date
+                                   || $default_start_date;
                     $start_date = time2str($date_format, $start_date)
                       if $start_date;
                     ( $_->pkgpart,
-- 
2.20.1