%
my $sortby;
my @cust_pay;
if ( $cgi->param('magic') && $cgi->param('magic') eq '_date' ) {
my %search;
my @search;
if ( $cgi->param('payby') ) {
$cgi->param('payby') =~ /^(CARD|CHEK|BILL)(-(VisaMC|Amex|Discover))?$/
or die "illegal payby ". $cgi->param('payby');
$search{'payby'} = $1;
if ( $3 ) {
if ( $3 eq 'VisaMC' ) {
#avoid posix regexes for portability
push @search, " ( substring(payinfo from 1 for 1) = '4' ".
" OR substring(payinfo from 1 for 2) = '51' ".
" OR substring(payinfo from 1 for 2) = '52' ".
" OR substring(payinfo from 1 for 2) = '53' ".
" OR substring(payinfo from 1 for 2) = '54' ".
" OR substring(payinfo from 1 for 2) = '54' ".
" OR substring(payinfo from 1 for 2) = '55' ".
" ) ";
} elsif ( $3 eq 'Amex' ) {
push @search, " ( substring(payinfo from 1 for 2 ) = '34' ".
" OR substring(payinfo from 1 for 2 ) = '37' ".
" ) ";
} elsif ( $3 eq 'Discover' ) {
push @search, " substring(payinfo from 1 for 4 ) = '6011' ";
} else {
die "unknown card type $3";
}
}
}
#false laziness with cust_pkg.cgi
if ( $cgi->param('beginning')
&& $cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/ ) {
my $beginning = str2time($1);
push @search, "_date >= $beginning ";
}
if ( $cgi->param('ending')
&& $cgi->param('ending') =~ /^([ 0-9\-\/]{0,10})$/ ) {
my $ending = str2time($1) + 86400;
push @search, " _date <= $ending ";
}
my $search;
if ( @search ) {
$search = ( scalar(keys %search) ? ' AND ' : ' WHERE ' ).
join(' AND ', @search);
}
@cust_pay = qsearch('cust_pay', \%search, '', $search );
$sortby = \*date_sort;
} else {
$cgi->param('payinfo') =~ /^\s*(\d+)\s*$/ or die "illegal payinfo";
my $payinfo = $1;
$cgi->param('payby') =~ /^(\w+)$/ or die "illegal payby";
my $payby = $1;
@cust_pay = qsearch('cust_pay', { 'payinfo' => $payinfo,
'payby' => $payby } );
$sortby = \*date_sort;
}
if (0) {
#if ( scalar(@cust_pay) == 1 ) {
# my $invnum = $cust_bill[0]->invnum;
# print $cgi->redirect(popurl(2). "view/cust_bill.cgi?$invnum"); #redirect
} elsif ( scalar(@cust_pay) == 0 ) {
%>
<%
idiot("Payment not found.");
#exit;
} else {
my $total = scalar(@cust_pay);
my $s = $total > 1 ? 's' : '';
%>
<%
print header("Payment Search Results", menubar(
'Main Menu', popurl(2)
)), "$total matching payment$s found
", &table(), <
|
Amount |
Date |
Contact name |
Company |
END
my(%saw, $cust_pay);
my $tot_amount = 0;
foreach my $cust_pay (
sort $sortby grep(!$saw{$_->paynum}++, @cust_pay)
) {
my($paynum, $custnum, $payby, $payinfo, $amount, $date ) = (
$cust_pay->paynum,
$cust_pay->custnum,
$cust_pay->payby,
$cust_pay->payinfo,
sprintf("%.2f", $cust_pay->paid),
$cust_pay->_date,
);
$tot_amount += $amount;
my $pdate = time2str("%b %d %Y", $date);
my $rowspan = 1;
my $view = popurl(2). "view/cust_main.cgi?". $custnum.
"#". $payby. $payinfo;
my $payment_info;
if ( $payby eq 'CARD' ) {
$payment_info = 'Card #'. 'x'x(length($payinfo)-4).
substr($payinfo,(length($payinfo)-4));
} elsif ( $payby eq 'CHEK' ) {
$payment_info = "E-check acct#$payinfo";
} elsif ( $payby eq 'BILL' ) {
$payment_info = "Check #$payinfo";
} else {
$payment_info = "$payby $payinfo";
}
print <
$payment_info |
\$$amount |
$pdate |
END
my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } );
if ( $cust_main ) {
#my $cview = popurl(2). "view/cust_main.cgi?". $cust_main->custnum;
my ( $name, $company ) = (
$cust_main->last. ', '. $cust_main->first,
$cust_main->company,
);
print <$name
$company |
END
} else {
print <WARNING: couldn't find cust_main.custnum $custnum (cust_pay.paynum $paynum)
END
}
print "";
}
$tot_amount = sprintf("%.2f", $tot_amount);
print '
'. table(). <
Total Amount |
\$$tot_amount |