[freeside-commits] branch FREESIDE_3_BRANCH updated. 632a0514859f628594c8f63380aa23584c428db4

Mitch Jackson mitch at freeside.biz
Tue Jan 22 17:18:41 PST 2019


The branch, FREESIDE_3_BRANCH has been updated
       via  632a0514859f628594c8f63380aa23584c428db4 (commit)
       via  0cec3489d6459d6bd00cd0f4e2a6b9647bf9b272 (commit)
      from  7a9d5909321085323309b477c9ae417b04637551 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 632a0514859f628594c8f63380aa23584c428db4
Author: Mitch Jackson <mitch at freeside.biz>
Date:   Tue Jan 8 00:01:21 2019 -0500

    RT# 81701 Add system log lines for EFT Canada upload/download

diff --git a/FS/bin/freeside-eftca-download b/FS/bin/freeside-eftca-download
index caf9e0e70..56d82c7f5 100755
--- a/FS/bin/freeside-eftca-download
+++ b/FS/bin/freeside-eftca-download
@@ -57,7 +57,10 @@ my $conf = new FS::Conf;
 
 my @agents;
 if ( $conf->exists('batch-spoolagent') ) {
-  @agents = qsearch('agent', { 'disabled' => '' });
+  local $@;
+  eval { @agents = qsearch('agent', { 'disabled' => '' }); };
+  log_error_and_die("Fatal database error: $@")
+    if $@;
 } else {
   @agents = (1);
 }
diff --git a/FS/bin/freeside-eftca-upload b/FS/bin/freeside-eftca-upload
index d8c79454c..55e97744f 100755
--- a/FS/bin/freeside-eftca-upload
+++ b/FS/bin/freeside-eftca-upload
@@ -31,13 +31,25 @@ log_info( "EFT Canada upload started\n" );
 my @batches; 
 
 if($opt_a) {
-  @batches = qsearch('pay_batch', { 'status' => 'O', 'payby' => 'CHEK' })
-    or log_info_and_die( "Finished: No open batches found.\n" );
+  local $@;
+  eval {
+    @batches = qsearch('pay_batch', { 'status' => 'O', 'payby' => 'CHEK' })
+  };
+  log_error_and_die ("Fatal database error: $@")
+    if $@;
+
+  log_info_and_die( "Finished: No open batches found.\n" )
+    unless @batches;
 }
 else {
   my $batchnum = shift;
   die &HELP_MESSAGE if !$batchnum;
-  @batches = qsearchs('pay_batch', { batchnum => $batchnum } );
+
+  local $@;
+  eval { @batches = qsearchs('pay_batch', { batchnum => $batchnum } ); };
+  log_error_and_die("Fatal database error: $@")
+    if $@;
+
   log_error_and_die( "Can't find payment batch '$batchnum'\n" ) if !@batches;
 }
 
@@ -84,11 +96,18 @@ foreach my $pay_batch (@batches) {
   # Auto-approve and close the batch.  Some false laziness with manual_approve.
   my $batchnum = $pay_batch->batchnum;
   my $error;
-  foreach my $cpb ( qsearch('cust_pay_batch', { 'batchnum' => $batchnum } ) ) {
-    $cpb->setfield('paid', $cpb->amount);
-    $error = $cpb->approve($batchnum);
-    last if $error;
-  }
+
+  local $@;
+  eval {
+    foreach my $cpb ( qsearch('cust_pay_batch', { 'batchnum' => $batchnum } )) {
+      $cpb->setfield('paid', $cpb->amount);
+      $error = $cpb->approve($batchnum);
+      last if $error;
+    }
+  };
+  log_error_and_die("Fatal database error: $@")
+    if $@;
+
   $error ||= $pay_batch->set_status('R');
   log_error_and_die( "error closing batch $batchnum: $error\n\n" )
     if $error;

commit 0cec3489d6459d6bd00cd0f4e2a6b9647bf9b272
Author: Mitch Jackson <mitch at freeside.biz>
Date:   Sun Dec 9 20:26:34 2018 -0500

    RT# 81701 Add system log lines for EFT Canada upload/download

diff --git a/FS/bin/freeside-eftca-download b/FS/bin/freeside-eftca-download
index 1b7653cb3..caf9e0e70 100755
--- a/FS/bin/freeside-eftca-download
+++ b/FS/bin/freeside-eftca-download
@@ -11,6 +11,7 @@ use FS::Record qw(qsearch qsearchs);
 use FS::pay_batch;
 use FS::cust_pay_batch;
 use FS::Conf;
+use FS::Log;
 
 use vars qw( $opt_v $opt_a );
 getopts('va:');
@@ -38,11 +39,15 @@ my @fields = (
 my $user = shift or die &HELP_MESSAGE;
 adminsuidsetup $user;
 
+my $log = FS::Log->new('freeside-eftca-download');
+log_info( "EFT Canada download started\n" );
+
 if ( $opt_a ) {
-  die "no such directory: $opt_a\n"
+  log_error_and_die( "no such directory: $opt_a\n" )
     unless -d $opt_a;
-  die "archive directory $opt_a is not writable by the freeside user\n"
-    unless -w $opt_a;
+  log_error_and_die(
+    "archive directory $opt_a is not writable by the freeside user\n"
+  ) unless -w $opt_a;
 }
 
 #my $tmpdir = File::Temp->newdir();
@@ -63,51 +68,58 @@ foreach my $agent (@agents) {
   if ( $conf->exists('batch-spoolagent') ) {
     @batchconf = $conf->config('batchconfig-eft_canada', $agent->agentnum, 1);
     if ( !length($batchconf[0]) ) {
-      warn "agent '".$agent->agent."' has no batchconfig-eft_canada setting; skipped.\n";
+      log_info(
+        "agent '".$agent->agent.
+        "' has no batchconfig-eft_canada setting; skipped.\n"
+      );
       next;
     }
   } else {
     @batchconf = $conf->config('batchconfig-eft_canada');
   }
   # user, password, transaction code, delay days
-  my $user = $batchconf[0] or die "no EFT Canada batch username configured\n";
-  my $pass = $batchconf[1] or die "no EFT Canada batch password configured\n";
+  my $user = $batchconf[0]
+    or log_error_and_die( "no EFT Canada batch username configured\n" );
+  my $pass = $batchconf[1]
+    or log_error_and_die( "no EFT Canada batch password configured\n" );
 
   my $host = 'ftp.eftcanada.com';
-  print STDERR "Connecting to $user\@$host...\n" if $opt_v;
+  log_info( "Connecting to $user\@$host...\n" );
 
   my $sftp = Net::SFTP::Foreign->new( host     => $host,
                                       user     => $user,
                                       password => $pass,
                                       timeout  => 30,
                                     );
-  die "failed to connect to '$user\@$host'\n(".$sftp->error.")\n" if $sftp->error;
+  log_error_and_die("failed to connect to '$user\@$host'\n(".$sftp->error.")\n")
+    if $sftp->error;
 
   $sftp->setcwd('/Returns');
 
   my $files = $sftp->ls('.', wanted => qr/\.txt$/, names_only => 1);
-  die "no response files found\n" if !@$files;
+  log_info_and_die( "Finished: No response files found\n" )
+    if !@$files;
 
   FILE: foreach my $filename (@$files) {
-    print STDERR "Retrieving $filename\n" if $opt_v;
+    log_info( "Retrieving $filename\n" );
     $sftp->get("$filename", "$tmpdir/$filename");
     if($sftp->error) {
-      warn "failed to download $filename\n";
+      log_info( "failed to download $filename\n" );
       next FILE;
     }
 
     #move to server archive dir
     $sftp->rename("$filename", "Archive/$filename");
     if($sftp->error) {
-      warn "failed to archive $filename on server\n";
+      log_info(  "failed to archive $filename on server\n" );
     } # process it anyway though
 
     #copy to local archive dir
     if ( $opt_a ) {
-      print STDERR "Copying $tmpdir/$filename to archive dir $opt_a\n"
-        if $opt_v;
+      log_info( "Copying $tmpdir/$filename to archive dir $opt_a\n" );
       system 'cp', "$tmpdir/$filename", $opt_a;
-      warn "failed to copy $tmpdir/$filename to $opt_a: $@" if $@;
+      log_info( "failed to copy $tmpdir/$filename to $opt_a: $@" )
+        if $@;
     }
 
     open my $fh, "<$tmpdir/$filename";
@@ -118,20 +130,23 @@ foreach my $agent (@agents) {
     while (my $line = <$fh>) {
       next if $line =~ /^\s*$/;
       $csv->parse($line) or do {
-        warn "can't parse $filename: ".$csv->error_input."\n";
+        log_info( "can't parse $filename: ".$csv->error_input."\n" );
         next FILE; #parsing errors = reading the wrong kind of file
       };
       @hash{@fields} = $csv->fields();
-      print STDERR "voiding paybatchnum#$hash{paybatchnum}\n" if $opt_v;
+      log_info( "voiding paybatchnum#$hash{paybatchnum}\n" );
       my $cpb = qsearchs('cust_pay_batch', 
                           { paybatchnum => $hash{'paybatchnum'} });
       if ( !$cpb ) {
-        warn "can't find paybatchnum #$hash{paybatchnum} ($hash{first} $hash{last}, $hash{paid})\n";
+        log_info(
+          "can't find paybatchnum #$hash{paybatchnum} ".
+          "($hash{first} $hash{last}, $hash{paid})\n"
+        );
         next;
       }
       my $error = $cpb->decline("Returned payment ($hash{returncode})");
       if ( $error ) {
-        warn "can't void paybatchnum #$hash{paybatchnum}: $error\n";
+        log_info( "can't void paybatchnum #$hash{paybatchnum}: $error\n" );
       }
     }
     close $fh;
@@ -139,7 +154,25 @@ foreach my $agent (@agents) {
 
 }
 
-print STDERR "Finished!\n" if $opt_v;
+log_info( "Finished!\n" );
+
+sub log_info {
+  my $log_message = shift;
+  $log->info( $log_message );
+  print STDERR $log_message if $opt_v;
+}
+
+sub log_info_and_die {
+  my $log_message = shift;
+  $log->info( $log_message );
+  die $log_message;
+}
+
+sub log_error_and_die {
+  my $log_message = shift;
+  $log->error( $log_message );
+  die $log_message;
+}
 
 =head1 NAME
 
diff --git a/FS/bin/freeside-eftca-upload b/FS/bin/freeside-eftca-upload
index b66765af3..d8c79454c 100755
--- a/FS/bin/freeside-eftca-upload
+++ b/FS/bin/freeside-eftca-upload
@@ -9,6 +9,7 @@ use FS::UID qw(adminsuidsetup dbh);
 use FS::Record qw(qsearch qsearchs);
 use FS::pay_batch;
 use FS::Conf;
+use FS::Log;
 
 use vars qw( $opt_a $opt_v );
 getopts('av');
@@ -24,17 +25,20 @@ sub HELP_MESSAGE { "
 my $user = shift or die &HELP_MESSAGE;
 adminsuidsetup $user;
 
+my $log = FS::Log->new('freeside-eftca-upload');
+log_info( "EFT Canada upload started\n" );
+
 my @batches; 
 
 if($opt_a) {
   @batches = qsearch('pay_batch', { 'status' => 'O', 'payby' => 'CHEK' })
-    or die "No open batches found.\n";
+    or log_info_and_die( "Finished: No open batches found.\n" );
 }
 else {
   my $batchnum = shift;
   die &HELP_MESSAGE if !$batchnum;
   @batches = qsearchs('pay_batch', { batchnum => $batchnum } );
-  die "Can't find payment batch '$batchnum'\n" if !@batches;
+  log_error_and_die( "Can't find payment batch '$batchnum'\n" ) if !@batches;
 }
 
 my $conf = new FS::Conf;
@@ -45,29 +49,35 @@ foreach my $pay_batch (@batches) {
 
   my $batchnum = $pay_batch->batchnum;
   my $filename = time2str('%Y%m%d', time) . '-' . sprintf('%06d.csv',$batchnum);
-  print STDERR "Exporting batch $batchnum to $filename...\n" if $opt_v;
+  log_info( "Exporting batch $batchnum to $filename...\n" );
   my $text = $pay_batch->export_batch(format => 'eft_canada');
+  unless ($text) {
+    log_info( "Batch is empty, resolving..." );
+    next;
+  }
   open OUT, ">$tmpdir/$filename";
   print OUT $text;
   close OUT;
 
   my @batchconf = $conf->config('batchconfig-eft_canada', $pay_batch->agentnum);
-  my $user = $batchconf[0] or die "no EFT Canada batch username configured\n";
-  my $pass = $batchconf[1] or die "no EFT Canada batch password configured\n";
+  my $user = $batchconf[0]
+    or log_error_and_die( "no EFT Canada batch username configured\n" );
+  my $pass = $batchconf[1]
+    or log_error_and_die( "no EFT Canada batch password configured\n" );
 
   my $host = 'ftp.eftcanada.com';
-  print STDERR "Connecting to $user\@$host...\n" if $opt_v;
+  log_info( "Connecting to $user\@$host...\n" );
 
   my $sftp = Net::SFTP::Foreign->new( host     => $host,
                                       user     => $user,
                                       password => $pass,
                                       timeout  => 30,
                                     );
-  die "failed to connect to '$user\@$host'\n(".$sftp->error.")\n" 
+  log_error_and_die("failed to connect to '$user\@$host'\n(".$sftp->error.")\n")
       if $sftp->error;
 
   $sftp->put("$tmpdir/$filename", "$filename")
-    or die "failed to upload file (".$sftp->error.")\n";
+    or log_error_and_die( "failed to upload file (".$sftp->error.")\n" );
 
   undef $sftp; #$sftp->disconnect;
 
@@ -80,10 +90,29 @@ foreach my $pay_batch (@batches) {
     last if $error;
   }
   $error ||= $pay_batch->set_status('R');
-  die "error closing batch $batchnum: $error\n\n" if $error;
+  log_error_and_die( "error closing batch $batchnum: $error\n\n" )
+    if $error;
+}
+
+log_info( "Finished!\n" );
+
+sub log_info {
+  my $log_message = shift;
+  $log->info( $log_message );
+  print STDERR $log_message if $opt_v;
+}
+
+sub log_info_and_die {
+  my $log_message = shift;
+  $log->info( $log_message );
+  die $log_message;
 }
 
-print STDERR "Finished!\n" if $opt_v;
+sub log_error_and_die {
+  my $log_message = shift;
+  $log->error( $log_message );
+  die $log_message;
+}
 
 =head1 NAME
 

-----------------------------------------------------------------------

Summary of changes:
 FS/bin/freeside-eftca-download | 78 +++++++++++++++++++++++++++++-----------
 FS/bin/freeside-eftca-upload   | 82 +++++++++++++++++++++++++++++++++---------
 2 files changed, 122 insertions(+), 38 deletions(-)




More information about the freeside-commits mailing list