From 534d783cfda72bbea29a78954bafa1d25f443782 Mon Sep 17 00:00:00 2001 From: ivan Date: Sun, 25 Oct 2009 23:30:00 +0000 Subject: [PATCH] add apply option to realtime_collect, RT#5071 --- FS/FS/ClientAPI/MyAccount.pm | 2 +- FS/FS/cust_main.pm | 41 ++++++++++++++++++++++++++++++++++++----- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index 1e029ed25..21dab46f4 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -680,7 +680,6 @@ sub process_payment { } sub realtime_collect { - my $p = shift; my $session = _cache->get($p->{'session_id'}) @@ -695,6 +694,7 @@ sub realtime_collect { 'method' => $p->{'method'}, 'pkgnum' => $session->{'pkgnum'}, '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 506f10b89..ffc9f0fce 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -3854,7 +3854,9 @@ I is a free-text field passed to the gateway. It defaults to If an I is specified, this payment (if successful) is applied to the specified invoice. If you don't specify an I you might want to -call the B method. +call the B method or set the I option. + +I can be set to true to apply a resulting payment. I can be set true to surpress email decline notices. @@ -3873,7 +3875,16 @@ sub realtime_bop { return $self->_new_realtime_bop(@_) if $self->_new_bop_required(); - my( $method, $amount, %options ) = @_; + 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; @@ -4347,6 +4358,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 } @@ -4802,7 +4823,6 @@ sub _new_bop_required { ''; } - =item realtime_collect [ OPTION => VALUE ... ] Runs a realtime credit card, ACH (electronic check) or phone bill transaction @@ -4830,7 +4850,9 @@ I is a free-text field passed to the gateway. It defaults to If an I is specified, this payment (if successful) is applied to the specified invoice. If you don't specify an I you might want to -call the B method. +call the B method or set the I option. + +I can be set to true to apply a resulting payment. I can be set true to surpress email decline notices. @@ -5513,6 +5535,16 @@ sub _realtime_bop_result { } 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 } @@ -6374,7 +6406,6 @@ A hash of optional arguments may be passed. Currently "manual" is supported. If true, a payment receipt is sent instead of a statement when 'payment_receipt_email' configuration option is set. - Dies if there is an error. =cut -- 2.11.0