*finally* seems to be working under Mason. sheesh.
[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 %>
54 <!-- mason kludge -->
55 <%
56   eidiot("Invoice not found.");
57 } else {
58 %>
59 <!-- mason kludge -->
60 <%
61   my $total = scalar(@cust_bill);
62   print header("Invoice Search Results", menubar(
63           'Main Menu', popurl(2)
64         )), "$total matching invoices found<BR>", &table(), <<END;
65       <TR>
66         <TH></TH>
67         <TH>Balance</TH>
68         <TH>Amount</TH>
69         <TH>Date</TH>
70         <TH>Contact name</TH>
71         <TH>Company</TH>
72       </TR>
73 END
74
75   my(%saw, $cust_bill);
76   my($tot_balance, $tot_amount) = (0, 0);
77   foreach $cust_bill (
78     sort $sortby grep(!$saw{$_->invnum}++, @cust_bill)
79   ) {
80     my($invnum, $owed, $charged, $date ) = (
81       $cust_bill->invnum,
82       sprintf("%.2f", $cust_bill->owed),
83       sprintf("%.2f", $cust_bill->charged),
84       $cust_bill->_date,
85     );
86     my $pdate = time2str("%b %d %Y", $date);
87
88     $tot_balance += $owed;
89     $tot_amount += $charged;
90
91     my $rowspan = 1;
92
93     my $view = popurl(2). "view/cust_bill.cgi?$invnum";
94     print <<END;
95       <TR>
96         <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$invnum</FONT></A></TD>
97         <TD ROWSPAN=$rowspan ALIGN="right"><A HREF="$view"><FONT SIZE=-1>\$$owed</FONT></A></TD>
98         <TD ROWSPAN=$rowspan ALIGN="right"><A HREF="$view"><FONT SIZE=-1>\$$charged</FONT></A></TD>
99         <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$pdate</FONT></A></TD>
100 END
101     my $custnum = $cust_bill->custnum;
102     my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } );
103     if ( $cust_main ) {
104       my $cview = popurl(2). "view/cust_main.cgi?". $cust_main->custnum;
105       my ( $name, $company ) = (
106         $cust_main->last. ', '. $cust_main->first,
107         $cust_main->company,
108       );
109       print <<END;
110         <TD ROWSPAN=$rowspan><A HREF="$cview"><FONT SIZE=-1>$name</FONT></A></TD>
111         <TD ROWSPAN=$rowspan><A HREF="$cview"><FONT SIZE=-1>$company</FONT></A></TD>
112 END
113     } else {
114       print <<END
115         <TD ROWSPAN=$rowspan COLSPAN=2>WARNING: couldn't find cust_main.custnum $custnum (cust_bill.invnum $invnum)</TD>
116 END
117     }
118
119     print "</TR>";
120   }
121   $tot_balance = sprintf("%.2f", $tot_balance);
122   $tot_amount = sprintf("%.2f", $tot_amount);
123   print <<END;
124       <TR><TD></TD><TH><FONT SIZE=-1>Total</FONT></TH><TH><FONT SIZE=-1>Total</FONT></TH></TR>
125       <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>
126     </TABLE>
127   </BODY>
128 </HTML>
129 END
130
131 }
132
133 #
134
135 sub invnum_sort {
136   $a->invnum <=> $b->invnum;
137 }
138
139 sub custnum_sort {
140   $a->custnum <=> $b->custnum || $a->invnum <=> $b->invnum;
141 }
142
143 sub date_sort {
144   $a->_date <=> $b->_date || $a->invnum <=> $b->invnum;
145 }
146 %>