From: Christopher Burger Date: Wed, 13 Mar 2019 13:17:02 +0000 (-0400) Subject: RT# 82988 - updated paybatch upgrade to move credits from combined batch file to... X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=7733d727907d15271602cb28c5e32afb288220dd 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 { ''; }