grey out inactive text boxes as well as disable them (IE doesn't grey out disabled...
[freeside.git] / httemplate / search / cust_pay.cgi
index 7a98370..51dd3b3 100755 (executable)
@@ -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 ";
+    my $ending = str2time($1) + 86399;
+    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;
 
@@ -72,6 +98,7 @@ if (0) {
 END
 
   my(%saw, $cust_pay);
+  my $tot_amount = 0;
   foreach my $cust_pay (
     sort $sortby grep(!$saw{$_->paynum}++, @cust_pay)
   ) {
@@ -83,6 +110,7 @@ END
       sprintf("%.2f", $cust_pay->paid),
       $cust_pay->_date,
     );
+    $tot_amount += $amount;
     my $pdate = time2str("%b&nbsp;%d&nbsp;%Y", $date);
 
     my $rowspan = 1;
@@ -127,7 +155,13 @@ END
 
     print "</TR>";
   }
-  print <<END;
+
+  $tot_amount = sprintf("%.2f", $tot_amount);
+  print '</TABLE><BR>'. table(). <<END;
+      <TR>
+        <TH>Total&nbsp;Amount</TH>
+        <TD ALIGN="right">\$$tot_amount</TD>
+      </TR>
     </TABLE>
   </BODY>
 </HTML>