MT#19015 correctly use notopup_interval for periodic balance intervals

+creation of profile packages with hour and minute
 intervals was disabled in api-balanceintervals.t

Change-Id: Idd18ced9704522bf5d919155d866c91b81526b92
changes/53/5753/4
Rene Krenn 10 years ago
parent 17e7e848e2
commit 9d5085a8ba

@ -143,7 +143,7 @@ has_field 'notopup_discard_intervals' => (
type => 'PosInteger',
element_attr => {
rel => ['tooltip'],
title => ['The balance will be discarded if no top-up happened for the the given number of balance intervals.']
title => ['The balance will be discarded if no top-up happened for the the given number of balance interval units.']
},
);

@ -147,7 +147,7 @@ has_field 'notopup_discard_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.']
title => ['The balance will be discarded if no top-up happened for the the given number of balance interval units.']
},
);

@ -834,19 +834,27 @@ sub _get_notopup_expiration {
my $notopup_expiration = undef;
if ($notopup_discard_intervals) {
#take the start of the latest interval where a topup occured,
#add the allowed number+1 of the current package' intervals.
#the balance is discarded if the start of the next package
#add the allowed number+1 of the current package' interval units.
#the balance is discarded if the start of the next package
#exceed this calculated expiration date.
my $last_balance_w_topup;
if ($last_balance) {
$last_balance_w_topup = $last_balance;
} else {
$last_balance_w_topup = $contract->contract_balances->search({ topup_count => { '>' => 0 } },{ order_by => { '-desc' => 'end'},})->first;
my $start = undef;
if ($last_balance) { #infinite end means its a topup interval
$start = $last_balance->start;
} else { #find last interval with topup
my $last_balance_w_topup = $contract->contract_balances->search({ topup_count => { '>' => 0 } },{ order_by => { '-desc' => 'end'},})->first;
$last_balance_w_topup = $contract->contract_balances->search(undef,{ order_by => { '-asc' => 'start'},})->first unless $last_balance_w_topup;
$notopup_discard_intervals += 1;
if ($last_balance_w_topup) {
if (NGCP::Panel::Utils::DateTime::is_infinite_future($last_balance_w_topup->end)) {
# if the above queries hit the most recent, open end interval:
$start = $last_balance_w_topup->start;
} else {
# count expiration from the start of the next interval:
$start = $last_balance_w_topup->end->clone->add(seconds => 1);
}
}
}
$notopup_expiration = _add_interval(NGCP::Panel::Utils::DateTime::set_local_tz($last_balance_w_topup->start),$interval_unit,$notopup_discard_intervals,
_START_MODE_PRESERVE_EOM->{$start_mode} ? NGCP::Panel::Utils::DateTime::set_local_tz($contract->create_timestamp // $contract->modify_timestamp) : undef) if $last_balance_w_topup;
$notopup_expiration = _add_interval(NGCP::Panel::Utils::DateTime::set_local_tz($start),$interval_unit,$notopup_discard_intervals,
_START_MODE_PRESERVE_EOM->{$start_mode} ? NGCP::Panel::Utils::DateTime::set_local_tz($contract->create_timestamp // $contract->modify_timestamp) : undef) if $start;
}
return $notopup_expiration;
}

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save