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( NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
schema => $schema, schema => $schema,
primary_number => $form->params->{e164}, primary_number => $form->values->{e164},
reseller_id => $reseller->id, reseller_id => $reseller->id,
subscriber_id => $billing_subscriber->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}{ac} = $subscriber->primary_number->ac;
$form->params->{e164}{sn} = $base_number->{sn} . $form->params->{extension}; $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! NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
$subscriber->primary_number->delete; schema => $schema,
$prov_subscriber->voicemail_user->update({ mailbox => '0' }); subscriber_id =>$subscriber->id,
} else { reseller_id => $subscriber->contract->contact->reseller_id,
# check if cc and sn are set if cc is there primary_number => $form->params->{e164},
$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 });
# TODO: if it's an admin for pbx, update all other subscribers as well! # 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 # this means cloud_pbx_base_cli pref, primary number, dbaliases, voicemail, cf
}
} else { } else {
if($form->params->{e164}{cc} && NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
$form->params->{e164}{sn}) { schema => $schema,
$num = $schema->resultset('voip_numbers')->create({ subscriber_id =>$subscriber->id,
subscriber_id => $subscriber->id, reseller_id => $subscriber->contract->contact->reseller_id,
reseller_id => $subscriber->contract->contact->reseller_id, primary_number => $form->values->{e164},
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' });
}
} }
if($num) { if($num) {
$schema->resultset('voip_dbaliases')->create({ $schema->resultset('voip_dbaliases')->create({

@ -323,7 +323,12 @@ sub update_subscriber_numbers {
my $subscriber_id = $params{subscriber_id}; my $subscriber_id = $params{subscriber_id};
my $reseller_id = $params{reseller_id}; my $reseller_id = $params{reseller_id};
my $primary_number = $params{primary_number}; 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) { if (defined $primary_number) {
@ -357,21 +362,49 @@ sub update_subscriber_numbers {
subscriber_id => $subscriber_id, subscriber_id => $subscriber_id,
}); });
} }
}
my $subs = $schema->resultset('voip_subscribers')->find({ if(defined $number) {
id => $subscriber_id, 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, primary_number_id => $number->id,
}); });
$schema->resultset('voip_dbaliases')->create({ if(defined $prov_subs) {
username => $number->cc . $schema->resultset('voip_dbaliases')->create({
($number->ac || ''). username => $cli,
$number->sn, domain_id => $prov_subs->domain->id,
domain_id => $subs->provisioning_voip_subscriber->domain->id, subscriber_id => $prov_subs->id,
subscriber_id => $subs->provisioning_voip_subscriber->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