MT#4261 Proper number handling on subscribers

Outsource the handling of the primary number from
the subscriber controller to a util sub called
update_subscriber_numbers.
It also takes care to reuse a number that has
subscriber_id set to NULL which caused the original
problem in the ticket.

Cherry-picked from master

Conflicts:

	lib/NGCP/Panel/Utils/Subscriber.pm
agranig/1_0_subfix
Gerhard Jungwirth 12 years ago
parent 1ee73619ef
commit f9bf64f3cd

@ -133,28 +133,12 @@ sub create_list :Chained('sub_list') :PathPart('create') :Args(0) {
my $reseller = $contract->contact->reseller;
my $number;
if(defined $c->request->params->{'e164.cc'} &&
$c->request->params->{'e164.cc'} ne '') {
$number = $reseller->voip_numbers->create({
cc => $c->request->params->{'e164.cc'},
ac => $c->request->params->{'e164.ac'} || '',
sn => $c->request->params->{'e164.sn'},
status => 'active',
});
}
my $billing_subscriber = $contract->voip_subscribers->create({
uuid => $uuid_string,
username => $c->request->params->{username},
domain_id => $billing_domain->id,
status => $c->request->params->{status},
primary_number_id => defined $number ? $number->id : undef,
});
if(defined $number) {
$number->update({ subscriber_id => $billing_subscriber->id });
}
my $prov_subscriber = $schema->resultset('provisioning_voip_subscribers')->create({
uuid => $uuid_string,
@ -167,15 +151,13 @@ sub create_list :Chained('sub_list') :PathPart('create') :Args(0) {
domain_id => $prov_domain->id,
create_timestamp => NGCP::Panel::Utils::DateTime::current_local,
});
if($number) {
$schema->resultset('voip_dbaliases')->create({
username => $number->cc .
($number->ac || '').
$number->sn,
domain_id => $prov_subscriber->domain->id,
subscriber_id=> $prov_subscriber->id,
});
}
NGCP::Panel::Utils::Subscriber::update_subscriber_numbers(
schema => $schema,
primary_number => $form->params->{e164},
reseller_id => $reseller->id,
subscriber_id => $billing_subscriber->id,
);
my $cli = 0;
my $voip_preferences = $schema->resultset('voip_preferences')->search({

@ -122,6 +122,68 @@ sub get_lock_string {
return $LOCK{$level};
}
sub update_subscriber_numbers {
my %params = @_;
my $schema = $params{schema};
my $subscriber_id = $params{subscriber_id};
my $reseller_id = $params{reseller_id};
my $primary_number = $params{primary_number};
my $e164 = $params{e164}; # alias numbers
if (defined $primary_number) {
my $number;
if (defined $primary_number->{cc}
&& $primary_number->{cc} ne '') {
my $old_number = $schema->resultset('voip_numbers')->search({
cc => $primary_number->{cc},
ac => $primary_number->{ac} || '',
sn => $primary_number->{sn},
subscriber_id => [undef, $subscriber_id],
},{
for => 'update',
})->first;
if(defined $old_number) {
$old_number->update({
status => 'active',
reseller_id => $reseller_id,
subscriber_id => $subscriber_id,
});
$number = $old_number;
} else {
$number = $schema->resultset('voip_numbers')->create({
cc => $primary_number->{cc},
ac => $primary_number->{ac} || '',
sn => $primary_number->{sn},
status => 'active',
reseller_id => $reseller_id,
subscriber_id => $subscriber_id,
});
}
my $subs = $schema->resultset('voip_subscribers')->find({
id => $subscriber_id,
});
$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,
});
}
}
return;
}
1;
=head1 NAME

Loading…
Cancel
Save