X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpayinfo_Mixin.pm;h=f202bbd3d2f1be8cf0c29888520867e373a0ee59;hb=67f033bc45654a380f47bffc9253dd86c4f784ec;hp=84264c966ff37358a46e9f09c9b370a15d35cf17;hpb=5fdd19665fb7c0ad425a99d3dbf9ad7e27fbf44a;p=freeside.git diff --git a/FS/FS/payinfo_Mixin.pm b/FS/FS/payinfo_Mixin.pm index 84264c966..f202bbd3d 100644 --- a/FS/FS/payinfo_Mixin.pm +++ b/FS/FS/payinfo_Mixin.pm @@ -3,6 +3,7 @@ package FS::payinfo_Mixin; use strict; use Business::CreditCard; use FS::payby; +use FS::Record qw(qsearch); =head1 NAME @@ -132,7 +133,7 @@ sub mask_payinfo { my $payinfo = scalar(@_) ? shift : $self->payinfo; # Check to see if it's encrypted... - if ( $self->is_encrypted($payinfo) ) { + if ( ref($self) && $self->is_encrypted($payinfo) ) { return 'N/A'; } elsif ( $payinfo =~ /^99\d{14}$/ || $payinfo eq 'N/A' ) { #token return 'N/A (tokenized)'; #? @@ -165,7 +166,8 @@ sub mask_payinfo { # Checks (Show last 2 @ bank) my( $account, $aba ) = split('@', $payinfo ); return 'x'x(length($account)-2). - substr($account,(length($account)-2))."@".$aba; + substr($account,(length($account)-2)). + ( length($aba) ? "@".$aba : ''); } else { # Tie up loose ends return $payinfo; @@ -232,7 +234,7 @@ sub payinfo_check { } -=item payby_payinfo_pretty +=item payby_payinfo_pretty [ LOCALE ] Returns payment method and information (suitably masked, if applicable) as a human-readable string, such as: @@ -247,25 +249,63 @@ or sub payby_payinfo_pretty { my $self = shift; + my $locale = shift; + my $lh = FS::L10N->get_handle($locale); if ( $self->payby eq 'CARD' ) { - 'Card #'. $self->paymask; + $lh->maketext('Card #') . $self->paymask; } elsif ( $self->payby eq 'CHEK' ) { - 'E-check acct#'. $self->payinfo; + + #false laziness w/view/cust_main/payment_history.html::translate_payinfo + my( $account, $aba ) = split('@', $self->paymask ); + + if ( $aba =~ /^(\d{5})\.(\d{3})$/ ) { #blame canada + my($branch, $routing) = ($1, $2); + $lh->maketext("Routing [_1], Branch [_2], Acct [_3]", + $routing, $branch, $account); + } else { + $lh->maketext("Routing [_1], Acct [_2]", $aba, $account); + } + } elsif ( $self->payby eq 'BILL' ) { - 'Check #'. $self->payinfo; + $lh->maketext('Check #') . $self->payinfo; } elsif ( $self->payby eq 'PREP' ) { - 'Prepaid card #'. $self->payinfo; + $lh->maketext('Prepaid card #') . $self->payinfo; } elsif ( $self->payby eq 'CASH' ) { - 'Cash '. $self->payinfo; + $lh->maketext('Cash') . ' ' . $self->payinfo; } elsif ( $self->payby eq 'WEST' ) { - 'Western Union'; #. $self->payinfo; + # does Western Union localize their name? + $lh->maketext('Western Union'); } elsif ( $self->payby eq 'MCRD' ) { - 'Manual credit card'; #. $self->payinfo; + $lh->maketext('Manual credit card'); } else { $self->payby. ' '. $self->payinfo; } } +=item payinfo_used [ PAYINFO ] + +Returns 1 if there's an existing payment using this payinfo. This can be +used to set the 'recurring payment' flag required by some processors. + +=cut + +sub payinfo_used { + my $self = shift; + my $payinfo = shift || $self->payinfo; + my %hash = ( + 'custnum' => $self->custnum, + 'payby' => 'CARD', + ); + + return 1 + if qsearch('cust_pay', { %hash, 'payinfo' => $payinfo } ) + || qsearch('cust_pay', + { %hash, 'paymask' => $self->mask_payinfo('CARD', $payinfo) } ) + ; + + return 0; +} + =back =head1 BUGS