MT#4261 number handling on subscriber update

Actually use update_subscriber_numbers when updating a subscriber
and not only when creating one. Also handle all neccessary side effects.
Now we can switch our primary number to a number which has been
inactive (that is: did not belong to a subscriber) without an update error.
agranig/peering-route
Gerhard Jungwirth 12 years ago
parent a1e04e33f7
commit 124137ca63

@ -175,7 +175,7 @@ sub create_list :Chained('sub_list') :PathPart('create') :Args(0) :Does(ACL) :AC
NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
schema => $schema,
primary_number => $form->params->{e164},
primary_number => $form->values->{e164},
reseller_id => $reseller->id,
subscriber_id => $billing_subscriber->id,
);
@ -1727,57 +1727,23 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) {
$form->params->{e164}{ac} = $subscriber->primary_number->ac;
$form->params->{e164}{sn} = $base_number->{sn} . $form->params->{extension};
}
if(!$form->params->{e164}{cc} &&
!$form->params->{e164}{ac} &&
!$form->params->{e164}{sn}) {
# TODO: if it's an admin for pbx, don't allow this!
$subscriber->primary_number->delete;
$prov_subscriber->voicemail_user->update({ mailbox => '0' });
} else {
# check if cc and sn are set if cc is there
$num = $subscriber->primary_number->update({
cc => $form->params->{e164}{cc},
ac => $form->params->{e164}{ac} // '',
sn => $form->params->{e164}{sn},
});
my $cli = $num->cc.($num->ac // '').$num->sn;
for my $cfset($prov_subscriber->voip_cf_destination_sets->all) {
for my $cf($cfset->voip_cf_destinations->all) {
if($cf->destination =~ /\@voicebox\.local$/) {
$cf->update({ destination => 'sip:vmu'.$cli.'@voicebox.local' });
} elsif($cf->destination =~ /\@fax2mail\.local$/) {
$cf->update({ destination => 'sip:'.$cli.'@fax2mail.local' });
} elsif($cf->destination =~ /\@conference\.local$/) {
$cf->update({ destination => 'sip:conf='.$cli.'@conference.local' });
}
}
}
$prov_subscriber->voicemail_user->update({ mailbox => $cli });
NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
schema => $schema,
subscriber_id =>$subscriber->id,
reseller_id => $subscriber->contract->contact->reseller_id,
primary_number => $form->params->{e164},
);
# TODO: if it's an admin for pbx, update all other subscribers as well!
# this means cloud_pbx_base_cli pref, primary number, dbaliases, voicemail, cf
}
} else {
if($form->params->{e164}{cc} &&
$form->params->{e164}{sn}) {
$num = $schema->resultset('voip_numbers')->create({
subscriber_id => $subscriber->id,
reseller_id => $subscriber->contract->contact->reseller_id,
cc => $form->params->{e164}{cc},
ac => $form->params->{e164}{ac} // '',
sn => $form->params->{e164}{sn},
});
$subscriber->update({ primary_number_id => $num->id });
$prov_subscriber->voicemail_user->update({ mailbox =>
$form->field('e164')->field('cc')->value .
($form->field('e164')->field('ac')->value || '').
$form->field('e164')->field('sn')->value,
});
} else {
$prov_subscriber->voicemail_user->update({ mailbox => '0' });
}
NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
schema => $schema,
subscriber_id =>$subscriber->id,
reseller_id => $subscriber->contract->contact->reseller_id,
primary_number => $form->values->{e164},
);
}
if($num) {
$schema->resultset('voip_dbaliases')->create({

@ -323,7 +323,12 @@ sub update_subscriber_numbers {
my $subscriber_id = $params{subscriber_id};
my $reseller_id = $params{reseller_id};
my $primary_number = $params{primary_number};
my $e164 = $params{e164}; # alias numbers
my $alias_numbers = $params{alias_numbers}; # alias numbers
my $billing_subs = $schema->resultset('voip_subscribers')->find({
id => $subscriber_id,
});
my $prov_subs = $billing_subs->provisioning_voip_subscriber;
if (defined $primary_number) {
@ -357,21 +362,49 @@ sub update_subscriber_numbers {
subscriber_id => $subscriber_id,
});
}
}
my $subs = $schema->resultset('voip_subscribers')->find({
id => $subscriber_id,
});
if(defined $number) {
my $cli = $number->cc . ($number->ac || '') . $number->sn;
$subs->update({
if(defined $billing_subs->primary_number
&& $billing_subs->primary_number_id != $number->id) {
$billing_subs->primary_number->delete;
}
$billing_subs->update({
primary_number_id => $number->id,
});
$schema->resultset('voip_dbaliases')->create({
username => $number->cc .
($number->ac || '').
$number->sn,
domain_id => $subs->provisioning_voip_subscriber->domain->id,
subscriber_id => $subs->provisioning_voip_subscriber->id,
});
if(defined $prov_subs) {
$schema->resultset('voip_dbaliases')->create({
username => $cli,
domain_id => $prov_subs->domain->id,
subscriber_id => $prov_subs->id,
});
if(defined $prov_subs->voicemail_user) {
$prov_subs->voicemail_user->update({
mailbox => $cli,
});
}
for my $cfset($prov_subs->voip_cf_destination_sets->all) {
for my $cf($cfset->voip_cf_destinations->all) {
if($cf->destination =~ /\@voicebox\.local$/) {
$cf->update({ destination => 'sip:vmu'.$cli.'@voicebox.local' });
} elsif($cf->destination =~ /\@fax2mail\.local$/) {
$cf->update({ destination => 'sip:'.$cli.'@fax2mail.local' });
} elsif($cf->destination =~ /\@conference\.local$/) {
$cf->update({ destination => 'sip:conf='.$cli.'@conference.local' });
}
}
}
}
} else {
if (defined $billing_subs->primary_number) {
$billing_subs->primary_number->delete;
}
if(defined $prov_subs->voicemail_user) {
$prov_subs->voicemail_user->update({ mailbox => '0' });
}
}
}

Loading…
Cancel
Save