X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_main.pm;h=8cccd1830d5e7bcd3124af3b60e3ddd086db3d34;hb=70cc4f4c76ea1e320f2d6d4cccc0f056bf2af537;hp=72bc10fdb8de5e074a18e140946d65e817c32e58;hpb=5a72115c1e8d32028cb4e611ecfbd4b2c05817d6;p=freeside.git diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index 72bc10fdb..8cccd1830 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -1968,7 +1968,19 @@ sub check { validate($payinfo) or return gettext('invalid_card'); # . ": ". $self->payinfo; - my $cardtype = cardtype($payinfo); + my $cardtype = $self->paycardtype; + if ( $payinfo =~ /^99\d{14}$/ ) { + $self->set('is_tokenized', 'Y'); #so we don't try to do it again + if ( $self->paymask =~ /^\d+x/ ) { + $cardtype = cardtype($self->paymask); + } else { + #return "paycardtype required ". + # "(can't derive from a token and no paymask w/prefix provided)" + # unless $cardtype; + } + } else { + $cardtype = cardtype($self->payinfo); + } return gettext('unknown_card_type') if $cardtype eq 'Unknown'; @@ -5761,8 +5773,11 @@ sub queueable_upgrade { FS::upgrade_journal->set_done('clear_payinfo_history'); } - # encrypt old records - if ($conf->exists('encryption') && !FS::upgrade_journal->is_done('encryption_check')) { + # fix Tokenized paycardtype and encrypt old records + if ( ! FS::upgrade_journal->is_done('paycardtype_Tokenized') + || ! FS::upgrade_journal->is_done('encryption_check') + ) + { # allow replacement of closed cust_pay/cust_refund records local $FS::payinfo_Mixin::allow_closed_replace = 1; @@ -5788,6 +5803,7 @@ sub queueable_upgrade { if (!$record->custnum && $table eq 'cust_pay_pending') { $record->set('custnum_pending',1); } + $record->paycardtype('') if $record->paycardtype eq 'Tokenized'; local($ignore_expired_card) = 1; local($ignore_banned_card) = 1; @@ -5799,7 +5815,8 @@ sub queueable_upgrade { } } - FS::upgrade_journal->set_done('encryption_check'); + FS::upgrade_journal->set_done('paycardtype_Tokenized'); + FS::upgrade_journal->set_done('encryption_check') if $conf->exists('encryption'); } } @@ -5812,10 +5829,13 @@ sub _upgrade_next_recnum { my $recnum = shift @$recnums; return $recnum if $recnum; my $tclass = 'FS::'.$table; + my $paycardtypecheck = ($table ne 'cust_pay_pending') ? q( OR paycardtype = 'Tokenized') : ''; my $sql = 'SELECT '.$tclass->primary_key. ' FROM '.$table. ' WHERE '.$tclass->primary_key.' > '.$$lastrecnum. - ' ORDER BY '.$tclass->primary_key.' LIMIT 500';; + " AND payby IN ( 'CARD', 'DCRD', 'CHEK', 'DCHK' ) ". + " AND ( length(payinfo) < 80$paycardtypecheck ) ". + ' ORDER BY '.$tclass->primary_key.' LIMIT 500'; my $sth = $dbh->prepare($sql) or die $dbh->errstr; $sth->execute() or die $sth->errstr; my @recnums;