From: fbriere Date: Sat, 18 Feb 2006 00:26:11 +0000 (+0000) Subject: Added taxes() X-Git-Tag: V0_01~11 X-Git-Url: http://git.freeside.biz/gitweb/?p=Business-OnlinePayment-InternetSecure.git;a=commitdiff_plain;h=227f87ababc68077ac00d2fb5ee52f080370cbff Added taxes() --- diff --git a/InternetSecure.pm b/InternetSecure.pm index 10d7d6e..a7b1d0f 100755 --- a/InternetSecure.pm +++ b/InternetSecure.pm @@ -42,9 +42,12 @@ sub set_defaults { receipt_number sales_number uuid guid date card_type cardholder - total_amount + total_amount taxes avs_response cvv2_response )); + + # Just in case someone tries to call taxes() *before* submit() + $self->taxes( {} ); } # OnlinePayment's get_fields now filters out undefs in 3.x. :( @@ -223,6 +226,27 @@ sub infuse { } } +sub extract_taxes { + my ($self, $response) = @_; + + my %taxes; + + my $products = $response->{Products}; + return unless $products; + + foreach my $node (@$products) { + my $flags = $node->{flags}; + if ($flags && + grep($_ eq '{TAX}', @$flags) && + grep($_ eq '{CALCULATED}', @$flags)) + { + $taxes{ $node->{code} } = $node->{subtotal}; + } + } + + return %taxes; +} + # Parse the server's response and set various fields # sub parse_response { @@ -267,7 +291,7 @@ sub parse_response { $self->card_type(CARD_TYPES->{$self->card_type}); - $self->{products_raw} = $response->{Products}; + $self->taxes( { $self->extract_taxes($response) } ); return $self; } @@ -513,6 +537,11 @@ Date and time of the transaction. Format is C. Total amount billed for this order, including taxes. +=item taxes() + +Returns a I to a hash that maps tax names (such as C) to the +amount that was billed for each. + =item cardholder() Cardholder's name. This is currently a mere copy of the B field passed @@ -535,10 +564,6 @@ following: =back -=item products_raw() - -... - =back diff --git a/t/30parse.t b/t/30parse.t index 7e8e678..3734631 100755 --- a/t/30parse.t +++ b/t/30parse.t @@ -6,7 +6,7 @@ use constant FIELDS => qw( date card_type avs_response cvv2_response - total_amount + total_amount taxes ); use constant RESULTS => ( @@ -22,6 +22,7 @@ use constant RESULTS => ( avs_response => undef, cvv2_response => undef, total_amount => 3.88, + taxes => { GST => 0.25 }, uuid => 'f81d4fae-7dec-11d0-a765-00a0c91e6bf6', guid => 'f81d4fae-7dec-11d0-a765-00a0c91e6bf6', }, @@ -37,6 +38,8 @@ use constant RESULTS => ( avs_response => undef, cvv2_response => undef, total_amount => 3.88, + taxes => { GST => 0.25, + PST => 0.27 }, uuid => undef, guid => undef, }, @@ -66,7 +69,7 @@ foreach my $results (RESULTS) { foreach (FIELDS) { no strict 'refs'; - is($txn->$_, $results->{$_}, $_); + is_deeply($txn->$_, $results->{$_}, $_); } } @@ -160,6 +163,7 @@ __DATA__ {USD} {GST} + {PST} @@ -170,6 +174,7 @@ __DATA__ 0.20 {GST} + {PST} @@ -180,6 +185,7 @@ __DATA__ 0.33 {GST} + {PST} @@ -193,8 +199,19 @@ __DATA__ {CALCULATED} + + PST + PST Charged + 1 + 0.27 + 0.27 + + {TAX} + {CALCULATED} + + - 3.10::1::001::Test Product 1::{USD}{GST}|0.20::1::010::Test Product 2::{GST}|0.33::1::020::Test Product 3::{GST}|0.25::1::GST::Canadian GST Charged::{TAX}{CALCULATED} + 3.10::1::001::Test Product 1::{USD}{GST}{PST}|0.20::1::010::Test Product 2::{GST}{PST}|0.33::1::020::Test Product 3::{GST}{PST}|0.25::1::GST::Canadian GST Charged::{TAX}{CALCULATED}|0.27::1::PST::PST Charged::{TAX}{CALCULATED}