From 57c6cf58ea01f06669e0524b25592b9ff1eb76e8 Mon Sep 17 00:00:00 2001 From: Rene Krenn Date: Fri, 6 Oct 2017 00:17:06 +0200 Subject: [PATCH] TT#21871 add "ratio" field to /api/customerbalances + to be used by ngcp-credit-warning script exclusively. Change-Id: Ia549e5dab2ef729b56a521c2793b2dd5a74474e2 --- lib/NGCP/Panel/Form/Balance/CustomerBalanceAPI.pm | 13 ++++++++++++- lib/NGCP/Panel/Role/API/CustomerBalances.pm | 7 +++++++ lib/NGCP/Panel/Utils/ProfilePackages.pm | 12 ++++++------ 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/lib/NGCP/Panel/Form/Balance/CustomerBalanceAPI.pm b/lib/NGCP/Panel/Form/Balance/CustomerBalanceAPI.pm index 11ea8a8fd6..57ba150890 100644 --- a/lib/NGCP/Panel/Form/Balance/CustomerBalanceAPI.pm +++ b/lib/NGCP/Panel/Form/Balance/CustomerBalanceAPI.pm @@ -24,10 +24,21 @@ has_field 'free_time_spent' => ( }, ); +has_field 'ratio' => ( + type => 'Float', + required => 0, + #precision => 6, + #decimal_symbol => '.', + element_attr => { + rel => ['tooltip'], + title => ['The ratio to reduce free cash/time in the initial balance period (month), when the customer was created. Readonly.'], + }, +); + has_block 'fields' => ( tag => 'div', class => [qw/modal-body/], - render_list => [qw/cash_balance cash_debit free_time_balance free_time_spent/], + render_list => [qw/cash_balance cash_debit free_time_balance free_time_spent ratio/], ); 1; diff --git a/lib/NGCP/Panel/Role/API/CustomerBalances.pm b/lib/NGCP/Panel/Role/API/CustomerBalances.pm index 40034d95ee..7653093608 100644 --- a/lib/NGCP/Panel/Role/API/CustomerBalances.pm +++ b/lib/NGCP/Panel/Role/API/CustomerBalances.pm @@ -51,6 +51,13 @@ sub hal_from_item { $resource{cash_debit} = (delete $resource{cash_balance_interval}) / 100.0; $resource{free_time_spent} = delete $resource{free_time_balance_interval}; + my $contract_create = NGCP::Panel::Utils::DateTime::set_local_tz($item->contract->create_timestamp // $item->contract->modify_timestamp); + if (NGCP::Panel::Utils::DateTime::set_local_tz($item->start) <= $contract_create && (NGCP::Panel::Utils::DateTime::is_infinite_future($item->end) || NGCP::Panel::Utils::DateTime::set_local_tz($item->end) >= $contract_create)) { + $resource{ratio} = NGCP::Panel::Utils::ProfilePackages::get_free_ratio($contract_create,NGCP::Panel::Utils::DateTime::set_local_tz($item->start),NGCP::Panel::Utils::DateTime::set_local_tz($item->end)); + } else { + $resource{ratio} = 1.0; + } + my $hal = NGCP::Panel::Utils::DataHal->new( links => [ NGCP::Panel::Utils::DataHalLink->new( diff --git a/lib/NGCP/Panel/Utils/ProfilePackages.pm b/lib/NGCP/Panel/Utils/ProfilePackages.pm index 57cf6194bb..a58168432c 100644 --- a/lib/NGCP/Panel/Utils/ProfilePackages.pm +++ b/lib/NGCP/Panel/Utils/ProfilePackages.pm @@ -634,10 +634,10 @@ sub _get_resized_balance_values { if (NGCP::Panel::Utils::DateTime::set_local_tz($balance->start) <= $contract_create && (NGCP::Panel::Utils::DateTime::is_infinite_future($balance->end) || NGCP::Panel::Utils::DateTime::set_local_tz($balance->end) >= $contract_create)) { my $bm = get_actual_billing_mapping(schema => $schema, contract => $contract, now => $contract_create); #now => $balance->start); #end); !? my $profile = $bm->billing_mappings->first->billing_profile; - my $old_ratio = _get_free_ratio($contract_create,NGCP::Panel::Utils::DateTime::set_local_tz($balance->start),NGCP::Panel::Utils::DateTime::set_local_tz($balance->end)); + my $old_ratio = get_free_ratio($contract_create,NGCP::Panel::Utils::DateTime::set_local_tz($balance->start),NGCP::Panel::Utils::DateTime::set_local_tz($balance->end)); my $old_free_cash = $old_ratio * ($profile->interval_free_cash // _DEFAULT_PROFILE_FREE_CASH); my $old_free_time = $old_ratio * ($profile->interval_free_time // _DEFAULT_PROFILE_FREE_TIME); - my $new_ratio = _get_free_ratio($contract_create,NGCP::Panel::Utils::DateTime::set_local_tz($balance->start),$etime); + my $new_ratio = get_free_ratio($contract_create,NGCP::Panel::Utils::DateTime::set_local_tz($balance->start),$etime); my $new_free_cash = $new_ratio * ($profile->interval_free_cash // _DEFAULT_PROFILE_FREE_CASH); my $new_free_time = $new_ratio * ($profile->interval_free_time // _DEFAULT_PROFILE_FREE_TIME); $cash_balance += $new_free_cash - $old_free_cash; @@ -670,7 +670,7 @@ sub _get_balance_values { my $contract_create = NGCP::Panel::Utils::DateTime::set_local_tz($contract->create_timestamp // $contract->modify_timestamp); $ratio = 1.0; if (NGCP::Panel::Utils::DateTime::set_local_tz($last_balance->start) <= $contract_create && NGCP::Panel::Utils::DateTime::set_local_tz($last_balance->end) >= $contract_create) { #$last_balance->end is never +inf here - $ratio = _get_free_ratio($contract_create,NGCP::Panel::Utils::DateTime::set_local_tz($last_balance->start),NGCP::Panel::Utils::DateTime::set_local_tz($last_balance->end)); + $ratio = get_free_ratio($contract_create,NGCP::Panel::Utils::DateTime::set_local_tz($last_balance->start),NGCP::Panel::Utils::DateTime::set_local_tz($last_balance->end)); } my $old_free_cash = $ratio * ($last_profile->interval_free_cash // _DEFAULT_PROFILE_FREE_CASH); $cash_balance = $last_balance->cash_balance; @@ -684,7 +684,7 @@ sub _get_balance_values { $ratio = 1.0; } else { $cash_balance = (defined $initial_balance ? $initial_balance : _DEFAULT_INITIAL_BALANCE); - $ratio = _get_free_ratio($now,$stime, $etime); + $ratio = get_free_ratio($now,$stime, $etime); } my $free_cash = $ratio * ($profile->interval_free_cash // _DEFAULT_PROFILE_FREE_CASH); @@ -702,7 +702,7 @@ sub _get_balance_values { } -sub _get_free_ratio { +sub get_free_ratio { my ($now,$stime,$etime) = @_; if (!NGCP::Panel::Utils::DateTime::is_infinite_future($etime)) { my $ctime; @@ -829,7 +829,7 @@ sub _add_interval { } sub _add_second { - + my ($dt,$skip_leap_seconds) = @_; $dt->add(seconds => 1); while ($skip_leap_seconds and $dt->second() >= 60) {