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