cache foo
[freeside.git] / httemplate / search / svc_acct.cgi
1 <%
2 # <!-- $Id: svc_acct.cgi,v 1.7 2001-10-26 10:24:56 ivan Exp $ -->
3
4 use strict;
5 use vars qw( $cgi @svc_acct $sortby $query $mydomain );
6 use CGI;
7 use CGI::Carp qw(fatalsToBrowser);
8 use FS::UID qw(cgisuidsetup);
9 use FS::Record qw(qsearch qsearchs dbdef);
10 use FS::CGI qw(header idiot popurl table);
11 use FS::svc_acct;
12 use FS::cust_main;
13
14 $mydomain = '';
15
16 $cgi = new CGI;
17 &cgisuidsetup($cgi);
18
19 ($query)=$cgi->keywords;
20 $query ||= ''; #to avoid use of unitialized value errors
21 #this tree is a little bit redundant
22 if ( $query eq 'svcnum' ) {
23   $sortby=\*svcnum_sort;
24   @svc_acct=qsearch('svc_acct',{});
25 } elsif ( $query eq 'username' ) {
26   $sortby=\*username_sort;
27   @svc_acct=qsearch('svc_acct',{});
28 } elsif ( $query eq 'uid' ) {
29   $sortby=\*uid_sort;
30   @svc_acct=grep $_->uid ne '', qsearch('svc_acct',{});
31 } elsif ( $query eq 'UN_svcnum' ) {
32   $sortby=\*svcnum_sort;
33   @svc_acct = grep qsearchs('cust_svc',{
34       'svcnum' => $_->svcnum,
35       'pkgnum' => '',
36     }), qsearch('svc_acct',{});
37 } elsif ( $query eq 'UN_username' ) {
38   $sortby=\*username_sort;
39   @svc_acct = grep qsearchs('cust_svc',{
40       'svcnum' => $_->svcnum,
41       'pkgnum' => '',
42     }), qsearch('svc_acct',{});
43 } elsif ( $query eq 'UN_uid' ) {
44   $sortby=\*uid_sort;
45   @svc_acct = grep qsearchs('cust_svc',{
46       'svcnum' => $_->svcnum,
47       'pkgnum' => '',
48     }), qsearch('svc_acct',{});
49 } else {
50   $sortby=\*uid_sort;
51   &usernamesearch;
52 }
53
54 if ( scalar(@svc_acct) == 1 ) {
55   my($svcnum)=$svc_acct[0]->svcnum;
56   print $cgi->redirect(popurl(2). "view/svc_acct.cgi?$svcnum");  #redirect
57   #exit;
58 } elsif ( scalar(@svc_acct) == 0 ) { #error
59   idiot("Account not found");
60 } else {
61   my($total)=scalar(@svc_acct);
62   print $cgi->header( @FS::CGI::header ),
63         header("Account Search Results",''),
64         "$total matching accounts found",
65         &table(), <<END;
66       <TR>
67         <TH><FONT SIZE=-1>#</FONT></TH>
68         <TH><FONT SIZE=-1>Username</FONT></TH>
69         <TH><FONT SIZE=-1>Domain</FONT></TH>
70         <TH><FONT SIZE=-1>UID</FONT></TH>
71         <TH><FONT SIZE=-1>Service</FONT></TH>
72         <TH><FONT SIZE=-1>Cust#</FONT></TH>
73         <TH><FONT SIZE=-1>(bill) name</FONT></TH>
74         <TH><FONT SIZE=-1>company</FONT></TH>
75 END
76   if ( defined dbdef->table('cust_main')->column('ship_last') ) {
77     print <<END;
78         <TH><FONT SIZE=-1>(service) name</FONT></TH>
79         <TH><FONT SIZE=-1>company</FONT></TH>
80 END
81   }
82   print "</TR>";
83
84   my(%saw,$svc_acct);
85   my $p = popurl(2);
86   foreach $svc_acct (
87     sort $sortby grep(!$saw{$_->svcnum}++, @svc_acct)
88   ) {
89     my $cust_svc = qsearchs('cust_svc', { 'svcnum' => $svc_acct->svcnum })
90       or die "No cust_svc record for svcnum ". $svc_acct->svcnum;
91     my $part_svc = qsearchs('part_svc', { 'svcpart' => $cust_svc->svcpart })
92       or die "No part_svc record for svcpart ". $cust_svc->svcpart;
93
94     my $domain;
95     my $svc_domain = qsearchs('svc_domain', { 'svcnum' => $svc_acct->domsvc });
96     if ( $svc_domain ) {
97       $domain = "<A HREF=\"${p}view/svc_domain.cgi?". $svc_domain->svcnum.
98                 "\">". $svc_domain->domain. "</A>";
99     } else {
100       unless ( $mydomain ) {
101         my $conf = new FS::Conf;
102         unless ( $mydomain = $conf->config('domain') ) {
103           die "No legacy domain config file and no svc_domain.svcnum record ".
104               "for svc_acct.domsvc: ". $cust_svc->domsvc;
105         }
106       }
107       $domain = "<i>$mydomain</i><FONT COLOR=\"#FF0000\">*</FONT>";
108     }
109     my($cust_pkg,$cust_main);
110     if ( $cust_svc->pkgnum ) {
111       $cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $cust_svc->pkgnum })
112         or die "No cust_pkg record for pkgnum ". $cust_svc->pkgnum;
113       $cust_main = qsearchs('cust_main', { 'custnum' => $cust_pkg->custnum })
114         or die "No cust_main record for custnum ". $cust_pkg->custnum;
115     }
116     my($svcnum, $username, $uid, $svc, $custnum, $last, $first, $company) = (
117       $svc_acct->svcnum,
118       $svc_acct->getfield('username'),
119       $svc_acct->getfield('uid'),
120       $part_svc->svc,
121       $cust_svc->pkgnum ? $cust_main->custnum : '',
122       $cust_svc->pkgnum ? $cust_main->getfield('last') : '',
123       $cust_svc->pkgnum ? $cust_main->getfield('first') : '',
124       $cust_svc->pkgnum ? $cust_main->company : '',
125     );
126     my($pcustnum) = $custnum
127       ? "<A HREF=\"${p}view/cust_main.cgi?$custnum\"><FONT SIZE=-1>$custnum</FONT></A>"
128       : "<I>(unlinked)</I>"
129     ;
130     my $pname = $custnum ? "<A HREF=\"${p}view/cust_main.cgi?$custnum\">$last, $first</A>" : '';
131     my $pcompany = $custnum ? "<A HREF=\"${p}view/cust_main.cgi?$custnum\">$company</A>" : '';
132     my($pship_name, $pship_company);
133     if ( defined dbdef->table('cust_main')->column('ship_last') ) {
134       my($ship_last, $ship_first, $ship_company) = (
135         $cust_svc->pkgnum ? ( $cust_main->ship_last || $last ) : '',
136         $cust_svc->pkgnum ? ( $cust_main->ship_last
137                               ? $cust_main->ship_first
138                               : $first
139                             ) : '',
140         $cust_svc->pkgnum ? ( $cust_main->ship_last
141                               ? $cust_main->ship_company
142                               : $company
143                             ) : '',
144       );
145       $pship_name = $custnum ? "<A HREF=\"${p}view/cust_main.cgi?$custnum\">$ship_last, $ship_first</A>" : '';
146       $pship_company = $custnum ? "<A HREF=\"${p}view/cust_main.cgi?$custnum\">$ship_company</A>" : '';
147     }
148     print <<END;
149     <TR>
150       <TD><A HREF="${p}view/svc_acct.cgi?$svcnum"><FONT SIZE=-1>$svcnum</FONT></A></TD>
151       <TD><A HREF="${p}view/svc_acct.cgi?$svcnum"><FONT SIZE=-1>$username</FONT></A></TD>
152       <TD><FONT SIZE=-1>$domain</FONT></TD>
153       <TD><A HREF="${p}view/svc_acct.cgi?$svcnum"><FONT SIZE=-1>$uid</FONT></A></TD>
154       <TD><FONT SIZE=-1>$svc</FONT></TH>
155       <TD><FONT SIZE=-1>$pcustnum</FONT></TH>
156       <TD><FONT SIZE=-1>$pname<FONT></TH>
157       <TD><FONT SIZE=-1>$pcompany</FONT></TH>
158 END
159     if ( defined dbdef->table('cust_main')->column('ship_last') ) {
160       print <<END;
161       <TD><FONT SIZE=-1>$pship_name<FONT></TH>
162       <TD><FONT SIZE=-1>$pship_company</FONT></TH>
163 END
164     }
165     print "</TR>";
166
167   }
168  
169   print '</TABLE>';
170
171   if ( $mydomain ) {
172     print "<BR><FONT COLOR=\"#FF0000\">*</FONT> The <I>$mydomain</I> domain ".
173           "is contained in your legacy <CODE>domain</CODE> ".
174           "<A HREF=\"${p}docs/config.html#domain\">configuration file</A>.  ".
175           "You should run the <CODE>bin/fs-migrate-svc_acct_sm</CODE> script ".
176           "to create a proper svc_domain record for this domain."
177   }
178
179   print '</BODY></HTML>';
180
181 }
182
183 sub svcnum_sort {
184   $a->getfield('svcnum') <=> $b->getfield('svcnum');
185 }
186
187 sub username_sort {
188   $a->getfield('username') cmp $b->getfield('username');
189 }
190
191 sub uid_sort {
192   $a->getfield('uid') <=> $b->getfield('uid');
193 }
194
195 sub usernamesearch {
196
197   $cgi->param('username') =~ /^([\w\d\-]+)$/; #untaint username_text
198   my($username)=$1;
199
200   @svc_acct=qsearch('svc_acct',{'username'=>$username});
201
202 }
203
204
205 %>