This commit was generated by cvs2svn to compensate for changes in r4407,
[freeside.git] / httemplate / edit / cust_main / billing.html
1 <%
2
3 my( $cust_main ) = @_;
4 my $conf = new FS::Conf;
5 my $payby_default = $conf->config('payby-default');
6
7 if ( $payby_default eq 'HIDE' ) {
8
9   $cust_main->payby('BILL') unless $cust_main->payby;
10
11 %>
12
13   <INPUT TYPE="hidden" NAME="select" VALUE="<%= $cust_main->payby %>">
14
15   </FORM>
16
17   <FORM NAME="<%= $cust_main->payby %>" STYLE="margin-top: 0; margin-bottom: 0"> <% # XXX key %>
18
19   <% foreach my $field (qw( payinfo payname paycvv paystart_month paystart_year payissue payip )) { %>
20
21     <INPUT TYPE="hidden" NAME="<%= $field %>" VALUE="<%= $cust_main->getfield($field) %>">
22
23   <% } %>
24
25   <%
26   #false laziness w/elements/select-month_year.html & view/cust_main/billing.html
27   my( $mon, $year );
28   my $date = $cust_main->paydate || '12-2037';
29   if ( $date  =~ /^(\d{4})-(\d{1,2})-\d{1,2}$/ ) { #PostgreSQL date format
30     ( $mon, $year ) = ( $2, $1 );
31   } elsif ( $date =~ /^(\d{1,2})-(\d{1,2}-)?(\d{4}$)/ ) {
32     ( $mon, $year ) = ( $1, $3 );
33   } else {
34     die "unrecognized expiration date format: $date";
35   }
36   %>
37
38   <INPUT TYPE="hidden" NAME="exp_month" VALUE="<%= $mon %>">
39   <INPUT TYPE="hidden" NAME="exp_year"  VALUE="<%= $year %>">
40
41   </FORM>
42
43   <FORM NAME="billing_bottomform" STYLE="margin-top: 0; margin-bottom: 0">
44
45   <INPUT TYPE="hidden" NAME="tax" VALUE="<%= $cust_main->tax %>">
46
47   <INPUT TYPE="hidden" NAME="invoicing_list" VALUE="<%= join(', ', $cust_main->invoicing_list) %>">
48
49   </FORM>
50
51 <% } else {
52
53   my @invoicing_list = $cust_main->invoicing_list;
54
55   my $r = qq!<font color="#ff0000">*</font>&nbsp;!;
56
57 %>
58
59   <BR>Billing information
60   <%= &ntable("#cccccc") %>
61
62     <TR>
63       <TD ALIGN="right" WIDTH="200"><%=$r%>Billing type</TD>
64
65   <SCRIPT>
66
67     var mywindow = -1;
68     function myopen(filename,windowname,properties) {
69       myclose();
70       mywindow = window.open(filename,windowname,properties);
71     }
72     function myclose() {
73       if ( mywindow != -1 )
74         mywindow.close();
75       mywindow = -1;
76     }
77
78     var achwindow = -1;
79     function achopen(filename,windowname,properties) {
80       achclose();
81       achwindow = window.open(filename,windowname,properties);
82     }
83     function achclose() {
84       if ( achwindow != -1 )
85         achwindow.close();
86       achwindow = -1;
87     }
88
89     function card_changed(what) {
90       if (
91              what.form.payinfo.value.substring(0, 4) == '4093' 
92           || what.form.payinfo.value.substring(0, 4) == '4911' 
93           || what.form.payinfo.value.substring(0, 4) == '4936' 
94           || what.form.payinfo.value.substring(0, 6) == '564132' 
95           || what.form.payinfo.value.substring(0, 2) == '63' 
96           || what.form.payinfo.value.substring(0, 2) == '67' 
97          )
98       {
99         what.form.paystart_month.disabled = false;
100         what.form.paystart_year.disabled = false;
101         what.form.payissue.disabled = false;
102         what.form.paystart_month.style.backgroundColor = '#ffffff';
103         what.form.paystart_year.style.backgroundColor = '#ffffff';
104         what.form.payissue.style.backgroundColor = '#ffffff';
105         document.getElementById('paystart_label').style.color = '#000000';
106         document.getElementById('payissue_label').style.color = '#000000';
107       } else {
108         what.form.paystart_month.disabled = true;
109         what.form.paystart_year.disabled = true;
110         what.form.payissue.disabled = true;
111         what.form.paystart_month.style.backgroundColor = '#dddddd';
112         what.form.paystart_year.style.backgroundColor = '#dddddd';
113         what.form.payissue.style.backgroundColor = '#dddddd';
114         document.getElementById('paystart_label').style.color = '#999999';
115         document.getElementById('payissue_label').style.color = '#999999';
116       }
117       return true;
118     }
119
120   </SCRIPT>
121
122   <SCRIPT TYPE="text/javascript" SRC="../elements/overlibmws.js"></SCRIPT>
123   <SCRIPT TYPE="text/javascript" SRC="../elements/overlibmws_iframe.js"></SCRIPT>
124   <SCRIPT TYPE="text/javascript" SRC="../elements/overlibmws_draggable.js"></SCRIPT>
125   <SCRIPT TYPE="text/javascript">
126   function OLiframeContent(src, width, height, name) {
127     return ('<iframe src="'+src+'" width="'+width+'" height="'+height+'"'
128      +(name?' name="'+name+'" id="'+name+'"':'')+' scrolling="auto">'
129      +'<div>[iframe not supported]</div></iframe>');
130   }
131   </SCRIPT>
132
133   <%
134
135   my($payby, $payinfo, $payname)=(
136     $cust_main->payby,
137     $cust_main->payinfo,
138     $cust_main->payname,
139   );
140   my( $account, $aba ) = split('@', $payinfo);
141
142   my $disabled = 'DISABLED style="background-color: #dddddd"';
143   my $text_disabled = 'style="color: #999999"';
144   if ( $payby =~ /^(CARD|DCRD)$/ && cardtype($payinfo) =~ /^(Switch|Solo)$/ ) {
145     $disabled = 'style="background-color: #ffffff"';
146     $text_disabled = 'style="color: #000000";'
147   }
148
149   my %payby = (
150
151     'CARD' =>
152
153       '<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 HEIGHT=192>'.
154
155         qq!<TR><TD ALIGN="right" WIDTH="200">${r}Card number </TD>!.
156           qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="payinfo" VALUE="!. ( $payby =~ /^(CARD|DCRD)$/ ? $payinfo : '' ). qq!" MAXLENGTH=19 onChange="card_changed(this)" onKeyUp="card_changed(this)"></TD></TR>!.
157
158         qq!<TR><TD ALIGN="right" WIDTH="200">${r}Expiration </TD>!.
159           '<TD WIDTH="408">'.
160
161           include('/elements/select-month_year.html',
162                     'prefix' => 'exp',
163                     'selected_date' =>
164                       ( $payby =~ /^(CARD|DCRD)$/ ? $cust_main->paydate : '' ),
165                  ).
166
167           '</TD></TR>'.
168
169         qq!<TR><TD ALIGN="right" WIDTH="200">CVV2&nbsp;!.
170
171           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>)!.
172           qq!</TD>!.
173           '<TD WIDTH="408"><INPUT TYPE="text" NAME="paycvv" VALUE="'. ( $payby =~ /^(CARD|DCRD)$/ ? $cust_main->paycvv : '' ). '" SIZE=4 MAXLENGTH=4>'.
174
175
176         qq!<TR><TD ALIGN="right" WIDTH="200"><SPAN ID="paystart_label" $text_disabled>Start date </SPAN></TD>!.
177           '<TD WIDTH="408">'.
178
179           include('/elements/select-month_year.html',
180                     'prefix' => 'paystart',
181                     'disabled' => $disabled,
182                     'empty_option' => 1,
183                     'start_year' => 2000,
184                     'end_year'   => (localtime())[5] + 1900,
185                     'selected_date' => (
186                       ( $payby =~ /^(CARD|DCRD)$/
187                         && cardtype($payinfo) =~ /^(Switch|Solo)$/ )
188                           ? $cust_main->paystart_month. '-'.
189                             $cust_main->paystart_year 
190                           : ''
191                     )
192                  ).
193
194         qq!<SPAN ID="payissue_label" $text_disabled> or Issue number </SPAN>!.
195           '<INPUT TYPE="text" NAME="payissue" VALUE="'. ( $payby =~ /^(CARD|DCRD)$/ ? $cust_main->payissue : '' ). qq!" SIZE=3 MAXLENGTH=2 $disabled></TD></TR>!.
196
197         qq!<TR><TD ALIGN="right" WIDTH="200">${r}Exact name on card </TD>!.
198           qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="payname" VALUE="!. ( $payby =~ /^(CARD|DCRD)$/ ? $cust_main->payname : '' ). qq!"></TD></TR>!.
199
200         qq!<TR><TD COLSPAN=2 WIDTH="608"><INPUT TYPE="checkbox" NAME="payauto" !. ( $payby eq 'DCRD' ? '' : 'CHECKED' ). '> Charge future payments to this card automatically</TD></TR>'.
201
202       '</TABLE>',
203
204     'CHEK' => 
205
206       '<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 HEIGHT=192>'.
207
208         qq!<TR><TD ALIGN="right" WIDTH="200">${r}Account number </TD>!.
209           qq!<TD WIDTH="408"><INPUT TYPE="text" SIZE=10 NAME="payinfo1" VALUE="!. ( $payby =~ /^(CHEK|DCHK)$/ ? $account : '' ). '"></TD></TR>'.
210
211         qq!<TR><TD ALIGN="right" WIDTH="200">${r}ABA/Routing number </TD>!.
212           qq!<TD WIDTH="408"><INPUT TYPE="text" SIZE=10 MAXLENGTH=9 NAME="payinfo2" VALUE="!. ( $payby =~ /^(CHEK|DCHK)$/ ? $aba : '' ). qq!" SIZE=10 MAXLENGTH=9> !.
213           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>)!.
214           qq!</TD></TR>!.
215
216         qq!<INPUT TYPE="hidden" NAME="exp_month" VALUE="12">!.
217         qq!<INPUT TYPE="hidden" NAME="exp_year" VALUE="2037">!.
218
219         qq!<TR><TD ALIGN="right" WIDTH="200">${r}Bank name </TD>!.
220           qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="payname" VALUE="!. ( $payby =~ /^(CHEK|DCHK)$/ ? $cust_main->payname : '' ). qq!"></TD></TR>!.
221
222         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>'.
223
224         '<TR><TD>&nbsp;</TD></TR>'.
225         '<TR><TD>&nbsp;</TD></TR>'.
226         '<TR><TD>&nbsp;</TD></TR>'.
227
228       '</TABLE>',
229
230     'LECB' =>  
231
232       '<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 HEIGHT=192>'.
233
234         qq!<TR><TD ALIGN="right" WIDTH="200">${r}Phone number </TD>!.
235           qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="payinfo" VALUE="!. ( $payby eq 'LECB' ? $cust_main->payinfo : '' ). qq!" MAXLENGTH=15 SIZE=16></TD></TR>!.
236
237         qq!<INPUT TYPE="hidden" NAME="exp_month" VALUE="12">!.
238         qq!<INPUT TYPE="hidden" NAME="exp_year" VALUE="2037">!.
239         qq!<INPUT TYPE="hidden" NAME="payname" VALUE="">!.
240
241         '<TR><TD>&nbsp;</TD></TR>'.
242         '<TR><TD>&nbsp;</TD></TR>'.
243         '<TR><TD>&nbsp;</TD></TR>'.
244         '<TR><TD>&nbsp;</TD></TR>'.
245         '<TR><TD>&nbsp;</TD></TR>'.
246         '<TR><TD>&nbsp;</TD></TR>'.
247
248       '</TABLE>',
249
250     'BILL' =>  
251
252       '<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 HEIGHT=192>'.
253
254         qq!<TR><TD ALIGN="right" WIDTH="200">P.O. </TD>!.
255           qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="payinfo" VALUE="!. ( $payby eq 'BILL' ? $cust_main->payinfo : '' ). qq!"></TD></TR>!.
256
257         qq!<INPUT TYPE="hidden" NAME="exp_month" VALUE="12">!.
258         qq!<INPUT TYPE="hidden" NAME="exp_year" VALUE="2037">!.
259
260         qq!<TR><TD ALIGN="right" WIDTH="200">Attention </TD>!.
261           qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="payname" VALUE="!. ( $payby eq 'BILL' ? $cust_main->payname : '' ). qq!"></TD></TR>!.
262
263         '<TR><TD>&nbsp;</TD></TR>'.
264         '<TR><TD>&nbsp;</TD></TR>'.
265         '<TR><TD>&nbsp;</TD></TR>'.
266         '<TR><TD>&nbsp;</TD></TR>'.
267         '<TR><TD>&nbsp;</TD></TR>'.
268
269       '</TABLE>',
270
271     'COMP' =>   
272
273       '<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 HEIGHT=192>'.
274
275         qq!<TR><TD ALIGN="right" WIDTH="200">${r}Approved by </TD>!.
276           qq!<TD WIDTH="408"><INPUT TYPE="text" NAME="payinfo" VALUE=""></TD></TR>!.
277
278         qq!<TR><TD ALIGN="right" WIDTH="200">${r}Expiration </TD>!.
279           '<TD WIDTH="408">'.
280
281           include('/elements/select-month_year.html',
282                     'prefix' => 'exp',
283                     'selected_date' =>
284                       ( $payby eq 'COMP' ? $cust_main->paydate : '' ),
285                  ).
286
287           '</TD></TR>'.
288
289         '<TR><TD>&nbsp;</TD></TR>'.
290         '<TR><TD>&nbsp;</TD></TR>'.
291         '<TR><TD>&nbsp;</TD></TR>'.
292         '<TR><TD>&nbsp;</TD></TR>'.
293         '<TR><TD>&nbsp;</TD></TR>'.
294
295       '</TABLE>',
296
297   );
298
299   tie my %options, 'Tie::IxHash',
300     'CARD' => 'Credit card',
301     'CHEK' => 'Electronic check',
302     'LECB' => 'Phone bill billing',
303     'BILL' => 'Billing',
304     'COMP' => 'Complimentary',
305   ;
306   my %payby2option = (
307     ( map { $_ => $_ } keys %options ),
308     'DCRD' => 'CARD',
309     'DCHK' => 'CHEK',
310   );
311
312   my $widget = new HTML::Widgets::SelectLayers(
313     'options'        => \%options,
314     #'form_name'      => 'dummy',
315     #'form_action'    => 'nothingyet',
316     #chops bottom of page in IE# 'under_position' => 'absolute',
317     'html_between'   => '</TD></TR></TABLE>',
318     'selected_layer' => $payby2option{$payby} || 'CARD',
319     'layer_callback' => sub { my $layer = shift; $payby{$layer}; },
320   );
321
322   %>
323
324   <TD WIDTH="408"><%= $widget->html %>
325
326   <FORM NAME="billing_bottomform" STYLE="margin-top: 0; margin-bottom: 0">
327
328   <%= &ntable("#cccccc") %>
329
330     <TR><TD>&nbsp;</TD></TR>
331
332     <TR>
333       <TD WIDTH="608" COLSPAN="2"><INPUT TYPE="checkbox" NAME="tax" VALUE="Y" <%= $cust_main->tax eq "Y" ? 'CHECKED' : '' %>> Tax Exempt</TD>
334     </TR>
335
336     <TR>
337       <TD WIDTH="608" COLSPAN="2"><INPUT TYPE="checkbox" NAME="invoicing_list_POST" VALUE="POST" <%=
338
339         ( ( ! @invoicing_list && ! $conf->exists('disablepostalinvoicedefault') )
340           || grep { $_ eq 'POST' } @invoicing_list                     )
341
342           ? 'CHECKED'
343           : ''
344
345         %>> Postal mail invoice
346
347       </TD>
348     </TR>
349
350     <TR>
351       <TD WIDTH="608" COLSPAN="2"><INPUT TYPE="checkbox" NAME="invoicing_list_FAX" VALUE="FAX" <%=
352
353         ( grep { $_ eq 'FAX' } @invoicing_list )
354           ? 'CHECKED'
355           : ''
356
357         %>> Fax invoice
358
359       </TD>
360     </TR>
361
362     <TR>
363       <TD ALIGN="right" WIDTH="200">Email invoice </TD>
364       <TD WIDTH="408"><INPUT TYPE="text" NAME="invoicing_list" VALUE="<%= join(', ', grep { $_ !~ /^(POST|FAX)$/ } @invoicing_list ) %>"></TD>
365     </TR>
366
367   </TABLE>
368
369   </FORM>
370
371   <%= $r %> required fields
372
373 <% } %>
374