fix A/R report
[freeside.git] / httemplate / elements / cust_payby.html
1 % unless ( $opt{'js_only'} ) {
2
3   <INPUT TYPE="hidden" NAME="<%$name%>" ID="<%$id%>" VALUE="<% $curr_value %>">
4
5   <TABLE STYLE="display:inline">
6     <TR>
7
8 %     ###
9 %     # select
10 %     ###
11
12       <TD>
13         <SELECT NAME="<%$name%>_payby"
14                 ID="<%$id%>_payby"
15                 onChange="payby_changed(this)"
16         >
17 %         foreach my $payby (@payby) {
18             <OPTION VALUE="<% $payby %>"
19                <% ($sel_payby eq $payby) ? 'SELECTED' : '' %>
20             ><% FS::payby->shortname($payby) |h %>
21 %         }
22         </SELECT><BR>
23         <FONT SIZE="-1"><% mt('Type') |h %></FONT>
24       </TD>
25
26 %     ###
27 %     # card info
28 %     ###
29
30 %     my $card_display = $sel_payby eq 'CARD' ? '' : 'STYLE="display:none"';
31
32       <TD ID="<%$id%>_td_payinfo" <%$card_display%>>
33         <INPUT TYPE      = "text"
34                NAME      = "<%$name%>_payinfo"
35                ID        = "<%$id%>_payinfo"
36                SIZE      = 22
37                MAXLENGTH = 19
38                VALUE     = "<% ( $cgi->param($name.'_payby')
39                                    || $cust_payby->payby    ) =~ /^(CARD|DCRD)$/
40                                  ? ( $cgi->param($name.'_payinfo') || $cust_payby->paymask )
41                                  : ''
42                             |h %>"
43                onChange  = "<% $onchange %>"
44         >
45         <BR><FONT SIZE="-1"><% mt('Card number') |h %></FONT>
46       </TD>
47
48       <TD ID="<%$id%>_td_paydate" <%$card_display%>>
49         <& /elements/select-month_year.html,
50              'prefix'        => $name. '_paydate',
51              'selected_date' => (
52                ( $cgi->param($name.'_payby') || $cust_payby->payby ) =~ /^(CARD|DCRD)$/
53                  ? ( $cgi->param($name.'_paydate_month')
54                        ? $cgi->param($name.'_paydate_month'). '-1-'.
55                          $cgi->param($name.'_paydate_year')
56                        : $cust_payby->paydate
57                    )
58                  : ''
59              ),
60              'onhhange'      => $onchange,
61         &>
62         <BR><FONT SIZE="-1">Expiration&nbsp;date</FONT>
63       </TD>
64
65       <TD ID="<%$id%>_td_paycvv" <%$card_display%>>
66         <INPUT TYPE      = "text"
67                NAME      = "<%$name%>_paycvv"
68                ID        = "<%$id%>_paycvv"
69                SIZE      = 2
70                MAXLENGTH = 4
71                VALUE     = "<% scalar($cgi->param($name.'_paycvv')) || ('*' x length($cust_payby->paycvv)) %>"
72                onChange  = "<% $onchange %>"
73         >
74         <BR><FONT SIZE="-1"><% mt('CVV2') |h %>&nbsp;<& /elements/popup_link.html,
75            'action'      => $p.'docs/cvv2.html',
76            'label'       => mt('(help)'),
77            'actionlabel' => 'CVV2 Help',
78            'width'       => 480,
79            'height'      => 275,
80            'nocenter'    => 1,
81            #popup_name    => 'cvv2_popup',
82         &></FONT>
83       </TD>
84
85       <TD ID="<%$id%>_td_payname" <%$card_display%>>
86         <INPUT TYPE     = "text"
87                NAME     = "<%$name%>_payname"
88                ID       = "<%$id%>_payname"
89                onChange = "<% $onchange %>"
90                VALUE     = "<% ( $cgi->param($name.'_payby')
91                                    || $cust_payby->payby    ) =~ /^(CARD|DCRD)$/
92                                  ? ( $cgi->param($name.'_payname') || $cust_payby->payname )
93                                  : ''
94                             |h %>"
95         >
96         <BR><FONT SIZE="-1"><% mt('Exact name on card') |h %></FONT>
97       </TD>
98
99 %     ###
100 %     # chek info
101 %     ###
102
103 %     my $chek_display = $sel_payby eq 'CHEK' ? '' : 'STYLE="display:none"';
104
105       <TD ID="<%$id%>_td_paytype" <%$chek_display%>>
106         <SELECT NAME="<%$name%>_paytype">!.
107 %         foreach my $paytype ( FS::cust_payby->paytypes ) {
108             <OPTION VALUE="<%$paytype%>"
109                     <% $paytype eq ( $cgi->param($name.'_paytype')
110                                        || $cust_payby->paytype     )
111                          ? 'SELECTED'
112                          : ''
113                     %>
114             ><% $paytype %>
115 %         }
116         </SELECT>
117         <BR><FONT SIZE="-1"><% mt('Account type') |h %></FONT>
118       </TD>
119
120 %     my ( $account, $aba, $branch ) = ( '', '', '' );
121 %     if ( $cgi->param($name.'_payby') =~ /^(CHEK|DCHK)$/ ) {
122 %       $account = $cgi->param($name.'_payinfo1');
123 %       $aba     = $cgi->param($name.'_payinfo2');
124 %       $branch  = $cgi->param($name.'_payinfo3');
125 %     } elsif ( $cust_payby->payby =~ /^(CHEK|DCHK)$/ ) {
126 %       ( $account, $aba ) = split('@', $cust_payby->payinfo);
127 %       ( $branch,  $aba ) = split('\.',$aba)
128 %         if $echeck_country eq 'CA';
129 %     }
130 %
131 %     #false laziness w/view/cust_main/billing.html and misc/payment.cgi
132 %     my $routing_label = $echeck_country eq 'US' ? 'ABA/Routing #'
133 %                                                 : 'Routing #';
134 %     my $routing_size      = $echeck_country eq 'CA' ? 4 : 10;
135 %     my $routing_maxlength = $echeck_country eq 'CA' ? 3 : 9;
136 %     my $bankname_size     = $echeck_country eq 'CA' ? 13 : 20;
137
138       <TD ID="<%$id%>_td_payinfo1" <%$chek_display%>>
139         <INPUT TYPE = "text"
140                NAME      = "<%$name%>_payinfo1"
141                ID        = "<%$id%>_payinfo1"
142                VALUE     = "<% $account |h %>"
143                SIZE      = 12
144         >
145         <BR><FONT SIZE="-1"><% mt('Account #') |h %>&nbsp;(<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>
146       </TD>
147
148      <TD ID="<%$id%>_td_payinfo2" <%$chek_display%>>
149         <INPUT TYPE = "text"
150                NAME      = "<%$name%>_payinfo2"
151                ID        = "<%$id%>_payinfo2"
152                VALUE     = "<% $aba |h %>"
153                SIZE      = "<% $routing_size %>"
154                MAXLENGTH = "<% $routing_maxlength %>"
155         >
156         <BR><FONT SIZE="-1"><% mt($routing_label) |h %></FONT>
157       </TD>
158
159 %     if ( $echeck_country eq 'CA' ) {
160         <TD ID="<%$id%>_td_payinfo3" <%$chek_display%>>
161           <INPUT TYPE = "text"
162                  NAME      = "<%$name%>_payinfo3"
163                  ID        = "<%$id%>_payinfo3"
164                  VALUE     = "<% $branch |h %>"
165                  SIZE      = 6
166                  MAXLENGTH = 5
167           >
168           <BR><FONT SIZE="-1"><% mt('Branch #') |h %></FONT>
169         </TD>
170 %     }
171
172       <TD ID="<%$id%>_td_payname_CHEK" <%$chek_display%>>
173         <INPUT TYPE = "text"
174                NAME      = "<%$name%>_payname_CHEK"
175                ID        = "<%$id%>_payname_CHEK"
176                VALUE     = "<% ( $cgi->param($name.'_payby')
177                                    || $cust_payby->payby    ) =~ /^(CHEK|DCHK)$/
178                                  ? ( $cgi->param($name.'_payname_CHEK') || $cust_payby->payname )
179                                  : ''
180                             |h %>"
181                SIZE      = "<% $bankname_size %>"
182         >
183         <BR><FONT SIZE="-1"><% mt('Bank name') |h %></FONT>
184       </TD>
185
186 %     if ( $conf->exists('show_bankstate') ) {
187         <TD ID="<%$id%>_td_paystate" <%$chek_display%>>
188           <& /elements/select-state.html,
189                'prefix'  => $name. '_pay',
190                'empty'   => emt('(choose)'),
191                'state'   => ( scalar($cgi->param($name.'_paystate'))
192                                 || $cust_payby->paystate ),
193                #was cust_main->country in 3.x, but this will do until/unlesss
194                # someone needs to track foreign bank states
195                'country' => ( scalar($conf->config('countrydefault')) || 'US' ),
196           &>
197           <BR><FONT SIZE="-1"><% mt('Bank state') |h %></FONT>
198         </TD>
199 %     }
200
201 %     ###
202 %     # auto (maybe this should be first...)
203 %     ###
204
205 %     #some fun javascript to enforce a single value for each weight
206
207       <TD>
208         <SELECT NAME = "<%$name%>_weight">
209           <OPTION VALUE="">Do not auto-charge
210 %         foreach my $weight ( 1 .. max(5,$cust_payby->weight) ) { #more than 5?
211             <OPTION VALUE="<%$weight%>"
212                     <% $weight == $cust_payby->weight
213                          ? 'SELECTED'
214                          : ''
215                     %>
216             ><% mt( $weight{$weight} ) |h %>
217 %         }
218         </SELECT>
219         <BR>
220         <FONT SIZE="-1"><% mt('Auto-charge') |h %></FONT>
221       </TD>
222
223     </TR>
224   </TABLE>
225
226 % }
227 % unless ( $opt{'html_only'} || $payby_changed_init ) {
228   <SCRIPT TYPE="text/javascript">
229
230     function payby_changed(what) {
231       var field_match = what.id.match(/(.*)_payby$/);
232       var field_id = field_match[1];
233       var payby = what.options[what.selectedIndex].value;
234       if ( payby == 'CARD' ) {
235         document.getElementById(field_id+'_td_payinfo').style.display = '';
236         document.getElementById(field_id+'_td_paydate').style.display = '';
237         document.getElementById(field_id+'_td_paycvv').style.display = '';
238         document.getElementById(field_id+'_td_payname').style.display = '';
239         document.getElementById(field_id+'_td_payinfo1').style.display = 'none';
240         document.getElementById(field_id+'_td_payinfo2').style.display = 'none';
241         document.getElementById(field_id+'_td_paytype').style.display = 'none';
242         document.getElementById(field_id+'_td_payname_CHEK').style.display = 'none';
243         var td_payinfo3 = document.getElementById(field_id+'_td_payinfo3');
244         if ( td_payinfo3 ) {
245           td_payinfo3.style.display = 'none';
246         }
247         var td_paystate = document.getElementById(field_id+'_td_paystate');
248         if ( td_paystate ) {
249           td_paystate.style.display = 'none';
250         }
251       } else if ( payby == 'CHEK' ) {
252         document.getElementById(field_id+'_td_payinfo').style.display = 'none';
253         document.getElementById(field_id+'_td_paydate').style.display = 'none';
254         document.getElementById(field_id+'_td_paycvv').style.display = 'none';
255         document.getElementById(field_id+'_td_payname').style.display = 'none';
256         document.getElementById(field_id+'_td_payinfo1').style.display = '';
257         document.getElementById(field_id+'_td_payinfo2').style.display = '';
258         document.getElementById(field_id+'_td_paytype').style.display = '';
259         document.getElementById(field_id+'_td_payname_CHEK').style.display = '';
260         var td_payinfo3 = document.getElementById(field_id+'_td_payinfo3');
261         if ( td_payinfo3 ) {
262           td_payinfo3.style.display = '';
263         }
264         var td_paystate = document.getElementById(field_id+'_td_paystate');
265         if ( td_paystate ) {
266           td_paystate.style.display = '';
267         }
268       } else {
269         alert( 'unknown payby ' + payby );
270       }
271       spawn_custpaybynum(what);
272     }
273
274   </SCRIPT>
275 %   $payby_changed_init = 1;
276 % }
277 <%once>
278 my $payby_changed_init = 0;
279 </%once>
280 <%init>
281
282 my( %opt ) = @_;
283
284 my $conf = new FS::Conf;
285
286 my $echeck_country = $conf->config('echeck-country');
287
288 my $name = $opt{'element_name'} || $opt{'field'} || 'custpaybynum';
289 my $id = $opt{'id'} || 'custpaybynum';
290
291 my $curr_value = $opt{'curr_value'} || $opt{'value'};
292
293 my $onchange = '';
294 if ( $opt{'onchange'} ) {
295   $onchange = $opt{'onchange'};
296   $onchange .= '(this)' unless $onchange =~ /\(\w*\);?$/;
297   $onchange =~ s/\(what\);/\(this\);/g; #ugh, terrible hack.  all onchange
298                                         #callbacks should act the same
299   #$onchange = 'onChange="'. $onchange. '"';
300 }
301
302 my $cust_payby;
303 if ( $curr_value ) {
304   $cust_payby = qsearchs('cust_payby', { 'custpaybynum' => $curr_value } );
305 } else {
306   $cust_payby = new FS::cust_payby {};
307 }
308 my $sel_payby = $cgi->param($name.'_payby') || $cust_payby->payby;
309 # convert DCRD to CARD + no weight, and the same for DCHK/CHEK
310 if ($sel_payby eq 'DCRD') {
311   $sel_payby = 'CARD';
312   $cust_payby->weight('');
313 } elsif ($sel_payby eq 'DCHK') {
314   $sel_payby = 'CHEK';
315   $cust_payby->weight('');
316 } elsif (!$sel_payby) {
317   # default
318   $sel_payby = 'CARD';
319 }
320
321 my @payby = FS::payby->cust_payby;
322 my %conf_payby = map { $_=>1 } $conf->config('payby');
323 @payby = grep $conf_payby{$_}, @payby if keys %conf_payby;
324 @payby = grep $_ !~ /^(DCRD|DCHK)$/, @payby;
325
326 my %weight = (
327   1 => 'Primary',
328   2 => 'Secondary',
329   3 => 'Tertiary',
330   4 => 'Fourth',
331   5 => 'Fifth',
332   6 => 'Sixth',
333   7 => 'Seventh',
334 );
335
336 </%init>