[freeside-commits] branch master updated. 461cf66878e2d63d0360184aeeebcbc0e45acfb9

Ivan ivan at 420.am
Tue Jan 26 20:11:12 PST 2016


The branch, master has been updated
       via  461cf66878e2d63d0360184aeeebcbc0e45acfb9 (commit)
      from  4e6767fd6f9c408d5841b72fe8f979894ce5f7f1 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 461cf66878e2d63d0360184aeeebcbc0e45acfb9
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Tue Jan 26 20:11:11 2016 -0800

    respect card-types config in backend (new customer payment types / 4.x), RT#39861

diff --git a/FS/FS/cust_payby.pm b/FS/FS/cust_payby.pm
index 83b951e..79a1468 100644
--- a/FS/FS/cust_payby.pm
+++ b/FS/FS/cust_payby.pm
@@ -7,6 +7,7 @@ use Digest::SHA qw( sha512_base64 );
 use Business::CreditCard qw( validate cardtype );
 use FS::UID qw( dbh );
 use FS::Msgcat qw( gettext );
+use FS::Misc qw( card_types );
 use FS::Record; #qw( qsearch qsearchs );
 use FS::payby;
 use FS::cust_main;
@@ -154,7 +155,8 @@ sub insert {
   local $FS::UID::AutoCommit = 0;
   my $dbh = dbh;
 
-  my $error = $self->SUPER::insert;
+  my $error =  $self->check_payinfo_cardtype
+            || $self->SUPER::insert;
   if ( $error ) {
     $dbh->rollback if $oldAutoCommit;
     return $error;
@@ -228,6 +230,14 @@ sub replace {
          || $old->payby  =~ /^(CHEK|DCHK)$/ && $self->payby =~ /^(CHEK|DCHK)$/ )
     && ( $old->payinfo eq $self->payinfo || $old->paymask eq $self->paymask );
 
+  if (    $self->payby =~ /^(CARD|DCRD)$/
+       && $old->payinfo ne $self->payinfo
+       && $old->paymask ne $self->paymask )
+  {
+    my $error = $self->check_payinfo_cardtype;
+    return $error if $error;
+  }
+
   local $SIG{HUP} = 'IGNORE';
   local $SIG{INT} = 'IGNORE';
   local $SIG{QUIT} = 'IGNORE';
@@ -483,6 +493,23 @@ sub check {
   $self->SUPER::check;
 }
 
+sub check_payinfo_cardtype {
+  my $self = shift;
+
+  my $payinfo = $self->payinfo;
+  $payinfo =~ s/\D//g;
+
+  return '' if $payinfo =~ /^99\d{14}$/; #token
+
+  my %bop_card_types = map { $_=>1 } values %{ card_types() };
+  my $cardtype = cardtype($payinfo);
+
+  return "$cardtype not accepted" unless $bop_card_types{$cardtype};
+
+  '';
+
+}
+
 sub _banned_pay_hashref {
   my $self = shift;
 

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/cust_payby.pm |   29 ++++++++++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)




More information about the freeside-commits mailing list