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