show totals in payment report
[freeside.git] / httemplate / search / cust_pay.cgi
1 <%
2
3 my $sortby;
4 my @cust_pay;
5 if ( $cgi->param('magic') && $cgi->param('magic') eq '_date' ) {
6
7   my %search;
8   if ( $cgi->param('payby') ) {
9     $cgi->param('payby') =~ /^(CARD|CHEK|BILL)$/
10       or die "illegal payby ". $cgi->param('payby');
11     $search{'payby'} = $1;
12   }
13
14   #false laziness with cust_pkg.cgi
15   my $range = '';
16   if ( $cgi->param('beginning')
17        && $cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/ ) {
18     my $beginning = str2time($1);
19     $range = " WHERE _date >= $beginning ";
20   }
21   if ( $cgi->param('ending')
22             && $cgi->param('ending') =~ /^([ 0-9\-\/]{0,10})$/ ) {
23     my $ending = str2time($1) + 86400;
24     $range .= ( $range ? ' AND ' : ' WHERE ' ). " _date <= $ending ";
25   }
26   $range =~ s/^\s*WHERE/ AND/ if scalar(keys %search) ;
27
28   @cust_pay = qsearch('cust_pay', \%search, '', $range );
29
30   $sortby = \*date_sort;
31
32 } else {
33
34   $cgi->param('payinfo') =~ /^\s*(\d+)\s*$/ or die "illegal payinfo";
35   my $payinfo = $1;
36
37   $cgi->param('payby') =~ /^(\w+)$/ or die "illegal payby";
38   my $payby = $1;
39
40   @cust_pay = qsearch('cust_pay', { 'payinfo' => $payinfo,
41                                      'payby'   => $payby    } );
42   $sortby = \*date_sort;
43
44 }
45
46 if (0) {
47 #if ( scalar(@cust_pay) == 1 ) {
48 #  my $invnum = $cust_bill[0]->invnum;
49 #  print $cgi->redirect(popurl(2). "view/cust_bill.cgi?$invnum");  #redirect
50 } elsif ( scalar(@cust_pay) == 0 ) {
51 %>
52 <!-- mason kludge -->
53 <%
54   idiot("Payment not found.");
55   #exit;
56 } else {
57   my $total = scalar(@cust_pay);
58   my $s = $total > 1 ? 's' : '';
59 %>
60 <!-- mason kludge -->
61 <%
62   print header("Payment Search Results", menubar(
63           'Main Menu', popurl(2)
64         )), "$total matching payment$s found<BR>", &table(), <<END;
65       <TR>
66         <TH></TH>
67         <TH>Amount</TH>
68         <TH>Date</TH>
69         <TH>Contact name</TH>
70         <TH>Company</TH>
71       </TR>
72 END
73
74   my(%saw, $cust_pay);
75   my $tot_amount = 0;
76   foreach my $cust_pay (
77     sort $sortby grep(!$saw{$_->paynum}++, @cust_pay)
78   ) {
79     my($paynum, $custnum, $payby, $payinfo, $amount, $date ) = (
80       $cust_pay->paynum,
81       $cust_pay->custnum,
82       $cust_pay->payby,
83       $cust_pay->payinfo,
84       sprintf("%.2f", $cust_pay->paid),
85       $cust_pay->_date,
86     );
87     $tot_amount += $amount;
88     my $pdate = time2str("%b&nbsp;%d&nbsp;%Y", $date);
89
90     my $rowspan = 1;
91
92     my $view = popurl(2). "view/cust_main.cgi?". $custnum. 
93                "#". $payby. $payinfo;
94
95     my $payment_info;
96     if ( $payby eq 'CARD' ) {
97       $payment_info = 'Card&nbsp;#'. 'x'x(length($payinfo)-4).
98                       substr($payinfo,(length($payinfo)-4));
99     } elsif ( $payby eq 'CHEK' ) {
100       $payment_info = "E-check&nbsp;acct#$payinfo";
101     } elsif ( $payby eq 'BILL' ) {
102       $payment_info = "Check&nbsp;#$payinfo";
103     } else {
104       $payment_info = "$payby&nbsp;$payinfo";
105     }
106
107     print <<END;
108       <TR>
109         <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$payment_info</FONT></A></TD>
110         <TD ROWSPAN=$rowspan ALIGN="right"><A HREF="$view"><FONT SIZE=-1>\$$amount</FONT></A></TD>
111         <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$pdate</FONT></A></TD>
112 END
113     my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } );
114     if ( $cust_main ) {
115       #my $cview = popurl(2). "view/cust_main.cgi?". $cust_main->custnum;
116       my ( $name, $company ) = (
117         $cust_main->last. ', '. $cust_main->first,
118         $cust_main->company,
119       );
120       print <<END;
121         <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$name</FONT></A></TD>
122         <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$company</FONT></A></TD>
123 END
124     } else {
125       print <<END
126         <TD ROWSPAN=$rowspan COLSPAN=2>WARNING: couldn't find cust_main.custnum $custnum (cust_pay.paynum $paynum)</TD>
127 END
128     }
129
130     print "</TR>";
131   }
132
133   $tot_amount = sprintf("%.2f", $tot_amount);
134   print '</TABLE><BR>'. table(). <<END;
135       <TR><TD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD><TH>Total<BR>Amount</TH></TR>
136       <TR><TD><TD ALIGN="right">\$$tot_amount</TD></TR>
137     </TABLE>
138   </BODY>
139 </HTML>
140 END
141
142 }
143
144 #
145
146 #sub invnum_sort {
147 #  $a->invnum <=> $b->invnum;
148 #}
149 #
150 #sub custnum_sort {
151 #  $a->custnum <=> $b->custnum || $a->invnum <=> $b->invnum;
152 #}
153
154 sub date_sort {
155   $a->_date <=> $b->_date || $a->invnum <=> $b->invnum;
156 }
157 %>