use strict;
use Business::CreditCard;
use FS::payby;
+use FS::Record qw(qsearch);
=head1 NAME
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)'; #?
}
-=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:
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;
+ $lh->maketext('E-check acct#') . $self->payinfo;
} 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