MT#57580 add expose_to_customer support for NCOS

* NCOS Levels and NCOS Sets now have expose_to_customer
  option (boolean). If enabled, the NCOS Level/Set can
  be seen and used by Customers in their and their subscribers'
  preferences
* NCOS Levels and NCOS Sets with expose_to_customer = 0 (default)
  are not visible anymore to subscribers.
* API GET /api/ncoslevels is now accessible by 'subscriberadmin' role
  and returns a list of NCOS Levels that belong to the same reseller
  and with expose_to_customer = 1 (fields are limited to
  id,name,description).
* When NCOS Level is expose_to_customer is set from 1 to 0, all
  assigned ncos preferences for contracts and subscribers are that
  contain the NCOS Level are removed.

Change-Id: Id7c444b4a0834939a128179ded6670705258519b
mr11.4
Kirill Solomko 3 years ago
parent f79c7a5820
commit 9d9c0d0669

@ -60,7 +60,11 @@ sub relation{
}
__PACKAGE__->set_config({
allowed_roles => [qw/admin reseller/],
allowed_roles => {
Default => [qw/admin reseller/],
Journal => [qw/admin reseller/],
GET => [qw/admin reseller subscriberadmin/],
},
});
sub GET :Allow {

@ -30,7 +30,11 @@ sub relation{
}
__PACKAGE__->set_config({
allowed_roles => [qw/admin reseller/],
allowed_roles => {
Default => [qw/admin reseller/],
Journal => [qw/admin reseller/],
GET => [qw/admin reseller subscriberadmin/],
},
});
sub GET :Allow {

@ -2483,15 +2483,19 @@ sub load_preference_list :Private {
my $reseller_id = $c->stash->{contract}->contact->reseller_id;
my $ncos_levels_rs = $c->model('DB')
->resultset('ncos_levels')
->search_rs({ reseller_id => $reseller_id, });
my $ncos_levels_rs = $c->model('DB')->resultset('ncos_levels')->search_rs({
reseller_id => $reseller_id,
$c->user->roles eq 'subscriberadmin' ? (expose_to_customer => 1) : ()
});
$c->stash(ncos_levels_rs => $ncos_levels_rs,
ncos_levels => [$ncos_levels_rs->all]);
my $ncos_sets_rs = $c->model('DB')
->resultset('ncos_sets')
->search_rs({ reseller_id => $reseller_id, });
my $ncos_sets_rs = $c->model('DB')->resultset('ncos_sets')->search_rs({
reseller_id => $reseller_id,
$c->user->roles eq 'subscriberadmin' ? (expose_to_customer => 1) : ()
});
$c->stash(ncos_sets_rs => $ncos_sets_rs,
ncos_sets => [$ncos_sets_rs->all]);

@ -9,6 +9,7 @@ use NGCP::Panel::Form;
use NGCP::Panel::Utils::Message;
use NGCP::Panel::Utils::Navigation;
use NGCP::Panel::Utils::Datatables;
use NGCP::Panel::Utils::NCOS;
sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) {
my ($self, $c) = @_;
@ -31,6 +32,7 @@ sub levels_list :Chained('/') :PathPart('ncos') :CaptureArgs(0) {
{ 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') },
{ name => 'expose_to_customer', search => 1, title => $c->loc('Expose to Customer') },
]);
$c->stash(template => 'ncos/list.tt');
@ -122,6 +124,8 @@ sub edit :Chained('base') :PathPart('edit') {
);
if($posted && $form->validated) {
try {
my $old_expose_to_customer = $level->expose_to_customer;
my $expose_to_customer = $form->values->{expose_to_customer};
$form->values->{reseller_id} = $form->values->{reseller}{id};
delete $form->values->{reseller};
$form->values->{time_set_id} = $form->values->{timeset}{id};
@ -134,6 +138,9 @@ sub edit :Chained('base') :PathPart('edit') {
}
}
$level->update($form->values);
if ($old_expose_to_customer && !$expose_to_customer) {
NGCP::Panel::Utils::NCOS::revoke_exposed_ncos_level($c, $level->id);
}
delete $c->session->{created_objects}->{reseller};
NGCP::Panel::Utils::Message::info(
c => $c,

@ -2634,13 +2634,19 @@ sub load_preference_list :Private {
hdr_sets_rs => $header_rule_sets_rs,
hdr_sets => [$header_rule_sets_rs->all]);
my $ncos_levels_rs = $c->model('DB')
->resultset('ncos_levels')->search({ reseller_id => $reseller_id });
my $ncos_levels_rs = $c->model('DB')->resultset('ncos_levels')->search({
reseller_id => $reseller_id,
$c->user->roles eq 'subscriberadmin' ? (expose_to_customer => 1) : ()
});
$c->stash(ncos_levels_rs => $ncos_levels_rs,
ncos_levels => [$ncos_levels_rs->all]);
my $ncos_sets_rs = $c->model('DB')
->resultset('ncos_sets')->search_rs({ reseller_id => $reseller_id, });
my $ncos_sets_rs = $c->model('DB')->resultset('ncos_sets')->search_rs({
reseller_id => $reseller_id,
$c->user->roles eq 'subscriberadmin' ? (expose_to_customer => 1) : ()
});
$c->stash(ncos_sets_rs => $ncos_sets_rs,
ncos_sets => [$ncos_sets_rs->all]);

@ -11,7 +11,7 @@ has_field 'reseller' => (
has_block 'fields' => (
tag => 'div',
class => [qw/modal-body/],
render_list => [qw/reseller level mode description timeset/],
render_list => [qw/reseller level mode description timeset expose_to_customer/],
);
has_block 'actions' => (

@ -34,6 +34,15 @@ has_field 'timeset' => (
type => '+NGCP::Panel::Field::TimeSet',
);
has_field 'expose_to_customer' => (
type => 'Boolean',
label => 'Expose to Customer',
element_attr => {
rel => ['tooltip'],
title => ['Customers can see and use this NCOS Level in their preferences']
},
);
has_field 'save' => (
type => 'Submit',
value => 'Save',
@ -44,7 +53,7 @@ has_field 'save' => (
has_block 'fields' => (
tag => 'div',
class => [qw/modal-body/],
render_list => [qw/level mode description timeset/],
render_list => [qw/level mode description timeset expose_to_customer/],
);
has_block 'actions' => (

@ -69,6 +69,15 @@ has_field 'time_set_id' => (
},
);
has_field 'expose_to_customer' => (
type => 'Boolean',
label => 'Expose to Customer',
element_attr => {
rel => ['tooltip'],
title => ['Customers can see and use this NCOS Level in their preferences']
},
);
1;
# vim: set tabstop=4 expandtab:

@ -0,0 +1,34 @@
package NGCP::Panel::Form::NCOS::SubAdminLevelAPI;
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler';
use HTML::FormHandler::Widget::Block::Bootstrap;
has '+widget_wrapper' => ( default => 'Bootstrap' );
has_field 'submitid' => ( type => 'Hidden' );
sub build_render_list {[qw/submitid fields actions/]}
sub build_form_element_class {[qw(form-horizontal)]}
has_field 'level' => (
type => 'Text',
label => 'Level Name',
required => 1,
element_attr => {
rel => ['tooltip'],
title => ['The level name']
},
);
has_field 'description' => (
type => 'Text',
required => 0,
element_attr => {
rel => ['tooltip'],
title => ['The description of the level']
},
);
1;
# vim: set tabstop=4 expandtab:

@ -10,6 +10,7 @@ use boolean qw(true);
use Data::HAL qw();
use Data::HAL::Link qw();
use HTTP::Status qw(:constants);
use NGCP::Panel::Utils::NCOS;
sub _item_rs {
my ($self, $c) = @_;
@ -18,6 +19,12 @@ sub _item_rs {
if($c->user->roles eq "admin") {
} elsif($c->user->roles eq "reseller") {
$item_rs = $item_rs->search({ reseller_id => $c->user->reseller_id });
} elsif($c->user->roles eq "subscriberadmin") {
my $contract = $c->model('DB')->resultset('contracts')->find($c->user->account_id);
$item_rs = $item_rs->search({
reseller_id => $contract->contact->reseller_id,
expose_to_customer => 1
});
}
return $item_rs;
}
@ -28,6 +35,8 @@ sub get_form {
return NGCP::Panel::Form::get("NGCP::Panel::Form::NCOS::AdminLevelAPI", $c);
} elsif($c->user->roles eq "reseller") {
return NGCP::Panel::Form::get("NGCP::Panel::Form::NCOS::ResellerLevelAPI", $c);
} elsif($c->user->roles eq "subscriberadmin") {
return NGCP::Panel::Form::get("NGCP::Panel::Form::NCOS::SubAdminLevelAPI", $c);
}
}
@ -113,6 +122,10 @@ sub update_item {
$item->update($resource);
if ($old_resource->{expose_to_customer} && !$resource->{expose_to_customer}) {
NGCP::Panel::Utils::NCOS::revoke_exposed_ncos_level($c, $item->id);
}
return $item;
}

@ -0,0 +1,30 @@
package NGCP::Panel::Utils::NCOS;
use strict;
use warnings;
use English;
use NGCP::Panel::Utils::Preferences;
sub revoke_exposed_ncos_level {
my ($c, $ncos_level_id) = @_;
my $used_contract_prefs_rs = $c->model('DB')->resultset('voip_contract_preferences')->search({
'attribute.attribute' => 'ncos_id',
value => $ncos_level_id,
},{
join => 'attribute',
});
$used_contract_prefs_rs->delete;
my $used_subscriber_prefs_rs = $c->model('DB')->resultset('voip_usr_preferences')->search({
'attribute.attribute' => 'ncos_id',
value => $ncos_level_id,
},{
join => 'attribute',
});
$used_subscriber_prefs_rs->delete;
}
1;
# vim: set tabstop=4 expandtab:
Loading…
Cancel
Save