diff --git a/lib/NGCP/Panel/Field/SubscriberLockSelect.pm b/lib/NGCP/Panel/Field/SubscriberLockSelect.pm
index 5254053273..10d2b8fcfa 100644
--- a/lib/NGCP/Panel/Field/SubscriberLockSelect.pm
+++ b/lib/NGCP/Panel/Field/SubscriberLockSelect.pm
@@ -6,12 +6,13 @@ extends 'HTML::FormHandler::Field::Select';
sub build_options {
my ($self) = @_;
- return [
+ return [
{ label => 'none', value => undef },
{ label => 'foreign', value => 1 },
{ label => 'outgoing', value => 2 },
{ label => 'all calls', value => 3 },
{ label => 'global', value => 4 },
+ { label => 'ported', value => 5 },
];
}
diff --git a/lib/NGCP/Panel/Form/BillingProfile/Reseller.pm b/lib/NGCP/Panel/Form/BillingProfile/Reseller.pm
index 25343b62ee..ce2b5be7ab 100644
--- a/lib/NGCP/Panel/Form/BillingProfile/Reseller.pm
+++ b/lib/NGCP/Panel/Form/BillingProfile/Reseller.pm
@@ -93,6 +93,7 @@ has_field 'fraud_interval_lock' => (
{ value => 2, label => 'all outgoing calls' },
{ value => 3, label => 'incoming and outgoing' },
{ value => 4, label => 'global (including CSC)' },
+ { value => 5, label => 'ported (call forwarding only)' },
],
element_attr => {
rel => ['tooltip'],
@@ -128,6 +129,7 @@ has_field 'fraud_daily_lock' => (
{ value => 2, label => 'all outgoing calls' },
{ value => 3, label => 'incoming and outgoing' },
{ value => 4, label => 'global (including CSC)' },
+ { value => 5, label => 'ported (call forwarding only)' },
],
element_attr => {
rel => ['tooltip'],
@@ -181,7 +183,7 @@ has_field 'save' => (
has_block 'fields' => (
tag => 'div',
class => [qw/modal-body/],
- render_list => [qw/handle name prepaid interval_charge interval_free_time interval_free_cash
+ render_list => [qw/handle name prepaid interval_charge interval_free_time interval_free_cash
fraud_interval_limit fraud_interval_lock fraud_interval_notify
fraud_daily_limit fraud_daily_lock fraud_daily_notify fraud_use_reseller_rates
currency id
@@ -207,7 +209,7 @@ sub validate {
my ($self) = @_;
my $c = $self->ctx;
return unless $c;
-
+
my $resource = Storable::dclone($self->values);
if (defined $resource->{reseller}) {
$resource->{reseller_id} = $resource->{reseller}{id};
@@ -215,14 +217,14 @@ sub validate {
} else {
$resource->{reseller_id} = ($c->user->is_superuser ? undef : $c->user->reseller_id);
}
-
+
NGCP::Panel::Utils::Billing::check_profile_update_item($c,$resource,$c->stash->{profile_result},sub {
my ($err,@fields) = @_;
foreach my $field (@fields) {
$self->field($field)->add_error($err);
}
- });
-
+ });
+
}
1
diff --git a/lib/NGCP/Panel/Form/CustomerDailyFraud.pm b/lib/NGCP/Panel/Form/CustomerDailyFraud.pm
index 34803793ec..93716d3b20 100644
--- a/lib/NGCP/Panel/Form/CustomerDailyFraud.pm
+++ b/lib/NGCP/Panel/Form/CustomerDailyFraud.pm
@@ -30,6 +30,7 @@ has_field 'fraud_daily_lock' => (
{ value => 2, label => 'all outgoing calls' },
{ value => 3, label => 'incoming and outgoing' },
{ value => 4, label => 'global (including CSC)' },
+ { value => 5, label => 'ported (call forwarding only)' },
],
);
diff --git a/lib/NGCP/Panel/Form/CustomerMonthlyFraud.pm b/lib/NGCP/Panel/Form/CustomerMonthlyFraud.pm
index 9cff4f888a..19e2b8932d 100644
--- a/lib/NGCP/Panel/Form/CustomerMonthlyFraud.pm
+++ b/lib/NGCP/Panel/Form/CustomerMonthlyFraud.pm
@@ -30,6 +30,7 @@ has_field 'fraud_interval_lock' => (
{ value => 2, label => 'all outgoing calls' },
{ value => 3, label => 'incoming and outgoing' },
{ value => 4, label => 'global (including CSC)' },
+ { value => 5, label => 'ported (call forwarding only)' },
],
);
diff --git a/lib/NGCP/Panel/Form/ProfilePackage/PackageAPI.pm b/lib/NGCP/Panel/Form/ProfilePackage/PackageAPI.pm
index 5d46efe7d2..428601608f 100644
--- a/lib/NGCP/Panel/Form/ProfilePackage/PackageAPI.pm
+++ b/lib/NGCP/Panel/Form/ProfilePackage/PackageAPI.pm
@@ -94,7 +94,7 @@ has_field 'balance_interval_start_mode' => (
{ value => 'create', label => 'upon customer creation' },
{ value => '1st', label => '1st day of month' },
{ value => 'topup_interval', label => 'start interval upon top-up' },
- { value => 'topup', label => 'new interval for each top-up' },
+ { value => 'topup', label => 'new interval for each top-up' },
],
element_attr => {
rel => ['tooltip'],
@@ -165,13 +165,14 @@ has_field 'underrun_lock_level' => (
{ value => '2', label => 'outgoing' },
{ value => '3', label => 'all calls' },
{ value => '4', label => 'global' },
+ { value => '5', label => 'ported (call forwarding only)' },
],
element_attr => {
rel => ['tooltip'],
title => ['The lock level to set all customer\'s subscribers to in case the balance underruns "underrun_lock_threshold".']
},
deflate_value_method => \&_deflate_lock_level,
- inflate_default_method => \&_deflate_lock_level,
+ inflate_default_method => \&_deflate_lock_level,
);
has_field 'underrun_profile_threshold' => (
@@ -213,13 +214,14 @@ has_field 'topup_lock_level' => (
{ value => '2', label => 'outgoing' },
{ value => '3', label => 'all calls' },
{ value => '4', label => 'global' },
+ { value => '5', label => 'ported (call forwarding only)' },
],
element_attr => {
rel => ['tooltip'],
title => ['The lock level to reset all customer\'s subscribers to after a successful top-up (usually 0).']
},
deflate_value_method => \&_deflate_lock_level,
- inflate_default_method => \&_deflate_lock_level,
+ inflate_default_method => \&_deflate_lock_level,
);
has_field 'service_charge' => (
@@ -266,4 +268,4 @@ sub _inflate_lock_level {
return $value;
}
-1;
\ No newline at end of file
+1;
diff --git a/lib/NGCP/Panel/Form/ProfilePackage/Reseller.pm b/lib/NGCP/Panel/Form/ProfilePackage/Reseller.pm
index a3a794633d..0f809b7953 100644
--- a/lib/NGCP/Panel/Form/ProfilePackage/Reseller.pm
+++ b/lib/NGCP/Panel/Form/ProfilePackage/Reseller.pm
@@ -30,7 +30,7 @@ has_field 'name' => (
has_field 'description' => (
type => 'Text',
- label => 'Description',
+ label => 'Description',
required => 1,
maxlength => 255,
element_attr => {
@@ -43,7 +43,7 @@ has_field 'initial_balance' => (
type => 'Money',
label => 'Initial Balance',
#inflate_method => sub { return $_[1] * 100.0 },
- #deflate_method => sub { return $_[1] / 100.0 },
+ #deflate_method => sub { return $_[1] / 100.0 },
element_attr => {
rel => ['tooltip'],
title => ['The initial balance (in cents) that will be set for the very first balance interval.']
@@ -58,7 +58,7 @@ has_field 'initial_profiles' => (
setup_for_js => 1,
do_wrapper => 1,
do_label => 0,
- tags => {
+ tags => {
controls_div => 1,
},
wrapper_class => [qw/hfh-rep/],
@@ -67,7 +67,7 @@ has_field 'initial_profiles' => (
title => ['An array of objects with keys "profile_id" and "network_id" to create profile mappings from when applying this profile package to a customer.']
},
deflate_value_method => \&_deflate_mappings,
- inflate_default_method => \&_inflate_mappings,
+ inflate_default_method => \&_inflate_mappings,
);
has_field 'initial_profiles.row' => (
@@ -94,7 +94,7 @@ has_field 'initial_profiles_add' => (
has_field 'balance_interval' => (
type => '+NGCP::Panel::Field::Interval',
- label => 'Balance Interval',
+ label => 'Balance Interval',
do_label => 1,
tags => {
before_element => '
',
@@ -109,7 +109,7 @@ has_field 'balance_interval_start_mode' => (
{ value => '1st', label => '1st day of month' },
{ value => 'create', label => 'upon customer creation' },
{ value => 'topup_interval', label => 'start interval upon top-up' },
- { value => 'topup', label => 'new interval for each top-up' },
+ { value => 'topup', label => 'new interval for each top-up' },
],
element_attr => {
rel => ['tooltip'],
@@ -134,7 +134,7 @@ has_field 'carry_over_mode' => (
has_field 'timely_duration' => (
type => '+NGCP::Panel::Field::Interval',
- label => '"Timely" Duration',
+ label => '"Timely" Duration',
do_label => 1,
tags => {
before_element => '
',
@@ -144,7 +144,7 @@ has_field 'timely_duration' => (
has_field 'notopup_discard_intervals' => (
type => 'PosInteger',
- label => 'Discard balance after intervals',
+ label => 'Discard balance after intervals',
element_attr => {
rel => ['tooltip'],
title => ['The balance will be discarded if no top-up happened for the the given number of balance intervals.']
@@ -156,7 +156,7 @@ has_field 'underrun_lock_threshold' => (
type => 'Money',
label => 'Underrun lock threshold',
#inflate_method => sub { return $_[1] * 100.0 },
- #deflate_method => sub { return $_[1] / 100.0 },
+ #deflate_method => sub { return $_[1] / 100.0 },
element_attr => {
rel => ['tooltip'],
title => ['The balance threshold (in cents) for the underrun lock level to come into effect.']
@@ -172,21 +172,22 @@ has_field 'underrun_lock_level' => (
{ value => '2', label => 'outgoing' },
{ value => '3', label => 'all calls' },
{ value => '4', label => 'global' },
+ { value => '5', label => 'ported (call forwarding only)' },
],
- label => 'Underrun lock level',
+ label => 'Underrun lock level',
element_attr => {
rel => ['tooltip'],
title => ['The lock level to set all customer\'s subscribers to in case the balance underruns "underrun_lock_threshold".']
},
deflate_value_method => \&_deflate_lock_level,
- inflate_default_method => \&_deflate_lock_level,
+ inflate_default_method => \&_deflate_lock_level,
);
has_field 'underrun_profile_threshold' => (
type => 'Money',
label => 'Underrun profile threshold',
#inflate_method => sub { return $_[1] * 100.0 },
- #deflate_method => sub { return $_[1] / 100.0 },
+ #deflate_method => sub { return $_[1] / 100.0 },
element_attr => {
rel => ['tooltip'],
title => ['The balance threshold (in cents) for underrun profiles to come into effect.']
@@ -199,7 +200,7 @@ has_field 'underrun_profiles' => (
setup_for_js => 1,
do_wrapper => 1,
do_label => 0,
- tags => {
+ tags => {
controls_div => 1,
},
wrapper_class => [qw/hfh-rep/],
@@ -208,7 +209,7 @@ has_field 'underrun_profiles' => (
title => ['An array of objects with keys "profile_id" and "network_id" to create profile mappings from when the balance underruns the "underrun_profile_threshold" value.']
},
deflate_value_method => \&_deflate_mappings,
- inflate_default_method => \&_inflate_mappings,
+ inflate_default_method => \&_inflate_mappings,
);
has_field 'underrun_profiles.row' => (
@@ -241,6 +242,7 @@ has_field 'topup_lock_level' => (
{ value => '2', label => 'outgoing' },
{ value => '3', label => 'all calls' },
{ value => '4', label => 'global' },
+ { value => '5', label => 'ported (call forwarding only)' },
],
label => 'Top-up lock level',
element_attr => {
@@ -255,7 +257,7 @@ has_field 'service_charge' => (
type => 'Money',
label => 'Service Charge',
#inflate_method => sub { return $_[1] * 100.0 },
- #deflate_method => sub { return $_[1] / 100.0 },
+ #deflate_method => sub { return $_[1] / 100.0 },
element_attr => {
rel => ['tooltip'],
title => ['The service charge amount (in cents) will be subtracted from the voucher amount upon every top-up.']
@@ -269,16 +271,16 @@ has_field 'topup_profiles' => (
setup_for_js => 1,
do_wrapper => 1,
do_label => 0,
- tags => {
+ tags => {
controls_div => 1,
},
wrapper_class => [qw/hfh-rep/],
element_attr => {
rel => ['tooltip'],
title => ['An array of objects with keys "profile_id" and "network_id" to create profile mappings from when a customer top-ups with a voucher associated with this profile package.']
- },
+ },
deflate_value_method => \&_deflate_mappings,
- inflate_default_method => \&_inflate_mappings,
+ inflate_default_method => \&_inflate_mappings,
);
has_field 'topup_profiles.row' => (
@@ -383,7 +385,7 @@ sub validate {
my ($self) = @_;
my $c = $self->ctx;
return unless $c;
-
+
my $resource = Storable::dclone($self->values);
if (defined $resource->{reseller}) {
$resource->{reseller_id} = $resource->{reseller}{id};
@@ -396,7 +398,7 @@ sub validate {
$resource->{$_.'_value'} = $resource->{$_}{value} || undef;
delete $resource->{$_};
}
-
+
NGCP::Panel::Utils::ProfilePackages::check_balance_interval(
c => $c,
resource => $resource,
@@ -412,8 +414,8 @@ sub validate {
foreach my $field (@fields) {
$self->field($field)->add_error($err);
}
- });
-
+ });
+
my $mappings_to_create = [];
NGCP::Panel::Utils::ProfilePackages::prepare_profile_package(
c => $c,
@@ -425,7 +427,7 @@ sub validate {
$self->field($field)->add_error($err);
}
});
-
+
}
-1;
\ No newline at end of file
+1;
diff --git a/lib/NGCP/Panel/Form/Topup/Log.pm b/lib/NGCP/Panel/Form/Topup/Log.pm
index 9d02900034..ed919c90c8 100644
--- a/lib/NGCP/Panel/Form/Topup/Log.pm
+++ b/lib/NGCP/Panel/Form/Topup/Log.pm
@@ -128,6 +128,7 @@ has_field 'lock_level_before' => (
{ value => '2', label => 'outgoing' },
{ value => '3', label => 'all calls' },
{ value => '4', label => 'global' },
+ { value => '5', label => 'ported (call forwarding only)' },
],
deflate_value_method => \&_deflate_lock_level,
inflate_default_method => \&_deflate_lock_level,
@@ -144,6 +145,7 @@ has_field 'lock_level_after' => (
{ value => '2', label => 'outgoing' },
{ value => '3', label => 'all calls' },
{ value => '4', label => 'global' },
+ { value => '5', label => 'ported (call forwarding only)' },
],
deflate_value_method => \&_deflate_lock_level,
inflate_default_method => \&_deflate_lock_level,
diff --git a/lib/NGCP/Panel/Utils/Subscriber.pm b/lib/NGCP/Panel/Utils/Subscriber.pm
index 6a907a5167..2260bcb17e 100644
--- a/lib/NGCP/Panel/Utils/Subscriber.pm
+++ b/lib/NGCP/Panel/Utils/Subscriber.pm
@@ -19,6 +19,7 @@ my %LOCK = (
2, 'outgoing',
3, 'incoming and outgoing',
4, 'global',
+ 5, 'ported',
);
@@ -26,7 +27,7 @@ sub period_as_string {
my $set = shift;
my @wdays = (qw/
- invalid Sunday Monday Tuesday Wednesday Thursday Friday Saturday
+ invalid Sunday Monday Tuesday Wednesday Thursday Friday Saturday
/);
my @months = (qw/
invalid January February March April May June July August September October November December
@@ -100,7 +101,7 @@ sub destination_as_string {
sub lock_provisoning_voip_subscriber {
my %params = @_;
-
+
NGCP::Panel::Utils::Preferences::set_provisoning_voip_subscriber_first_int_attr_value(%params,
value => $params{level},
attribute => 'lock'
@@ -109,7 +110,7 @@ sub lock_provisoning_voip_subscriber {
sub get_provisoning_voip_subscriber_lock_level {
my %params = @_;
-
+
NGCP::Panel::Utils::Preferences::get_provisoning_voip_subscriber_first_int_attr_value(%params,
attribute => 'lock'
);
@@ -117,12 +118,12 @@ sub get_provisoning_voip_subscriber_lock_level {
sub switch_prepaid {
my %params = @_;
-
+
NGCP::Panel::Utils::Preferences::set_provisoning_voip_subscriber_first_int_attr_value(%params,
value => ($params{prepaid} ? 1 : 0),
attribute => 'prepaid'
- );
-
+ );
+
}
sub switch_prepaid_contract {
@@ -134,7 +135,7 @@ sub switch_prepaid_contract {
prov_subscriber => $subscriber->provisioning_voip_subscriber,
) if ($subscriber->provisioning_voip_subscriber);
}
-
+
}
sub get_lock_string {
@@ -266,9 +267,9 @@ sub create_subscriber {
foreach my $ext(0 .. int("9" x $len)) {
$range->{e164range}{sn} = sprintf("%s%0".$len."d", $range->{e164range}{snbase}, $ext);
push @alias_numbers, { e164 => {
- cc => $range->{e164range}{cc},
- ac => $range->{e164range}{ac},
- sn => $range->{e164range}{sn},
+ cc => $range->{e164range}{cc},
+ ac => $range->{e164range}{ac},
+ sn => $range->{e164range}{sn},
}};
}
}
@@ -318,8 +319,8 @@ sub create_subscriber {
$preferences->{cc} = $params->{e164}{cc}
if(defined $params->{e164}{cc} && length($params->{e164}{cc}) > 0);
- update_preferences(c => $c,
- prov_subscriber => $prov_subscriber,
+ update_preferences(c => $c,
+ prov_subscriber => $prov_subscriber,
preferences => $preferences
);
@@ -366,12 +367,12 @@ sub update_preferences {
unless(defined $preferences->{$k}) {
$pref->first->delete;
} else {
- $pref->first->update({
+ $pref->first->update({
'value' => $preferences->{$k},
});
}
} else {
- $pref->create({
+ $pref->create({
'value' => $preferences->{$k},
}) if(defined $preferences->{$k});
}
@@ -415,9 +416,9 @@ sub get_pbx_subscribers_by_ids{
my (@items,@absent_items_ids);
@items = $pbx_subscribers_rs->all();
-
+
my %items_ids_exists = map{ $_->id => 0 } @items;
-
+
if(@$ids){
my $order_hash = { %items_ids_exists };
@$order_hash{@$ids} = (1..$#$ids+1);
@@ -427,7 +428,7 @@ sub get_pbx_subscribers_by_ids{
if($#items < $#$ids){
@absent_items_ids = grep { !exists $items_ids_exists{$_} } @{$params{ids}};
}
-
+
return wantarray ? (\@items, (( 0 < @absent_items_ids) ? \@absent_items_ids : undef )) : \@items;
}
sub get_subscriber_pbx_items{
@@ -487,18 +488,18 @@ sub manage_pbx_groups{
my $subscriber = $params{subscriber};
my $customer = $params{customer} // $subscriber->contract;
- my $groups = $params{groups} // ( @$group_ids ? get_pbx_subscribers_by_ids(
- c => $c,
- schema => $schema,
- ids => $group_ids,
- customer_id => $customer->id,
+ my $groups = $params{groups} // ( @$group_ids ? get_pbx_subscribers_by_ids(
+ c => $c,
+ schema => $schema,
+ ids => $group_ids,
+ customer_id => $customer->id,
is_group => 1,
) : [] );
- my $groupmembers = $params{groupmembers} // ( @$groupmember_ids ? get_pbx_subscribers_by_ids(
- c => $c,
- schema => $schema,
- ids => $groupmember_ids,
- customer_id => $customer->id,
+ my $groupmembers = $params{groupmembers} // ( @$groupmember_ids ? get_pbx_subscribers_by_ids(
+ c => $c,
+ schema => $schema,
+ ids => $groupmember_ids,
+ customer_id => $customer->id,
is_group => 0,
) : [] );
@@ -506,13 +507,13 @@ sub manage_pbx_groups{
my $prov_subscriber = $subscriber->provisioning_voip_subscriber;
my $subscriber_uri = get_pbx_group_member_name( subscriber => $subscriber );
my $member_preferences_rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
- c => $c,
- attribute => 'cloud_pbx_hunt_group',
+ c => $c,
+ attribute => 'cloud_pbx_hunt_group',
)->search_rs({
subscriber_id => { -in => [ $prov_subscriber->voip_pbx_groups->get_column('group_id')->all ] },
value => $subscriber_uri,
});
-
+
$member_preferences_rs->delete;
$prov_subscriber->voip_pbx_groups->delete;
@@ -524,8 +525,8 @@ sub manage_pbx_groups{
group_id => $group_prov_subscriber->id,
});
my $preferences_rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
- c => $c,
- attribute => 'cloud_pbx_hunt_group',
+ c => $c,
+ attribute => 'cloud_pbx_hunt_group',
prov_subscriber => $group_prov_subscriber,
);
$preferences_rs->create({ value => $subscriber_uri });
@@ -534,8 +535,8 @@ sub manage_pbx_groups{
#delete old members to support correct order
$prov_subscriber->voip_pbx_group_members->delete;
my $group_preferences_rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
- c => $c,
- attribute => 'cloud_pbx_hunt_group',
+ c => $c,
+ attribute => 'cloud_pbx_hunt_group',
prov_subscriber => $prov_subscriber,
);
$group_preferences_rs->delete;
@@ -591,11 +592,11 @@ sub update_subscriber_numbers {
my $cli_pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'cli', prov_subscriber => $prov_subs);
if(defined $cli_pref) {
- if($cli_pref->first
- && defined $primary_number_old
+ if($cli_pref->first
+ && defined $primary_number_old
&& ( $cli_pref->first->value eq number_as_string($primary_number_old) )
&& $c->config->{numbermanagement}->{auto_sync_cli}){
-
+
$cli_pref->delete;
}
}
@@ -658,17 +659,17 @@ sub update_subscriber_numbers {
my $cli_pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'cli', prov_subscriber => $prov_subs);
if($cli_pref->first) {
- if(defined $primary_number_old
- && ( number_as_string($primary_number_old) eq $cli_pref->first->value )
+ if(defined $primary_number_old
+ && ( number_as_string($primary_number_old) eq $cli_pref->first->value )
&& $c->config->{numbermanagement}->{auto_sync_cli} ){
-
+
$cli_pref->first->update({ value => $primary_number->{cc} . ($primary_number->{ac} // '') . $primary_number->{sn} });
}
} else {
if( ! defined $primary_number_old && $c->config->{numbermanagement}->{auto_sync_cli} ){
$cli_pref->create({
subscriber_id => $prov_subs->id,
- value => $primary_number->{cc} . ($primary_number->{ac} // '') . $primary_number->{sn}
+ value => $primary_number->{cc} . ($primary_number->{ac} // '') . $primary_number->{sn}
});
}
}
@@ -680,8 +681,8 @@ sub update_subscriber_numbers {
if(defined $billing_subs->primary_number
&& $billing_subs->primary_number_id != $number->id) {
- $old_cli = $billing_subs->primary_number->cc .
- ($billing_subs->primary_number->ac // '') .
+ $old_cli = $billing_subs->primary_number->cc .
+ ($billing_subs->primary_number->ac // '') .
$billing_subs->primary_number->sn;
$billing_subs->primary_number->delete;
}
@@ -952,8 +953,8 @@ sub terminate {
my $prov_subscriber = $subscriber->provisioning_voip_subscriber;
if($prov_subscriber && $prov_subscriber->profile_id) {
NGCP::Panel::Utils::Events::insert(
- c => $c, schema => $schema,
- subscriber => $subscriber, type => 'stop_profile',
+ c => $c, schema => $schema,
+ subscriber => $subscriber, type => 'stop_profile',
old => $prov_subscriber->profile_id, new => undef,
);
}
@@ -1447,7 +1448,7 @@ sub mark_voicemail_read{
sub number_as_string{
my ($number_row, %params) = @_;
- return 'HASH' eq ref $number_row
+ return 'HASH' eq ref $number_row
? $number_row->{cc} . ($number_row->{ac} // '') . $number_row->{sn}
: $number_row->cc . ($number_row->ac // '') . $number_row->sn;
}
diff --git a/share/templates/customer/details.tt b/share/templates/customer/details.tt
index f8a6b803b3..6abc247c91 100644
--- a/share/templates/customer/details.tt
+++ b/share/templates/customer/details.tt
@@ -11,6 +11,7 @@
{ level = 2, text = c.loc("all outgoing calls") },
{ level = 3, text = c.loc("incoming and outgoing") },
{ level = 4, text = c.loc("global (including web login)") },
+ { level = 5, text = c.loc("ported (call forwarding only)") },
];
-%]
@@ -332,8 +333,8 @@
[% END -%]
- [% IF
- c.config.features.cloudpbx &&
+ [% IF
+ c.config.features.cloudpbx &&
(c.user.roles == 'admin' || c.user.roles == 'reseller' || c.user.roles == 'subscriberadmin')
-%]
@@ -342,7 +343,7 @@
-
+
[%
helper.name = c.loc('Sound Set');
helper.identifier = 'sound_sets';
@@ -383,12 +384,12 @@
[% IF c.user.billing_data -%]
[% c.loc('Top-up Voucher') %]
- [% END -%]
+ [% END -%]
[% c.loc('Top-up Cash') %]
[% c.loc('Set Cash Balance') %]
- [% END -%]
+ [% END -%]
@@ -411,11 +412,11 @@
| [% c.loc('Free time balance') %] |
[% balance.free_time_balance %] |
[% c.loc('Free time spent') %] |
- [% balance.free_time_balance_interval %] |
+ [% balance.free_time_balance_interval %] |
-
-
+
+
|
@@ -429,19 +430,19 @@
| [% c.loc('Interval to') %] |
[% balance.end %] |
-
+
| [% c.loc('"Timely" top-ups from') %] |
[% timely_topup_start %] |
[% c.loc('"Timely" top-ups to') %] |
[% timely_topup_end %] |
-
+
| [% c.loc('Balance will be discarded, if no tup-up happens until') %] |
[% notopup_expiration %] |
-
-
+
+
@@ -466,15 +467,15 @@
[% c.loc('Balance threshold when underrun profiles get applied') %] |
[% package.underrun_profile_threshold ? money_format( package.underrun_lock_threshold / 100 ) : '' %] |
[% c.loc('Balance threshold when subscribers will be locked') %] |
-
[% package.underrun_lock_threshold ? money_format( package.underrun_lock_threshold / 100 ) : '' %] |
+
[% package.underrun_lock_threshold ? money_format( package.underrun_lock_threshold / 100 ) : '' %] |
-
-
+
+
-
+
@@ -483,8 +484,8 @@
-
-[%
+
+[%
helper.name = c.loc('Balance Interval');
helper.identifier = 'balance_intervals';
helper.dt_columns = balanceinterval_dt_columns;
@@ -497,7 +498,7 @@
%]
-
+
@@ -506,8 +507,8 @@
-
-[%
+
+[%
helper.name = c.loc('Topuplog');
helper.identifier = 'topup_logs';
helper.dt_columns = topuplog_dt_columns;
@@ -520,8 +521,8 @@
%]
-
-
+
+
[% IF c.user.roles == 'admin' || c.user.roles == 'reseller' %]
@@ -558,11 +559,11 @@
[% fraud.fraud_interval_notify.defined ? fraud.fraud_interval_notify : fraud_def_message %] |
-
[% c.loc('Edit') %]
-
[% c.loc('Delete') %]
@@ -587,11 +588,11 @@
[% fraud.fraud_daily_notify.defined ? fraud.fraud_daily_notify : fraud_def_message %] |
-
+
[%
helper.name = c.loc('Invoice');
helper.identifier = 'invoices';
@@ -775,7 +776,7 @@ if(!linekeys){
[%END%]
};
[%END%]
- linekeys['[% line.linerange_id %].[% line.key_num %].[% line.extension_unit %]'] = {
+ linekeys['[% line.linerange_id %].[% line.key_num %].[% line.extension_unit %]'] = {
'mode': '[% line.line_type %]',
'sub': '[% line.provisioning_voip_subscriber.username %]@[% line.provisioning_voip_subscriber.domain.domain%]',
'subid': [% line.provisioning_voip_subscriber.id %],
@@ -827,7 +828,7 @@ function create_ranges_annotations(id,type,ranges){
}
[% END -%]
var action = ' ' +
- ' | |