5 if ( $cgi->param('magic') && $cgi->param('magic') eq '_date' ) {
10 if ( $cgi->param('payby') ) {
11 $cgi->param('payby') =~ /^(CARD|CHEK|BILL)(-(VisaMC|Amex|Discover))?$/
12 or die "illegal payby ". $cgi->param('payby');
13 $search{'payby'} = $1;
15 if ( $3 eq 'VisaMC' ) {
16 #avoid posix regexes for portability
17 push @search, " ( substring(payinfo from 1 for 1) = '4' ".
18 " OR substring(payinfo from 1 for 2) = '51' ".
19 " OR substring(payinfo from 1 for 2) = '52' ".
20 " OR substring(payinfo from 1 for 2) = '53' ".
21 " OR substring(payinfo from 1 for 2) = '54' ".
22 " OR substring(payinfo from 1 for 2) = '54' ".
23 " OR substring(payinfo from 1 for 2) = '55' ".
25 } elsif ( $3 eq 'Amex' ) {
26 push @search, " ( substring(payinfo from 1 for 2 ) = '34' ".
27 " OR substring(payinfo from 1 for 2 ) = '37' ".
29 } elsif ( $3 eq 'Discover' ) {
30 push @search, " substring(payinfo from 1 for 4 ) = '6011' ";
32 die "unknown card type $3";
37 #false laziness with cust_pkg.cgi
38 if ( $cgi->param('beginning')
39 && $cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/ ) {
40 my $beginning = str2time($1);
41 push @search, "_date >= $beginning ";
43 if ( $cgi->param('ending')
44 && $cgi->param('ending') =~ /^([ 0-9\-\/]{0,10})$/ ) {
45 my $ending = str2time($1) + 86399;
46 push @search, " _date <= $ending ";
50 $search = ( scalar(keys %search) ? ' AND ' : ' WHERE ' ).
51 join(' AND ', @search);
54 @cust_pay = qsearch('cust_pay', \%search, '', $search );
56 $sortby = \*date_sort;
60 $cgi->param('payinfo') =~ /^\s*(\d+)\s*$/ or die "illegal payinfo";
63 $cgi->param('payby') =~ /^(\w+)$/ or die "illegal payby";
66 @cust_pay = qsearch('cust_pay', { 'payinfo' => $payinfo,
67 'payby' => $payby } );
68 $sortby = \*date_sort;
73 #if ( scalar(@cust_pay) == 1 ) {
74 # my $invnum = $cust_bill[0]->invnum;
75 # print $cgi->redirect(popurl(2). "view/cust_bill.cgi?$invnum"); #redirect
76 } elsif ( scalar(@cust_pay) == 0 ) {
80 idiot("Payment not found.");
83 my $total = scalar(@cust_pay);
84 my $s = $total > 1 ? 's' : '';
88 print header("Payment Search Results", menubar(
89 'Main Menu', popurl(2)
90 )), "$total matching payment$s found<BR>", &table(), <<END;
102 foreach my $cust_pay (
103 sort $sortby grep(!$saw{$_->paynum}++, @cust_pay)
105 my($paynum, $custnum, $payby, $payinfo, $amount, $date ) = (
110 sprintf("%.2f", $cust_pay->paid),
113 $tot_amount += $amount;
114 my $pdate = time2str("%b %d %Y", $date);
118 my $view = popurl(2). "view/cust_main.cgi?". $custnum.
119 "#". $payby. $payinfo;
122 if ( $payby eq 'CARD' ) {
123 $payment_info = 'Card #'. 'x'x(length($payinfo)-4).
124 substr($payinfo,(length($payinfo)-4));
125 } elsif ( $payby eq 'CHEK' ) {
126 $payment_info = "E-check acct#$payinfo";
127 } elsif ( $payby eq 'BILL' ) {
128 $payment_info = "Check #$payinfo";
130 $payment_info = "$payby $payinfo";
135 <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$payment_info</FONT></A></TD>
136 <TD ROWSPAN=$rowspan ALIGN="right"><A HREF="$view"><FONT SIZE=-1>\$$amount</FONT></A></TD>
137 <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$pdate</FONT></A></TD>
139 my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } );
141 #my $cview = popurl(2). "view/cust_main.cgi?". $cust_main->custnum;
142 my ( $name, $company ) = (
143 $cust_main->last. ', '. $cust_main->first,
147 <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$name</FONT></A></TD>
148 <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$company</FONT></A></TD>
152 <TD ROWSPAN=$rowspan COLSPAN=2>WARNING: couldn't find cust_main.custnum $custnum (cust_pay.paynum $paynum)</TD>
159 $tot_amount = sprintf("%.2f", $tot_amount);
160 print '</TABLE><BR>'. table(). <<END;
162 <TH>Total Amount</TH>
163 <TD ALIGN="right">\$$tot_amount</TD>
175 # $a->invnum <=> $b->invnum;
179 # $a->custnum <=> $b->custnum || $a->invnum <=> $b->invnum;
183 $a->_date <=> $b->_date || $a->invnum <=> $b->invnum;