summaryrefslogtreecommitdiff
path: root/FS/FS/cust_pay_batch.pm
diff options
context:
space:
mode:
authormark <mark>2011-02-15 23:52:32 +0000
committermark <mark>2011-02-15 23:52:32 +0000
commitf8b35040badefb02652f875e147ee2b4b2f7c4a9 (patch)
tree8190c852e663477e7a551a4630bb8f6cb52d4d4f /FS/FS/cust_pay_batch.pm
parentdc1891ff9a6e6c4b4545fe7f786af6bd0f28b2cf (diff)
batch payment revocation, RT#10545
Diffstat (limited to 'FS/FS/cust_pay_batch.pm')
-rw-r--r--FS/FS/cust_pay_batch.pm28
1 files changed, 25 insertions, 3 deletions
diff --git a/FS/FS/cust_pay_batch.pm b/FS/FS/cust_pay_batch.pm
index 9fa1459..171ec9f 100644
--- a/FS/FS/cust_pay_batch.pm
+++ b/FS/FS/cust_pay_batch.pm
@@ -290,6 +290,7 @@ sub approve {
'payinfo' => $new->payinfo || $old->payinfo,
'paid' => $new->paid,
'_date' => $new->_date,
+ 'usernum' => $new->usernum,
} );
$error = $cust_pay->insert;
if ( $error ) {
@@ -304,16 +305,37 @@ sub approve {
Decline this payment. This will replace the existing record with the
same paybatchnum, set its status to 'Declined', and run collection events
as appropriate. This should only be called from the batch import process.
-
=cut
+
sub decline {
my $new = shift;
+ my $conf = new FS::Conf;
+
my $paybatchnum = $new->paybatchnum;
my $old = qsearchs('cust_pay_batch', { paybatchnum => $paybatchnum })
or return "paybatchnum $paybatchnum not found";
- return "paybatchnum $paybatchnum already resolved ('".$old->status."')"
- if $old->status;
+ if ( $old->status ) {
+ # Handle the case where payments are rejected after the batch has been
+ # approved. Only if manual approval is enabled.
+ if ( $conf->exists('batch-manual_approval')
+ and lc($old->status) eq 'approved' ) {
+ # Void the payment
+ my $cust_pay = qsearchs('cust_pay', {
+ custnum => $new->custnum,
+ paybatch => $new->batchnum
+ });
+ if ( !$cust_pay ) {
+ # should never happen...
+ return "failed to revoke paybatchnum $paybatchnum, payment not found";
+ }
+ $cust_pay->void('Returned payment');
+ }
+ else {
+ # normal case: refuse to do anything
+ return "paybatchnum $paybatchnum already resolved ('".$old->status."')";
+ }
+ } # !$old->status
$new->status('Declined');
my $error = $new->replace($old);
if ( $error ) {