templates!!!
[freeside.git] / httemplate / edit / svc_acct_sm.cgi
1 <%
2 #
3 # $Id: svc_acct_sm.cgi,v 1.1 2001-07-30 07:36:04 ivan Exp $
4 #
5 # Usage: svc_acct_sm.cgi {svcnum} | pkgnum{pkgnum}-svcpart{svcpart}
6 #        http://server.name/path/svc_acct_sm.cgi? {svcnum} | pkgnum{pkgnum}-svcpart{svcpart}
7 #
8 # use {svcnum} for edit, pkgnum{pkgnum}-svcpart{svcpart} for add
9 #
10 # should error out in a more CGI-friendly way, and should have more error checking (sigh).
11 #
12 # ivan@voicenet.com 97-jan-5
13 #
14 # added debugging code; fixed CPU-sucking problem with trying to edit an (unaudited) mail alias (no pkgnum)
15 #
16 # ivan@voicenet.com 97-may-7
17 #
18 # fixed uid selection
19 # ivan@voicenet.com 97-jun-4
20 #
21 # uid selection across _CUSTOMER_, not just _PACKAGE_
22 #
23 # ( i need to be rewritten with fast searches)
24 #
25 # ivan@voicenet.com 97-oct-3
26 #
27 # added fast searches in some of the places where it is sorely needed...
28 # I see DBI::mysql in your future...
29 # ivan@voicenet.com 97-oct-23
30 #
31 # rewrite ivan@sisd.com 98-mar-15
32 #
33 # /var/spool/freeside/conf/domain ivan@sisd.com 98-jul-26
34 #
35 # $Log: svc_acct_sm.cgi,v $
36 # Revision 1.1  2001-07-30 07:36:04  ivan
37 # templates!!!
38 #
39 # Revision 1.9  1999/02/28 00:03:38  ivan
40 # removed misleading comments
41 #
42 # Revision 1.8  1999/02/07 09:59:24  ivan
43 # more mod_perl fixes, and bugfixes Peter Wemm sent via email
44 #
45 # Revision 1.7  1999/01/19 05:13:45  ivan
46 # for mod_perl: no more top-level my() variables; use vars instead
47 # also the last s/create/new/;
48 #
49 # Revision 1.6  1999/01/18 09:41:34  ivan
50 # all $cgi->header calls now include ( '-expires' => 'now' ) for mod_perl
51 # (good idea anyway)
52 #
53 # Revision 1.5  1998/12/30 23:03:24  ivan
54 # bugfixes; fields isn't exported by derived classes
55 #
56 # Revision 1.4  1998/12/23 02:58:45  ivan
57 # $cgi->keywords instead of $cgi->query_string
58 #
59 # Revision 1.3  1998/12/17 06:17:11  ivan
60 # fix double // in relative URLs, s/CGI::Base/CGI/;
61 #
62 # Revision 1.2  1998/12/16 05:19:15  ivan
63 # use FS::Conf
64 #
65
66 use strict;
67 use vars qw( $conf $cgi $mydomain $action $svcnum $svc_acct_sm $pkgnum $svcpart
68              $part_svc $query %username %domain $p1 $domuser $domsvc $domuid );
69 use CGI;
70 use CGI::Carp qw(fatalsToBrowser);
71 use FS::UID qw(cgisuidsetup);
72 use FS::CGI qw(header popurl);
73 use FS::Record qw(qsearch qsearchs fields);
74 use FS::svc_acct_sm;
75 use FS::Conf;
76
77 $cgi = new CGI;
78 &cgisuidsetup($cgi);
79
80 $conf = new FS::Conf;
81 $mydomain = $conf->config('domain');
82
83 if ( $cgi->param('error') ) {
84   $svc_acct_sm = new FS::svc_acct_sm ( {
85     map { $_, scalar($cgi->param($_)) } fields('svc_acct_sm')
86   } );
87   $svcnum = $svc_acct_sm->svcnum;
88   $pkgnum = $cgi->param('pkgnum');
89   $svcpart = $cgi->param('svcpart');
90   $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
91   die "No part_svc entry!" unless $part_svc;
92 } else {
93   my($query) = $cgi->keywords;
94   if ( $query =~ /^(\d+)$/ ) { #editing
95     $svcnum=$1;
96     $svc_acct_sm=qsearchs('svc_acct_sm',{'svcnum'=>$svcnum})
97       or die "Unknown (svc_acct_sm) svcnum!";
98
99     my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum})
100       or die "Unknown (cust_svc) svcnum!";
101
102     $pkgnum=$cust_svc->pkgnum;
103     $svcpart=$cust_svc->svcpart;
104   
105     $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
106     die "No part_svc entry!" unless $part_svc;
107
108   } else { #adding
109
110     $svc_acct_sm = new FS::svc_acct_sm({});
111
112     foreach $_ (split(/-/,$query)) { #get & untaint pkgnum & svcpart
113       $pkgnum=$1 if /^pkgnum(\d+)$/;
114       $svcpart=$1 if /^svcpart(\d+)$/;
115     }
116     $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
117     die "No part_svc entry!" unless $part_svc;
118
119     $svcnum='';
120
121     #set fixed and default fields from part_svc
122     my($field);
123     foreach $field ( fields('svc_acct_sm') ) {
124       if ( $part_svc->getfield('svc_acct_sm__'. $field. '_flag') ne '' ) {
125         $svc_acct_sm->setfield($field,$part_svc->getfield('svc_acct_sm__'. $field) );
126       }
127     }
128
129   }
130 }
131 $action = $svc_acct_sm->svcnum ? 'Edit' : 'Add';
132
133 if ($pkgnum) {
134
135   #find all possible uids (and usernames)
136
137   my($u_part_svc,@u_acct_svcparts);
138   foreach $u_part_svc ( qsearch('part_svc',{'svcdb'=>'svc_acct'}) ) {
139     push @u_acct_svcparts,$u_part_svc->getfield('svcpart');
140   }
141
142   my($cust_pkg)=qsearchs('cust_pkg',{'pkgnum'=>$pkgnum});
143   my($custnum)=$cust_pkg->getfield('custnum');
144   my($i_cust_pkg);
145   foreach $i_cust_pkg ( qsearch('cust_pkg',{'custnum'=>$custnum}) ) {
146     my($cust_pkgnum)=$i_cust_pkg->getfield('pkgnum');
147     my($acct_svcpart);
148     foreach $acct_svcpart (@u_acct_svcparts) {   #now find the corresponding 
149                                               #record(s) in cust_svc ( for this
150                                               #pkgnum ! )
151       my($i_cust_svc);
152       foreach $i_cust_svc ( qsearch('cust_svc',{'pkgnum'=>$cust_pkgnum,'svcpart'=>$acct_svcpart}) ) {
153         my($svc_acct)=qsearchs('svc_acct',{'svcnum'=>$i_cust_svc->getfield('svcnum')});
154         $username{$svc_acct->getfield('uid')}=$svc_acct->getfield('username');
155       }  
156     }
157   }
158
159   #find all possible domains (and domsvc's)
160
161   my($d_part_svc,@d_acct_svcparts);
162   foreach $d_part_svc ( qsearch('part_svc',{'svcdb'=>'svc_domain'}) ) {
163     push @d_acct_svcparts,$d_part_svc->getfield('svcpart');
164   }
165
166   foreach $i_cust_pkg ( qsearch('cust_pkg',{'custnum'=>$custnum}) ) {
167     my($cust_pkgnum)=$i_cust_pkg->getfield('pkgnum');
168     my($acct_svcpart);
169     foreach $acct_svcpart (@d_acct_svcparts) {
170       my($i_cust_svc);
171       foreach $i_cust_svc ( qsearch('cust_svc',{'pkgnum'=>$cust_pkgnum,'svcpart'=>$acct_svcpart}) ) {
172         my($svc_domain)=qsearch('svc_domain',{'svcnum'=>$i_cust_svc->getfield('svcnum')});
173         $domain{$svc_domain->getfield('svcnum')}=$svc_domain->getfield('domain');
174       }
175     }
176   }
177
178 } elsif ( $action eq 'Edit' ) {
179
180   my($svc_acct)=qsearchs('svc_acct',{'uid'=>$svc_acct_sm->domuid});
181   $username{$svc_acct_sm->uid} = $svc_acct->username;
182
183   my($svc_domain)=qsearchs('svc_domain',{'svcnum'=>$svc_acct_sm->domsvc});
184   $domain{$svc_acct_sm->domsvc} = $svc_domain->domain;
185
186 } else {
187   die "\$action eq Add, but \$pkgnum is null!\n";
188 }
189
190 $p1 = popurl(1);
191 print $cgi->header( '-expires' => 'now' ), header("Mail Alias $action", '');
192
193 print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: !, $cgi->param('error'),
194       "</FONT>"
195   if $cgi->param('error');
196
197 print qq!<FORM ACTION="${p1}process/svc_acct_sm.cgi" METHOD=POST>!;
198
199 #display
200
201         #formatting
202         print "<PRE>";
203
204 #svcnum
205 print qq!<INPUT TYPE="hidden" NAME="svcnum" VALUE="$svcnum">!;
206 print qq!Service #<FONT SIZE=+1><B>!, $svcnum ? $svcnum : " (NEW)", "</B></FONT>";
207
208 #pkgnum
209 print qq!<INPUT TYPE="hidden" NAME="pkgnum" VALUE="$pkgnum">!;
210  
211 #svcpart
212 print qq!<INPUT TYPE="hidden" NAME="svcpart" VALUE="$svcpart">!;
213
214 ($domuser,$domsvc,$domuid)=(
215   $svc_acct_sm->domuser,
216   $svc_acct_sm->domsvc,
217   $svc_acct_sm->domuid,
218 );
219
220 #domuser
221 print qq!\n\nMail to <INPUT TYPE="text" NAME="domuser" VALUE="$domuser"> <I>( * for anything )</I>!;
222
223 #domsvc
224 print qq! \@ <SELECT NAME="domsvc" SIZE=1>!;
225 foreach $_ (keys %domain) {
226   print "<OPTION", $_ eq $domsvc ? " SELECTED" : "",
227         qq! VALUE="$_">$domain{$_}!;
228 }
229 print "</SELECT>";
230
231 #uid
232 print qq!\nforwards to <SELECT NAME="domuid" SIZE=1>!;
233 foreach $_ (keys %username) {
234   print "<OPTION", ($_ eq $domuid) ? " SELECTED" : "",
235         qq! VALUE="$_">$username{$_}!;
236 }
237 print "</SELECT>\@$mydomain mailbox.";
238
239         #formatting
240         print "</PRE>\n";
241
242 print qq!<CENTER><INPUT TYPE="submit" VALUE="Submit"></CENTER>!;
243
244 print <<END;
245
246     </FORM>
247   </BODY>
248 </HTML>
249 END
250
251 %>