02dbf558f89bf5050d2715e7e38bd51f91cb4ab0
[freeside.git] / httemplate / search / cust_bill.cgi
1 <%
2 #<!-- $Id: cust_bill.cgi,v 1.4 2001-10-26 10:24:56 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 $cgi->header( @FS::CGI::header ),
71         &header("Invoice Search Results", menubar(
72           'Main Menu', popurl(2)
73         )), "$total matching invoices found<BR>", &table(), <<END;
74       <TR>
75         <TH></TH>
76         <TH>Balance</TH>
77         <TH>Amount</TH>
78         <TH>Date</TH>
79         <TH>Contact name</TH>
80         <TH>Company</TH>
81       </TR>
82 END
83
84   my(%saw, $cust_bill);
85   my($tot_balance, $tot_amount) = (0, 0);
86   foreach $cust_bill (
87     sort $sortby grep(!$saw{$_->invnum}++, @cust_bill)
88   ) {
89     my($invnum, $owed, $charged, $date ) = (
90       $cust_bill->invnum,
91       sprintf("%.2f", $cust_bill->owed),
92       sprintf("%.2f", $cust_bill->charged),
93       $cust_bill->_date,
94     );
95     my $pdate = time2str("%b %d %Y", $date);
96
97     $tot_balance += $owed;
98     $tot_amount += $charged;
99
100     my $rowspan = 1;
101
102     my $view = popurl(2). "view/cust_bill.cgi?$invnum";
103     print <<END;
104       <TR>
105         <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$invnum</FONT></A></TD>
106         <TD ROWSPAN=$rowspan ALIGN="right"><A HREF="$view"><FONT SIZE=-1>\$$owed</FONT></A></TD>
107         <TD ROWSPAN=$rowspan ALIGN="right"><A HREF="$view"><FONT SIZE=-1>\$$charged</FONT></A></TD>
108         <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$pdate</FONT></A></TD>
109 END
110     my $custnum = $cust_bill->custnum;
111     my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } );
112     if ( $cust_main ) {
113       my $cview = popurl(2). "view/cust_main.cgi?". $cust_main->custnum;
114       my ( $name, $company ) = (
115         $cust_main->last. ', '. $cust_main->first,
116         $cust_main->company,
117       );
118       print <<END;
119         <TD ROWSPAN=$rowspan><A HREF="$cview"><FONT SIZE=-1>$name</FONT></A></TD>
120         <TD ROWSPAN=$rowspan><A HREF="$cview"><FONT SIZE=-1>$company</FONT></A></TD>
121 END
122     } else {
123       print <<END
124         <TD ROWSPAN=$rowspan COLSPAN=2>WARNING: couldn't find cust_main.custnum $custnum (cust_bill.invnum $invnum)</TD>
125 END
126     }
127
128     print "</TR>";
129   }
130   $tot_balance = sprintf("%.2f", $tot_balance);
131   $tot_amount = sprintf("%.2f", $tot_amount);
132   print <<END;
133       <TR><TD></TD><TH><FONT SIZE=-1>Total</FONT></TH><TH><FONT SIZE=-1>Total</FONT></TH></TR>
134       <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>
135     </TABLE>
136   </BODY>
137 </HTML>
138 END
139
140 }
141
142 #
143
144 sub invnum_sort {
145   $a->invnum <=> $b->invnum;
146 }
147
148 sub custnum_sort {
149   $a->custnum <=> $b->custnum || $a->invnum <=> $b->invnum;
150 }
151
152 sub date_sort {
153   $a->_date <=> $b->_date || $a->invnum <=> $b->invnum;
154 }
155 %>