diff --git a/lib/NGCP/Panel/Controller/API/SubscribersItem.pm b/lib/NGCP/Panel/Controller/API/SubscribersItem.pm index 316864d137..9c3f0a83c5 100644 --- a/lib/NGCP/Panel/Controller/API/SubscribersItem.pm +++ b/lib/NGCP/Panel/Controller/API/SubscribersItem.pm @@ -167,6 +167,21 @@ sub DELETE :Allow { { my $subscriber = $self->item_by_id($c, $id); last unless $self->resource_exists($c, subscriber => $subscriber); + + if ($subscriber->contract->product->class eq "pbxaccount" && $subscriber->provisioning_voip_subscriber->is_pbx_pilot) { + my $other_subscriber = $c->model('DB')->resultset('voip_subscribers')->search({ + contract_id => $subscriber->contract->id, + status => { '!=' => 'terminated' }, + 'provisioning_voip_subscriber.is_pbx_pilot' => 0, + }, { + join => 'provisioning_voip_subscriber', + })->first(); + if ($other_subscriber) { + $self->error($c, HTTP_FORBIDDEN, "Cannot terminate pilot subscriber when other subscribers exists"); + return; + } + } + if($c->user->roles eq "subscriberadmin") { my $prov_sub = $subscriber->provisioning_voip_subscriber; diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index a92c48e0ca..c36c988b0a 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -370,6 +370,24 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) :Does(ACL) :ACLDe my ($self, $c) = @_; my $subscriber = $c->stash->{subscriber}; + if ($subscriber->contract->product->class eq "pbxaccount" && $c->stash->{subscriber}->provisioning_voip_subscriber->is_pbx_pilot) { + my $other_subscriber = $c->model('DB')->resultset('voip_subscribers')->search({ + contract_id => $c->stash->{contract}->id, + status => { '!=' => 'terminated' }, + 'provisioning_voip_subscriber.is_pbx_pilot' => 0, + }, { + join => 'provisioning_voip_subscriber', + })->first(); + if ($other_subscriber) { + NGCP::Panel::Utils::Message::error( + c => $c, + error => 'forbidden termination of pilot subscriber for uuid '.$c->qs($subscriber->uuid), + desc => $c->loc('Terminating pilot subscriber when other subscribers exist is prohibited.'), + ); + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/subscriber')); + } + } + if($c->user->roles eq 'subscriberadmin' && $c->user->uuid eq $subscriber->uuid) { NGCP::Panel::Utils::Message::error( c => $c,