From 7508cb6c45e5e11ee07e8c2a8935c5c0cfa85622 Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Wed, 11 Oct 2023 15:40:13 +0200 Subject: [PATCH] Add helper functions GetTimeSteps() and GetPriceForTimeSteps(). --- library/src/calculator_functions.cpp | 35 ++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/library/src/calculator_functions.cpp b/library/src/calculator_functions.cpp index a6eedd8..57e518f 100644 --- a/library/src/calculator_functions.cpp +++ b/library/src/calculator_functions.cpp @@ -541,3 +541,38 @@ double Calculator::GetCostFromDuration(Configuration* cfg, uint8_t payment_optio total_cost = 0.0f; return ceil(ret_val); } + +QList Calculator::GetTimeSteps(Configuration const *cfg, int paymentOption) { + QList timeSteps; + + int const pop_id = cfg->PaymentOption.find(paymentOption)->second.pop_id; + + for (auto[itr, rangeEnd] = cfg->PaymentRate.equal_range(pop_id); itr != rangeEnd; ++itr) + { + int const durationId = itr->second.pra_payment_unit_id; + int const durationUnit = cfg->Duration.find(durationId)->second.pun_duration; + timeSteps << durationUnit; + } + + return timeSteps; +} + +double Calculator::GetPriceForTimeStep(Configuration const *cfg, int paymentOption, int timeStep) { + + int const pop_id = cfg->PaymentOption.find(paymentOption)->second.pop_id; + + for (auto[itr, rangeEnd] = cfg->PaymentRate.equal_range(pop_id); itr != rangeEnd; ++itr) + { + int const payment_unit_id = itr->second.pra_payment_unit_id; + int const pun_id = cfg->Duration.find(payment_unit_id)->second.pun_id; + + Q_ASSERT(pun_id == payment_unit_id); + + int const pun_duration = cfg->Duration.find(payment_unit_id)->second.pun_duration; + if (timeStep == pun_duration) { + return itr->second.pra_price; + } + } + + return 0.0; +}