'paystart_year', 'int', 'NULL', '', '', '',
'payissue', 'varchar', 'NULL', 2, '', '',
'payname', 'varchar', 'NULL', $char_d, '', '',
+ 'paystate', 'varchar', 'NULL', $char_d, '', '',
+ 'paytype', 'varchar', 'NULL', $char_d, '', '',
'payip', 'varchar', 'NULL', 15, '', '',
'tax', 'char', 'NULL', 1, '', '',
'otaker', 'varchar', '', 32, '', '',
use strict;
use vars qw( @ISA @EXPORT_OK $DEBUG $me $conf @encrypted_fields
- $import $skip_fuzzyfiles $ignore_expired_card );
+ $import $skip_fuzzyfiles $ignore_expired_card @paytypes);
use vars qw( $realtime_bop_decline_quiet ); #ugh
use Safe;
use Carp;
$ignore_expired_card = 0;
@encrypted_fields = ('payinfo', 'paycvv');
+@paytypes = ('Personal checking', 'Personal savings', 'Business checking', 'Business savings');
#ask FS::UID to run this stuff for us later
#$FS::UID::callback{'FS::cust_main'} = sub {
$error = $self->ut_numbern('paystart_month')
|| $self->ut_numbern('paystart_year')
|| $self->ut_numbern('payissue')
+ || $self->ut_textn('paytype')
;
return $error if $error;
%my $error = '';
%my($custnum, $username, $password, $popnum, $cust_main, $saved_pkgpart, $saved_domsvc);
%my(@invoicing_list);
-%my $payinfo;
+%my ($ss,$stateid,$payinfo);
%my $same = '';
%if ( $cgi->param('error') ) {
% $error = $cgi->param('error');
% @invoicing_list = split( /\s*,\s*/, $cgi->param('invoicing_list') );
% $same = $cgi->param('same');
% $cust_main->setfield('paid' => $cgi->param('paid')) if $cgi->param('paid');
+% $ss = $cust_main->ss; # don't mask an entered value on errors
+% $stateid = $cust_main->stateid; # don't mask an entered value on errors
% $payinfo = $cust_main->payinfo; # don't mask an entered value on errors
%} elsif ( $cgi->keywords ) { #editing
% my( $query ) = $cgi->keywords;
% $password = '';
% $popnum = 0;
% @invoicing_list = $cust_main->invoicing_list;
+% $ss = $cust_main->masked('ss');
+% $stateid = $cust_main->masked('stateid');
% $payinfo = $cust_main->paymask;
%} else {
% $custnum='';
% @invoicing_list = ();
% push @invoicing_list, 'POST'
% unless $conf->exists('disablepostalinvoicedefault');
+% $ss = '';
+% $stateid = '';
% $payinfo = '';
%}
%$cgi->delete_all();
<BR><BR>
Billing address
-<% include('cust_main/contact.html', $cust_main, '', 'bill_changed(this)', '' ) %>
+<% include('cust_main/contact.html', $cust_main, '', 'bill_changed(this)', '', 'ss' => $ss, 'stateid' => $stateid ) %>
<!-- service address -->
% if ( defined $cust_main->dbdef_table->column('ship_last') ) {
'address1', 'address2', 'city',
'county', 'state', 'zip', 'country',
'daytime', 'night', 'fax',
+ 'stateid', 'stateid_state',
'same',
var layervars = new Array(
'payauto',
- 'payinfo', 'payinfo1', 'payinfo2',
- 'payname', 'exp_month', 'exp_year', 'paycvv',
+ 'payinfo', 'payinfo1', 'payinfo2', 'paytype',
+ 'payname', 'paystate', 'exp_month', 'exp_year', 'paycvv',
'paystart_month', 'paystart_year', 'payissue',
'payip',
'paid'
% 'address1', 'address2', 'city',
% 'county', 'state', 'zip', 'country',
% 'daytime', 'night', 'fax',
+% 'stateid', 'stateid_state',
%
% 'same',
%
% 'select', #XXX key
%
% 'payauto',
-% 'payinfo', 'payinfo1', 'payinfo2',
-% 'payname', 'exp_month', 'exp_year', 'paycvv',
+% 'payinfo', 'payinfo1', 'payinfo2', 'paytype',
+% 'payname', 'paystate', 'exp_month', 'exp_year', 'paycvv',
% 'paystart_month', 'paystart_year', 'payissue',
% 'payip',
% 'paid',
<INPUT TYPE="hidden" NAME="payinfo" VALUE="<% $cust_main->paymask %>">
-% foreach my $field (qw( payname paycvv paystart_month paystart_year payissue payip )) {
+% foreach my $field (qw( payname paycvv paystart_month paystart_year payissue payip paytype paystate )) {
<INPUT TYPE="hidden" NAME="<% $field %>" VALUE="<% $cust_main->getfield($field) %>">
</SCRIPT>
% my $payby = $cust_main->payby;
+% my $paytype = $cust_main->paytype;
% my( $account, $aba ) = split('@', $payinfo);
%
% my $disabled = 'DISABLED style="background-color: #dddddd"';
% '<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 HEIGHT=192>'.
%
% qq!<TR><TD ALIGN="right" WIDTH="200">${r}Account number </TD>!.
-% qq!<TD WIDTH="408"><INPUT TYPE="text" SIZE=12 NAME="payinfo1" VALUE="!. ( $payby =~ /^(CHEK|DCHK)$/ ? $account : '' ). '"></TD></TR>'.
+% qq!<TD><INPUT TYPE="text" SIZE=12 NAME="payinfo1" VALUE="!. ( $payby =~ /^(CHEK|DCHK)$/ ? $account : '' ). '"></TD>'.
+% qq!<TD ALIGN="right">Type</TD><TD><SELECT="text" NAME="paytype">!.
+% 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}ABA/Routing number </TD>!.
-% qq!<TD WIDTH="408"><INPUT TYPE="text" SIZE=10 MAXLENGTH=9 NAME="payinfo2" VALUE="!. ( $payby =~ /^(CHEK|DCHK)$/ ? $aba : '' ). qq!" SIZE=10 MAXLENGTH=9> !.
+% qq!<TD COLSPAN="3" WIDTH="408"><INPUT TYPE="text" SIZE=10 MAXLENGTH=9 NAME="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;">help</A>)!.
% qq!</TD></TR>!.
%
% qq!<INPUT TYPE="hidden" NAME="exp_year" VALUE="2037">!.
%
% qq!<TR><TD ALIGN="right" WIDTH="200">${r}Bank name </TD>!.
-% qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="payname" VALUE="!. ( $payby =~ /^(CHEK|DCHK)$/ ? $cust_main->payname : '' ). qq!"></TD></TR>!.
+% qq!<TD COLSPAN="3" WIDTH="408"><INPUT TYPE="text" NAME="payname" VALUE="!. ( $payby =~ /^(CHEK|DCHK)$/ ? $cust_main->payname : '' ). qq!"></TD></TR>!.
+% qq!<TR><TD ALIGN="right" WIDTH="200">$paystate_label</TD>!.
+% qq!<TD COLSPAN="3" WIDTH="408">!.
+% include('select-state.html',
+% 'empty' => '(choose)',
+% 'state' => $cust_main->paystate,
+% 'country' => $cust_main->country,
+% 'prefix' => 'pay',
+% ). "</TD></TR>".
%
-% qq!<TR><TD COLSPAN=2 WIDTH="608"><INPUT TYPE="checkbox" NAME="payauto" !. ( $payby eq 'DCHK' ? '' : 'CHECKED' ). '> Charge future payments to this electronic check automatically</TD></TR>'.
+%
+% qq!<TR><TD COLSPAN=4 WIDTH="608"><INPUT TYPE="checkbox" NAME="payauto" !. ( $payby eq 'DCHK' ? '' : 'CHECKED' ). '> Charge future payments to this electronic check automatically</TD></TR>'.
%
% '<TR><TD> </TD></TR>'.
% '<TR><TD> </TD></TR>'.
<% $r %> required fields
% }
+<%once>
+
+my $paystate_label = FS::Msgcat::_gettext('paystate');
+$paystate_label = 'Bank state' if $paystate_label =~/^paystate$/;
+
+</%once>
<%init>
my( $cust_main, %options ) = @_;
<SELECT NAME="<% $opt{'prefix'} %>state" onChange="<% $opt{'prefix'} %>state_changed(this); <% $opt{'onchange'} %>" <% $opt{'disabled'} %>>
+% if ($opt{empty}) {
+ <OPTION VALUE=""<% $opt{state} eq '' ? ' SELECTED' : '' %>><% $opt{empty} %>
+% }
+
% foreach my $state ( keys %states ) {
<OPTION VALUE="<% $state %>"<% $state eq $opt{'state'} ? ' SELECTED' : '' %>><% $states{$state} || '(n/a)' %>
<%init>
my %opt = @_;
-foreach my $opt (qw( county state country prefix onchange disabled )) {
+foreach my $opt (qw( county state country prefix onchange disabled empty )) {
$opt{$_} = '' unless exists($opt{$_}) && defined($opt{$_});
}