c645ad6c1d75d31170c3355fb5ac0950c537f04b
[freeside.git] / htdocs / search / cust_pkg.cgi
1 #!/usr/bin/perl -Tw
2 #
3 # $Id: cust_pkg.cgi,v 1.10 2000-07-17 12:49:29 ivan Exp $
4 #
5 # based on search/svc_acct.cgi ivan@sisd.com 98-jul-17
6 #
7 # $Log: cust_pkg.cgi,v $
8 # Revision 1.10  2000-07-17 12:49:29  ivan
9 # better error message if a package isn't linked to a customer (that shouldn't happen)
10 #
11 # Revision 1.9  1999/07/17 10:38:52  ivan
12 # scott nelson <scott@ultimanet.com> noticed this mod_perl-triggered bug and
13 # gave me a great bugreport at the last rhythmethod
14 #
15 # Revision 1.8  1999/02/09 09:22:57  ivan
16 # visual and bugfixes
17 #
18 # Revision 1.7  1999/02/07 09:59:37  ivan
19 # more mod_perl fixes, and bugfixes Peter Wemm sent via email
20 #
21 # Revision 1.6  1999/01/19 05:14:13  ivan
22 # for mod_perl: no more top-level my() variables; use vars instead
23 # also the last s/create/new/;
24 #
25 # Revision 1.5  1999/01/18 09:41:38  ivan
26 # all $cgi->header calls now include ( '-expires' => 'now' ) for mod_perl
27 # (good idea anyway)
28 #
29 # Revision 1.4  1999/01/18 09:22:33  ivan
30 # changes to track email addresses for email invoicing
31 #
32 # Revision 1.3  1998/12/23 03:05:59  ivan
33 # $cgi->keywords instead of $cgi->query_string
34 #
35 # Revision 1.2  1998/12/17 09:41:09  ivan
36 # s/CGI::(Base|Request)/CGI.pm/;
37 #
38
39 use strict;
40 use vars qw ( $cgi @cust_pkg $sortby $query );
41 use CGI;
42 use CGI::Carp qw(fatalsToBrowser);
43 use FS::UID qw(cgisuidsetup);
44 use FS::Record qw(qsearch qsearchs);
45 use FS::CGI qw(header eidiot popurl);
46 use FS::cust_pkg;
47 use FS::pkg_svc;
48 use FS::cust_svc;
49 use FS::cust_main;
50
51 $cgi = new CGI;
52 &cgisuidsetup($cgi);
53
54 ($query) = $cgi->keywords;
55 #this tree is a little bit redundant
56 if ( $query eq 'pkgnum' ) {
57   $sortby=\*pkgnum_sort;
58   @cust_pkg=qsearch('cust_pkg',{});
59 } elsif ( $query eq 'APKG_pkgnum' ) {
60   $sortby=\*pkgnum_sort;
61   @cust_pkg=();
62   #perhaps this should go in cust_pkg as a qsearch-like constructor?
63   my($cust_pkg);
64   foreach $cust_pkg (qsearch('cust_pkg',{})) {
65     my($flag)=0;
66     my($pkg_svc);
67     PKG_SVC: 
68     foreach $pkg_svc (qsearch('pkg_svc',{ 'pkgpart' => $cust_pkg->pkgpart })) {
69       if ( $pkg_svc->quantity 
70            > scalar(qsearch('cust_svc',{
71                'pkgnum' => $cust_pkg->pkgnum,
72                'svcpart' => $pkg_svc->svcpart,
73              }))
74          )
75       {
76         $flag=1;
77         last PKG_SVC;
78       }
79     }
80     push @cust_pkg, $cust_pkg if $flag;
81   }
82 } else {
83   die "Empty QUERY_STRING!";
84 }
85
86 if ( scalar(@cust_pkg) == 1 ) {
87   my($pkgnum)=$cust_pkg[0]->pkgnum;
88   print $cgi->redirect(popurl(2). "view/cust_pkg.cgi?$pkgnum");
89   exit;
90 } elsif ( scalar(@cust_pkg) == 0 ) { #error
91   eidiot("No packages found");
92 } else {
93   my($total)=scalar(@cust_pkg);
94   print $cgi->header( '-expires' => 'now' ), header('Package Search Results',''), <<END;
95     $total matching packages found
96     <TABLE BORDER=4 CELLSPACING=0 CELLPADDING=0>
97       <TR>
98         <TH>Package #</TH>
99         <TH>Customer #</TH>
100         <TH>Contact name</TH>
101         <TH>Company</TH>
102       </TR>
103 END
104
105   my(%saw,$cust_pkg);
106   foreach $cust_pkg (
107     sort $sortby grep(!$saw{$_->pkgnum}++, @cust_pkg)
108   ) {
109     my($cust_main)=qsearchs('cust_main',{'custnum'=>$cust_pkg->custnum});
110     my($pkgnum,$custnum,$name,$company)=(
111       $cust_pkg->pkgnum,
112       $cust_pkg->custnum,
113       $cust_main ? $cust_main->last. ', '. $cust_main->first : '',
114       $cust_main ? $cust_main->company : '',
115     );
116     my $p = popurl(2);
117     print <<END;
118     <TR>
119       <TD><A HREF="${p}view/cust_pkg.cgi?$pkgnum"><FONT SIZE=-1>$pkgnum</FONT></A></TD>
120 END
121     if ( $cust_main ) {
122       print <<END;
123       <TD><FONT SIZE=-1><A HREF="${p}view/cust_main.cgi?$custnum">$custnum</A></FONT></TD>
124       <TD><FONT SIZE=-1><A HREF="${p}view/cust_main.cgi?$custnum">$name</A></FONT></TD>
125       <TD><FONT SIZE=-1><A HREF="${p}view/cust_main.cgi?$custnum">$company</A></FONT></TD>
126     </TR>
127 END
128     } else {
129       print <<END;
130       <TD COLSPAN=3><FONT SIZE=-1>WARNING: couldn't find cust_main.custnum $custnum (cust_pkg.pkgnum $pkgnum)</TD>
131     </TR>
132 END
133     }
134   }
135  
136   print <<END;
137     </TABLE>
138   </BODY>
139 </HTML>
140 END
141   exit;
142
143 }
144
145 sub pkgnum_sort {
146   $a->getfield('pkgnum') <=> $b->getfield('pkgnum');
147 }
148