projects
/
freeside.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
RT#42043: Check for cancelled packages with a cancellation date age option [hasnt...
[freeside.git]
/
FS
/
FS
/
pay_batch.pm
diff --git
a/FS/FS/pay_batch.pm
b/FS/FS/pay_batch.pm
index
d7dd7bb
..
02c8e34
100644
(file)
--- a/
FS/FS/pay_batch.pm
+++ b/
FS/FS/pay_batch.pm
@@
-614,7
+614,8
@@
sub import_from_gateway {
my $error;
my $paybatch = $gateway->gatewaynum . '-' . $gateway->gateway_module .
my $error;
my $paybatch = $gateway->gatewaynum . '-' . $gateway->gateway_module .
- ':' . $item->authorization . ':' . $item->order_number;
+ ':' . ($item->authorization || '') .
+ ':' . ($item->order_number || '');
if ( $batch->incoming ) {
# This is a one-way batch.
if ( $batch->incoming ) {
# This is a one-way batch.
@@
-888,7
+889,8
@@
Prepare the batch to be exported. This will:
increment expiration dates that are in the past.
- If this is the first download for this batch, adjust payment amounts to
not be greater than the customer's current balance. If the customer's
increment expiration dates that are in the past.
- If this is the first download for this batch, adjust payment amounts to
not be greater than the customer's current balance. If the customer's
- balance is zero, the entry will be removed.
+ balance is zero, the entry will be removed (caution: all cust_pay_batch
+ entries might be removed!)
Use this within a transaction.
Use this within a transaction.
@@
-903,8
+905,6
@@
sub prepare_for_export {
my $status = $self->status;
if ($status eq 'O') {
$first_download = 1;
my $status = $self->status;
if ($status eq 'O') {
$first_download = 1;
- my $error = $self->set_status('I');
- return "error updating pay_batch status: $error\n" if $error;
} elsif ($status eq 'I' && $curuser->access_right('Reprocess batches')) {
$first_download = 0;
} elsif ($status eq 'R' &&
} elsif ($status eq 'I' && $curuser->access_right('Reprocess batches')) {
$first_download = 0;
} elsif ($status eq 'R' &&
@@
-938,7
+938,7
@@
sub prepare_for_export {
my $balance = $cust_pay_batch->cust_main->balance;
if ($balance <= 0) { # then don't charge this customer
my $balance = $cust_pay_batch->cust_main->balance;
if ($balance <= 0) { # then don't charge this customer
- my $error = $cust_pay_batch->delete;
+ my $error = $cust_pay_batch->
unbatch_and_
delete;
return $error if $error;
} elsif ($balance < $cust_pay_batch->amount) {
# reduce the charge to the remaining balance
return $error if $error;
} elsif ($balance < $cust_pay_batch->amount) {
# reduce the charge to the remaining balance
@@
-948,6
+948,11
@@
sub prepare_for_export {
}
# else $balance >= $cust_pay_batch->amount
}
}
# else $balance >= $cust_pay_batch->amount
}
+
+ #need to do this after unbatch_and_delete
+ my $error = $self->set_status('I');
+ return "error updating pay_batch status: $error\n" if $error;
+
} #if $first_download
'';
} #if $first_download
'';
@@
-961,6
+966,10
@@
module, in which case the configuration options are in 'batchconfig-FORMAT'.
Alternatively, GATEWAY can be an L<FS::payment_gateway> object set to a
L<Business::BatchPayment> module.
Alternatively, GATEWAY can be an L<FS::payment_gateway> object set to a
L<Business::BatchPayment> module.
+Returns the text of the batch. If batch contains no cust_pay_batch entries
+(or has them all removed by L</prepare_for_export>) then the batch will be
+resolved and a blank string will be returned. All other errors are fatal.
+
=cut
sub export_batch {
=cut
sub export_batch {
@@
-996,6
+1005,12
@@
sub export_batch {
my $batchcount = 0;
my @cust_pay_batch = $self->cust_pay_batch;
my $batchcount = 0;
my @cust_pay_batch = $self->cust_pay_batch;
+ unless (@cust_pay_batch) {
+ # if it's empty, just resolve the batch
+ $self->set_status('R');
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ return '';
+ }
my $delim = exists($info->{'delimiter'}) ? $info->{'delimiter'} : "\n";
my $delim = exists($info->{'delimiter'}) ? $info->{'delimiter'} : "\n";
@@
-1040,6
+1055,10
@@
that gateway via Business::BatchPayment. OPTIONS may include:
- file: override the default transport and write to this file (name or handle)
- file: override the default transport and write to this file (name or handle)
+If batch contains no cust_pay_batch entries (or has them all removed by
+L</prepare_for_export>) then nothing will be transported (or written to
+the override file) and the batch will be resolved.
+
=cut
sub export_to_gateway {
=cut
sub export_to_gateway {
@@
-1060,6
+1079,13
@@
sub export_to_gateway {
my $processor = $gateway->batch_processor(%proc_opt);
my @items = map { $_->request_item } $self->cust_pay_batch;
my $processor = $gateway->batch_processor(%proc_opt);
my @items = map { $_->request_item } $self->cust_pay_batch;
+ unless (@items) {
+ # if it's empty, just resolve the batch
+ $self->set_status('R');
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ return '';
+ }
+
my $batch = Business::BatchPayment->create(Batch =>
batch_id => $self->batchnum,
items => \@items
my $batch = Business::BatchPayment->create(Batch =>
batch_id => $self->batchnum,
items => \@items