Initial revision
[freeside.git] / htdocs / search / cust_pkg.cgi
1 #!/usr/bin/perl -Tw
2 #
3 # cust_pkg.cgi: search/browse for packages
4 #
5 # based on search/svc_acct.cgi ivan@sisd.com 98-jul-17
6
7 use strict;
8 use CGI::Request;
9 use CGI::Carp qw(fatalsToBrowser);
10 use FS::UID qw(cgisuidsetup);
11 use FS::Record qw(qsearch qsearchs);
12 use FS::CGI qw(header idiot);
13
14 my($req)=new CGI::Request;
15 &cgisuidsetup($req->cgi);
16
17 my(@cust_pkg,$sortby);
18
19 my($query)=$req->cgi->var('QUERY_STRING');
20 #this tree is a little bit redundant
21 if ( $query eq 'pkgnum' ) {
22   $sortby=\*pkgnum_sort;
23   @cust_pkg=qsearch('cust_pkg',{});
24 } elsif ( $query eq 'APKG_pkgnum' ) {
25   $sortby=\*pkgnum_sort;
26
27   #perhaps this should go in cust_pkg as a qsearch-like constructor?
28   my($cust_pkg);
29   foreach $cust_pkg (qsearch('cust_pkg',{})) {
30     my($flag)=0;
31     my($pkg_svc);
32     PKG_SVC: 
33     foreach $pkg_svc (qsearch('pkg_svc',{ 'pkgpart' => $cust_pkg->pkgpart })) {
34       if ( $pkg_svc->quantity 
35            > scalar(qsearch('cust_svc',{
36                'pkgnum' => $cust_pkg->pkgnum,
37                'svcpart' => $pkg_svc->svcpart,
38              }))
39          )
40       {
41         $flag=1;
42         last PKG_SVC;
43       }
44     }
45     push @cust_pkg, $cust_pkg if $flag;
46   }
47 } else {
48   die "Empty QUERY_STRING!";
49 }
50
51 if ( scalar(@cust_pkg) == 1 ) {
52   my($pkgnum)=$cust_pkg[0]->pkgnum;
53   $req->cgi->redirect("../view/cust_pkg.cgi?$pkgnum");
54   exit;
55 } elsif ( scalar(@cust_pkg) == 0 ) { #error
56   &idiot("No packages found");
57   exit;
58 } else {
59   my($total)=scalar(@cust_pkg);
60   CGI::Base::SendHeaders(); # one guess
61   print header('Package Search Results',''), <<END;
62     $total matching packages found
63     <TABLE BORDER=4 CELLSPACING=0 CELLPADDING=0>
64       <TR>
65         <TH>Package #</TH>
66         <TH>Customer #</TH>
67         <TH>Name</TH>
68         <TH>Company</TH>
69       </TR>
70 END
71
72   my($lines)=16;
73   my($lcount)=$lines;
74   my(%saw,$cust_pkg);
75   foreach $cust_pkg (
76     sort $sortby grep(!$saw{$_->pkgnum}++, @cust_pkg)
77   ) {
78     my($cust_main)=qsearchs('cust_main',{'custnum'=>$cust_pkg->custnum});
79     my($pkgnum,$custnum,$name,$company)=(
80       $cust_pkg->pkgnum,
81       $cust_main->custnum,
82       $cust_main->last. ', '. $cust_main->first,
83       $cust_main->company,
84     );
85     print <<END;
86     <TR>
87       <TD><A HREF="../view/cust_pkg.cgi?$pkgnum"><FONT SIZE=-1>$pkgnum</FONT></A></TD>
88       <TD><FONT SIZE=-1>$custnum</FONT></TD>
89       <TD><FONT SIZE=-1>$name</FONT></TD>
90       <TD><FONT SIZE=-1>$company</FONT></TD>
91     </TR>
92 END
93     if ($lcount-- == 0) { # lots of little tables instead of one big one
94       $lcount=$lines;
95       print <<END;   
96   </TABLE>
97   <TABLE BORDER=4 CELLSPACING=0 CELLPADDING=0>
98     <TR>
99         <TH>Package #</TH>
100         <TH>Customer #</TH>
101         <TH>Name</TH>
102         <TH>Company</TH>
103       <TH>
104     </TR>
105 END
106     }
107   }
108  
109   print <<END;
110     </TABLE>
111     </CENTER>
112   </BODY>
113 </HTML>
114 END
115   exit;
116
117 }
118
119 sub pkgnum_sort {
120   $a->getfield('pkgnum') <=> $b->getfield('pkgnum');
121 }
122