[freeside-commits] branch master updated. aa0c6cc1247b802d58b4c890339bcacf4d3f567a

Mitch Jackson mitch at freeside.biz
Sun Dec 9 17:27:35 PST 2018


The branch, master has been updated
       via  aa0c6cc1247b802d58b4c890339bcacf4d3f567a (commit)
      from  1f0d70b0b4e3149ac515f20fbfa6da2a3254e07a (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 aa0c6cc1247b802d58b4c890339bcacf4d3f567a
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 afe60afd9..9818cbdb5 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,10 +49,10 @@ 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) {
-    print STDERR "Batch is empty, resolving..." if $opt_v;
+    log_info( "Batch is empty, resolving..." );
     next;
   }
   open OUT, ">$tmpdir/$filename";
@@ -56,22 +60,24 @@ foreach my $pay_batch (@batches) {
   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;
 
@@ -84,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;
 }
 
-print STDERR "Finished!\n" 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
 

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

Summary of changes:
 FS/bin/freeside-eftca-download | 73 ++++++++++++++++++++++++++++++------------
 FS/bin/freeside-eftca-upload   | 47 ++++++++++++++++++++-------
 2 files changed, 89 insertions(+), 31 deletions(-)




More information about the freeside-commits mailing list