payment reports broken down by Visa/MC / Amex / Discover
authorivan <ivan>
Sun, 26 Oct 2003 00:39:13 +0000 (00:39 +0000)
committerivan <ivan>
Sun, 26 Oct 2003 00:39:13 +0000 (00:39 +0000)
httemplate/search/cust_pay.cgi
httemplate/search/report_cust_pay.html

index e4dba01..9eab5f8 100755 (executable)
@@ -5,27 +5,53 @@ my @cust_pay;
 if ( $cgi->param('magic') && $cgi->param('magic') eq '_date' ) {
 
   my %search;
 if ( $cgi->param('magic') && $cgi->param('magic') eq '_date' ) {
 
   my %search;
+  my @search;
+
   if ( $cgi->param('payby') ) {
   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;
       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
   }
 
   #false laziness with cust_pkg.cgi
-  my $range = '';
   if ( $cgi->param('beginning')
        && $cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/ ) {
     my $beginning = str2time($1);
   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;
   }
   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;
 
 
   $sortby = \*date_sort;
 
index 9d9fffb..b8581ba 100644 (file)
         <TD ALIGN="right">Payments of type: </TD>
         <TD><SELECT NAME="payby">
               <OPTION VALUE="">all</OPTION>
         <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>
             </SELECT>
         </TD>
       </TR>