From e9486b891d6708de83991ac333a7f09ee154c721 Mon Sep 17 00:00:00 2001 From: Irina Peshinskaya Date: Wed, 30 Jan 2019 16:01:53 +0100 Subject: [PATCH] TT#50802 Consider terminated subscribers in alias management Alse renamed relation between voip_numbers and billing.voip_subscribers as primary number owners Change-Id: I5343a6d4d3c3e4593d41cfabb30cb7ec84bfda0f --- lib/NGCP/Panel/Controller/Subscriber.pm | 23 +++++++++++++++++++++-- lib/NGCP/Panel/Role/API/Numbers.pm | 8 ++++---- lib/NGCP/Panel/Utils/Subscriber.pm | 9 ++++----- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index 3655e15b81..cf4732456f 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -3094,11 +3094,30 @@ sub aliases_ajax :Chained('master') :PathPart('ordergroups') :Args(0) :Does(ACL) my @alias_nums = (); my $num_rs = $c->model('DB')->resultset('voip_numbers')->search_rs({ 'subscriber.contract_id' => $subscriber->contract_id, - 'voip_subscribers.id' => undef, + 'primary_number_owners_active.id' => undef, },{ - prefetch => ['subscriber', 'voip_subscribers'], + prefetch => ['subscriber', 'primary_number_owners_active'], }); + + ##other variant of the correct query is: + #my $num_rs = $c->model('DB')->resultset('voip_numbers')->search_rs({ + # 'subscriber.contract_id' => $subscriber->contract_id, + # -or => [ + # 'me.id' => {'!=', { -ident => 'subscriber.primary_number_id' }}, + # 'subscriber.status' => 'terminated', + # ], + #},{ + # join => ['subscriber'], + #}); + ##produces query: + # SELECT `me`.`id`, `me`.`cc`, `me`.`ac`, `me`.`sn`, `me`.`reseller_id`, `me`.`subscriber_id`, `me`.`status`, `me`.`ported`, `me`.`list_timestamp`, ( concat(cc,' ',ac,' ',sn) ) AS `number`, `subscriber`.`username` + # FROM `billing`.`voip_numbers` `me` + # LEFT JOIN `billing`.`voip_subscribers` `subscriber` ON `subscriber`.`id` = `me`.`subscriber_id` + # WHERE ( ( ( `subscriber`.`id` != `subscriber`.`primary_number_id` OR `subscriber`.`status` = 'terminated' ) AND `subscriber`.`contract_id` = '789' ) ) ORDER BY `me`.`id`; + + + my $alias_columns = NGCP::Panel::Utils::Datatables::set_columns($c, [ { name => "id", search => 1, title => $c->loc('#') }, { name => "number", search => 1, title => $c->loc('Number'), literal_sql => "concat(cc,' ',ac,' ',sn)"}, diff --git a/lib/NGCP/Panel/Role/API/Numbers.pm b/lib/NGCP/Panel/Role/API/Numbers.pm index 7dc33262d1..9c6fe8747b 100644 --- a/lib/NGCP/Panel/Role/API/Numbers.pm +++ b/lib/NGCP/Panel/Role/API/Numbers.pm @@ -60,15 +60,15 @@ sub _item_rs { if($c->req->param('type') && $c->req->param('type') eq "primary") { $item_rs = $item_rs->search({ - 'voip_subscribers.id' => { '!=' => undef }, + 'primary_number_owners.id' => { '!=' => undef }, }, { - join => ['subscriber', 'voip_subscribers'], + join => ['subscriber', 'primary_number_owners'], }); } elsif($c->req->param('type') && $c->req->param('type') eq "alias") { $item_rs = $item_rs->search({ - 'voip_subscribers.id' => { '=' => undef }, + 'primary_number_owners.id' => { '=' => undef }, }, { - join => ['subscriber', 'voip_subscribers'], + join => ['subscriber', 'primary_number_owners'], }); } return $item_rs; diff --git a/lib/NGCP/Panel/Utils/Subscriber.pm b/lib/NGCP/Panel/Utils/Subscriber.pm index ea470dd7b5..2cf1c231a7 100644 --- a/lib/NGCP/Panel/Utils/Subscriber.pm +++ b/lib/NGCP/Panel/Utils/Subscriber.pm @@ -1163,10 +1163,11 @@ sub update_subadmin_sub_aliases { my $contract_id = $params{contract_id}; my $alias_selected = $params{alias_selected}; - my $num_rs = $schema->resultset('voip_numbers')->search_rs({ - 'subscriber.contract_id' => $contract_id, + my $num_rs = $c->model('DB')->resultset('voip_numbers')->search_rs({ + 'subscriber.contract_id' => $subscriber->contract_id, + 'primary_number_owners_active.id' => undef, },{ - prefetch => 'subscriber', + prefetch => ['subscriber', 'primary_number_owners_active'], }); my $acli_pref_sub; @@ -1179,8 +1180,6 @@ sub update_subadmin_sub_aliases { if($sadmin->provisioning_voip_subscriber && $c->config->{numbermanagement}->{auto_allow_cli}); for my $num ($num_rs->all) { - next if ($num->voip_subscribers->first); # is a primary number - my $cli = $num->cc . ($num->ac // '') . $num->sn; my $tmpsubscriber;