Merge branch 'master' of git.freeside.biz:/home/git/freeside
[freeside.git] / FS / FS / cust_payby.pm
index a65a171..9feaf14 100644 (file)
@@ -2,6 +2,7 @@ package FS::cust_payby;
 use base qw( FS::payinfo_Mixin FS::cust_main_Mixin FS::Record );
 
 use strict;
+use Digest::SHA qw( sha512_base64 );
 use Business::CreditCard qw( validate cardtype );
 use FS::UID qw( dbh );
 use FS::Msgcat qw( gettext );
@@ -427,12 +428,16 @@ sub check {
 
   }
 
-  if ( $self->paydate eq '' || $self->paydate eq '-' ) {
-    return "Expiration date required"
-      # shouldn't payinfo_check do this?
-      unless $self->payby =~ /^(CHEK|DCHK)$/;
+  if ( $self->payby =~ /^(CHEK|DCHK)$/ ) {
+
     $self->paydate('');
-  } else {
+
+  } elsif ( $self->payby =~ /^(CARD|DCRD)$/ ) {
+
+    # shouldn't payinfo_check do this?
+    return "Expiration date required"
+      if $self->paydate eq '' || $self->paydate eq '-';
+
     my( $m, $y );
     if ( $self->paydate =~ /^(\d{1,2})[\/\-](\d{2}(\d{2})?)$/ ) {
       ( $m, $y ) = ( $1, length($2) == 4 ? $2 : "20$2" );
@@ -451,6 +456,7 @@ sub check {
       #&&
          !$ignore_expired_card 
       && ( $y<$nowy || ( $y==$nowy && $1<$nowm ) );
+
   }
 
   if ( $self->payname eq '' && $self->payby !~ /^(CHEK|DCHK)$/ &&
@@ -494,6 +500,14 @@ sub _banned_pay_hashref {
   };
 }
 
+sub _new_banned_pay_hashref {
+  my $self = shift;
+  my $hr = $self->_banned_pay_hashref;
+  $hr->{payinfo_hash} = 'SHA512';
+  $hr->{payinfo} = sha512_base64($hr->{payinfo});
+  $hr;
+}
+
 =item paydate_mon_year
 
 Returns a two element list consisting of the paydate month and year.
@@ -560,7 +574,7 @@ Returns the field names used in the web interface (including some pseudo-fields)
 sub cgi_cust_payby_fields {
   #my $class = shift;
   [qw( payby payinfo paydate_month paydate_year paycvv payname weight
-       payinfo1 payinfo2 payinfo3 paytype paystate )];
+       payinfo1 payinfo2 payinfo3 paytype paystate payname_CHEK )];
 }
 
 =item cgi_hash_callback HASHREF
@@ -582,7 +596,7 @@ sub cgi_hash_callback {
 
   if ( $hashref->{payby} =~ /^(CHEK|DCHK)$/ ) {
 
-    unless ( grep $hashref->{$_}, qw( payinfo1 payinfo2 payinfo3 payname ) ) {
+    unless ( grep $hashref->{$_}, qw(payinfo1 payinfo2 payinfo3 payname_CHEK)) {
       %$hashref = ();
       return;
     }
@@ -592,7 +606,7 @@ sub cgi_hash_callback {
       if $conf->config('echeck-country') eq 'CA';
     $hashref->{payinfo} .= $hashref->{'payinfo2'};
 
-    $hashref->{payname} .= $hashref->{'payname_CHEK'};
+    $hashref->{payname} = $hashref->{'payname_CHEK'};
 
   } elsif ( $hashref->{payby} =~ /^(CARD|DCRD)$/ ) {