diff options
author | Mitch Jackson <mitch@freeside.biz> | 2018-06-11 15:06:50 -0500 |
---|---|---|
committer | Mitch Jackson <mitch@freeside.biz> | 2018-06-11 15:06:50 -0500 |
commit | 8b8d621a1bb4e9abaa1f0edab5190d302e6a6e99 (patch) | |
tree | 7e0fa8c7d5df1e38bf25b5fbeefb55d4b88457c1 /FS/FS/ClientAPI | |
parent | f04d95852fef6dfaf1813ceacd94f68a528796cd (diff) |
RT# 80514 Selfservice can update ssn/stateid payment info
Diffstat (limited to 'FS/FS/ClientAPI')
-rw-r--r-- | FS/FS/ClientAPI/MyAccount.pm | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index a30dde5..f827874 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -1727,12 +1727,18 @@ sub update_payby { $p->{'payinfo'} = $payinfo1. '@'. $payinfo2; } + # Perform update within a transaction + local $FS::UID::AutoCommit = 0; + my $cust_payby = qsearchs('cust_payby', { 'custnum' => $custnum, 'custpaybynum' => $p->{'custpaybynum'}, }) or return { 'error' => 'unknown custpaybynum '. $p->{'custpaybynum'} }; + my $cust_main = qsearchs( 'cust_main', {custnum => $cust_payby->custnum} ) + or return { 'error' => 'unknown custnum '.$cust_payby->custnum }; + foreach my $field ( qw( weight payby payinfo paycvv paydate payname paystate paytype payip ) ) { @@ -1741,9 +1747,22 @@ sub update_payby { } my $error = $cust_payby->replace; + + if (!$error) { + my $is_changed = 0; + for my $field ( qw/ss stateid/ ) { + next if !exists $p->{$field} || $p->{$field} =~ /^x/i; + $cust_main->set( $field, $p->{$field} ); + $is_changed = 1; + } + $error = $cust_main->replace if $is_changed; + } + if ( $error ) { + dbh->rollback; return { 'error' => $error }; } else { + dbh->commit; return { 'custpaybynum' => $cust_payby->custpaybynum }; } |