X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fpay_batch.pm;h=c57c554984de1aaa5c0669afb38be5ebf1c2f688;hp=e8ae6ec2c8025c6bbf14050d01adb6b7ae00d8c2;hb=f1d04f65cbacc2d5f4a286ef2a4c3f1b6b3943c2;hpb=b48c02a92562395c84dbfe8c47db5c4ba14891a0 diff --git a/FS/FS/pay_batch.pm b/FS/FS/pay_batch.pm index e8ae6ec2c..c57c55498 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', @@ -1257,35 +1257,51 @@ sub _upgrade_data { 'extra_sql' => $extrasql, }); - 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); + my $replace_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, - }); + if (@batch_refunds) { + warn "found ".scalar @batch_refunds." batch refunds.\n"; + warn "Searching for their cust refunds...\n" if (scalar @batch_refunds > 0); - 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; - ## 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; + ## move refund to credit batch. + foreach my $cust_pay_batch (@batch_refunds) { + my $payby = $cust_pay_batch->payby eq "CARD" ? "CARD" : "CHEK"; - ## 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; - } + my %pay_batch = ( + 'status' => 'O', + 'payby' => $payby, + 'type' => 'CREDIT', + ); - 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 $pay_batch = qsearchs( 'pay_batch', \%pay_batch ); + + 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 $payby credit batch: $error\n"; + } + } + + $cust_pay_batch->batchnum($pay_batch->batchnum); + $replace_error = $cust_pay_batch->replace(); + if ( $replace_error ) { + $dbh->rollback if $oldAutoCommit; + warn "Unable to move credit to a credit batch: $replace_error"; + } + else { + warn "Moved cust pay credit ".$cust_pay_batch->paybatchnum." to ".$cust_pay_batch->payby." credit batch ".$cust_pay_batch->batchnum."\n"; + } + } + } #end @batch_refunds + else { warn "No batch refunds found\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