summaryrefslogtreecommitdiff
path: root/FS/FS/contact.pm
diff options
context:
space:
mode:
authorJonathan Prykop <jonathan@freeside.biz>2015-02-02 18:50:47 -0600
committerJonathan Prykop <jonathan@freeside.biz>2015-02-02 18:50:47 -0600
commite9f799b79fca47ee24d2107a0e5c5114dc4e06d8 (patch)
treebb9a5d949c7d72939bc51f74373839980ba5f4fa /FS/FS/contact.pm
parent3d796bf211374d941bda1116ee27a0543045ea8a (diff)
RT#30248: Unable to remove phone number from contact
Diffstat (limited to 'FS/FS/contact.pm')
-rw-r--r--FS/FS/contact.pm19
1 files changed, 16 insertions, 3 deletions
diff --git a/FS/FS/contact.pm b/FS/FS/contact.pm
index 3205df1..437fd16 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;