import torrus 1.0.9
[freeside.git] / FS / bin / freeside-paymentech-upload
index e0ec4bd..3f8abc0 100755 (executable)
@@ -5,31 +5,37 @@ use Getopt::Std;
 use Date::Format qw(time2str);
 use File::Temp qw(tempdir); #0.19 for ->newdir() interface, not in 5.10.0
 use Net::SFTP::Foreign;
+use Expect;
 use FS::UID qw(adminsuidsetup datasrc);
 use FS::Record qw(qsearch qsearchs);
 use FS::pay_batch;
 use FS::cust_pay_batch;
 use FS::Conf;
 
-use vars qw( $opt_a $opt_t $opt_v );
-getopts('avt');
+use vars qw( $opt_a $opt_t $opt_v $opt_p );
+getopts('avtp:');
 
 #$Net::SFTP::Foreign::debug = -1;
 
 sub usage { "
   Usage:
-    paymentech-upload [ -v ] [ -t ] user batchnum
-    paymentech-upload -a [ -v ] [ -t ] user\n
+    freeside-paymentech-upload [ -v ] [ -t ] user batchnum
+    freeside-paymentech-upload -a [ -p payby ] [ -v ] [ -t ] user\n
 " }
 
 my $user = shift or die &usage;
 adminsuidsetup $user;
 
+my $zip_check = `which zip` or die "can't find zip executable\n";
+
 my @batches; 
 
 if($opt_a) {
-  @batches = qsearch('pay_batch', { status => 'O' } );
-  die "No open batches found.\n" if !@batches;
+  my %criteria = (status => 'O');
+  $criteria{'payby'} = uc($opt_p) if $opt_p;
+  @batches = qsearch('pay_batch', \%criteria);
+  die "No open batches found".($opt_p ? " of type '$opt_p'" : '').".\n" 
+    if !@batches;
 }
 else {
   my $batchnum = shift;
@@ -60,14 +66,15 @@ foreach my $pay_batch (@batches) {
   print OUT $text;
   close OUT;
 
-  system("zip -P $password -q -j $tmpdir/$filename.zip $tmpdir/$filename.xml");
+  system('zip', '-P', $password, '-q', '-j',
+           "$tmpdir/$filename.zip", "$tmpdir/$filename.xml");
 
   die "failed to create zip file\n" if (! -f "$tmpdir/$filename.zip" );
   push @filenames, $filename;
 }
 
-my $host = ($opt_t ? 'orbitalbatchvar.paymentech.net' : 
-                     'orbitalbatch.paymentech.net');
+my $host = ($opt_t ? 'orbitalbatchvar.paymentech.net'
+                   : 'orbitalbatch.paymentech.net');
 print STDERR "Connecting to $username\@$host...\n" if $opt_v;
 
 my $sftp = Net::SFTP::Foreign->new( host => $host,
@@ -87,13 +94,11 @@ print STDERR "Finished!\n" if $opt_v;
 
 =head1 NAME
 
-paymentech-upload
-
-paymentech-upload - Transmit a payment batch to Chase Paymentech via SFTP.
+freeside-paymentech-upload - Transmit a payment batch to Chase Paymentech via SFTP.
 
 =head1 SYNOPSIS
 
-  paymentech-upload [ -a ] [ -v ] [ -t ] user batchnum
+  freeside-paymentech-upload [ -a [ -p PAYBY ] ] [ -v ] [ -t ] user batchnum
 
 =head1 DESCRIPTION
 
@@ -104,6 +109,8 @@ response file.
 
 -a: Send all open batches, instead of specifying a batchnum.
 
+-p PAYBY: With -a, limit to batches of that payment type, e.g. -p CARD.
+
 -v: Be verbose.
 
 -t: Send the transaction to the test server.