time-based prepaid cards, session monitor. woop!
[freeside.git] / fs_signup / fs_signup_server
index e1c9b35..86455a4 100755 (executable)
@@ -5,6 +5,7 @@
 
 use strict;
 use IO::Handle;
+use Tie::RefHash;
 use FS::SSH qw(sshopen2);
 use FS::UID qw(adminsuidsetup);
 use FS::Record qw( qsearch qsearchs );
@@ -15,7 +16,7 @@ use vars qw( $opt $Debug );
 
 $Debug = 0;
 
-my @payby = qw(CARD);
+my @payby = qw(CARD PREPAY);
 
 my $user = shift or die &usage;
 &adminsuidsetup( $user ); 
@@ -28,7 +29,8 @@ my $pkgpart = $agent->pkgpart_hashref;
 
 my $refnum = shift or die &usage;
 
-$SIG{CHLD} = sub { wait() };
+#causing trouble for some folks
+#$SIG{CHLD} = sub { wait() };
 
 my($fs_signupd)="/usr/local/sbin/fs_signupd";
 
@@ -75,6 +77,7 @@ while (1) {
       $_->state,
       $_->ac,
       $_->exch,
+      $_->loc,
     } @svc_acct_pop
   ), "\n";
   warn "[fs_signup_server] $data\n" if $Debug > 2;
@@ -127,7 +130,7 @@ while (1) {
 
     my $part_pkg = qsearchs( 'part_pkg', { 'pkgpart' => $pkgpart } )
       or $error ||= "WARNING: unknown pkgpart $pkgpart";
-    my $svcpart = $part_pkg->svcpart;
+    my $svcpart = $part_pkg->svcpart unless $error;
 
     # this should wind up in FS::cust_pkg!
     my $agent = qsearchs( 'agent', { 'agentnum' => $agentnum } );
@@ -158,16 +161,19 @@ while (1) {
 
     $error ||= $svc_acct->check;
 
-    $error ||= $cust_main->insert;
-    if ( $cust_pkg && ! $error ) { #in this case, $cust_pkg should always
-                                   #be definied, but....
-      $cust_pkg->custnum( $cust_main->custnum );
-      $error ||= $cust_pkg->insert; 
-      warn "WARNING: $error on pre-checked cust_pkg record!" if $error;
-      $svc_acct->pkgnum( $cust_pkg->pkgnum );
-      $error ||= $svc_acct->insert;
-      warn "WARNING: $error on pre-checked svc_acct record!" if $error;
-    }
+    use Tie::RefHash;
+    tie my %hash, 'Tie::RefHash';
+    %hash = { $cust_pkg => [ $svc_acct ] };
+    $error ||= $cust_main->insert( \%hash );
+    #if ( $cust_pkg && ! $error ) { #in this case, $cust_pkg should always
+    #                               #be definied, but....
+    #  $cust_pkg->custnum( $cust_main->custnum );
+    #  $error ||= $cust_pkg->insert; 
+    #  warn "WARNING: $error on pre-checked cust_pkg record!" if $error;
+    #  $svc_acct->pkgnum( $cust_pkg->pkgnum );
+    #  $error ||= $svc_acct->insert;
+    #  warn "WARNING: $error on pre-checked svc_acct record!" if $error;
+    #}
 
     warn "[fs_signup_server] Sending results...\n" if $Debug;
     print $writer $error, "\n";