echeck: add optional bank branch format, RT13360
[freeside.git] / httemplate / edit / cust_main / billing.html
1 %if ( $payby_default eq 'HIDE' ) {
2 %
3 %  $cust_main->payby('BILL') unless $cust_main->payby;
4 %  my $payby = $cust_main->payby;
5
6   <INPUT TYPE="hidden" NAME="payby" VALUE="<% $payby %>">
7
8   <INPUT TYPE="hidden" NAME="<%$payby%>_payinfo" VALUE="<% $cust_main->paymask %>">
9
10 % foreach my $field (qw( payname paycvv paystart_month paystart_year payissue payip paytype paystate )) { 
11
12     <INPUT TYPE="hidden" NAME="<% $payby.'_'.$field %>" VALUE="<% $cust_main->get($field) %>">
13
14 % } 
15
16 %  #false laziness w/elements/select-month_year.html & view/cust_main/billing.html
17 %  my( $mon, $year );
18 %  my $date = $cust_main->paydate || '12-2037';
19 %  if ( $date  =~ /^(\d{4})-(\d{1,2})-\d{1,2}$/ ) { #PostgreSQL date format
20 %    ( $mon, $year ) = ( $2, $1 );
21 %  } elsif ( $date =~ /^(\d{1,2})-(\d{1,2}-)?(\d{4}$)/ ) {
22 %    ( $mon, $year ) = ( $1, $3 );
23 %  } else {
24 %    die "unrecognized expiration date format: $date";
25 %  }
26
27   <INPUT TYPE="hidden" NAME="<%$payby%>_exp_month" VALUE="<% $mon %>">
28   <INPUT TYPE="hidden" NAME="<%$payby%>_exp_year"  VALUE="<% $year %>">
29
30   <INPUT TYPE="hidden" NAME="tax" VALUE="<% $cust_main->tax %>">
31
32   <INPUT TYPE="hidden" NAME="invoicing_list" VALUE="<% join(', ', @invoicing_list) %>">
33
34 % } else {
35 %
36 %  my $r = qq!<font color="#ff0000">*</font>&nbsp;!;
37
38   <BR><FONT SIZE="+1"><B>Billing information</B></FONT>
39   <% &ntable("#cccccc") %>
40
41     <TR>
42       <TD ALIGN="right" WIDTH="200"><%$r%>Billing type</TD>
43
44   <SCRIPT>
45
46     var mywindow = -1;
47     function myopen(filename,windowname,properties) {
48       myclose();
49       mywindow = window.open(filename,windowname,properties);
50     }
51     function myclose() {
52       if ( mywindow != -1 )
53         mywindow.close();
54       mywindow = -1;
55     }
56
57     var achwindow = -1;
58     function achopen(filename,windowname,properties) {
59       achclose();
60       achwindow = window.open(filename,windowname,properties);
61     }
62     function achclose() {
63       if ( achwindow != -1 )
64         achwindow.close();
65       achwindow = -1;
66     }
67
68     function card_changed(what) {
69       if (
70              what.form.payinfo.value.substring(0, 4) == '4093' 
71           || what.form.payinfo.value.substring(0, 4) == '4911' 
72           || what.form.payinfo.value.substring(0, 4) == '4936' 
73           || what.form.payinfo.value.substring(0, 6) == '564132' 
74           || what.form.payinfo.value.substring(0, 2) == '63' 
75           || what.form.payinfo.value.substring(0, 2) == '67' 
76          )
77       {
78         what.form.paystart_month.disabled = false;
79         what.form.paystart_year.disabled = false;
80         what.form.payissue.disabled = false;
81         what.form.paystart_month.style.backgroundColor = '#ffffff';
82         what.form.paystart_year.style.backgroundColor = '#ffffff';
83         what.form.payissue.style.backgroundColor = '#ffffff';
84         document.getElementById('paystart_label').style.color = '#000000';
85         document.getElementById('payissue_label').style.color = '#000000';
86       } else {
87         what.form.paystart_month.disabled = true;
88         what.form.paystart_year.disabled = true;
89         what.form.payissue.disabled = true;
90         what.form.paystart_month.style.backgroundColor = '#dddddd';
91         what.form.paystart_year.style.backgroundColor = '#dddddd';
92         what.form.payissue.style.backgroundColor = '#dddddd';
93         document.getElementById('paystart_label').style.color = '#999999';
94         document.getElementById('payissue_label').style.color = '#999999';
95       }
96       return true;
97     }
98
99     function init_payauto_changed(){
100         var f = document.getElementById('CARD_payauto');
101         if(f != null) payauto_changed(f);
102         f = document.getElementById('CHEK_payauto');
103         if(f != null) payauto_changed(f);
104     }
105
106     function payauto_changed(payauto_field){
107         var span = (payauto_field.name == 'CARD_payauto') ? 'card_billday' : 'chek_billday';
108         var select = document.getElementById('select_'+span);
109         span = document.getElementById(span);
110         if (span == null || select == null) return;
111         if(payauto_field.checked) {
112             span.style.color = '#000000';
113             select.disabled = false;
114         }
115         else {
116             span.style.color = '#999999';
117             select.disabled = true;
118             select.selectedIndex = 0;
119         }
120     }
121
122   </SCRIPT>
123
124   <% include('/elements/init_overlib.html') %>
125
126 %  my $payby = $cust_main->payby;
127 %  my $paytype = $cust_main->paytype;
128 %  my( $account, $aba ) = split('@', $payinfo);
129 %  my $branch = '';
130 %  ($branch,$aba) = split('\.',$aba) if $conf->exists('cust_main-require-bank-branch');
131 %
132 %  my $disabled = 'DISABLED style="background-color: #dddddd"';
133 %  my $text_disabled = 'style="color: #999999"';
134 %
135 %  if ( $payby =~ /^(CARD|DCRD)$/ && cardtype($payinfo) =~ /^(Switch|Solo)$/ ) {
136 %    $disabled = 'style="background-color: #ffffff"';
137 %    $text_disabled = 'style="color: #000000";'
138 %  }
139 %
140 %  my $disable_payauto = $conf->exists('disable_payauto_default');
141 %  my $CARD_payauto_checked =   $payby eq 'DCRD' ? ''
142 %                             : $payby eq 'CARD' ? 'CHECKED'
143 %                             : $disable_payauto ? '' : 'CHECKED';
144 %  my $CHEK_payauto_checked =   $payby eq 'DCHK' ? ''
145 %                             : $payby eq 'CHEK' ? 'CHECKED'
146 %                             : $disable_payauto ? '' : 'CHECKED';
147 %
148 %  sub billday_options {
149 %   my $curr_value = shift;
150 %   my $ret = '';
151 %   for my $billday ( 1 .. 28 ) {
152 %       my $sel = '';
153 %       $sel = "SELECTED='SELECTED'" if $curr_value == $billday;
154 %       $ret .= "<OPTION VALUE='$billday' $sel>$billday</OPTION>";
155 %   }
156 %   $ret;
157 %  }
158 %
159 %  my $card_billday_style = $payby eq 'CARD' ? '' : 'style="color: #999999"';
160 %  my $chek_billday_style = $payby eq 'CHEK' ? '' : 'style="color: #999999"';
161 %  my $card_billday_select_disabled = $payby eq 'CARD' ? '' : 'DISABLED';
162 %  my $chek_billday_select_disabled = $payby eq 'CHEK' ? '' : 'DISABLED';
163 %
164 %  my %payby = (
165 %
166 %    'CARD' =>
167 %
168 %      '<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 HEIGHT=192>'.
169 %
170 %        qq!<TR><TD ALIGN="right" WIDTH="200">${r}Card number </TD>!.
171 %          qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="CARD_payinfo" VALUE="!. ( $payby =~ /^(CARD|DCRD)$/ ? $payinfo : '' ). qq!" MAXLENGTH=19 onChange="card_changed(this)" onKeyUp="card_changed(this)"></TD></TR>!.
172 %
173 %        qq!<TR><TD ALIGN="right" WIDTH="200">${r}Expiration </TD>!.
174 %          '<TD WIDTH="408">'.
175 %
176 %          include('/elements/select-month_year.html',
177 %                    'prefix' => 'CARD_exp',
178 %                    'selected_date' =>
179 %                      ( $payby =~ /^(CARD|DCRD)$/ ? $cust_main->paydate : '' ),
180 %                 ).
181 %
182 %          '</TD></TR>'.
183 %
184 %        qq!<TR><TD ALIGN="right" WIDTH="200">CVV2&nbsp;!.
185 %
186 %          qq!(<A HREF="javascript:void(0);" onClick="overlib( OLiframeContent('../docs/cvv2.html', 480, 352, 'cvv2_popup' ), CAPTION, 'CVV2 Help', STICKY, AUTOSTATUSCAP, CLOSECLICK, DRAGGABLE ); return false;">help</A>)!.
187 %          qq!</TD>!.
188 %          '<TD WIDTH="408"><INPUT TYPE="text" NAME="CARD_paycvv" VALUE="'. ( $payby =~ /^(CARD|DCRD)$/ && !$cust_main->is_encrypted($cust_main->paycvv) ? $cust_main->paycvv : '' ). '" SIZE=4 MAXLENGTH=4>'.
189 %
190 %
191 %        qq!<TR><TD ALIGN="right" WIDTH="200"><SPAN ID="paystart_label" $text_disabled>Start date </SPAN></TD>!.
192 %          '<TD WIDTH="408">'.
193 %
194 %          include('/elements/select-month_year.html',
195 %                    'prefix' => 'CARD_paystart',
196 %                    'disabled' => $disabled,
197 %                    'empty_option' => 1,
198 %                    'start_year' => 2000,
199 %                    'end_year'   => (localtime())[5] + 1900,
200 %                    'selected_date' => (
201 %                      ( $payby =~ /^(CARD|DCRD)$/
202 %                        && cardtype($payinfo) =~ /^(Switch|Solo)$/ )
203 %                          ? $cust_main->paystart_month. '-'.
204 %                            $cust_main->paystart_year 
205 %                          : ''
206 %                    )
207 %                 ).
208 %
209 %        qq!<SPAN ID="payissue_label" $text_disabled> or Issue number </SPAN>!.
210 %          '<INPUT TYPE="text" NAME="CARD_payissue" VALUE="'. ( $payby =~ /^(CARD|DCRD)$/ ? $cust_main->payissue : '' ). qq!" SIZE=3 MAXLENGTH=2 $disabled></TD></TR>!.
211 %
212 %        qq!<TR><TD ALIGN="right" WIDTH="200">${r}Exact name on card </TD>!.
213 %          qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="CARD_payname" VALUE="!. ( $payby =~ /^(CARD|DCRD)$/ ? $cust_main->payname : '' ). qq!"></TD></TR>!.
214 %
215 %        qq!<TR><TD COLSPAN=2 WIDTH="608">!.
216 %           qq!<INPUT TYPE="checkbox" onchange="payauto_changed(this);" ID="CARD_payauto" NAME="CARD_payauto" $CARD_payauto_checked> !.
217 %           qq!Charge future payments to this card automatically</TD></TR>!.
218 %
219 %      ( $conf->exists('cust_main-select-billday') ?
220 %           qq!<TR><TD ALIGN="RIGHT" id="card_billday" $card_billday_style>
221 %                       Charge on this day of each month</TD><TD> &nbsp; 
222 %                       <SELECT id="select_card_billday" $card_billday_select_disabled NAME="billday">!
223 %                . billday_options($cust_main->billday) . qq!</SELECT> </TD></TR>!
224 %        : ''
225 %      ).
226 %
227 %      '</TABLE>',
228 %
229 %    'CHEK' => 
230 %
231 %      '<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 HEIGHT=192>'.
232 %
233 %        qq!<TR><TD ALIGN="right" WIDTH="200">${r}Account number </TD>!.
234 %          qq!<TD><INPUT TYPE="text" SIZE=12 NAME="CHEK_payinfo1" VALUE="!. ( $payby =~ /^(CHEK|DCHK)$/ ? $account : '' ). '"></TD>'.
235 %          qq!<TD ALIGN="right">Type</TD><TD><SELECT NAME="CHEK_paytype">!.
236 %            join('', map { qq!<OPTION VALUE="$_" !.($paytype eq $_ ? 'SELECTED' : '').">$_</OPTION>" } @FS::cust_main::paytypes).
237 %          qq!</SELECT></TD></TR>!.
238 %
239 %        qq!<TR><TD ALIGN="right" WIDTH="200">${r}ABA/Routing number </TD>!.
240 %          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> !.
241 %          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>)!.
242 %          qq!</TD></TR>!.
243 %
244 %        qq!<INPUT TYPE="hidden" NAME="CHEK_exp_month" VALUE="12">!.
245 %        qq!<INPUT TYPE="hidden" NAME="CHEK_exp_year" VALUE="2037">!.
246 %
247 %        ( $conf->exists('cust_main-require-bank-branch') ? 
248 %               qq!<TR><TD ALIGN="right">$r Branch number</TD><TD COLSPAN="3">
249 %                   <INPUT TYPE="text" name="CHEK_payinfo3" VALUE=$branch></TD></TR>! : '' ).
250 %
251 %        qq!<TR><TD ALIGN="right" WIDTH="200">${r}Bank name </TD>!.
252 %          qq!<TD COLSPAN="3" WIDTH="408"><INPUT TYPE="text" NAME="CHEK_payname" VALUE="!. ( $payby =~ /^(CHEK|DCHK)$/ ? $cust_main->payname : '' ). qq!"></TD></TR>!.
253 %      ( $conf->exists('show_bankstate') ?
254 %          qq!<TR><TD ALIGN="right" WIDTH="200">$paystate_label</TD>!.
255 %          qq!<TD COLSPAN="3" WIDTH="408">!.
256 %          include('/elements/select-state.html',
257 %                    'empty'   => '(choose)',
258 %                    'state'   => $cust_main->paystate,
259 %                    'country' => $cust_main->country,
260 %                    'prefix'  => 'CHEK_pay',
261 %                 ). "</TD></TR>"
262 %         : '<INPUT TYPE="hidden" NAME="CHEK_paystate" VALUE="'.
263 %            $cust_main->paystate. '">'
264 %       ).
265 %
266 %
267 %        qq!<TR><TD COLSPAN=4 WIDTH="608">!.
268 %           qq!<INPUT TYPE="checkbox" onchange="payauto_changed(this);" ID="CHEK_payauto" NAME="CHEK_payauto" $CHEK_payauto_checked> !.
269 %              qq!Charge future payments to this electronic check automatically</TD></TR>!.
270 %
271 %      ( $conf->exists('cust_main-select-billday') ?
272 %           qq!<TR><TD ALIGN="RIGHT" id="chek_billday" $chek_billday_style>
273 %                    Charge on this day of each month </TD><TD> &nbsp;
274 %                   <SELECT id="select_chek_billday" $chek_billday_select_disabled NAME="billday">!
275 %                . billday_options($cust_main->billday) . qq!</SELECT> </TD></TR>!
276 %        : ''
277 %      ).
278 %
279 %      '</TABLE>',
280 %
281 %    'LECB' =>  
282 %
283 %      '<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 HEIGHT=192>'.
284 %
285 %        qq!<TR><TD ALIGN="right" WIDTH="200">${r}Phone number </TD>!.
286 %          qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="LECB_payinfo" VALUE="!. ( $payby eq 'LECB' ? $cust_main->payinfo : '' ). qq!" MAXLENGTH=15 SIZE=16></TD></TR>!.
287 %
288 %        qq!<INPUT TYPE="hidden" NAME="LECB_exp_month" VALUE="12">!.
289 %        qq!<INPUT TYPE="hidden" NAME="LECB_exp_year" VALUE="2037">!.
290 %        qq!<INPUT TYPE="hidden" NAME="LECB_payname" VALUE="">!.
291 %
292 %        '<TR><TD>&nbsp;</TD></TR>'.
293 %        '<TR><TD>&nbsp;</TD></TR>'.
294 %        '<TR><TD>&nbsp;</TD></TR>'.
295 %        '<TR><TD>&nbsp;</TD></TR>'.
296 %        '<TR><TD>&nbsp;</TD></TR>'.
297 %        '<TR><TD>&nbsp;</TD></TR>'.
298 %
299 %      '</TABLE>',
300 %
301 %    'BILL' =>  
302 %
303 %      '<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 HEIGHT=192>'.
304 %
305 %        qq!<TR><TD ALIGN="right" WIDTH="200">P.O. </TD>!.
306 %          qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="BILL_payinfo" VALUE="!. ( $payby eq 'BILL' ? $cust_main->payinfo : '' ). qq!"></TD></TR>!.
307 %
308 %        qq!<INPUT TYPE="hidden" NAME="BILL_exp_month" VALUE="12">!.
309 %        qq!<INPUT TYPE="hidden" NAME="BILL_exp_year" VALUE="2037">!.
310 %
311 %        qq!<TR><TD ALIGN="right" WIDTH="200">Attention </TD>!.
312 %          qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="BILL_payname" VALUE="!. encode_entities( $payby eq 'BILL' ? $cust_main->payname : '' ). qq!"></TD></TR>!.
313 %
314 %        '<TR><TD>&nbsp;</TD></TR>'.
315 %        '<TR><TD>&nbsp;</TD></TR>'.
316 %        '<TR><TD>&nbsp;</TD></TR>'.
317 %        '<TR><TD>&nbsp;</TD></TR>'.
318 %        '<TR><TD>&nbsp;</TD></TR>'.
319 %
320 %      '</TABLE>',
321 %
322 %    'COMP' =>   
323 %
324 %      '<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 HEIGHT=192>'.
325 %
326 %        qq!<TR><TD ALIGN="right" WIDTH="200">${r}Approved by </TD>!.
327 %          qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="COMP_payinfo" VALUE=""></TD></TR>!.
328 %
329 %        qq!<TR><TD ALIGN="right" WIDTH="200">${r}Expiration </TD>!.
330 %          '<TD WIDTH="408">'.
331 %
332 %          include('/elements/select-month_year.html',
333 %                    'prefix' => 'COMP_exp',
334 %                    'selected_date' =>
335 %                      ( $payby eq 'COMP' ? $cust_main->paydate : '' ),
336 %                 ).
337 %
338 %          '</TD></TR>'.
339 %
340 %        '<TR><TD>&nbsp;</TD></TR>'.
341 %        '<TR><TD>&nbsp;</TD></TR>'.
342 %        '<TR><TD>&nbsp;</TD></TR>'.
343 %        '<TR><TD>&nbsp;</TD></TR>'.
344 %        '<TR><TD>&nbsp;</TD></TR>'.
345 %
346 %      '</TABLE>',
347 %
348 %    'CASH' =>
349 %
350 %      '<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 HEIGHT=192>'.
351 %
352 %        qq!<TR><TD ALIGN="right" WIDTH="200">${r}Amount </TD>!.
353 %          qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="CASH_paid" VALUE="!. ( $payby eq 'CASH' ? $cust_main->paid : '' ). qq!"></TD></TR>!.
354 %
355 %        '<TR><TD>&nbsp;</TD></TR>'.
356 %        '<TR><TD>&nbsp;</TD></TR>'.
357 %        '<TR><TD>&nbsp;</TD></TR>'.
358 %        '<TR><TD>&nbsp;</TD></TR>'.
359 %        '<TR><TD>&nbsp;</TD></TR>'.
360 %        '<TR><TD>&nbsp;</TD></TR>'.
361 %
362 %      '</TABLE>',
363 %
364 %    'WEST' =>
365 %
366 %      '<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 HEIGHT=192>'.
367 %
368 %        qq!<TR><TD ALIGN="right" WIDTH="200">${r}Amount </TD>!.
369 %          qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="WEST_paid" VALUE="!. ( $payby eq 'WEST' ? $cust_main->paid : '' ). qq!"></TD></TR>!.
370 %
371 %        '<TR><TD>&nbsp;</TD></TR>'.
372 %        '<TR><TD>&nbsp;</TD></TR>'.
373 %        '<TR><TD>&nbsp;</TD></TR>'.
374 %        '<TR><TD>&nbsp;</TD></TR>'.
375 %        '<TR><TD>&nbsp;</TD></TR>'.
376 %        '<TR><TD>&nbsp;</TD></TR>'.
377 %
378 %      '</TABLE>',
379 %
380 %    'MCRD' =>
381 %
382 %      '<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 HEIGHT=192>'.
383 %
384 %        qq!<TR><TD ALIGN="right" WIDTH="200">${r}Amount </TD>!.
385 %          qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="MCRD_paid" VALUE="!. ( $payby eq 'MCRD' ? $cust_main->paid : '' ). qq!"></TD></TR>!.
386 %
387 %        '<TR><TD>&nbsp;</TD></TR>'.
388 %        '<TR><TD>&nbsp;</TD></TR>'.
389 %        '<TR><TD>&nbsp;</TD></TR>'.
390 %        '<TR><TD>&nbsp;</TD></TR>'.
391 %        '<TR><TD>&nbsp;</TD></TR>'.
392 %        '<TR><TD>&nbsp;</TD></TR>'.
393 %
394 %      '</TABLE>',
395 %
396 %  );
397 %
398 %  #this should use FS::payby
399 %  my @allopt = qw( CARD CHEK LECB BILL CASH WEST MCRD COMP );
400 %
401 %  my %allopt = map { $_ => FS::payby->shortname($_) } @allopt;
402 %
403 %  if ( $cust_main->custnum ) {
404 %    #don't offer CASH/WEST/MCRD initial payment types when editing customer
405 %    delete $allopt{$_} for qw(CASH WEST MCRD);
406 %  }
407 %  
408 %  my @options = grep exists( $allopt{$_} ), @payby;
409 %
410 %  my %payby2option = (
411 %    ( map { $_ => $_ } @options ),
412 %    'DCRD' => 'CARD',
413 %    'DCHK' => 'CHEK',
414 %  );
415
416   <TD WIDTH="408">
417     <% include( '/elements/selectlayers.html',
418                   'field'      => 'payby',
419                   'curr_value' => $payby2option{$payby || $payby_default || $payby[0] },
420                   'options'    => \@options,
421                   'labels'     => \%allopt,
422                   'html_between' => '</TD></TR></TABLE>',
423                   'layer_callback' => sub { my $layer = shift; $payby{$layer}; },
424                   'onchange'    => 'init_payauto_changed();',
425               )
426     %>
427
428   <% &ntable("#cccccc") %>
429
430     <TR><TD>&nbsp;</TD></TR>
431
432 %   my @exempt_groups = grep /\S/, $conf->config('tax-cust_exempt-groups');
433
434     <TR>
435       <TD WIDTH="608" COLSPAN="2"><INPUT TYPE="checkbox" NAME="tax" VALUE="Y" <% $cust_main->tax eq "Y" ? 'CHECKED' : '' %>> Tax Exempt<% @exempt_groups ? ' (all taxes)' : '' %></TD>
436     </TR>
437
438 %   foreach my $exempt_group ( @exempt_groups ) {
439 %     #escape $exempt_group for NAME
440       <TR>
441         <TD WIDTH="608" COLSPAN="2">&nbsp;&nbsp;<INPUT TYPE="checkbox" NAME="tax_<% $exempt_group %>" VALUE="Y" <% $cust_main->tax_exemption($exempt_group) ? 'CHECKED' : '' %>> Tax Exempt (<% $exempt_group %> taxes)<TD>
442       </TR>
443 %   }
444
445 % unless ( $conf->exists('emailinvoiceonly') ) {
446
447     <TR>
448       <TD WIDTH="608" COLSPAN="2"><INPUT TYPE="checkbox" NAME="invoicing_list_POST" VALUE="POST" <%
449
450         ( grep { $_ eq 'POST' } @invoicing_list )
451
452           ? 'CHECKED'
453           : ''
454
455         %>> Postal mail invoice
456
457       </TD>
458     </TR>
459
460     <TR>
461       <TD WIDTH="608" COLSPAN="2"><INPUT TYPE="checkbox" NAME="invoicing_list_FAX" VALUE="FAX" <%
462
463         ( grep { $_ eq 'FAX' } @invoicing_list )
464           ? 'CHECKED'
465           : ''
466
467         %>> Fax invoice
468
469       </TD>
470     </TR>
471
472 % }
473
474 % unless ( $conf->exists('cust-email-high-visibility')) {
475     <TR>
476       <TD ALIGN="right" WIDTH="200">
477         <% $conf->exists('cust_main-require_invoicing_list_email') ? $r : '' %>Email address(es)
478       </TD>
479       <TD WIDTH="408"><INPUT TYPE="text" NAME="invoicing_list" VALUE="<% join(', ', grep { $_ !~ /^(POST|FAX)$/ } @invoicing_list ) %>"></TD>
480     </TR>
481 % }
482
483     <TR>
484       <TD ALIGN="right" WIDTH="200">Invoice terms </TD>
485       <TD WIDTH="408">
486         <% include('/elements/select-terms.html',
487                      'curr_value' => $cust_main->invoice_terms,
488                   )
489         %>
490       </TD>
491     </TR>
492     <TR>
493       <TD ALIGN="right" WIDTH="200">Credit limit </TD>
494       <TD WIDTH="408">
495         <SCRIPT TYPE="text/javascript">
496 function toggle(obj) {
497   obj.form.credit_limit.disabled = obj.checked;
498 }
499         </SCRIPT>
500         <INPUT TYPE="text" NAME="credit_limit" VALUE=<% sprintf('"%.2f"', $cust_main->credit_limit) %><% length($cust_main->credit_limit) ? '' : ' DISABLED' %>>
501         <INPUT TYPE="checkbox" NAME="no_credit_limit" VALUE=1 onclick="toggle(this)"<% length($cust_main->credit_limit) ? '' : ' CHECKED'%>> Unlimited
502       </TD>
503     </TR>
504
505 % if ( $conf->exists('voip-cust_cdr_spools') ) { 
506       <TR>
507        <TD COLSPAN="2"><INPUT TYPE="checkbox" NAME="spool_cdr" VALUE="Y" <% $cust_main->spool_cdr eq "Y" ? 'CHECKED' : '' %>> Spool CDRs</TD>
508       </TR>
509 % } else { 
510       <INPUT TYPE="hidden" NAME="spool_cdr" VALUE="<% $cust_main->spool_cdr %>">
511 % }
512
513 % if ( $conf->exists('voip-cust_cdr_squelch') ) { 
514       <TR>
515        <TD COLSPAN="2"><INPUT TYPE="checkbox" NAME="squelch_cdr" VALUE="Y" <% $cust_main->squelch_cdr eq "Y" ? 'CHECKED' : '' %>> Omit CDRs from printed invoices</TD>
516       </TR>
517 % } else { 
518       <INPUT TYPE="hidden" NAME="squelch_cdr" VALUE="<% $cust_main->squelch_cdr %>">
519 % }
520
521 % if ( $conf->exists('voip-cust_email_csv_cdr') ) { 
522       <TR>
523        <TD COLSPAN="2"><INPUT TYPE="checkbox" NAME="email_csv_cdr" VALUE="Y" <% $cust_main->email_csv_cdr eq "Y" ? 'CHECKED' : '' %>> Attach CDRs as CSV to emailed invoices</TD>
524       </TR>
525 % } else { 
526       <INPUT TYPE="hidden" NAME="email_csv_cdr" VALUE="<% $cust_main->email_csv_cdr %>">
527 % }
528
529 % if ( $show_term || $cust_main->cdr_termination_percentage ) {
530       <TR>
531        <TD ALIGN="right">CDR termination settlement</TD>
532        <TD><INPUT TYPE  = "text"
533                   NAME  = "cdr_termination_percentage"
534                   SIZE  = 6
535                   VALUE = "<% $cust_main->cdr_termination_percentage %>"
536                   STYLE = "text-align:right;"
537         ><B>%</B></TD>
538       </TR>
539 % } else {
540       <INPUT TYPE="hidden" NAME="cdr_termination_percentage" VALUE="<% $cust_main->cdr_termination_percentage %>">
541 % }
542
543   </TABLE>
544
545   <% $r %> required fields
546 % } 
547
548 <script type="text/javascript">
549     init_payauto_changed();
550 </script>
551
552 <%once>
553
554 my $paystate_label = FS::Msgcat::_gettext('paystate');
555 $paystate_label = 'Bank state' if $paystate_label =~/^paystate$/;
556
557 </%once>
558 <%init>
559
560 my( $cust_main, %options ) = @_;
561 my @invoicing_list = @{ $options{'invoicing_list'} };
562 my $payinfo = $options{'payinfo'};
563 my $conf = new FS::Conf;
564 my $payby_default = $conf->config('payby-default');
565
566 my @payby = grep /\w/, $conf->config('payby');
567 #@payby = (qw( CARD DCRD CHEK DCHK LECB BILL CASH WEST COMP ))
568 @payby = (qw( CARD DCRD CHEK DCHK LECB BILL CASH COMP ))
569   unless @payby;
570
571 my $show_term = '';
572 if ( $cust_main->custnum ) {
573   #false laziness w/view/cust_main/billing.html
574   my $term_sql = "SELECT COUNT(*) FROM cust_pkg LEFT JOIN part_pkg USING ( pkgpart ) WHERE custnum = ? AND plan = 'cdr_termination' LIMIT 1";
575   my $term_sth = dbh->prepare($term_sql)  or die dbh->errstr;
576   $term_sth->execute($cust_main->custnum) or die $term_sth->errstr;
577   $show_term = $term_sth->fetchrow_arrayref->[0];
578 }
579
580 </%init>