RT#38363: use cust_payby when saving cards during payments [editing from cust_main]
[freeside.git] / FS / FS / cust_payby.pm
index b1a7ddb..83b951e 100644 (file)
@@ -2,6 +2,8 @@ package FS::cust_payby;
 use base qw( FS::payinfo_Mixin FS::cust_main_Mixin FS::Record );
 
 use strict;
+use Scalar::Util qw( blessed );
+use Digest::SHA qw( sha512_base64 );
 use Business::CreditCard qw( validate cardtype );
 use FS::UID qw( dbh );
 use FS::Msgcat qw( gettext );
@@ -201,8 +203,7 @@ sub replace {
           )
      )
   {
-warn $self->payinfo;
-warn $old->payinfo;
+
     $self->payinfo($old->payinfo);
 
   } elsif ( $self->payby =~ /^(CHEK|DCHK)$/ && $self->payinfo =~ /xx/ ) {
@@ -499,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.
@@ -568,15 +577,20 @@ sub cgi_cust_payby_fields {
        payinfo1 payinfo2 payinfo3 paytype paystate payname_CHEK )];
 }
 
-=item cgi_hash_callback HASHREF
+=item cgi_hash_callback HASHREF OLD
 
 Subroutine (not a class or object method).  Processes a hash reference
 of web interface contet (transfers the data from pseudo-fields to real fields).
 
+If OLD object is passed, also preserves locationnum, paystart_month, paystart_year,
+payissue and payip.  If the new field is blank but the old is not, the old field 
+will be preserved.
+
 =cut
 
 sub cgi_hash_callback {
   my $hashref = shift;
+  my $old = shift;
 
   my %noauto = (
     'CARD' => 'DCRD',
@@ -610,6 +624,14 @@ sub cgi_hash_callback {
 
   $hashref->{paydate}= $hashref->{paydate_month}. '-'. $hashref->{paydate_year};
 
+  if ($old) {
+    foreach my $field ( qw(locationnum paystart_month paystart_year payissue payip) ) {
+      next if $hashref->{$field};
+      next unless $old->get($field);
+      $hashref->{$field} = $old->get($field);
+    }
+  }
+
 }
 
 =item search_sql