From dee6b60c6eb68af66850c845c03612aef292301e Mon Sep 17 00:00:00 2001 From: Kirill Solomko Date: Mon, 16 Jan 2023 17:08:20 +0100 Subject: [PATCH] MT#56208 additional inherited cfs improvements for subscribers * API: GET collection returns only distinct cf sets * UI: inherited cf sets are now shown in the advanced view and having suffix '(inherited)' to distinguish them from the own ones as they are not available in the "Manage Sets" edit dialog. Change-Id: Ifd8c1a46fcb4c2c66f8f63268a1e91b80792c216 --- lib/NGCP/Panel/Controller/Subscriber.pm | 17 ++++++++++++----- lib/NGCP/Panel/Field/SubscriberBNumberSet.pm | 4 +++- .../Panel/Field/SubscriberDestinationSet.pm | 3 ++- lib/NGCP/Panel/Field/SubscriberSourceSet.pm | 4 +++- lib/NGCP/Panel/Field/SubscriberTimeSet.pm | 4 +++- lib/NGCP/Panel/Role/API/CFBNumberSets.pm | 1 + lib/NGCP/Panel/Role/API/CFDestinationSets.pm | 1 + lib/NGCP/Panel/Role/API/CFSourceSets.pm | 1 + lib/NGCP/Panel/Role/API/CFTimeSets.pm | 1 + 9 files changed, 27 insertions(+), 9 deletions(-) diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index ddf7408ec6..cfaf857076 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -1189,11 +1189,18 @@ sub preferences_callforward_advanced :Chained('base') :PathPart('preferences/cal my $ringtimeout_preference = NGCP::Panel::Utils::Preferences::get_usr_preference_rs( c => $c, prov_subscriber => $prov_subscriber, attribute => 'ringtimeout'); - $c->stash->{cf_destination_sets} = $prov_subscriber->voip_cf_destination_sets - ->search_rs(undef,{order_by => 'name'}); - $c->stash->{cf_time_sets} = $prov_subscriber->voip_cf_time_sets; - $c->stash->{cf_source_sets} = $prov_subscriber->voip_cf_source_sets; - $c->stash->{cf_bnumber_sets} = $prov_subscriber->voip_cf_bnumber_sets; + foreach my $cf_type (qw(destination source time bnumber)) { + $c->stash->{'cf_' . $cf_type . '_sets'} = $c->model('DB')->resultset('voip_cf_' . $cf_type . '_sets')->search_rs({ + '-or' => [ + 'me.subscriber_id' => $c->user->id, + 'voip_cf_mappings.subscriber_id' => $c->user->id, + ] + },{ + distinct => 1, + join => 'voip_cf_mappings', + order_by => 'me.name', + }); + } my $posted = ($c->request->method eq 'POST'); diff --git a/lib/NGCP/Panel/Field/SubscriberBNumberSet.pm b/lib/NGCP/Panel/Field/SubscriberBNumberSet.pm index 4cd1ec63c8..e083182b88 100644 --- a/lib/NGCP/Panel/Field/SubscriberBNumberSet.pm +++ b/lib/NGCP/Panel/Field/SubscriberBNumberSet.pm @@ -10,13 +10,15 @@ sub build_options { return [] unless $form->ctx; my $sets = $form->ctx->stash->{cf_bnumber_sets}; + my $subscriber_id = $form->ctx->stash->{subscriber}->provisioning_voip_subscriber->id; + my @all; return \@all unless($sets); push @all, { label => '', value => undef}; foreach my $set($sets->all) { my $entry = {}; - $entry->{label} = $set->name; + $entry->{label} = $set->name . ($subscriber_id != $set->subscriber_id ? ' (inherited)' : ''); $entry->{value} = $set->id; push @all, $entry; } diff --git a/lib/NGCP/Panel/Field/SubscriberDestinationSet.pm b/lib/NGCP/Panel/Field/SubscriberDestinationSet.pm index 0c9419f277..236372cce3 100644 --- a/lib/NGCP/Panel/Field/SubscriberDestinationSet.pm +++ b/lib/NGCP/Panel/Field/SubscriberDestinationSet.pm @@ -11,12 +11,13 @@ sub build_options { return [] unless $form->ctx; my $destination_sets = $form->ctx->stash->{cf_destination_sets}; + my $subscriber_id = $form->ctx->stash->{subscriber}->provisioning_voip_subscriber->id; my @all; return \@all unless($destination_sets); foreach my $set($destination_sets->all) { my $entry = {}; - $entry->{label} = $set->name; + $entry->{label} = $set->name . ($subscriber_id != $set->subscriber_id ? ' (inherited)' : ''); $entry->{value} = $set->id; push @all, $entry; } diff --git a/lib/NGCP/Panel/Field/SubscriberSourceSet.pm b/lib/NGCP/Panel/Field/SubscriberSourceSet.pm index b072c0bc9f..25c8cb4a07 100644 --- a/lib/NGCP/Panel/Field/SubscriberSourceSet.pm +++ b/lib/NGCP/Panel/Field/SubscriberSourceSet.pm @@ -10,13 +10,15 @@ sub build_options { return [] unless $form->ctx; my $source_sets = $form->ctx->stash->{cf_source_sets}; + my $subscriber_id = $form->ctx->stash->{subscriber}->provisioning_voip_subscriber->id; + my @all; return \@all unless($source_sets); push @all, { label => '', value => undef}; foreach my $set($source_sets->all) { my $entry = {}; - $entry->{label} = $set->name; + $entry->{label} = $set->name . ($subscriber_id != $set->subscriber_id ? ' (inherited)' : ''); $entry->{value} = $set->id; push @all, $entry; } diff --git a/lib/NGCP/Panel/Field/SubscriberTimeSet.pm b/lib/NGCP/Panel/Field/SubscriberTimeSet.pm index 028d90dfa4..ddebf606fa 100644 --- a/lib/NGCP/Panel/Field/SubscriberTimeSet.pm +++ b/lib/NGCP/Panel/Field/SubscriberTimeSet.pm @@ -10,13 +10,15 @@ sub build_options { return [] unless $form->ctx; my $time_sets = $form->ctx->stash->{cf_time_sets}; + my $subscriber_id = $form->ctx->stash->{subscriber}->provisioning_voip_subscriber->id; + my @all; return \@all unless($time_sets); push @all, { label => '', value => undef}; foreach my $set($time_sets->all) { my $entry = {}; - $entry->{label} = $set->name; + $entry->{label} = $set->name . ($subscriber_id != $set->subscriber_id ? ' (inherited)' : ''); $entry->{value} = $set->id; push @all, $entry; } diff --git a/lib/NGCP/Panel/Role/API/CFBNumberSets.pm b/lib/NGCP/Panel/Role/API/CFBNumberSets.pm index bba5e13b80..a6f2cfe9b3 100644 --- a/lib/NGCP/Panel/Role/API/CFBNumberSets.pm +++ b/lib/NGCP/Panel/Role/API/CFBNumberSets.pm @@ -63,6 +63,7 @@ sub _item_rs { 'voip_cf_mappings.subscriber_id' => $c->user->id, ] },{ + distinct => 1, join => 'voip_cf_mappings', }); } diff --git a/lib/NGCP/Panel/Role/API/CFDestinationSets.pm b/lib/NGCP/Panel/Role/API/CFDestinationSets.pm index c51478861c..cb178f0463 100644 --- a/lib/NGCP/Panel/Role/API/CFDestinationSets.pm +++ b/lib/NGCP/Panel/Role/API/CFDestinationSets.pm @@ -106,6 +106,7 @@ sub _item_rs { 'voip_cf_mappings.subscriber_id' => $c->user->id, ] },{ + distinct => 1, join => 'voip_cf_mappings', }); } diff --git a/lib/NGCP/Panel/Role/API/CFSourceSets.pm b/lib/NGCP/Panel/Role/API/CFSourceSets.pm index 9146965f3c..82d07f288f 100644 --- a/lib/NGCP/Panel/Role/API/CFSourceSets.pm +++ b/lib/NGCP/Panel/Role/API/CFSourceSets.pm @@ -97,6 +97,7 @@ sub _item_rs { 'voip_cf_mappings.subscriber_id' => $c->user->id, ] },{ + distinct => 1, join => 'voip_cf_mappings', }); } diff --git a/lib/NGCP/Panel/Role/API/CFTimeSets.pm b/lib/NGCP/Panel/Role/API/CFTimeSets.pm index 0c24415539..a55190752e 100644 --- a/lib/NGCP/Panel/Role/API/CFTimeSets.pm +++ b/lib/NGCP/Panel/Role/API/CFTimeSets.pm @@ -374,6 +374,7 @@ sub _item_rs { 'voip_cf_mappings.subscriber_id' => $c->user->id, ] },{ + distinct => 1, join => 'voip_cf_mappings', }); }