diff --git a/lib/NGCP/Panel/Controller/Customer.pm b/lib/NGCP/Panel/Controller/Customer.pm
index 9f0330ffdd..e62454e6ec 100644
--- a/lib/NGCP/Panel/Controller/Customer.pm
+++ b/lib/NGCP/Panel/Controller/Customer.pm
@@ -381,43 +381,54 @@ sub base :Chained('list_customer') :PathPart('') :CaptureArgs(1) {
{ name => "provisioning_voip_subscriber.pbx_hunt_policy", search => 1, title => $c->loc("Hunt Policy") },
{ name => "provisioning_voip_subscriber.pbx_hunt_timeout", search => 1, title => $c->loc("Serial Hunt Timeout") },
]);
-
- $c->stash->{subscribers} = $c->model('DB')->resultset('voip_subscribers')->search({
+ my $subscribers_rs = $c->model('DB')->resultset('voip_subscribers')->search({
contract_id => $contract_id,
status => { '!=' => 'terminated' },
- 'provisioning_voip_subscriber.is_pbx_group' => 0,
}, {
- join => 'provisioning_voip_subscriber',
- order_by => [qw/username/],
+ alias => 'me',
+ from => [
+ { 'me' => 'billing.voip_subscribers' },
+ [
+ { 'provisioning_voip_subscriber' => 'provisioning.voip_subscribers', '-join_type' => 'left' },
+ [
+ { 'provisioning_voip_subscriber.uuid' => { -ident => 'me.uuid' } },
+ ],
+ ],
+ [
+ { 'attribute' => 'provisioning.voip_preferences', '-join_type' => 'left' },
+ [
+ {
+ '-and' => [
+ {
+ 'attribute.attribute' => { '-value' => 'display_name'} ,
+ },
+ ],
+ },
+ ],
+ ],
+ [
+ { 'voip_usr_preferences' => 'provisioning.voip_usr_preferences', '-join_type' => 'left' },
+ [
+ {
+ '-and' => [
+ {
+ 'voip_usr_preferences.attribute_id' => { '-ident' => 'attribute.id'} ,
+ 'voip_usr_preferences.subscriber_id' => { -ident => 'provisioning_voip_subscriber.id' }
+ },
+ ],
+ },
+ ],
+ ],
+ ],
+ '+select' => [\'ifnull(voip_usr_preferences.value, me.username)'],
+ '+as' => ['username_combined'],
+ order_by => [\'ifnull(voip_usr_preferences.value, me.username)','pbx_extension'],
});
- if($c->config->{features}->{cloudpbx}) {
-
- # we maintain the display names in a separate hash identified by
- # subscriber uuid, because if we put the display name in the
- # above query, we'll implicitly filter subscribers without a
- # display name due to the inner join
- my $subscriber_display_rs = $c->model('DB')->resultset('voip_subscribers')->search({
- contract_id => $contract_id,
- status => { '!=' => 'terminated' },
- 'provisioning_voip_subscriber.is_pbx_group' => 0,
- 'attribute.attribute' => 'display_name',
- }, {
- join => { 'provisioning_voip_subscriber' => { 'voip_usr_preferences' => 'attribute' }},
- '+select' => ['voip_usr_preferences.value'],
- '+as' => ['display_name'],
- order_by => [qw/voip_usr_preferences.value pbx_extension/],
- });
- foreach my $sub ($subscriber_display_rs->all) {
- $c->stash->{subscriber_displays}->{$sub->uuid} = $sub->get_column('display_name');
- }
- $c->stash->{pbx_groups} = NGCP::Panel::Utils::Subscriber::get_pbx_subscribers_rs(
- c => $c,
- schema => $c->model('DB'),
- customer_id => $contract_id,
- is_group => 1,
- );
+ $c->stash->{subscribers} = $subscribers_rs->search_rs({'provisioning_voip_subscriber.is_pbx_group' => 0});
+ if($c->config->{features}->{cloudpbx}) {
+ $c->stash->{pbx_groups} = $subscribers_rs->search_rs({'provisioning_voip_subscriber.is_pbx_group' => 1});
}
my $field_devs = [ $c->model('DB')->resultset('autoprov_field_devices')->search({
diff --git a/share/templates/customer/details.tt b/share/templates/customer/details.tt
index c8b714c5a0..dca2658962 100644
--- a/share/templates/customer/details.tt
+++ b/share/templates/customer/details.tt
@@ -967,10 +967,10 @@ function create_ranges_annotations(id,type,ranges){
'' +
'