diff options
author | Christopher Burger <burgerc@freeside.biz> | 2017-08-28 09:29:08 -0400 |
---|---|---|
committer | Christopher Burger <burgerc@freeside.biz> | 2017-08-29 08:06:42 -0400 |
commit | dd0ddb96af06f569965f252b9e07587f17c40b0d (patch) | |
tree | e5d2a122ebacc7803b45581260d4ab0352d825ec | |
parent | 052e86e84f36bc9a0c0f06ba77bafa2aca10afdb (diff) |
RT# 76952 - fixed error that would save a duplicate ACH or credit card account
-rw-r--r-- | FS/FS/ClientAPI/MyAccount.pm | 9 | ||||
-rw-r--r-- | FS/FS/cust_main.pm | 2 | ||||
-rw-r--r-- | ng_selfservice/payment_cc.php | 4 |
3 files changed, 12 insertions, 3 deletions
diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index 5c86b78..a10a452 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -980,6 +980,7 @@ sub validate_payment { #false laziness w/process/payment.cgi my $payinfo; my $paycvv = ''; + my $replace_cust_payby; if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) { $p->{'payinfo1'} =~ /^([\dx]+)$/ @@ -994,6 +995,7 @@ sub validate_payment { foreach my $cust_payby ($cust_main->cust_payby('CHEK','DCHK')) { if ( $cust_payby->paymask eq $payinfo ) { $payinfo = $cust_payby->payinfo; + $replace_cust_payby = $cust_payby; $achonfile = 1; last; } @@ -1014,6 +1016,7 @@ sub validate_payment { foreach my $cust_payby ($cust_main->cust_payby('CARD','DCRD')) { if ( $cust_payby->paymask eq $payinfo ) { $payinfo = $cust_payby->payinfo; + $replace_cust_payby = $cust_payby; $onfile = 1; last; } @@ -1055,6 +1058,8 @@ sub validate_payment { 'CHEK' => [ qw( ss paytype paystate stateid stateid_state payip ) ], ); + my %replace = ( 'replace' => $replace_cust_payby, ); + my $card_type = ''; $card_type = cardtype($payinfo) if $payby eq 'CARD'; @@ -1063,7 +1068,7 @@ sub validate_payment { 'amount' => sprintf('%.2f', $amount), 'payby' => $payby, 'payinfo' => $payinfo, - 'paymask' => $cust_main->mask_payinfo( $payby, $payinfo ), + 'paymask' => FS::payinfo_Mixin->mask_payinfo( $payby, $payinfo ), 'card_type' => $card_type, 'paydate' => $p->{'year'}. '-'. $p->{'month'}. '-01', 'paydate_pretty' => $p->{'month'}. ' / '. $p->{'year'}, @@ -1076,6 +1081,7 @@ sub validate_payment { 'payname' => $payname, 'discount_term' => $discount_term, 'pkgnum' => $session->{'pkgnum'}, + %replace, map { $_ => $p->{$_} } ( @{ $payby2fields{$payby} }, qw( save auto ), ) @@ -1158,6 +1164,7 @@ sub do_process_payment { my $error = $cust_main->save_cust_payby( 'payment_payby' => $payby, + 'replace' => $validate->{'replace'}, # cust_payby object to replace %saveopt ); diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index f6c3ff7..2b21cf1 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -4831,6 +4831,8 @@ PAYBYLOOP: next if grep(/^$field$/, qw( custpaybynum payby weight ) ); next if grep(/^$field$/, @preserve ); next PAYBYLOOP unless $new->get($field) eq $cust_payby->get($field); + # check if paymask exists, if so stop and don't save, no need for a duplicate. + return '' if $new->get('paymask') eq $cust_payby->get('paymask'); } # now check fields that can replace if one value is blank my $replace = 0; diff --git a/ng_selfservice/payment_cc.php b/ng_selfservice/payment_cc.php index 5c49dab..37f57c0 100644 --- a/ng_selfservice/payment_cc.php +++ b/ng_selfservice/payment_cc.php @@ -88,8 +88,8 @@ if ( $receipt_html ) { ?> <TD COLSPAN=7> <SELECT NAME="card_type"><OPTION></OPTION> <? foreach ( $card_types AS $ct ) { ?> - <OPTION <? if ( $card_type == $card_types[$ct] ) { echo 'SELECTED'; } ?> - VALUE="<? echo $card_types[$ct]; ?>"><? echo $ct; ?> + <OPTION <? if ( $card_type == $ct ) { echo 'SELECTED'; } ?> + VALUE="<? echo $ct; ?>"><? echo $ct; ?> <? } ?> </SELECT> </TD> |