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