summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Burger <burgerc@freeside.biz>2019-03-13 09:17:02 -0400
committerChristopher Burger <burgerc@freeside.biz>2019-03-13 10:04:13 -0400
commit7733d727907d15271602cb28c5e32afb288220dd (patch)
treee0822a57a45babb6184761fc86b24a80df5a37bf
parent2163c682341bebc40b83dbe5bc7f027b17b6a50f (diff)
RT# 82988 - updated paybatch upgrade to move credits from combined batch file to credit batch file
-rw-r--r--FS/FS/pay_batch.pm52
-rw-r--r--httemplate/search/elements/cust_pay_batch_top.html4
-rwxr-xr-xhttemplate/search/pay_batch.cgi6
3 files changed, 39 insertions, 23 deletions
diff --git a/FS/FS/pay_batch.pm b/FS/FS/pay_batch.pm
index e8ae6ec..d0ed7ae 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 eee81dd..90fc9e4 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 8fe4351..fd14d05 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 {
'';
}