- add init file installation to Makefile, add unified init file
[freeside.git] / fs_signup / fs_signup_server
index 41fed9a..1618cf1 100755 (executable)
@@ -4,6 +4,7 @@
 #
 
 use strict;
+use vars qw($pid);
 use IO::Handle;
 use Storable qw(nstore_fd fd_retrieve);
 use Tie::RefHash;
@@ -39,13 +40,20 @@ my $refnum = shift or die &usage;
 #causing trouble for some folks
 #$SIG{CHLD} = sub { wait() };
 
+$SIG{HUP} = \&killssh;
+$SIG{INT} = \&killssh;
+$SIG{QUIT} = \&killssh;
+$SIG{TERM} = \&killssh;
+$SIG{PIPE} = \&killssh;
+sub killssh { kill 'TERM', $pid if $pid; exit; };
+
 my($fs_signupd)="/usr/local/sbin/fs_signupd";
 
 while (1) {
   my($reader,$writer)=(new IO::Handle, new IO::Handle);
   #seems to be broken - calling ->flush explicitly# $writer->autoflush(1);
   warn "[fs_signup_server] Connecting to $machine...\n" if $Debug;
-  sshopen2($machine,$reader,$writer,$fs_signupd);
+  $pid = sshopen2($machine,$reader,$writer,$fs_signupd);
 
   my @pops = qsearch('svc_acct_pop',{} );
   my $init_data = {
@@ -59,7 +67,8 @@ while (1) {
       
     'part_pkg' =>
       [
-        map { $_->hashref }
+        #map { $_->hashref }
+        map { { 'payby' => [ $_->payby ], %{$_->hashref} } }
           grep { $_->svcpart('svc_acct') && $pkgpart_href->{ $_->pkgpart } }
             qsearch( 'part_pkg', { 'disabled' => '' } )
       ],
@@ -105,7 +114,7 @@ while (1) {
     # common that are still here and library them.
     my $cust_main = new FS::cust_main ( {
       #'custnum'          => '',
-      'agentnum'         => $agentnum,
+      'agentnum'         => $signup_data->{agentnum} || $agentnum,
       'refnum'           => $refnum,
 
       map { $_ => $signup_data->{$_} } qw(
@@ -157,8 +166,12 @@ while (1) {
     warn "[fs_signup_server] Sending results...\n" if $Debug;
     print $writer $error, "\n";
 
-    if ( $conf->config('signup_server-realtime') ) {
-      
+    next if $error;
+
+    if ( $conf->exists('signup_server-realtime') ) {
+
+      warn "[fs_signup_server] Billing customer...\n" if $Debug;
+
       my $bill_error = $cust_main->bill;
       warn "[fs_signup_server] error billing new customer: $bill_error"
         if $bill_error;
@@ -176,12 +189,13 @@ while (1) {
       }
     }
 
-    if ( $error && $conf->config('signup_server-email') ) {
+    if ( $conf->config('signup_server-email') ) {
       warn "[fs_signup_server] Sending email...\n" if $Debug;
 
       #false laziness w/FS::cust_bill::send & FS::cust_pay::delete
       use Mail::Header;
       use Mail::Internet;
+      use Date::Format;
       my $from = $conf->config('invoice_from'); #??? as good as any
       $ENV{MAILADDRESS} = $from;
       my $header = new Mail::Header ( [