2 #<!-- $Id: cust_bill.cgi,v 1.3 2001-09-01 12:35:39 ivan Exp $ -->
5 use vars qw ( $cgi $invnum $query $sortby @cust_bill );
7 use CGI::Carp qw(fatalsToBrowser);
9 use FS::UID qw(cgisuidsetup);
10 use FS::CGI qw(popurl header menubar eidiot table );
11 use FS::Record qw(qsearch qsearchs);
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;
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;
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;
52 grep $_->owed != 0 && $_->_date < time - $open, qsearch('cust_bill', {} );
54 die "unknown query string $query";
57 $cgi->param('invnum') =~ /^\s*(FS-)?(\d+)\s*$/;
59 @cust_bill = qsearchs('cust_bill', { 'invnum' => $invnum } );
60 $sortby = \*invnum_sort;
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.");
69 my $total = scalar(@cust_bill);
70 print $cgi->header( '-expires' => 'now' ),
71 &header("Invoice Search Results", menubar(
72 'Main Menu', popurl(2)
73 )), "$total matching invoices found<BR>", &table(), <<END;
85 my($tot_balance, $tot_amount) = (0, 0);
87 sort $sortby grep(!$saw{$_->invnum}++, @cust_bill)
89 my($invnum, $owed, $charged, $date ) = (
91 sprintf("%.2f", $cust_bill->owed),
92 sprintf("%.2f", $cust_bill->charged),
95 my $pdate = time2str("%b %d %Y", $date);
97 $tot_balance += $owed;
98 $tot_amount += $charged;
102 my $view = popurl(2). "view/cust_bill.cgi?$invnum";
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>
110 my $custnum = $cust_bill->custnum;
111 my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } );
113 my $cview = popurl(2). "view/cust_main.cgi?". $cust_main->custnum;
114 my ( $name, $company ) = (
115 $cust_main->last. ', '. $cust_main->first,
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>
124 <TD ROWSPAN=$rowspan COLSPAN=2>WARNING: couldn't find cust_main.custnum $custnum (cust_bill.invnum $invnum)</TD>
130 $tot_balance = sprintf("%.2f", $tot_balance);
131 $tot_amount = sprintf("%.2f", $tot_amount);
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>
145 $a->invnum <=> $b->invnum;
149 $a->custnum <=> $b->custnum || $a->invnum <=> $b->invnum;
153 $a->_date <=> $b->_date || $a->invnum <=> $b->invnum;