From 2a0b8dcc1e7155720f208e8938fbfbe926e057fd Mon Sep 17 00:00:00 2001 From: Kirill Solomko Date: Thu, 19 Jan 2023 16:24:46 +0100 Subject: [PATCH] MT#56432 add time set support to ncos levels * add NCOS Levels UI Time Set support * add NCOS Levels API Time Set support Change-Id: I03201c09462f0f0ceff39da271bcf8ca1fc797b8 --- lib/NGCP/Panel/Controller/API/NcosLevels.pm | 13 +++++++++++++ lib/NGCP/Panel/Controller/NCOS.pm | 19 ++++++++++++++++--- lib/NGCP/Panel/Controller/Peering.pm | 2 +- lib/NGCP/Panel/Form/NCOS/ResellerLevel.pm | 6 +++++- lib/NGCP/Panel/Form/NCOS/ResellerLevelAPI.pm | 9 +++++++++ lib/NGCP/Panel/Role/API/NcosLevels.pm | 13 +++++++++++++ 6 files changed, 57 insertions(+), 5 deletions(-) diff --git a/lib/NGCP/Panel/Controller/API/NcosLevels.pm b/lib/NGCP/Panel/Controller/API/NcosLevels.pm index 98c0081d0d..7e36fdc80f 100644 --- a/lib/NGCP/Panel/Controller/API/NcosLevels.pm +++ b/lib/NGCP/Panel/Controller/API/NcosLevels.pm @@ -140,6 +140,19 @@ sub POST :Allow { last; } + if ($resource->{time_set_id}) { + my $time_set = $c->model('DB')->resultset('voip_time_sets')->find({ + id => $resource->{time_set_id}, + reseller_id => $c->user->reseller_id + }); + if (!$time_set) { + my $err = "Time set with id '$resource->{time_set_id}' does not exist or does not belong to this reseller"; + $c->log->error($err); + $self->error($c, HTTP_UNPROCESSABLE_ENTITY, $err); + last; + } + } + try { $item = $c->model('DB')->resultset('ncos_levels')->create($resource); } catch($e) { diff --git a/lib/NGCP/Panel/Controller/NCOS.pm b/lib/NGCP/Panel/Controller/NCOS.pm index 515473040b..82fcab3d50 100644 --- a/lib/NGCP/Panel/Controller/NCOS.pm +++ b/lib/NGCP/Panel/Controller/NCOS.pm @@ -29,6 +29,7 @@ sub levels_list :Chained('/') :PathPart('ncos') :CaptureArgs(0) { { name => 'reseller.name', search => 1, title => $c->loc('Reseller') }, { name => 'level', search => 1, title => $c->loc('Level Name') }, { name => 'mode', search => 1, title => $c->loc('Mode') }, + { name => 'timeset.name', search => 1, title => $c->loc('Timeset') }, { name => 'description', search => 1, title => $c->loc('Description') }, ]); @@ -37,14 +38,20 @@ sub levels_list :Chained('/') :PathPart('ncos') :CaptureArgs(0) { sub _levels_resultset_admin { my ($self, $c) = @_; - my $rs = $c->model('DB')->resultset('ncos_levels'); + my $rs = $c->model('DB')->resultset('ncos_levels')->search({ + },{ + join => 'timeset' + }); return $rs; } sub _levels_resultset_reseller { my ($self, $c) = @_; - my $rs = $c->model('DB')->resultset('admins') - ->find($c->user->id)->reseller->ncos_levels; + my $rs = $c->model('DB')->resultset('ncos_levels')->search({ + reseller_id => $c->user->reseller_id + },{ + join => 'timeset' + }); return $rs; } @@ -92,6 +99,7 @@ sub edit :Chained('base') :PathPart('edit') { my $level = $c->stash->{level_result}; my $params = { $level->get_inflated_columns }; $params->{reseller}{id} = delete $params->{reseller_id}; + $params->{timeset}{id} = delete $params->{time_set_id}; $params = merge($params, $c->session->{created_objects}); if($c->user->is_superuser) { $form = NGCP::Panel::Form::get("NGCP::Panel::Form::NCOS::AdminLevel", $c); @@ -108,6 +116,7 @@ sub edit :Chained('base') :PathPart('edit') { form => $form, fields => { 'reseller.create' => $c->uri_for('/reseller/create'), + 'timeset.create' => $c->uri_for('/timeset/create'), }, back_uri => $c->req->uri, ); @@ -115,6 +124,8 @@ sub edit :Chained('base') :PathPart('edit') { try { $form->values->{reseller_id} = $form->values->{reseller}{id}; delete $form->values->{reseller}; + $form->values->{time_set_id} = $form->values->{timeset}{id}; + delete $form->values->{reseller}; $level->update($form->values); delete $c->session->{created_objects}->{reseller}; NGCP::Panel::Utils::Message::info( @@ -192,6 +203,7 @@ sub create :Chained('levels_list') :PathPart('create') :Args(0) { form => $form, fields => { 'reseller.create' => $c->uri_for('/reseller/create'), + 'timeset.create' => $c->uri_for('/timeset/create'), }, back_uri => $c->req->uri, ); @@ -201,6 +213,7 @@ sub create :Chained('levels_list') :PathPart('create') :Args(0) { unless($c->user->is_superuser) { $form->values->{reseller}{id} = $c->user->reseller_id; } + $form->values->{time_set_id} = $form->values->{timeset}{id}; $level->create($form->values); delete $c->session->{created_objects}->{reseller}; NGCP::Panel::Utils::Message::info( diff --git a/lib/NGCP/Panel/Controller/Peering.pm b/lib/NGCP/Panel/Controller/Peering.pm index 7e94b2fd74..0b75c17f73 100644 --- a/lib/NGCP/Panel/Controller/Peering.pm +++ b/lib/NGCP/Panel/Controller/Peering.pm @@ -28,7 +28,7 @@ sub group_list :Chained('/') :PathPart('peering') :CaptureArgs(0) { { name => 'name', search => 1, title => $c->loc('Name') }, { name => 'priority', search => 1, title => $c->loc('Priority') }, { name => 'description', search => 1, title => $c->loc('Description') }, - { name => 'time_set.name', search => 0, title => $c->loc('Time Set') }, + { name => 'timeset.name', search => 0, title => $c->loc('Time Set') }, ]); $c->stash(template => 'peering/list.tt'); diff --git a/lib/NGCP/Panel/Form/NCOS/ResellerLevel.pm b/lib/NGCP/Panel/Form/NCOS/ResellerLevel.pm index 542f060817..21c5cc33bb 100644 --- a/lib/NGCP/Panel/Form/NCOS/ResellerLevel.pm +++ b/lib/NGCP/Panel/Form/NCOS/ResellerLevel.pm @@ -30,6 +30,10 @@ has_field 'description' => ( required => 0, ); +has_field 'timeset' => ( + type => '+NGCP::Panel::Field::TimeSet', +); + has_field 'save' => ( type => 'Submit', value => 'Save', @@ -40,7 +44,7 @@ has_field 'save' => ( has_block 'fields' => ( tag => 'div', class => [qw/modal-body/], - render_list => [qw/level mode description/], + render_list => [qw/level mode description timeset/], ); has_block 'actions' => ( diff --git a/lib/NGCP/Panel/Form/NCOS/ResellerLevelAPI.pm b/lib/NGCP/Panel/Form/NCOS/ResellerLevelAPI.pm index 8f66cfa741..2352be0214 100644 --- a/lib/NGCP/Panel/Form/NCOS/ResellerLevelAPI.pm +++ b/lib/NGCP/Panel/Form/NCOS/ResellerLevelAPI.pm @@ -60,6 +60,15 @@ has_field 'intra_pbx' => ( }, ); +has_field 'time_set_id' => ( + type => 'PosInteger', + required => 0, + element_attr => { + rel => ['tooltip'], + title => ['The timeset id to use for this level'] + }, +); + 1; # vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Role/API/NcosLevels.pm b/lib/NGCP/Panel/Role/API/NcosLevels.pm index 6c635b3766..770781d5aa 100644 --- a/lib/NGCP/Panel/Role/API/NcosLevels.pm +++ b/lib/NGCP/Panel/Role/API/NcosLevels.pm @@ -88,6 +88,19 @@ sub update_item { $resource->{reseller_id} = $c->user->reseller_id; } + if ($resource->{time_set_id}) { + my $time_set = $c->model('DB')->resultset('voip_time_sets')->find({ + id => $resource->{time_set_id}, + reseller_id => $c->user->reseller_id + }); + if (!$time_set) { + my $err = "Time set with id '$resource->{time_set_id}' does not exist or does not belong to this reseller"; + $c->log->error($err); + $self->error($c, HTTP_UNPROCESSABLE_ENTITY, $err); + return; + } + } + my $dup_item = $c->model('DB')->resultset('ncos_levels')->find({ reseller_id => $resource->{reseller_id}, level => $resource->{level},