X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_main%2FBilling_Realtime.pm;h=f9f90a7dccf9d2f570d00ec4007cdd86565ad756;hb=8cbe016ac2c28cd209c48f053f361573368e7988;hp=da6b31b81cc0136bf96f37e085d6489c70aee48a;hpb=ca1ce2bf1c68535a6c4a0b0299bf64a07e530424;p=freeside.git diff --git a/FS/FS/cust_main/Billing_Realtime.pm b/FS/FS/cust_main/Billing_Realtime.pm index da6b31b81..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. @@ -412,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 ### @@ -602,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)