From: Jonathan Prykop Date: Tue, 3 Feb 2015 00:50:47 +0000 (-0600) Subject: RT#30248: Unable to remove phone number from contact X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=9ae64522cb55ec039fa75a7c27416480e392f395;hp=c5e009ec434d5421707d9f5b95c378cf11f71ee7 RT#30248: Unable to remove phone number from contact --- diff --git a/FS/FS/contact.pm b/FS/FS/contact.pm index 5626ca588..7e474f186 100644 --- a/FS/FS/contact.pm +++ b/FS/FS/contact.pm @@ -273,7 +273,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; @@ -281,8 +281,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;