RT#42394: paycvv during cust_payby replace (v4+ only)
authorJonathan Prykop <jonathan@freeside.biz>
Fri, 13 May 2016 05:19:21 +0000 (00:19 -0500)
committerJonathan Prykop <jonathan@freeside.biz>
Fri, 13 May 2016 05:19:21 +0000 (00:19 -0500)
FS/FS/cust_payby.pm

index 5bfb4af..fd75567 100644 (file)
@@ -196,10 +196,6 @@ sub replace {
               ? shift
               : $self->replace_old;
 
-  if ( length($old->paycvv) && $self->paycvv =~ /^\s*[\*x]*\s*$/ ) {
-    $self->paycvv($old->paycvv);
-  }
-
   if ( $self->payby =~ /^(CARD|DCRD)$/
        && (    $self->payinfo =~ /xx/
             || $self->payinfo =~ /^\s*N\/A\s+\(tokenized\)\s*$/
@@ -221,6 +217,17 @@ sub replace {
     $self->payinfo($new_account.'@'.$new_aba);
   }
 
+  # don't preserve paycvv if it was passed blank and payinfo changed
+  unless ( $self->payby =~ /^(CARD|DCRD)$/
+       && $old->payinfo ne $self->payinfo
+       && $old->paymask ne $self->paymask
+       && $self->paycvv =~ /^\s*$/ )
+  {
+    if ( length($old->paycvv) && $self->paycvv =~ /^\s*[\*x]*\s*$/ ) {
+      $self->paycvv($old->paycvv);
+    }
+  }
+
   local($ignore_expired_card) = 1
     if $old->payby  =~ /^(CARD|DCRD)$/
     && $self->payby =~ /^(CARD|DCRD)$/