7131ad2e876cd3577560062639bd110664774222
[freeside.git] / fs_signup / FS-SignupClient / cgi / signup.cgi
1 #!/usr/bin/perl -Tw
2 #
3 # $Id: signup.cgi,v 1.1 1999-08-24 07:40:45 ivan Exp $
4
5 use strict;
6 use vars qw( @payby $cgi $locales $packages $pops $r $error
7              $last $first $ss $company $address1 $address2 $city $state $county
8              $country $zip $daytime $night $fax $invoicing_list $payby $payinfo
9              $paydate $payname $pkgpart $username $password $popnum );
10 use subs qw( print_form print_okay expselect );
11
12 use CGI;
13 use CGI::Carp qw(fatalsToBrowser);
14 use FS::SignupClient qw( signup_info new_customer );
15
16 #@payby = qw( CARD BILL COMP );
17 #@payby = qw( CARD BILL );
18 @payby = qw( CARD );
19
20 ( $locales, $packages, $pops ) = signup_info();
21
22 $cgi = new CGI;
23
24 if ( defined $cgi->param('magic') ) {
25   if ( $cgi->param('magic') eq 'process' ) {
26
27     $cgi->param('state') =~ /^(\w*)( \(([\w ]+)\))? ?\/ ?(\w+)$/
28       or die "Oops, illegal \"state\" param: ". $cgi->param('state');
29     $state = $1;
30     $county = $3 || '';
31     $country = $4;
32
33     $payby = $cgi->param('payby');
34     $payinfo = $cgi->param( $payby. '_payinfo' );
35     $paydate =
36       $cgi->param( $payby. '_month' ). '-'. $cgi->param( $payby. '_year' );
37     $payname = $cgi->param( $payby. '_payname' );
38
39     if ( $invoicing_list = $cgi->param('invoicing_list') ) {
40       $invoicing_list .= ', POST' if $cgi->param('invoicing_list_POST');
41     } else {
42       $invoicing_list = 'POST';
43     }
44
45     ( $error = new_customer ( {
46       'last'           => $last            = $cgi->param('last'),
47       'first'          => $first           = $cgi->param('first'),
48       'ss'             => $ss              = $cgi->param('ss'),
49       'company'        => $company         = $cgi->param('company'),
50       'address1'       => $address1        = $cgi->param('address1'),
51       'address2'       => $address2        = $cgi->param('address2'),
52       'city'           => $city            = $cgi->param('city'),
53       'county'         => $county,
54       'state'          => $state,
55       'zip'            => $zip             = $cgi->param('zip'),
56       'country'        => $country,
57       'daytime'        => $daytime         = $cgi->param('daytime'),
58       'night'          => $night           = $cgi->param('night'),
59       'fax'            => $fax             = $cgi->param('fax'),
60       'payby'          => $payby,
61       'payinfo'        => $payinfo,
62       'paydate'        => $paydate,
63       'payname'        => $payname,
64       'invoicing_list' => $invoicing_list,
65       'pkgpart'        => $pkgpart         = $cgi->param('pkgpart'),
66       'username'       => $username        = $cgi->param('username'),
67       '_password'      => $password        = $cgi->param('_password'),
68       'popnum'         => $popnum          = $cgi->param('popnum'),
69     } ) )
70       ? print_form()
71       : print_okay();
72   } else {
73     die "unrecognized magic: ". $cgi->param('magic');
74   }
75 } else {
76   $error = '';
77   $last = '';
78   $first = '';
79   $ss = '';
80   $company = '';
81   $address1 = '';
82   $address2 = '';
83   $city = '';
84   $state = '';
85   $county = '';
86   $country = '';
87   $zip = '';
88   $daytime = '';
89   $night = '';
90   $fax = '';
91   $invoicing_list = '';
92   $payby = '';
93   $payinfo = '';
94   $paydate = '';
95   $payname = '';
96   $pkgpart = '';
97   $username = '';
98   $password = '';
99   $popnum = '';
100
101   print_form;
102 }
103
104 sub print_form {
105
106   my $r = qq!<font color="#ff0000">*</font>!;
107   my $self_url = $cgi->self_url;
108
109   print $cgi->header( '-expires' => 'now' ), <<END;
110 <HTML><HEAD><TITLE>ISP Signup form</TITLE></HEAD>
111 <BODY BGCOLOR="#e8e8e8"><FONT SIZE=7>ISP Signup form</FONT><BR><BR>
112 END
113
114   print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: $error</FONT>! if $error;
115
116   print <<END;
117 <FORM ACTION="$self_url" METHOD=POST>
118 <INPUT TYPE="hidden" NAME="magic" VALUE="process">
119 Contact Information
120 <TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
121 <TR>
122   <TH ALIGN="right">${r}Contact name<BR>(last, first)</TH>
123   <TD COLSPAN=3><INPUT TYPE="text" NAME="last" VALUE="$last">,
124                 <INPUT TYPE="text" NAME="first" VALUE="$first"></TD>
125   <TD ALIGN="right">SS#</TD>
126   <TD><INPUT TYPE="text" NAME="ss" SIZE=11 VALUE="$ss"></TD>
127 </TR>
128 <TR>
129   <TD ALIGN="right">Company</TD>
130   <TD COLSPAN=5><INPUT TYPE="text" NAME="company" SIZE=70 VALUE="$company"></TD>
131 </TR>
132 <TR>
133   <TH ALIGN="right">${r}Address</TH>
134   <TD COLSPAN=5><INPUT TYPE="text" NAME="address1" SIZE=70 VALUE="$address1"></TD>
135 </TR>
136 <TR>
137   <TD ALIGN="right">&nbsp;</TD>
138   <TD COLSPAN=5><INPUT TYPE="text" NAME="address2" SIZE=70 VALUE="$address2"></TD>
139 </TR>
140 <TR>
141   <TH ALIGN="right">${r}City</TH>
142   <TD><INPUT TYPE="text" NAME="city" VALUE="$city"></TD>
143   <TH ALIGN="right">${r}State/Country</TH>
144   <TD><SELECT NAME="state" SIZE="1">
145 END
146
147   foreach ( @{$locales} ) {
148     print "<OPTION";
149     print " SELECTED" if ( $state eq $_->{'state'}
150                            && $county eq $_->{'county'}
151                            && $country eq $_->{'country'}
152                          );
153     print ">", $_->{'state'};
154     print " (",$_->{'county'},")" if $_->{'county'};
155     print " / ", $_->{'country'};
156   }
157
158   print <<END;
159   </SELECT></TD>
160   <TH>${r}Zip</TH>
161   <TD><INPUT TYPE="text" NAME="zip" SIZE=10 VALUE="$zip"></TD>
162 </TR>
163 <TR>
164   <TD ALIGN="right">Day Phone</TD>
165   <TD COLSPAN=5><INPUT TYPE="text" NAME="daytime" VALUE="$daytime" SIZE=18></TD>
166 </TR>
167 <TR>
168   <TD ALIGN="right">Night Phone</TD>
169   <TD COLSPAN=5><INPUT TYPE="text" NAME="night" VALUE="$night" SIZE=18></TD>
170 </TR>
171 <TR>
172   <TD ALIGN="right">Fax</TD>
173   <TD COLSPAN=5><INPUT TYPE="text" NAME="fax" VALUE="$fax" SIZE=12></TD>
174 </TR>
175 </TABLE>$r required fields<BR>
176 <BR>Billing information<TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
177 <TR><TD>
178 END
179
180   print qq!<INPUT TYPE="checkbox" NAME="invoicing_list_POST" VALUE="POST"!;
181   my @invoicing_list = split(', ', $invoicing_list );
182   print ' CHECKED'
183     if ! @invoicing_list || grep { $_ eq 'POST' } @invoicing_list;
184   print '>Postal mail invoice</TD></TR><TR><TD>Email invoice ',
185          qq!<INPUT TYPE="text" NAME="invoicing_list" VALUE="!,
186          join(', ', grep { $_ ne 'POST' } @invoicing_list ),
187          qq!"></TD></TR>!;
188
189   print <<END;
190 <TR><TD>Billing type</TD></TR></TABLE>
191 <TABLE BGCOLOR="#c0c0c0" BORDER=1 WIDTH="100%">
192 <TR>
193 END
194
195   my %payby = (
196     'CARD' => qq!Credit card<BR>${r}<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="" MAXLENGTH=19><BR>${r}Exp !. expselect("CARD"). qq!<BR>${r}Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="">!,
197     'BILL' => qq!Billing<BR>P.O. <INPUT TYPE="text" NAME="BILL_payinfo" VALUE=""><BR>${r}Exp !. expselect("BILL", "12-2037"). qq!<BR>${r}Attention<BR><INPUT TYPE="text" NAME="BILL_payname" VALUE="Accounts Payable">!,
198     'COMP' => qq!Complimentary<BR>${r}Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE=""><BR>${r}Exp !. expselect("COMP"),
199   );
200
201   my %paybychecked = (
202     'CARD' => qq!Credit card<BR>${r}<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR>${r}Exp !. expselect("CARD", $paydate). qq!<BR>${r}Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="$payname">!,
203     'BILL' => qq!Billing<BR>P.O. <INPUT TYPE="text" NAME="BILL_payinfo" VALUE="$payinfo"><BR>${r}Exp !. expselect("BILL", $paydate). qq!<BR>${r}Attention<BR><INPUT TYPE="text" NAME="BILL_payname" VALUE="$payname">!,
204     'COMP' => qq!Complimentary<BR>${r}Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE="$payinfo"><BR>${r}Exp !. expselect("COMP", $paydate),
205   );
206
207   for (@payby) {
208     print qq!<TD VALIGN=TOP><INPUT TYPE="radio" NAME="payby" VALUE="$_"!;
209     if ($payby eq $_) {
210       print qq! CHECKED> $paybychecked{$_}</TD>!;
211     } else {
212       print qq!> $payby{$_}</TD>!;
213     }
214   }
215
216   print <<END;
217 </TR></TABLE>$r required fields for each billing type
218 <BR><BR>First package
219 <TABLE BGCOLOR="#c0c0c0" BORDER=0 CELLSPACING=0 WIDTH="100%">
220 <TR>
221   <TD COLSPAN=2><SELECT NAME="pkgpart"><OPTION VALUE="">(none)
222 END
223
224   foreach my $package ( @{$packages} ) {
225     print qq!<OPTION VALUE="!, $package->{'pkgpart'}, '"';
226     print " SELECTED" if $pkgpart && ( $package->{'pkgpart'} == $pkgpart );
227     print ">", $package->{'pkg'};
228   }
229
230   print <<END;
231   </SELECT></TD>
232 </TR>
233 <TR>
234   <TD ALIGN="right">Username</TD>
235   <TD><INPUT TYPE="text" NAME="username" VALUE="$username"></TD>
236 </TR>
237 <TR>
238   <TD ALIGN="right">Password</TD>
239   <TD><INPUT TYPE="text" NAME="_password" VALUE="$password">
240   (blank to generate)</TD>
241 </TR>
242 <TR>
243   <TD ALIGN="right">POP</TD>
244   <TD><SELECT NAME="popnum" SIZE=1><OPTION> 
245 END
246
247   foreach my $pop ( @{$pops} ) {
248     print qq!<OPTION VALUE="!, $pop->{'popnum'}, '"',
249           ( $popnum && $pop->{'popnum'} == $popnum ) ? ' SELECTED' : '', ">", 
250           $pop->{'popnum'}, ": ", 
251           $pop->{'city'}, ", ",
252           $pop->{'state'},
253           " (", $pop->{'ac'}, ")/",
254           $pop->{'exch'}, "\n"
255         ;
256   }
257   print <<END;
258   </SELECT></TD>
259 </TR>
260 </TABLE>
261 <BR><BR><INPUT TYPE="submit" VALUE="Signup">
262 </FORM></BODY></HTML>
263 END
264
265 }
266
267 sub print_okay {
268   print $cgi->header( '-expires' => 'now' ), <<END;
269 <HTML><HEAD><TITLE>Signup successful</TITLE></HEAD>
270 <BODY BGCOLOR="#e8e8e8"><FONT SIZE=7>Signup successful</FONT><BR><BR>
271 blah blah blah
272 </BODY>
273 </HTML>
274 END
275 }
276
277 sub expselect {
278   my $prefix = shift;
279   my $date = shift || '';
280   my( $m, $y ) = ( 0, 0 );
281   if ( $date  =~ /^(\d{4})-(\d{2})-\d{2}$/ ) { #PostgreSQL date format
282     ( $m, $y ) = ( $2, $1 );
283   } elsif ( $date =~ /^(\d{1,2})-(\d{1,2}-)?(\d{4}$)/ ) {
284     ( $m, $y ) = ( $1, $3 );
285   }
286   my $return = qq!<SELECT NAME="$prefix!. qq!_month" SIZE="1">!;
287   for ( 1 .. 12 ) {
288     $return .= "<OPTION";
289     $return .= " SELECTED" if $_ == $m;
290     $return .= ">$_";
291   }
292   $return .= qq!</SELECT>/<SELECT NAME="$prefix!. qq!_year" SIZE="1">!;
293   for ( 1999 .. 2037 ) {
294     $return .= "<OPTION";
295     $return .= " SELECTED" if $_ == $y;
296     $return .= ">$_";
297   }
298   $return .= "</SELECT>";
299
300   $return;
301 }
302