X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_main%2FBilling_Realtime.pm;h=f9f90a7dccf9d2f570d00ec4007cdd86565ad756;hb=ee2ee290c82013f870e2b23e4235e70998e59ee1;hp=91f22ee022f479ccf3ac5ef5c7d1c14565348d62;hpb=3cc574188759d0df1ede6b92c2929b06b30c105e;p=freeside.git diff --git a/FS/FS/cust_main/Billing_Realtime.pm b/FS/FS/cust_main/Billing_Realtime.pm index 91f22ee02..f9f90a7dc 100644 --- a/FS/FS/cust_main/Billing_Realtime.pm +++ b/FS/FS/cust_main/Billing_Realtime.pm @@ -22,6 +22,9 @@ $realtime_bop_decline_quiet = 0; $DEBUG = 0; $me = '[FS::cust_main::Billing_Realtime]'; +our $BOP_TESTING = 0; +our $BOP_TESTING_SUCCESS = 1; + install_callback FS::UID sub { $conf = new FS::Conf; #yes, need it for stuff below (prolly should be cached) @@ -138,7 +141,8 @@ I is a session identifier associated with this payment. I allows payment capture to unlock export jobs -I attempts to take a discount by prepaying for discount_term +I attempts to take a discount by prepaying for discount_term. +The payment will fail if I is incorrect for this discount term. A direct (Business::OnlinePayment) transaction will return nothing on success, or an error message on failure. @@ -306,6 +310,10 @@ sub _bop_content { $content{referer} = 'http://cleanwhisker.420.am/'; #XXX fix referer :/ $content{phone} = $self->daytime || $self->night; + my $currency = $conf->exists('business-onlinepayment-currency') + && $conf->config('business-onlinepayment-currency'); + $content{currency} = $currency if $currency; + \%content; } @@ -408,6 +416,24 @@ sub realtime_bop { return "Banned credit card" if $ban && $ban->bantype ne 'warn'; ### + # check for term discount validity + ### + + my $discount_term = $options{discount_term}; + if ( $discount_term ) { + my $bill = ($self->cust_bill)[-1] + or return "Can't apply a term discount to an unbilled customer"; + my $plan = FS::discount_plan->new( + cust_bill => $bill, + months => $discount_term + ) or return "No discount available for term '$discount_term'"; + + if ( $plan->discounted_total != $options{amount} ) { + return "Incorrect term prepayment amount (term $discount_term, amount $options{amount}, requires ".$plan->discounted_total.")"; + } + } + + ### # massage data ### @@ -598,9 +624,7 @@ sub realtime_bop { my $cpp_pending_err = $cust_pay_pending->replace; return $cpp_pending_err if $cpp_pending_err; - #config? - my $BOP_TESTING = 0; - my $BOP_TESTING_SUCCESS = 1; + warn Dumper($transaction) if $DEBUG > 2; unless ( $BOP_TESTING ) { $transaction->test_transaction(1)