[freeside-commits] branch FREESIDE_4_BRANCH updated. 7733d727907d15271602cb28c5e32afb288220dd

Christopher Burger burgerc at freeside.biz
Wed Mar 13 07:23:26 PDT 2019


The branch, FREESIDE_4_BRANCH has been updated
       via  7733d727907d15271602cb28c5e32afb288220dd (commit)
       via  2163c682341bebc40b83dbe5bc7f027b17b6a50f (commit)
      from  6a29166de4ccb8d3be83a407bb0b909b066592e8 (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 7733d727907d15271602cb28c5e32afb288220dd
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Wed Mar 13 09:17:02 2019 -0400

    RT# 82988 - updated paybatch upgrade to move credits from combined batch file to credit batch file

diff --git a/FS/FS/pay_batch.pm b/FS/FS/pay_batch.pm
index e8ae6ec2c..d0ed7ae2d 100644
--- a/FS/FS/pay_batch.pm
+++ b/FS/FS/pay_batch.pm
@@ -1249,7 +1249,7 @@ sub _upgrade_data {
   unless ( FS::upgrade_journal->is_done('removed_refunds_nodownload_format') ) {
 
     ## get a list of all refunds in batches.
-    my $extrasql = " LEFT JOIN pay_batch USING ( batchnum ) WHERE cust_pay_batch.paycode = 'C' AND pay_batch.download IS NULL";
+    my $extrasql = " LEFT JOIN pay_batch USING ( batchnum ) WHERE cust_pay_batch.paycode = 'C' AND pay_batch.download IS NULL AND pay_batch.type = 'DEBIT' ";
 
     my @batch_refunds = qsearch({
       'table'   => 'cust_pay_batch',
@@ -1259,33 +1259,43 @@ sub _upgrade_data {
 
     warn "found ".scalar @batch_refunds." batch refunds.\n";
     warn "Searching for their cust refunds...\n" if (scalar @batch_refunds > 0);
-    my ($delete_cust_refund_error, $delete_cust_pay_batch_error);
-
-    ## find the cust_pay_refund for all those
-    foreach (@batch_refunds) {
-      my $extra_batch_refund_sql = " WHERE custnum = '".$_->{Hash}->{custnum}."' AND refund = '".$_->{Hash}->{amount}."' ORDER BY _date DESC LIMIT 1";
-      my $cust_refund = qsearchs({
-        'table'  => 'cust_refund',
-        'extra_sql' => $extra_batch_refund_sql,
-      });
 
-      warn "found cust refund number ".$cust_refund->{Hash}->{refundnum}.", now to delete it.\n" if $cust_refund;
+    my $oldAutoCommit = $FS::UID::AutoCommit;
+    local $FS::UID::AutoCommit = 0;
+    my $dbh = dbh;
+
+    ## move refund to credit batch.
+    my %pay_batch = (
+      'status' => 'O',
+      'payby'  => 'CHEK',
+      'type'   => 'CREDIT',
+    );
 
-      ## delete the cust_pay_refund
-      $delete_cust_refund_error = $cust_refund->delete if $cust_refund;
-      warn "could not delete cust refund $delete_cust_refund_error\n" if $delete_cust_refund_error;
+    my $pay_batch = qsearchs( 'pay_batch', \%pay_batch );
 
-      ## delete the refund from the batch.
-      unless ($delete_cust_refund_error) {
-        $delete_cust_pay_batch_error = $_->unbatch_and_delete;
-        warn "could not delete cust refund $delete_cust_pay_batch_error\n" if $delete_cust_pay_batch_error;
+    unless ( $pay_batch ) {
+      $pay_batch = new FS::pay_batch \%pay_batch;
+      my $error = $pay_batch->insert;
+      if ( $error ) {
+        $dbh->rollback if $oldAutoCommit;
+          warn "error creating a credit batch: $error\n";
       }
+    }
 
-      if ($delete_cust_refund_error || $delete_cust_pay_batch_error) { die "Could no delete cust_pay_batch refund\n"; }
-      else { warn "cust refund ".$cust_refund->{Hash}->{refundnum}." deleted\n"; }
+    my $replace_error;
+    foreach my $cust_pay_batch (@batch_refunds) {
+      $cust_pay_batch->batchnum($pay_batch->batchnum);
+      $replace_error = $cust_pay_batch->replace();
+      if ( $replace_error ) {
+        $dbh->rollback if $oldAutoCommit;
+          warn "Unable o move credit to a credit batch: $replace_error";
+      }
+      else {
+        warn "Moved cust pay credit ".$cust_pay_batch->paybatchnum." to credit batch ".$cust_pay_batch->batchnum."\n";
+      }
     }
 
-    FS::upgrade_journal->set_done('removed_refunds_nodownload_format');
+    FS::upgrade_journal->set_done('removed_refunds_nodownload_format') unless $replace_error;
   }
 
   # Set up configuration for gateways that have a Business::BatchPayment
diff --git a/httemplate/search/elements/cust_pay_batch_top.html b/httemplate/search/elements/cust_pay_batch_top.html
index eee81dd5b..90fc9e449 100644
--- a/httemplate/search/elements/cust_pay_batch_top.html
+++ b/httemplate/search/elements/cust_pay_batch_top.html
@@ -149,6 +149,10 @@ $upload_formats{'PAP'} = '264 byte results for TD Canada Trust PAP Batch';
 if ($pay_batch->type eq "CREDIT") {
   foreach my $key (keys %download_formats) {
     delete $download_formats{$key} unless FS::pay_batch->can_handle_electronic_refunds($key);
+    ## remove default format if unable to handle electronic refunds
+    if ($key eq '') {
+      delete $download_formats{$key} unless FS::pay_batch->can_handle_electronic_refunds($conf->config("batch-default_format"));
+    }
   }
 }
 
diff --git a/httemplate/search/pay_batch.cgi b/httemplate/search/pay_batch.cgi
index 8fe435132..fd14d05bc 100755
--- a/httemplate/search/pay_batch.cgi
+++ b/httemplate/search/pay_batch.cgi
@@ -43,8 +43,10 @@
 				        my $_date = $self->download;
 				        if ( $_date ) {
 					  time2str("%a %b %e %T %Y", $_date);
-					} elsif ( $self->status eq 'O' ) {
-					  'Download batch';
+					} elsif ( $self->status eq 'O' && $self->type eq 'CREDIT') {
+					  'Download credit batch';
+          } elsif ( $self->status eq 'O' && $self->type eq 'DEBIT') {
+            'Download batch';
 					} else {
 					  '';
 					}

commit 2163c682341bebc40b83dbe5bc7f027b17b6a50f
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Tue Mar 12 17:02:07 2019 -0400

    RT# 82988 - added check for batch payment upload scripts to make sure they can handle credit batches.

diff --git a/FS/bin/freeside-eftca-upload b/FS/bin/freeside-eftca-upload
index 18656c97a..321b969d3 100755
--- a/FS/bin/freeside-eftca-upload
+++ b/FS/bin/freeside-eftca-upload
@@ -55,6 +55,12 @@ else {
     if $@;
 
   log_error_and_die( "Can't find payment batch '$batchnum'\n" ) if !@batches;
+
+  if ($batches[0]->type eq "CREDIT") {
+    warn "running credit\n";
+    log_error_and_die( "Batch number $batchnum is a credit (batch refund) batch, and this format can not handle batch refunds.\n" )
+      unless FS::pay_batch->can_handle_electronic_refunds('eft_canada');
+  }
 }
 
 my $conf = new FS::Conf;
diff --git a/FS/bin/freeside-paymentech-upload b/FS/bin/freeside-paymentech-upload
index 8ec8a5dd4..9903dd4aa 100755
--- a/FS/bin/freeside-paymentech-upload
+++ b/FS/bin/freeside-paymentech-upload
@@ -51,6 +51,12 @@ else {
   log_and_die("batchnum not passed\n".&usage) if !$batchnum;
   @batches = qsearchs('pay_batch', { batchnum => $batchnum } );
   log_and_die("Can't find payment batch '$batchnum'\n") if !@batches;
+
+  if ($batches[0]->type eq "CREDIT") {
+    warn "running credit\n";
+    log_and_die( "Batch number $batchnum is a credit (batch refund) batch, and this format can not handle batch refunds.\n" )
+      unless FS::pay_batch->can_handle_electronic_refunds('paymentech');
+  }
 }
 
 my $conf = new FS::Conf;
diff --git a/FS/bin/freeside-rbc-upload b/FS/bin/freeside-rbc-upload
index 8f67a6e4f..5c0ebdd2e 100755
--- a/FS/bin/freeside-rbc-upload
+++ b/FS/bin/freeside-rbc-upload
@@ -43,6 +43,11 @@ else {
   die &usage if !$batchnum;
   @batches = qsearchs('pay_batch', { batchnum => $batchnum } );
   die "Can't find payment batch '$batchnum'\n" if !@batches;
+  if ($batches[0]->type eq "CREDIT") {
+    warn "running credit\n";
+    log_and_die( "Batch number $batchnum is a credit (batch refund) batch, and this format can not handle batch refunds.\n" )
+      unless FS::pay_batch->can_handle_electronic_refunds('RBC');
+  }
 }
 
 my $conf = new FS::Conf;
diff --git a/httemplate/misc/download-batch.cgi b/httemplate/misc/download-batch.cgi
index c6a0b68c3..e4882d1e8 100644
--- a/httemplate/misc/download-batch.cgi
+++ b/httemplate/misc/download-batch.cgi
@@ -4,6 +4,7 @@
 http_header('Content-Type' => 'text/plain' ); # not necessarily correct...
 
 my $batchnum;
+
 if ( $cgi->param('batchnum') =~ /^(\d+)$/ ) {
   $batchnum = $1;
 } else {
@@ -29,7 +30,7 @@ die "Batch not found: '$batchnum'" if !$pay_batch;
 
 if ($pay_batch->{Hash}->{arecredits}) {
   my $export_format = "FS::pay_batch::".$opt{'format'};
-    die "This format can not handle refunds." unless $export_format->can('can_handle_credits');
+  die "You are trying to download a credit (batch refund) batch and The format ".$opt{'format'}." can not handle refunds.\n" unless $export_format->can('can_handle_credits');
 }
 
 my $exporttext = $pay_batch->export_batch(%opt);

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

Summary of changes:
 FS/FS/pay_batch.pm                                 | 52 +++++++++++++---------
 FS/bin/freeside-eftca-upload                       |  6 +++
 FS/bin/freeside-paymentech-upload                  |  6 +++
 FS/bin/freeside-rbc-upload                         |  5 +++
 httemplate/misc/download-batch.cgi                 |  3 +-
 httemplate/search/elements/cust_pay_batch_top.html |  4 ++
 httemplate/search/pay_batch.cgi                    |  6 ++-
 7 files changed, 58 insertions(+), 24 deletions(-)




More information about the freeside-commits mailing list