1 % unless ( $opt{'js_only'} ) {
3 <INPUT TYPE="hidden" NAME="<%$name%>" ID="<%$id%>" VALUE="<% $curr_value %>">
5 <TABLE STYLE="display:inline">
13 <SELECT NAME="<%$name%>_payby"
14 onChange="<%$name%>_payby_changed(this)"
16 % foreach my $payby (@payby) {
17 <OPTION VALUE="<% $payby %>"
18 <% ($sel_payby eq $payby) ? 'SELECTED' : '' %>
19 ><% FS::payby->shortname($payby) |h %>
22 <FONT SIZE="-1"><% mt('Type') |h %></FONT>
29 % my $card_display = $sel_payby eq 'CARD' ? '' : 'STYLE="display:none"';
31 <TD ID="<%$id%>_td_payinfo" <%$card_display%>>
33 NAME = "<%$name%>_payinfo"
34 ID = "<%$id%>_payinfo"
37 VALUE = "<% ( $cgi->param($name.'_payby')
38 || $cust_payby->payby ) =~ /^(CARD|DCRD)$/
39 ? ( $cgi->param($name.'_payinfo') || $cust_payby->paymask )
42 onChange = "<% $onchange %>"
44 <BR><FONT SIZE="-1"><% mt('Card number') |h %></FONT>
47 <TD ID="<%$id%>_td_paydate" <%$card_display%>>
48 <& /elements/select-month_year.html,
49 'prefix' => $name. '_paydate',
51 ( $cgi->param($name.'_payby') || $cust_payby->payby ) =~ /^(CARD|DCRD)$/
52 ? ( $cgi->param($name.'_paydate_month')
53 ? $cgi->param($name.'_paydate_month'). '-1-'.
54 $cgi->param($name.'_paydate_year')
55 : $cust_payby->paydate
59 'onhhange' => $onchange,
61 <BR><FONT SIZE="-1">Expiration date</FONT>
64 <TD ID="<%$id%>_td_paycvv" <%$card_display%>>
66 NAME = "<%$name%>_paycvv"
70 VALUE = "<% $cgi->param($name.'_paycvv') %>"
71 onChange = "<% $onchange %>"
73 <BR><FONT SIZE="-1"><% mt('CVV2') |h %> (<A HREF="javascript:void(0);" onClick="overlib( OLiframeContent('<%$p%>docs/cvv2.html', 480, 275, 'cvv2_popup' ), CAPTION, 'CVV2 Help', STICKY, AUTOSTATUSCAP, CLOSECLICK, DRAGGABLE ); return false;"><% mt('help') |h %></A>)</FONT>
76 <TD ID="<%$id%>_td_payname" <%$card_display%>>
78 NAME = "<%$name%>_payname"
79 ID = "<%$id%>_payname"
80 onChange = "<% $onchange %>"
81 VALUE = "<% ( $cgi->param($name.'_payby')
82 || $cust_payby->payby ) =~ /^(CARD|DCRD)$/
83 ? ( $cgi->param($name.'_payname') || $cust_payby->payname )
87 <BR><FONT SIZE="-1"><% mt('Exact name on card') |h %></FONT>
94 % my $chek_display = $sel_payby eq 'CHEK' ? '' : 'STYLE="display:none"';
96 <TD ID="<%$id%>_td_paytype" <%$chek_display%>>
97 <SELECT NAME="<%$name%>_paytype">!.
98 % foreach my $paytype ( FS::cust_payby->paytypes ) {
99 <OPTION VALUE="<%$paytype%>"
100 <% $paytype eq ( $cgi->param($name.'_paytype')
101 || $cust_payby->paytype )
108 <BR><FONT SIZE="-1"><% mt('Account type') |h %></FONT>
111 % my( $account, $aba ) = split('@',
112 % ( $cgi->param($name.'_payby') || $cust_payby->payby ) =~ /^(CHEK|DCHK)$/
113 % ? $cgi->param($name.'_payinfo')
114 % : $cust_payby->payinfo
117 % ($branch,$aba) = split('\.',$aba)
118 % if $echeck_country eq 'CA';
120 % #false laziness w/view/cust_main/billing.html and misc/payment.cgi
121 % my $routing_label = $echeck_country eq 'US' ? 'ABA/Routing #'
123 % my $routing_size = $echeck_country eq 'CA' ? 4 : 10;
124 % my $routing_maxlength = $echeck_country eq 'CA' ? 3 : 9;
125 % my $bankname_size = $echeck_country eq 'CA' ? 13 : 20;
127 <TD ID="<%$id%>_td_payinfo1" <%$chek_display%>>
129 NAME = "<%$name%>_payinfo1"
130 ID = "<%$id%>_payinfo1"
131 VALUE = "<% $account |h %>"
134 <BR><FONT SIZE="-1"><% mt('Account #') |h %> (<A HREF="javascript:void(0);" onClick="overlib( OLiframeContent('<%$p%>docs/ach.html', 380, 220, 'ach_popup' ), CAPTION, 'ACH Help', STICKY, AUTOSTATUSCAP, CLOSECLICK, DRAGGABLE ); return false;"><% mt('help') |h %></A>)</FONT>
137 <TD ID="<%$id%>_td_payinfo2" <%$chek_display%>>
139 NAME = "<%$name%>_payinfo2"
140 ID = "<%$id%>_payinfo2"
141 VALUE = "<% $aba |h %>"
142 SIZE = "<% $routing_size %>"
143 MAXLENGTH = "<% $routing_maxlength %>"
145 <BR><FONT SIZE="-1"><% mt($routing_label) |h %></FONT>
148 % if ( $echeck_country eq 'CA' ) {
149 <TD ID="<%$id%>_td_payinfo3" <%$chek_display%>>
151 NAME = "<%$name%>_payinfo3"
152 ID = "<%$id%>_payinfo3"
153 VALUE = "<% $branch |h %>"
157 <BR><FONT SIZE="-1"><% mt('Branch #') |h %></FONT>
161 <TD ID="<%$id%>_td_payname_CHEK" <%$chek_display%>>
163 NAME = "<%$name%>_payname_CHEK"
164 ID = "<%$id%>_payname_CHEK"
165 VALUE = "<% ( $cgi->param($name.'_payby')
166 || $cust_payby->payby ) =~ /^(CHEK|DCHK)$/
167 ? ( $cgi->param($name.'_payname_CHEK') || $cust_payby->payname )
170 SIZE = "<% $bankname_size %>"
172 <BR><FONT SIZE="-1"><% mt('Bank name') |h %></FONT>
175 % if ( $conf->exists('show_bankstate') ) {
176 <TD ID="<%$id%>_td_paystate" <%$chek_display%>>
177 <& /elements/select-state.html,
178 'prefix' => $name. '_pay',
179 'empty' => emt('(choose)'),
180 'state' => $cgi->param($name.'_paystate')
181 || $cust_payby->paystate,
182 #was cust_main->country in 3.x, but this will do until/unlesss
183 # someone needs to track foreign bank states
184 'country' => scalar($conf->config('countrydefault')) || 'US',
186 <BR><FONT SIZE="-1"><% mt('Bank state') |h %></FONT>
191 % # auto (maybe this should be first...)
194 % #some fun javascript to enforce a single value for each weight
197 <SELECT NAME = "<%$name%>_weight">
198 <OPTION VALUE="">Do not auto-charge
199 % foreach my $weight ( 1 .. max(5,$cust_payby->weight) ) { #more than 5?
200 <OPTION VALUE="<%$weight%>"
201 <% $weight == $cust_payby->weight
205 ><% mt( $weight{$weight} ) |h %>
209 <FONT SIZE="-1"><% mt('Auto-charge') |h %></FONT>
216 % unless ( $opt{'html_only'} ) {
217 <SCRIPT TYPE="text/javascript">
219 function <%$name%>_payby_changed(what) {
220 var payby = what.options[what.selectedIndex].value;
221 if ( payby == 'CARD' ) {
222 document.getElementById('<%$id%>_td_payinfo').style.display = '';
223 document.getElementById('<%$id%>_td_paydate').style.display = '';
224 document.getElementById('<%$id%>_td_paycvv').style.display = '';
225 document.getElementById('<%$id%>_td_payname').style.display = '';
226 document.getElementById('<%$id%>_td_payinfo1').style.display = 'none';
227 document.getElementById('<%$id%>_td_payinfo2').style.display = 'none';
228 document.getElementById('<%$id%>_td_paytype').style.display = 'none';
229 document.getElementById('<%$id%>_td_payname_CHEK').style.display = 'none';
230 var td_payinfo3 = document.getElementById('<%$id%>_td_payinfo3');
232 td_payinfo3.style.display = 'none';
234 var td_paystate = document.getElementById('<%$id%>_td_paystate');
236 td_paystate.style.display = 'none';
238 } else if ( payby == 'CHEK' ) {
239 document.getElementById('<%$id%>_td_payinfo').style.display = 'none';
240 document.getElementById('<%$id%>_td_paydate').style.display = 'none';
241 document.getElementById('<%$id%>_td_paycvv').style.display = 'none';
242 document.getElementById('<%$id%>_td_payname').style.display = 'none';
243 document.getElementById('<%$id%>_td_payinfo1').style.display = '';
244 document.getElementById('<%$id%>_td_payinfo2').style.display = '';
245 document.getElementById('<%$id%>_td_paytype').style.display = '';
246 document.getElementById('<%$id%>_td_payname_CHEK').style.display = '';
247 var td_payinfo3 = document.getElementById('<%$id%>_td_payinfo3');
249 td_payinfo3.style.display = '';
251 var td_paystate = document.getElementById('<%$id%>_td_paystate');
253 td_paystate.style.display = '';
256 alert( 'unknown payby ' + payby );
266 my $conf = new FS::Conf;
268 my $echeck_country = $conf->config('echeck-country');
270 my $name = $opt{'element_name'} || $opt{'field'} || 'custpaybynum';
271 my $id = $opt{'id'} || 'custpaybynum';
273 my $curr_value = $opt{'curr_value'} || $opt{'value'};
276 if ( $opt{'onchange'} ) {
277 $onchange = $opt{'onchange'};
278 $onchange .= '(this)' unless $onchange =~ /\(\w*\);?$/;
279 $onchange =~ s/\(what\);/\(this\);/g; #ugh, terrible hack. all onchange
280 #callbacks should act the same
281 #$onchange = 'onChange="'. $onchange. '"';
286 $cust_payby = qsearchs('cust_payby', { 'custpaybynum' => $curr_value } );
288 $cust_payby = new FS::cust_payby {};
290 my $sel_payby = $cust_payby->payby;
291 $sel_payby = 'CARD' if $sel_payby eq 'DCRD' || $sel_payby eq '';
292 $sel_payby = 'CHEK' if $sel_payby eq 'DCHK';
294 my @payby = FS::payby->cust_payby;
295 my %conf_payby = map { $_=>1 } $conf->config('payby');
296 @payby = grep $conf_payby{$_}, @payby if keys %conf_payby;
297 @payby = grep $_ !~ /^(DCRD|DCHK)$/, @payby;