cache initial signup_info for performance
[freeside.git] / FS / FS / ClientAPI / Signup.pm
index 0bb9f7b..8f6dc29 100644 (file)
@@ -23,7 +23,8 @@ sub signup_info {
 
   my $conf = new FS::Conf;
 
-  my $signup_info = {
+  use vars qw($signup_info); #cache for performance;
+  $signup_info ||= {
 
     'cust_main_county' =>
       [ map { $_->hashref } qsearch('cust_main_county', {}) ],
@@ -57,7 +58,10 @@ sub signup_info {
 
   };
 
-  if ( $conf->config('signup_server-default_agentnum') ) {
+  if (
+    $conf->config('signup_server-default_agentnum')
+    || !exists $signup_info->{'part_pkg'} #cache for performance
+  ) {
     my $agentnum = $conf->config('signup_server-default_agentnum');
     my $agent = qsearchs( 'agent', { 'agentnum' => $agentnum } )
       or die "fatal: signup_server-default_agentnum $agentnum not found\n";
@@ -116,6 +120,7 @@ sub new_customer {
 
   $packet->{'pkgpart'} =~ /^(\d+)$/ or '' =~ /^()$/;
   my $pkgpart = $1;
+  $error ||= 'Please select a package' unless $pkgpart; #msgcat
 
   my $part_pkg =
     qsearchs( 'part_pkg', { 'pkgpart' => $pkgpart } )
@@ -169,7 +174,7 @@ sub new_customer {
       #should check list for errors...
       #$cust_main->suspend;
       local $FS::svc_Common::noexport_hack = 1;
-      $cust_main->cancel;
+      $cust_main->cancel('quiet'=>1);
 
       $error = '_decline';
     }
@@ -181,3 +186,4 @@ sub new_customer {
 
 }
 
+1;