},
{
+ 'key' => 'echeck-no_routing',
+ 'section' => 'billing',
+ 'description' => 'Disable the routing number entirely for Electronic Check payment info.',
+ 'type' => 'checkbox',
+ },
+
+ {
'key' => 'voip-cust_accountcode_cdr',
'section' => 'telephony',
'description' => 'Enable the per-customer option for CDR breakdown by accountcode.',
if ( $conf->exists('cust_main-require-bank-branch') ) {
$payinfo =~ /^(\d+)\@(\d+)\.(\d+)$/ or return 'invalid echeck account@branch.bank';
$payinfo = "$1\@$2.$3";
- }
- elsif ( $conf->exists('echeck-nonus') ) {
+ } elsif ( $conf->exists('echeck-no_routing') ) {
+ $payinfo =~ /^(\d+)\@(\d*)$/ or return 'invalid echeck account';
+ $payinfo = "$1\@$2";
+ } elsif ( $conf->exists('echeck-nonus') ) {
$payinfo =~ /^(\d+)\@(\d+)$/ or return 'invalid echeck account@aba';
$payinfo = "$1\@$2";
} else {
# 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;
% join('', map { qq!<OPTION VALUE="$_" !.($paytype eq $_ ? 'SELECTED' : '').">$_</OPTION>" } @FS::cust_main::paytypes).
% qq!</SELECT></TD></TR>!.
%
-% qq!<TR><TD ALIGN="right" WIDTH="200">${r}!.emt('ABA/Routing number').qq! </TD>!.
-% qq!<TD COLSPAN="3" WIDTH="408"><INPUT TYPE="text" SIZE=10 MAXLENGTH=9 NAME="CHEK_payinfo2" VALUE="!. ( $payby =~ /^(CHEK|DCHK)$/ ? $aba : '' ). qq!" SIZE=10 MAXLENGTH=9> !.
-% qq!(<A HREF="javascript:void(0);" onClick="overlib( OLiframeContent('../docs/ach.html', 380, 240, 'ach_popup' ), CAPTION, 'ACH Help', STICKY, AUTOSTATUSCAP, CLOSECLICK, DRAGGABLE ); return false;">!.emt('help').qq!</A>)!.
-% qq!</TD></TR>!.
+% ( $conf->exists('echeck-no_routing')
+% ? '<INPUT TYPE="hidden" NAME="CHEK_payinfo2" VALUE="'.
+% ( $payby =~ /^(CHEK|DCHK)$/ ? $aba : '' ). '">'
+% :
+% qq!<TR><TD ALIGN="right" WIDTH="200">${r}!.emt('ABA/Routing number').qq! </TD>!.
+% qq!<TD COLSPAN="3" WIDTH="408"><INPUT TYPE="text" SIZE=10 MAXLENGTH=9 NAME="CHEK_payinfo2" VALUE="!. ( $payby =~ /^(CHEK|DCHK)$/ ? $aba : '' ). qq!" SIZE=10 MAXLENGTH=9> !.
+% qq!(<A HREF="javascript:void(0);" onClick="overlib( OLiframeContent('../docs/ach.html', 380, 240, 'ach_popup' ), CAPTION, 'ACH Help', STICKY, AUTOSTATUSCAP, CLOSECLICK, DRAGGABLE ); return false;">!.emt('help').qq!</A>)!.
+% qq!</TD></TR>!
+% ).
%
% qq!<INPUT TYPE="hidden" NAME="CHEK_exp_month" VALUE="12">!.
% qq!<INPUT TYPE="hidden" NAME="CHEK_exp_year" VALUE="2037">!.
% $stateid, $stateid_state )
% = ( '', '', '', '', '', '', '', '' );
% if ( $cust_main->payby =~ /^(CHEK|DCHK)$/ ) {
-% $cust_main->paymask =~ /^([\dx]+)\@([\dx]+)$/i
+% $cust_main->paymask =~ /^([\dx]+)\@([\dx]*)$/i
% or die "unparsable payinfo ". $cust_main->payinfo;
% ($payinfo1, $payinfo2) = ($1, $2);
% $payname = $cust_main->payname;
<TD ALIGN="right"><% mt('Type') |h %></TD>
<TD><SELECT NAME="paytype"><% join('', map { qq!<OPTION VALUE="$_" !.($paytype eq $_ ? 'SELECTED' : '').">$_</OPTION>" } @FS::cust_main::paytypes) %></SELECT></TD>
</TR>
- <TR>
- <TD ALIGN="right"><% mt('ABA/Routing number') |h %></TD>
- <TD>
- <INPUT TYPE="text" SIZE=10 MAXLENGTH=9 NAME="payinfo2" VALUE="<%$payinfo2%>">
- (<A HREF="javascript:void(0);" onClick="overlib( OLiframeContent('../docs/ach.html', 380, 240, 'ach_popup' ), CAPTION, 'ACH Help', STICKY, AUTOSTATUSCAP, CLOSECLICK, DRAGGABLE ); return false;"><% mt('help') |h %></A>)
- </TD>
- </TR>
+% if ( $conf->exists('echeck-no_routing') ) {
+ <INPUT TYPE="text" NAME="payinfo2" VALUE="<%$payinfo2%>">
+% } else {
+ <TR>
+ <TD ALIGN="right"><% mt('ABA/Routing number') |h %></TD>
+ <TD>
+ <INPUT TYPE="text" SIZE=10 MAXLENGTH=9 NAME="payinfo2" VALUE="<%$payinfo2%>">
+ (<A HREF="javascript:void(0);" onClick="overlib( OLiframeContent('../docs/ach.html', 380, 240, 'ach_popup' ), CAPTION, 'ACH Help', STICKY, AUTOSTATUSCAP, CLOSECLICK, DRAGGABLE ); return false;"><% mt('help') |h %></A>)
+ </TD>
+ </TR>
+% }
<TR>
<TD ALIGN="right"><% mt('Bank name') |h %></TD>
<TD><INPUT TYPE="text" NAME="payname" VALUE="<%$payname%>"></TD>
$cgi->param('payinfo1') =~ /^(\d+)$/
or errorpage("illegal account number ". $cgi->param('payinfo1'));
my $payinfo1 = $1;
- $cgi->param('payinfo2') =~ /^(\d+)$/
- or errorpage("illegal ABA/routing number ". $cgi->param('payinfo2'));
+ if ( $conf->exists('echeck-no_routing') ) {
+ $cgi->param('payinfo2') =~ /^(\d*)$/
+ or errorpage("illegal ABA/routing number ". $cgi->param('payinfo2'));
+ } else {
+ $cgi->param('payinfo2') =~ /^(\d+)$/
+ or errorpage("illegal ABA/routing number ". $cgi->param('payinfo2'));
+ }
my $payinfo2 = $1;
$payinfo = $payinfo1. '@'. $payinfo2;
}
<% mt("Electronic check ([_1])",$autodemand) |h %>
</TD>
</TR>
-<TR>
- <TD ALIGN="right"><% mt('ABA/Routing code') |h %></TD>
- <TD BGCOLOR="#ffffff"><% $aba %></TD>
-</TR>
+
+% unless ( $conf->exists('echeck-no_routing') ) {
+ <TR>
+ <TD ALIGN="right"><% mt('ABA/Routing code') |h %></TD>
+ <TD BGCOLOR="#ffffff"><% $aba %></TD>
+ </TR>
+% }
% if ( $conf->exists('cust_main-require-bank-branch') ) {
<TR>
$payinfo = $object->paymask;
} elsif ( $payby eq 'CHEK' ) {
my( $account, $aba ) = split('@', $object->paymask );
- $payinfo = emt("ABA [_1], Acct #[_2]",$aba,$account);
+ if ( $conf->exists('echeck-no_routing') ) {
+ $payinfo = emt("Acct #[_1]", $account);
+ } else {
+ $payinfo = emt("ABA [_1], Acct #[_2]",$aba,$account);
+ }
}
($payby,$payinfo);