summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2009-10-25 23:30:27 +0000
committerivan <ivan>2009-10-25 23:30:27 +0000
commit05419e3838b401019fed034f97e63e3d7e83b539 (patch)
treeb1035d562d61312a1b6657786e9ad8bebf78c88a
parent1b2a96a59001c6f1935c92de52352c887924a622 (diff)
add apply option to realtime_collect, RT#5071
-rw-r--r--FS/FS/ClientAPI/MyAccount.pm2
-rw-r--r--FS/FS/cust_main.pm31
2 files changed, 29 insertions, 4 deletions
diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm
index 0a2b0fd22..e0ca7bf46 100644
--- a/FS/FS/ClientAPI/MyAccount.pm
+++ b/FS/FS/ClientAPI/MyAccount.pm
@@ -485,7 +485,7 @@ sub realtime_collect {
my $error = $cust_main->realtime_collect(
'method' => $p->{'method'},
- 'session_id' => $p->{'session_id'},
+ 'apply' => 1,
);
return { 'error' => $error } unless ref( $error );
diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm
index cbbfc4858..2559cd3e8 100644
--- a/FS/FS/cust_main.pm
+++ b/FS/FS/cust_main.pm
@@ -2674,7 +2674,9 @@ I<description> is a free-text field passed to the gateway. It defaults to
If an I<invnum> is specified, this payment (if successful) is applied to the
specified invoice. If you don't specify an I<invnum> you might want to
-call the B<apply_payments> method.
+call the B<apply_payments> method or set the I<apply> option.
+
+I<apply> can be set to true to apply a resulting payment.
I<quiet> can be set true to surpress email decline notices.
@@ -2690,7 +2692,18 @@ I<payunique> is a unique identifier for this payment.
=cut
sub realtime_bop {
- my( $self, $method, $amount, %options ) = @_;
+ my $self = shift;
+
+ my($method, $amount);
+ my %options = ();
+ if (ref($_[0]) eq 'HASH') {
+ %options = %{$_[0]};
+ $method = $options{method};
+ $amount = $options{amount};
+ } else {
+ ( $method, $amount ) = ( shift, shift );
+ %options = @_;
+ }
if ( $DEBUG ) {
warn "$me realtime_bop: $method $amount\n";
warn " $_ => $options{$_}\n" foreach keys %options;
@@ -3135,6 +3148,16 @@ sub realtime_bop {
} else {
$dbh->commit or die $dbh->errstr if $oldAutoCommit;
+
+ if ( $options{'apply'} ) {
+ my $apply_error = $self->apply_payments_and_credits;
+ if ( $apply_error ) {
+ warn "WARNING: error applying payment: $apply_error\n";
+ #but we still should return no error cause the payment otherwise went
+ #through...
+ }
+ }
+
return ''; #no error
}
@@ -3636,7 +3659,9 @@ I<description> is a free-text field passed to the gateway. It defaults to
If an I<invnum> is specified, this payment (if successful) is applied to the
specified invoice. If you don't specify an I<invnum> you might want to
-call the B<apply_payments> method.
+call the B<apply_payments> method or set the I<apply> option.
+
+I<apply> can be set to true to apply a resulting payment.
I<quiet> can be set true to surpress email decline notices.