diff options
| author | Mitch Jackson <mitch@freeside.biz> | 2018-06-11 15:06:50 -0500 |
|---|---|---|
| committer | Mitch Jackson <mitch@freeside.biz> | 2018-12-09 16:46:20 -0500 |
| commit | fbe36a956f6e39078c926b8dbbf5d1afca5ea2ea (patch) | |
| tree | 3a0f50203c22565b66acc67d2d6a31a510a8a5ab | |
| parent | 72cbcafac03e83c15adebac5974cf5322cfcb488 (diff) | |
RT# 80514 Selfservice can update ssn/stateid payment info
| -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 05bc6d769..5c850301b 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -1735,12 +1735,18 @@ sub update_payby { $p->{paydate} = $p->{year} . '-' . $p->{month} . '-01' unless $p->{paydate}; } + # 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 ) ) { @@ -1749,9 +1755,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 }; } |
