Merge branch 'master' of git.freeside.biz:/home/git/freeside
[freeside.git] / FS / FS / cust_payby.pm
index e25d73e..704741f 100644 (file)
@@ -159,8 +159,9 @@ sub insert {
   local $FS::UID::AutoCommit = 0;
   my $dbh = dbh;
 
-  my $error =  $self->check_payinfo_cardtype
-            || $self->SUPER::insert;
+  my $error =  $self->check_payinfo_cardtype if $self->payby =~/^(CARD|DCRD)$/;
+  $self->SUPER::insert unless $error;
+
   if ( $error ) {
     $dbh->rollback if $oldAutoCommit;
     return $error;
@@ -349,7 +350,7 @@ sub check {
 
     my $payinfo = $self->payinfo;
     $payinfo =~ s/\D//g;
-    $payinfo =~ /^(\d{13,16}|\d{8,9})$/
+    $payinfo =~ /^(\d{13,19}|\d{8,9})$/
       or return gettext('invalid_card'); #. ": ". $self->payinfo;
     $payinfo = $1;
     $self->payinfo($payinfo);
@@ -357,14 +358,15 @@ sub check {
       or return gettext('invalid_card'); # . ": ". $self->payinfo;
 
     # see parallel checks in check_payinfo_cardtype & payinfo_Mixin::payinfo_check
-    my $cardtype = '';
+    my $cardtype = $self->paycardtype;
     if ( $self->tokenized ) {
+      $self->set('is_tokenized', 'Y'); #so we don't try to do it again
       if ( $self->paymask =~ /^\d+x/ ) {
         $cardtype = cardtype($self->paymask);
       } else {
-        $cardtype = '';
         #return "paycardtype required ".
-        #       "(can't derive from a token and no paymask w/prefix provided)";
+        #       "(can't derive from a token and no paymask w/prefix provided)"
+        #  unless $cardtype;
       }
     } else {
       $cardtype = cardtype($self->payinfo);
@@ -559,6 +561,7 @@ sub check_payinfo_cardtype {
 
   # see parallel checks in cust_payby::check & payinfo_Mixin::payinfo_check
   if ( $self->tokenized($payinfo) ) {
+    $self->set('is_tokenized', 'Y'); #so we don't try to do it again
     if ( $self->paymask =~ /^\d+x/ ) {
       $self->set('paycardtype', cardtype($self->paymask));
     } else {