- my $open_sql =
- "having 0 != charged - coalesce(sum(cust_bill_pay.amount),0)
- - coalesce(sum(cust_credit_bill.amount),0)";
- my $having = '';
- my $where = '';
- if ( $query eq 'invnum' ) {
- $sortby = \*invnum_sort;
- #@cust_bill = qsearch('cust_bill', {} );
- } elsif ( $query eq 'date' ) {
- $sortby = \*date_sort;
- #@cust_bill = qsearch('cust_bill', {} );
- } elsif ( $query eq 'custnum' ) {
- $sortby = \*custnum_sort;
- #@cust_bill = qsearch('cust_bill', {} );
- } elsif ( $query eq 'OPEN_invnum' ) {
- $sortby = \*invnum_sort;
- #@cust_bill = grep $_->owed != 0, qsearch('cust_bill', {} );
- $having = $open_sql;
- } elsif ( $query eq 'OPEN_date' ) {
- $sortby = \*date_sort;
- #@cust_bill = grep $_->owed != 0, qsearch('cust_bill', {} );
- $having = $open_sql;
- } elsif ( $query eq 'OPEN_custnum' ) {
- $sortby = \*custnum_sort;
- #@cust_bill = grep $_->owed != 0, qsearch('cust_bill', {} );
- $having = $open_sql;
- } elsif ( $query =~ /^OPEN(\d+)_invnum$/ ) {
- my $open = $1 * 86400;
- $sortby = \*invnum_sort;
- #@cust_bill =
- # grep $_->owed != 0 && $_->_date < time - $open, qsearch('cust_bill', {} );
- $having = $open_sql;
- $where = "where cust_bill._date < ". (time-$open);
- } elsif ( $query =~ /^OPEN(\d+)_date$/ ) {
- my $open = $1 * 86400;
- $sortby = \*date_sort;
- #@cust_bill =
- # grep $_->owed != 0 && $_->_date < time - $open, qsearch('cust_bill', {} );
- $having = $open_sql;
- $where = "where cust_bill._date < ". (time-$open);
- } elsif ( $query =~ /^OPEN(\d+)_custnum$/ ) {
- my $open = $1 * 86400;
- $sortby = \*custnum_sort;
- #@cust_bill =
- # grep $_->owed != 0 && $_->_date < time - $open, qsearch('cust_bill', {} );
- $having = $open_sql;
- $where = "where cust_bill._date < ". (time-$open);
+ my $owed = "charged - ( select coalesce(sum(amount),0) from cust_bill_pay
+ where cust_bill_pay.invnum = cust_bill.invnum )
+ - ( select coalesce(sum(amount),0) from cust_credit_bill
+ where cust_credit_bill.invnum = cust_bill.invnum )";
+ my @where;
+ if ( $query =~ /^(OPEN(\d*)_)?(invnum|date|custnum)$/ ) {
+ my($open, $days, $field) = ($1, $2, $3);
+ $field = "_date" if $field eq 'date';
+ $orderby = "ORDER BY cust_bill.$field";
+ push @where, "0 != $owed" if $open;
+ push @where, "cust_bill._date < ". (time-86400*$days) if $days;