templates!!!
[freeside.git] / httemplate / search / cust_bill.cgi
1 <%
2 #
3 # $Id: cust_bill.cgi,v 1.1 2001-07-30 07:36:04 ivan Exp $
4 #
5 # Usage: post form to:
6 #        http://server.name/path/cust_bill.cgi
7 #
8 # ivan@voicenet.com 97-apr-4
9 #
10 # Changes to allow page to work at a relative position in server
11 #       bmccane@maxbaud.net     98-apr-3
12 #
13 # $Log: cust_bill.cgi,v $
14 # Revision 1.1  2001-07-30 07:36:04  ivan
15 # templates!!!
16 #
17 # Revision 1.6  2001/04/22 01:38:39  ivan
18 # svc_domain needs to import dbh sub from Record
19 # view/cust_main.cgi needs to use ->owed method, not check (depriciated) owed field
20 # search/cust_bill.cgi redirect error when there's only one invoice
21 #
22 # Revision 1.5  2000/07/17 16:45:41  ivan
23 # first shot at invoice browsing and some other cleanups
24 #
25 # Revision 1.4  1999/02/28 00:03:54  ivan
26 # removed misleading comments
27 #
28 # Revision 1.3  1999/01/19 05:14:11  ivan
29 # for mod_perl: no more top-level my() variables; use vars instead
30 # also the last s/create/new/;
31 #
32 # Revision 1.2  1998/12/17 09:41:07  ivan
33 # s/CGI::(Base|Request)/CGI.pm/;
34 #
35
36 use strict;
37 use vars qw ( $cgi $invnum $query $sortby @cust_bill );
38 use CGI;
39 use CGI::Carp qw(fatalsToBrowser);
40 use Date::Format;
41 use FS::UID qw(cgisuidsetup);
42 use FS::CGI qw(popurl header menubar eidiot table );
43 use FS::Record qw(qsearch qsearchs);
44 use FS::cust_bill;
45 use FS::cust_main;
46
47 $cgi = new CGI;
48 cgisuidsetup($cgi);
49
50 if ( $cgi->keywords ) {
51   my($query) = $cgi->keywords;
52   if ( $query eq 'invnum' ) {
53     $sortby = \*invnum_sort;
54     @cust_bill = qsearch('cust_bill', {} );
55   } elsif ( $query eq 'date' ) {
56     $sortby = \*date_sort;
57     @cust_bill = qsearch('cust_bill', {} );
58   } elsif ( $query eq 'custnum' ) {
59     $sortby = \*custnum_sort;
60     @cust_bill = qsearch('cust_bill', {} );
61   } elsif ( $query eq 'OPEN_invnum' ) {
62     $sortby = \*invnum_sort;
63     @cust_bill = grep $_->owed != 0, qsearch('cust_bill', {} );
64   } elsif ( $query eq 'OPEN_date' ) {
65     $sortby = \*date_sort;
66     @cust_bill = grep $_->owed != 0, qsearch('cust_bill', {} );
67   } elsif ( $query eq 'OPEN_custnum' ) {
68     $sortby = \*custnum_sort;
69     @cust_bill = grep $_->owed != 0, qsearch('cust_bill', {} );
70   } elsif ( $query =~ /^OPEN(\d+)_invnum$/ ) {
71     my $open = $1 * 86400;
72     $sortby = \*invnum_sort;
73     @cust_bill =
74       grep $_->owed != 0 && $_->_date < time - $open, qsearch('cust_bill', {} );
75   } elsif ( $query =~ /^OPEN(\d+)_date$/ ) {
76     my $open = $1 * 86400;
77     $sortby = \*date_sort;
78     @cust_bill =
79       grep $_->owed != 0 && $_->_date < time - $open, qsearch('cust_bill', {} );
80   } elsif ( $query =~ /^OPEN(\d+)_custnum$/ ) {
81     my $open = $1 * 86400;
82     $sortby = \*custnum_sort;
83     @cust_bill =
84       grep $_->owed != 0 && $_->_date < time - $open, qsearch('cust_bill', {} );
85   } else {
86     die "unknown query string $query";
87   }
88 } else {
89   $cgi->param('invnum') =~ /^\s*(FS-)?(\d+)\s*$/;
90   $invnum = $2;
91   @cust_bill = qsearchs('cust_bill', { 'invnum' => $invnum } );
92   $sortby = \*invnum_sort;
93 }
94
95 if ( scalar(@cust_bill) == 1 ) {
96   my $invnum = $cust_bill[0]->invnum;
97   print $cgi->redirect(popurl(2). "view/cust_bill.cgi?$invnum");  #redirect
98 } elsif ( scalar(@cust_bill) == 0 ) {
99   eidiot("Invoice not found.");
100 } else {
101   my $total = scalar(@cust_bill);
102   print $cgi->header( '-expires' => 'now' ),
103         &header("Invoice Search Results", menubar(
104           'Main Menu', popurl(2)
105         )), "$total matching invoices found<BR>", &table(), <<END;
106       <TR>
107         <TH></TH>
108         <TH>Balance</TH>
109         <TH>Amount</TH>
110         <TH>Date</TH>
111         <TH>Contact name</TH>
112         <TH>Company</TH>
113       </TR>
114 END
115
116   my(%saw, $cust_bill);
117   foreach $cust_bill (
118     sort $sortby grep(!$saw{$_->invnum}++, @cust_bill)
119   ) {
120     my($invnum, $owed, $charged, $date ) = (
121       $cust_bill->invnum,
122       $cust_bill->owed,
123       $cust_bill->charged,
124       $cust_bill->_date,
125     );
126     my $pdate = time2str("%b %d %Y", $date);
127
128     my $rowspan = 1;
129
130     my $view = popurl(2). "view/cust_bill.cgi?$invnum";
131     print <<END;
132       <TR>
133         <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$invnum</FONT></A></TD>
134         <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>\$$owed</FONT></A></TD>
135         <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>\$$charged</FONT></A></TD>
136         <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$pdate</FONT></A></TD>
137 END
138     my $custnum = $cust_bill->custnum;
139     my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } );
140     if ( $cust_main ) {
141       my $cview = popurl(2). "view/cust_main.cgi?". $cust_main->custnum;
142       my ( $name, $company ) = (
143         $cust_main->last. ', '. $cust_main->first,
144         $cust_main->company,
145       );
146       print <<END;
147         <TD ROWSPAN=$rowspan><A HREF="$cview"><FONT SIZE=-1>$name</FONT></A></TD>
148         <TD ROWSPAN=$rowspan><A HREF="$cview"><FONT SIZE=-1>$company</FONT></A></TD>
149 END
150     } else {
151       print <<END
152         <TD ROWSPAN=$rowspan COLSPAN=2>WARNING: couldn't find cust_main.custnum $custnum (cust_bill.invnum $invnum)</TD>
153 END
154     }
155
156     print "</TR>";
157   }
158
159   print <<END;
160     </TABLE>
161   </BODY>
162 </HTML>
163 END
164
165 }
166
167 #
168
169 sub invnum_sort {
170   $a->invnum <=> $b->invnum;
171 }
172
173 sub custnum_sort {
174   $a->custnum <=> $b->custnum || $a->invnum <=> $b->invnum;
175 }
176
177 sub date_sort {
178   $a->_date <=> $b->_date || $a->invnum <=> $b->invnum;
179 }
180 %>