RT#33582: RBC return batch processing failure [handle multiple decline lines for...
authorJonathan Prykop <jonathan@freeside.biz>
Thu, 5 Mar 2015 05:14:02 +0000 (23:14 -0600)
committerJonathan Prykop <jonathan@freeside.biz>
Thu, 5 Mar 2015 05:14:02 +0000 (23:14 -0600)
FS/FS/cust_pay_batch.pm

index a4b4957..da003d8 100644 (file)
@@ -265,15 +265,15 @@ sub approve {
   my %opt = @_;
   my $paybatchnum = $new->paybatchnum;
   my $old = qsearchs('cust_pay_batch', { paybatchnum => $paybatchnum })
-    or return "paybatchnum $paybatchnum not found";
+    or return "cannot approve, paybatchnum $paybatchnum not found";
   # leave these restrictions in place until TD EFT is converted over
   # to B::BP
-  return "paybatchnum $paybatchnum already resolved ('".$old->status."')" 
+  return "cannot approve paybatchnum $paybatchnum, already resolved ('".$old->status."')" 
     if $old->status;
   $new->status('Approved');
   my $error = $new->replace($old);
   if ( $error ) {
-    return "error updating status of paybatchnum $paybatchnum: $error\n";
+    return "error approving paybatchnum $paybatchnum: $error\n";
   }
   my $cust_pay = new FS::cust_pay ( {
       'custnum'   => $new->custnum,
@@ -319,7 +319,7 @@ sub decline {
 
   my $paybatchnum = $new->paybatchnum;
   my $old = qsearchs('cust_pay_batch', { paybatchnum => $paybatchnum })
-    or return "paybatchnum $paybatchnum not found";
+    or return "cannot decline, paybatchnum $paybatchnum not found";
   if ( $old->status ) {
     # Handle the case where payments are rejected after the batch has been 
     # approved.  FS::pay_batch::import_results won't allow results to be 
@@ -344,9 +344,15 @@ sub decline {
       }
       $cust_pay->void($reason);
     }
+    elsif ( lc($old->status) eq 'declined' ) {
+      # batch files from RBC can have multiple lines for one decline
+      # if this causes problems elsewhere, try hacking pay_batch/RBC.pm instead
+      return '';
+    }
     else {
       # normal case: refuse to do anything
-      return "paybatchnum $paybatchnum already resolved ('".$old->status."')";
+      # should never happen...only statuses are approved or declined
+      return "cannot decline paybatchnum $paybatchnum, already resolved ('".$old->status."')";
     }
   } # !$old->status
   $new->status('Declined');
@@ -354,7 +360,7 @@ sub decline {
   $new->failure_status($failure_status);
   my $error = $new->replace($old);
   if ( $error ) {
-    return "error updating status of paybatchnum $paybatchnum: $error\n";
+    return "error declining paybatchnum $paybatchnum: $error\n";
   }
   my $due_cust_event = $new->cust_main->due_cust_event(
     'eventtable'  => 'cust_pay_batch',