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