prevent B:BP batches from being marked in-transit if uploading the batch fails, ...
authorMark Wells <mark@freeside.biz>
Fri, 16 Dec 2016 19:57:52 +0000 (11:57 -0800)
committerMark Wells <mark@freeside.biz>
Fri, 16 Dec 2016 19:57:52 +0000 (11:57 -0800)
FS/FS/pay_batch.pm

index 528b0d5..1c0a28a 100644 (file)
@@ -14,6 +14,7 @@ use Scalar::Util 'blessed';
 use IO::Scalar;
 use FS::Misc qw(send_email); # for error notification
 use List::Util qw(sum);
+use Try::Tiny;
 
 @ISA = qw(FS::Record);
 
@@ -1080,16 +1081,21 @@ sub export_to_gateway {
   my $processor = $gateway->batch_processor(%proc_opt);
 
   my @items = map { $_->request_item } $self->cust_pay_batch;
-  my $batch = Business::BatchPayment->create(Batch =>
-    batch_id  => $self->batchnum,
-    items     => \@items
-  );
-  $processor->submit($batch);
+  try {
+    my $batch = Business::BatchPayment->create(Batch =>
+      batch_id  => $self->batchnum,
+      items     => \@items
+    );
+    $processor->submit($batch);
 
-  if ($batch->processor_id) {
-    $self->set('processor_id',$batch->processor_id);
-    $self->replace;
-  }
+    if ($batch->processor_id) {
+      $self->set('processor_id',$batch->processor_id);
+      $self->replace;
+    }
+  } catch {
+    $dbh->rollback if $oldAutoCommit;
+    die $_;
+  };
 
   $dbh->commit or die $dbh->errstr if $oldAutoCommit;
   '';