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