get rid of header foo in individual templates
[freeside.git] / httemplate / search / cust_bill.cgi
1 <%
2 #<!-- $Id: cust_bill.cgi,v 1.5 2001-10-30 14:54:07 ivan Exp $ -->
3
4 use strict;
5 use vars qw ( $cgi $invnum $query $sortby @cust_bill );
6 use CGI;
7 use CGI::Carp qw(fatalsToBrowser);
8 use Date::Format;
9 use FS::UID qw(cgisuidsetup);
10 use FS::CGI qw(popurl header menubar eidiot table );
11 use FS::Record qw(qsearch qsearchs);
12 use FS::cust_bill;
13 use FS::cust_main;
14
15 $cgi = new CGI;
16 cgisuidsetup($cgi);
17
18 if ( $cgi->keywords ) {
19   my($query) = $cgi->keywords;
20   if ( $query eq 'invnum' ) {
21     $sortby = \*invnum_sort;
22     @cust_bill = qsearch('cust_bill', {} );
23   } elsif ( $query eq 'date' ) {
24     $sortby = \*date_sort;
25     @cust_bill = qsearch('cust_bill', {} );
26   } elsif ( $query eq 'custnum' ) {
27     $sortby = \*custnum_sort;
28     @cust_bill = qsearch('cust_bill', {} );
29   } elsif ( $query eq 'OPEN_invnum' ) {
30     $sortby = \*invnum_sort;
31     @cust_bill = grep $_->owed != 0, qsearch('cust_bill', {} );
32   } elsif ( $query eq 'OPEN_date' ) {
33     $sortby = \*date_sort;
34     @cust_bill = grep $_->owed != 0, qsearch('cust_bill', {} );
35   } elsif ( $query eq 'OPEN_custnum' ) {
36     $sortby = \*custnum_sort;
37     @cust_bill = grep $_->owed != 0, qsearch('cust_bill', {} );
38   } elsif ( $query =~ /^OPEN(\d+)_invnum$/ ) {
39     my $open = $1 * 86400;
40     $sortby = \*invnum_sort;
41     @cust_bill =
42       grep $_->owed != 0 && $_->_date < time - $open, qsearch('cust_bill', {} );
43   } elsif ( $query =~ /^OPEN(\d+)_date$/ ) {
44     my $open = $1 * 86400;
45     $sortby = \*date_sort;
46     @cust_bill =
47       grep $_->owed != 0 && $_->_date < time - $open, qsearch('cust_bill', {} );
48   } elsif ( $query =~ /^OPEN(\d+)_custnum$/ ) {
49     my $open = $1 * 86400;
50     $sortby = \*custnum_sort;
51     @cust_bill =
52       grep $_->owed != 0 && $_->_date < time - $open, qsearch('cust_bill', {} );
53   } else {
54     die "unknown query string $query";
55   }
56 } else {
57   $cgi->param('invnum') =~ /^\s*(FS-)?(\d+)\s*$/;
58   $invnum = $2;
59   @cust_bill = qsearchs('cust_bill', { 'invnum' => $invnum } );
60   $sortby = \*invnum_sort;
61 }
62
63 if ( scalar(@cust_bill) == 1 ) {
64   my $invnum = $cust_bill[0]->invnum;
65   print $cgi->redirect(popurl(2). "view/cust_bill.cgi?$invnum");  #redirect
66 } elsif ( scalar(@cust_bill) == 0 ) {
67   eidiot("Invoice not found.");
68 } else {
69   my $total = scalar(@cust_bill);
70   print header("Invoice Search Results", menubar(
71           'Main Menu', popurl(2)
72         )), "$total matching invoices found<BR>", &table(), <<END;
73       <TR>
74         <TH></TH>
75         <TH>Balance</TH>
76         <TH>Amount</TH>
77         <TH>Date</TH>
78         <TH>Contact name</TH>
79         <TH>Company</TH>
80       </TR>
81 END
82
83   my(%saw, $cust_bill);
84   my($tot_balance, $tot_amount) = (0, 0);
85   foreach $cust_bill (
86     sort $sortby grep(!$saw{$_->invnum}++, @cust_bill)
87   ) {
88     my($invnum, $owed, $charged, $date ) = (
89       $cust_bill->invnum,
90       sprintf("%.2f", $cust_bill->owed),
91       sprintf("%.2f", $cust_bill->charged),
92       $cust_bill->_date,
93     );
94     my $pdate = time2str("%b %d %Y", $date);
95
96     $tot_balance += $owed;
97     $tot_amount += $charged;
98
99     my $rowspan = 1;
100
101     my $view = popurl(2). "view/cust_bill.cgi?$invnum";
102     print <<END;
103       <TR>
104         <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$invnum</FONT></A></TD>
105         <TD ROWSPAN=$rowspan ALIGN="right"><A HREF="$view"><FONT SIZE=-1>\$$owed</FONT></A></TD>
106         <TD ROWSPAN=$rowspan ALIGN="right"><A HREF="$view"><FONT SIZE=-1>\$$charged</FONT></A></TD>
107         <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$pdate</FONT></A></TD>
108 END
109     my $custnum = $cust_bill->custnum;
110     my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } );
111     if ( $cust_main ) {
112       my $cview = popurl(2). "view/cust_main.cgi?". $cust_main->custnum;
113       my ( $name, $company ) = (
114         $cust_main->last. ', '. $cust_main->first,
115         $cust_main->company,
116       );
117       print <<END;
118         <TD ROWSPAN=$rowspan><A HREF="$cview"><FONT SIZE=-1>$name</FONT></A></TD>
119         <TD ROWSPAN=$rowspan><A HREF="$cview"><FONT SIZE=-1>$company</FONT></A></TD>
120 END
121     } else {
122       print <<END
123         <TD ROWSPAN=$rowspan COLSPAN=2>WARNING: couldn't find cust_main.custnum $custnum (cust_bill.invnum $invnum)</TD>
124 END
125     }
126
127     print "</TR>";
128   }
129   $tot_balance = sprintf("%.2f", $tot_balance);
130   $tot_amount = sprintf("%.2f", $tot_amount);
131   print <<END;
132       <TR><TD></TD><TH><FONT SIZE=-1>Total</FONT></TH><TH><FONT SIZE=-1>Total</FONT></TH></TR>
133       <TR><TD></TD><TD ALIGN="right"><FONT SIZE=-1>\$$tot_balance</FONT></TD><TD ALIGN="right"><FONT SIZE=-1>\$$tot_amount</FONT></TD></TD></TR>
134     </TABLE>
135   </BODY>
136 </HTML>
137 END
138
139 }
140
141 #
142
143 sub invnum_sort {
144   $a->invnum <=> $b->invnum;
145 }
146
147 sub custnum_sort {
148   $a->custnum <=> $b->custnum || $a->invnum <=> $b->invnum;
149 }
150
151 sub date_sort {
152   $a->_date <=> $b->_date || $a->invnum <=> $b->invnum;
153 }
154 %>