X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_pay_batch.pm;h=f5e6a4bf1c6ef2ef6b8e6870f4a7e62f0d6f252b;hb=afa7df8f94208b1551237fd6591650f5363cc1fc;hp=9fa14598a4ed8d028a13b709ec6f1aaca1153ed0;hpb=b1dacaef3f9773c72b4c6f525d2f1e584e1432fc;p=freeside.git diff --git a/FS/FS/cust_pay_batch.pm b/FS/FS/cust_pay_batch.pm index 9fa14598a..f5e6a4bf1 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 ) { @@ -299,21 +300,48 @@ sub approve { return; } -=item decline +=item decline [ REASON ] 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. - + +REASON is a string description of the decline reason, defaulting to +'Returned payment'. =cut + sub decline { my $new = shift; + my $reason = shift || 'Returned payment'; + #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. FS::pay_batch::import_results won't allow results to be + # imported to a closed batch unless batch-manual_approval is enabled, + # so we don't check it here. +# if ( $conf->exists('batch-manual_approval') and + if ( 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($reason); + } + 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 ) {