summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2015-02-15 21:44:40 -0800
committerIvan Kohler <ivan@freeside.biz>2015-02-15 21:44:40 -0800
commit799da5a4ff161203bbac930b75f3b934ccd19243 (patch)
tree5f1a4f0d6cad77e08336a6c2653a87fe87a7c77c
parentaf73ad83d772e140491f65306f53e11dc0b1b4ef (diff)
multiple payment options (echeck fixes), RT#23741
-rw-r--r--FS/FS/cust_payby.pm21
-rw-r--r--httemplate/elements/cust_payby.html22
2 files changed, 25 insertions, 18 deletions
diff --git a/FS/FS/cust_payby.pm b/FS/FS/cust_payby.pm
index a65a17133..b1a7ddb56 100644
--- a/FS/FS/cust_payby.pm
+++ b/FS/FS/cust_payby.pm
@@ -427,12 +427,16 @@ sub check {
}
- if ( $self->paydate eq '' || $self->paydate eq '-' ) {
- return "Expiration date required"
- # shouldn't payinfo_check do this?
- unless $self->payby =~ /^(CHEK|DCHK)$/;
+ if ( $self->payby =~ /^(CHEK|DCHK)$/ ) {
+
$self->paydate('');
- } else {
+
+ } elsif ( $self->payby =~ /^(CARD|DCRD)$/ ) {
+
+ # shouldn't payinfo_check do this?
+ return "Expiration date required"
+ if $self->paydate eq '' || $self->paydate eq '-';
+
my( $m, $y );
if ( $self->paydate =~ /^(\d{1,2})[\/\-](\d{2}(\d{2})?)$/ ) {
( $m, $y ) = ( $1, length($2) == 4 ? $2 : "20$2" );
@@ -451,6 +455,7 @@ sub check {
#&&
!$ignore_expired_card
&& ( $y<$nowy || ( $y==$nowy && $1<$nowm ) );
+
}
if ( $self->payname eq '' && $self->payby !~ /^(CHEK|DCHK)$/ &&
@@ -560,7 +565,7 @@ Returns the field names used in the web interface (including some pseudo-fields)
sub cgi_cust_payby_fields {
#my $class = shift;
[qw( payby payinfo paydate_month paydate_year paycvv payname weight
- payinfo1 payinfo2 payinfo3 paytype paystate )];
+ payinfo1 payinfo2 payinfo3 paytype paystate payname_CHEK )];
}
=item cgi_hash_callback HASHREF
@@ -582,7 +587,7 @@ sub cgi_hash_callback {
if ( $hashref->{payby} =~ /^(CHEK|DCHK)$/ ) {
- unless ( grep $hashref->{$_}, qw( payinfo1 payinfo2 payinfo3 payname ) ) {
+ unless ( grep $hashref->{$_}, qw(payinfo1 payinfo2 payinfo3 payname_CHEK)) {
%$hashref = ();
return;
}
@@ -592,7 +597,7 @@ sub cgi_hash_callback {
if $conf->config('echeck-country') eq 'CA';
$hashref->{payinfo} .= $hashref->{'payinfo2'};
- $hashref->{payname} .= $hashref->{'payname_CHEK'};
+ $hashref->{payname} = $hashref->{'payname_CHEK'};
} elsif ( $hashref->{payby} =~ /^(CARD|DCRD)$/ ) {
diff --git a/httemplate/elements/cust_payby.html b/httemplate/elements/cust_payby.html
index 20ad34311..0eb3e3ebe 100644
--- a/httemplate/elements/cust_payby.html
+++ b/httemplate/elements/cust_payby.html
@@ -107,15 +107,17 @@
</SELECT>
<BR><FONT SIZE="-1"><% mt('Account type') |h %></FONT>
</TD>
-
-% my( $account, $aba ) = split('@',
-% ( $cgi->param($name.'_payby') || $cust_payby->payby ) =~ /^(CHEK|DCHK)$/
-% ? $cgi->param($name.'_payinfo')
-% : $cust_payby->payinfo
-% );
-% my $branch = '';
-% ($branch,$aba) = split('\.',$aba)
-% if $echeck_country eq 'CA';
+
+% my ( $account, $aba, $branch ) = ( '', '', '' );
+% if ( $cgi->param($name.'_payby') =~ /^(CHEK|DCHK)$/ ) {
+% $account = $cgi->param($name.'_payinfo1');
+% $aba = $cgi->param($name.'_payinfo2');
+% $branch = $cgi->param($name.'_payinfo3');
+% } elsif ( $cust_payby->payby =~ /^(CHEK|DCHK)$/ ) {
+% ( $account, $aba ) = split('@', $cust_payby->payinfo);
+% ( $branch, $aba ) = split('\.',$aba)
+% if $echeck_country eq 'CA';
+% }
%
% #false laziness w/view/cust_main/billing.html and misc/payment.cgi
% my $routing_label = $echeck_country eq 'US' ? 'ABA/Routing #'
@@ -287,7 +289,7 @@ if ( $curr_value ) {
} else {
$cust_payby = new FS::cust_payby {};
}
-my $sel_payby = $cust_payby->payby;
+my $sel_payby = $cgi->param($name.'_payby') || $cust_payby->payby;
$sel_payby = 'CARD' if $sel_payby eq 'DCRD' || $sel_payby eq '';
$sel_payby = 'CHEK' if $sel_payby eq 'DCHK';