diff options
author | Jonathan Prykop <jonathan@freeside.biz> | 2015-02-02 18:50:47 -0600 |
---|---|---|
committer | Jonathan Prykop <jonathan@freeside.biz> | 2015-02-02 18:50:47 -0600 |
commit | e9f799b79fca47ee24d2107a0e5c5114dc4e06d8 (patch) | |
tree | bb9a5d949c7d72939bc51f74373839980ba5f4fa /FS/FS/contact.pm | |
parent | 3d796bf211374d941bda1116ee27a0543045ea8a (diff) |
RT#30248: Unable to remove phone number from contact
Diffstat (limited to 'FS/FS/contact.pm')
-rw-r--r-- | FS/FS/contact.pm | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/FS/FS/contact.pm b/FS/FS/contact.pm index 3205df106..437fd1694 100644 --- a/FS/FS/contact.pm +++ b/FS/FS/contact.pm @@ -268,7 +268,7 @@ sub replace { return $error; } - foreach my $pf ( grep { /^phonetypenum(\d+)$/ && $self->get($_) } + foreach my $pf ( grep { /^phonetypenum(\d+)$/ } keys %{ $self->hashref } ) { $pf =~ /^phonetypenum(\d+)$/ or die "wtf (daily, the)"; my $phonetypenum = $1; @@ -276,8 +276,21 @@ sub replace { my %cp = ( 'contactnum' => $self->contactnum, 'phonetypenum' => $phonetypenum, ); - my $contact_phone = qsearchs('contact_phone', \%cp) - || new FS::contact_phone \%cp; + my $contact_phone = qsearchs('contact_phone', \%cp); + + # if new value is empty, delete old entry + if (!$self->get($pf)) { + if ($contact_phone) { + $error = $contact_phone->delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + next; + } + + $contact_phone ||= new FS::contact_phone \%cp; my %cpd = _parse_phonestring( $self->get($pf) ); $contact_phone->set( $_ => $cpd{$_} ) foreach keys %cpd; |