MT#9225 Modify allowed_clis on add/remove number

If ossbss.provisioning.auto_allowed_cli is set, then add/remove
a number from subscriber preference allowed_clis when adding/
removing a number.
changes/94/294/1
Andreas Granig 11 years ago
parent 57ad8c6be7
commit 0204022cf5

@ -269,7 +269,8 @@ sub POST :Allow {
);
NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
schema => $c->model('DB'),
c => $c,
schema => $schema,
alias_numbers => $alias_numbers,
reseller_id => $customer->contact->reseller_id,
subscriber_id => $subscriber->id,

@ -702,6 +702,7 @@ sub subscriber_create :Chained('base') :PathPart('subscriber/create') :Args(0) {
if($pbx && !$pbxadmin && $form->value->{alias_select}) {
NGCP::Panel::Utils::Subscriber::update_subadmin_sub_aliases(
c => $c,
schema => $schema,
subscriber => $billing_subscriber,
contract_id => $billing_subscriber->contract_id,

@ -2433,6 +2433,7 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) :Does(ACL) :ACLDet
if(exists $form->params->{alias_select} && $c->stash->{pilot}) {
NGCP::Panel::Utils::Subscriber::update_subadmin_sub_aliases(
c => $c,
schema => $schema,
subscriber => $subscriber,
contract_id => $subscriber->contract_id,
@ -2454,6 +2455,7 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) :Does(ACL) :ACLDet
}
NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
c => $c,
schema => $schema,
subscriber_id =>$subscriber->id,
reseller_id => $subscriber->contract->contact->reseller_id,
@ -2496,6 +2498,7 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) :Does(ACL) :ACLDet
sn => $form->params->{e164}{sn} . $sub->provisioning_voip_subscriber->pbx_extension,
};
NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
c => $c,
schema => $schema,
subscriber_id => $sub->id,
reseller_id => $sub->contract->contact->reseller_id,
@ -2505,6 +2508,7 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) :Does(ACL) :ACLDet
}
} else {
NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
c => $c,
schema => $schema,
subscriber_id =>$subscriber->id,
reseller_id => $subscriber->contract->contact->reseller_id,

@ -562,6 +562,7 @@ sub update_item {
delete $resource->{email};
NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
c => $c,
schema => $schema,
primary_number => $resource->{e164},
alias_numbers => $alias_numbers,

@ -226,6 +226,7 @@ sub create_subscriber {
$params->{e164}{sn};
update_subscriber_numbers(
c => $c,
schema => $schema,
subscriber_id => $billing_subscriber->id,
reseller_id => $reseller->id,
@ -283,6 +284,11 @@ sub create_subscriber {
subscriber_id => $prov_subscriber->id,
is_primary => 1,
});
if($c->config->{numbermanagement}->{auto_allow_cli}) {
my $pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'allowed_clis', prov_subscriber => $prov_subscriber);
$pref->create({ value => $cli }) if(defined $pref);
}
}
if($contract->subscriber_email_template_id) {
@ -328,6 +334,7 @@ sub create_subscriber {
}
if(@alias_numbers) {
update_subscriber_numbers(
c => $c,
schema => $schema,
subscriber_id => $billing_subscriber->id,
reseller_id => $reseller->id,
@ -418,6 +425,7 @@ sub update_pbx_group_prefs {
sub update_subscriber_numbers {
my %params = @_;
my $c = $params{c};
my $schema = $params{schema};
my $subscriber_id = $params{subscriber_id};
my $reseller_id = $params{reseller_id};
@ -429,6 +437,10 @@ sub update_subscriber_numbers {
});
my $prov_subs = $billing_subs->provisioning_voip_subscriber;
my @nums = ();
my $acli_pref;
$acli_pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'allowed_clis', prov_subscriber => $prov_subs)
if($prov_subs && $c->config->{numbermanagement}->{auto_allow_cli});
if(exists $params{primary_number} && !defined $primary_number) {
$billing_subs->update({
@ -480,9 +492,13 @@ sub update_subscriber_numbers {
if(defined $number) {
my $cli = $number->cc . ($number->ac // '') . $number->sn;
my $old_cli = undef;
if(defined $billing_subs->primary_number
&& $billing_subs->primary_number_id != $number->id) {
$old_cli = $billing_subs->primary_number->cc .
($billing_subs->primary_number->ac // '') .
$billing_subs->primary_number->sn;
$billing_subs->primary_number->delete;
}
$billing_subs->update({
@ -503,6 +519,12 @@ sub update_subscriber_numbers {
is_primary => 1,
});
}
if(defined $acli_pref) {
$acli_pref->search({ value => $old_cli })->delete if($old_cli);
if(!$acli_pref->find({ value => $cli })) {
$acli_pref->create({ value => $cli });
}
}
update_voicemail_number(schema => $schema, subscriber => $billing_subs);
for my $cfset($prov_subs->voip_cf_destination_sets->all) {
@ -546,6 +568,7 @@ sub update_subscriber_numbers {
username => $old_cc . ($old_ac // '') . $sub->primary_number->sn,
})->delete;
update_subscriber_numbers(
c => $c,
schema => $schema,
subscriber_id => $sub->id,
reseller_id => $reseller_id,
@ -561,10 +584,10 @@ sub update_subscriber_numbers {
}
if(defined $alias_numbers && ref($alias_numbers) eq 'ARRAY') {
my $number;
for my $alias(@$alias_numbers) {
my $old_cli;
my $old_number = $schema->resultset('voip_numbers')->search({
cc => $alias->{e164}->{cc},
ac => $alias->{e164}->{ac} // '',
@ -581,6 +604,7 @@ sub update_subscriber_numbers {
subscriber_id => $subscriber_id,
});
$number = $old_number;
$old_cli = $old_number->cc . ($old_number->ac // '') . $old_number->sn;
} else {
$number = $schema->resultset('voip_numbers')->create({
cc => $alias->{e164}->{cc},
@ -607,6 +631,12 @@ sub update_subscriber_numbers {
is_primary => 0,
});
}
if(defined $acli_pref) {
$acli_pref->search({ value => $old_cli })->delete if($old_cli);
if(!$acli_pref->find({ value => $cli })) {
$acli_pref->create({ value => $cli });
}
}
}
} else {
push @nums, $billing_subs->voip_numbers->get_column('id')->all;
@ -625,6 +655,9 @@ sub update_subscriber_numbers {
$prov_subs->voip_dbaliases->search({
username => { 'not in' => \@dbnums },
})->delete;
if(defined $acli_pref) {
$acli_pref->search({ value => { 'not in' => \@dbnums }})->delete;
}
}
return;
@ -633,6 +666,7 @@ sub update_subscriber_numbers {
sub update_subadmin_sub_aliases {
my %params = @_;
my $c = $params{c};
my $schema = $params{schema};
my $subscriber = $params{subscriber};
my $sadmin = $params{sadmin};
@ -645,12 +679,58 @@ sub update_subadmin_sub_aliases {
prefetch => 'subscriber',
});
my $acli_pref_sub;
$acli_pref_sub = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'allowed_clis', prov_subscriber => $subscriber->provisioning_voip_subscriber)
if($subscriber->provisioning_voip_subscriber && $c->config->{numbermanagement}->{auto_allow_cli});
my $acli_pref_pilot;
$acli_pref_pilot = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'allowed_clis', prov_subscriber => $sadmin->provisioning_voip_subscriber)
if($sadmin->provisioning_voip_subscriber && $c->config->{numbermanagement}->{auto_allow_cli});
for my $num ($num_rs->all) {
next if ($num->voip_subscribers->first); # is a primary number
my $cli = $num->cc . ($num->ac // '') . $num->sn;
my $tmpsubscriber;
if ($num->id ~~ $alias_selected) {
# assign number from someone to this subscriber
# since the number could be assigned to any sub within the pbx,
# we need to figure out the owner first and clear the allowed_clis pref from there
my $sub = $schema->resultset('voip_dbaliases')->find({
username => $cli,
domain_id => $subscriber->provisioning_voip_subscriber->domain_id,
});
$sub = $sub->subscriber if($sub);
my $acli_pref_tmpsub = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'allowed_clis', prov_subscriber => $sub)
if($sub && $c->config->{numbermanagement}->{auto_allow_cli});
if(defined $acli_pref_tmpsub) {
$acli_pref_tmpsub->search({ value => $cli })->delete;
}
# then set allowed_clis for the new owner
if(defined $acli_pref_sub) {
if(!$acli_pref_sub->find({ value => $cli })) {
$acli_pref_sub->create({ value => $cli });
}
}
$tmpsubscriber = $subscriber;
} elsif ($num->subscriber_id == $subscriber->id) { #unselected
} elsif ($num->subscriber_id == $subscriber->id) {
# move number back to pilot
# clear allowed_clis pref from owner and add it to pilot
if(defined $acli_pref_sub) {
$acli_pref_sub->search({ value => $cli })->delete;
}
if(defined $acli_pref_pilot) {
if(!$acli_pref_pilot->find({ value => $cli })) {
$acli_pref_pilot->create({ value => $cli });
}
}
$tmpsubscriber = $sadmin
} else {
next;
@ -659,7 +739,7 @@ sub update_subadmin_sub_aliases {
subscriber_id => $tmpsubscriber->id,
});
my $dbnum = $schema->resultset('voip_dbaliases')->find({
username => $num->cc . ($num->ac // '') . $num->sn,
username => $cli,
domain_id => $subscriber->provisioning_voip_subscriber->domain_id,
});
if($dbnum) {
@ -706,6 +786,7 @@ sub terminate {
});
if($pilot_rs->first) {
update_subadmin_sub_aliases(
c => $c,
schema => $schema,
subscriber => $subscriber,
contract_id => $subscriber->contract_id,

@ -103,6 +103,10 @@ log4perl.appender.Default.layout.ConversionPattern=%d{ISO8601} [%p] [%F +%L] %m{
pbx 127.0.0.1:5085
</callflow>
<numbermanagement>
auto_allow_cli 1
</numbermanagement>
<ssl>
rest_api_keyfile /etc/ngcp-panel/api_ssl/api_ca.key
rest_api_certfile /etc/ngcp-panel/api_ssl/api_ca.crt

Loading…
Cancel
Save