diff options
| -rwxr-xr-x | httemplate/search/cust_pay.cgi | 38 | ||||
| -rw-r--r-- | httemplate/search/report_cust_pay.html | 9 | 
2 files changed, 38 insertions, 9 deletions
diff --git a/httemplate/search/cust_pay.cgi b/httemplate/search/cust_pay.cgi index e4dba01e9..9eab5f82e 100755 --- a/httemplate/search/cust_pay.cgi +++ b/httemplate/search/cust_pay.cgi @@ -5,27 +5,53 @@ 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)$/ +    $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 -  my $range = '';    if ( $cgi->param('beginning')         && $cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/ ) {      my $beginning = str2time($1); -    $range = " WHERE _date >= $beginning "; +    push @search, "_date >= $beginning ";    }    if ( $cgi->param('ending')              && $cgi->param('ending') =~ /^([ 0-9\-\/]{0,10})$/ ) {      my $ending = str2time($1) + 86400; -    $range .= ( $range ? ' AND ' : ' WHERE ' ). " _date <= $ending "; +    push @search, " _date <= $ending "; +  } +  my $search; +  if ( @search ) { +    $search = ( scalar(keys %search) ? ' AND ' : ' WHERE ' ). +              join(' AND ', @search);    } -  $range =~ s/^\s*WHERE/ AND/ if scalar(keys %search) ; -  @cust_pay = qsearch('cust_pay', \%search, '', $range ); +  @cust_pay = qsearch('cust_pay', \%search, '', $search );    $sortby = \*date_sort; diff --git a/httemplate/search/report_cust_pay.html b/httemplate/search/report_cust_pay.html index 9d9fffb16..b8581ba4b 100644 --- a/httemplate/search/report_cust_pay.html +++ b/httemplate/search/report_cust_pay.html @@ -15,9 +15,12 @@          <TD ALIGN="right">Payments of type: </TD>          <TD><SELECT NAME="payby">                <OPTION VALUE="">all</OPTION> -              <OPTION VALUE="CARD">credit card</OPTION> -              <OPTION VALUE="CHEK">electronic check (ACH)</OPTION> -              <OPTION VALUE="BILL">check/cash</OPTION> +              <OPTION VALUE="CARD">credit card (all)</OPTION> +              <OPTION VALUE="CARD-VisaMC">credit card (Visa/MasterCard)</OPTION> +              <OPTION VALUE="CARD-Amex">credit card (American Express)</OPTION> +              <OPTION VALUE="CARD-Discover">credit card (Discover)</OPTION> +              <OPTION VALUE="CHEK">electronic check / ACH</OPTION> +              <OPTION VALUE="BILL">check / cash</OPTION>              </SELECT>          </TD>        </TR>  | 
