From 7ee90a9e8a7b64a02e8e77e7eb9817ebea1956dd Mon Sep 17 00:00:00 2001 From: Siegfried Siegert Date: Thu, 23 Nov 2023 15:06:57 +0100 Subject: [PATCH] Fix: GetDurationForPrice return proper value not only '0' --- .../include/mobilisis/calculator_functions.h | 3 --- library/src/calculator_functions.cpp | 21 ++++++++++++------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/library/include/mobilisis/calculator_functions.h b/library/include/mobilisis/calculator_functions.h index 413429b..e820bb9 100644 --- a/library/include/mobilisis/calculator_functions.h +++ b/library/include/mobilisis/calculator_functions.h @@ -43,9 +43,6 @@ private: // For tariff of following structure: only steps, no special days, nonstop. uint32_t GetCostFromDuration(Configuration *cfg, QDateTime const &start, quint64 durationMinutes) const; uint32_t GetCostFromDuration(Configuration *cfg, QDateTime const &start, QDateTime const &end) const; - - - // uint32_t GetPriceForTimeStep(Configuration *cfg, int timeStep) const; uint32_t GetDurationForPrice(Configuration *cfg, int price) const; }; diff --git a/library/src/calculator_functions.cpp b/library/src/calculator_functions.cpp index 65b7a9c..a47f0d9 100644 --- a/library/src/calculator_functions.cpp +++ b/library/src/calculator_functions.cpp @@ -634,22 +634,29 @@ uint32_t Calculator::GetPriceForTimeStep(Configuration *cfg, int timeStep) const return 0; } -uint32_t Calculator::GetDurationForPrice(Configuration *cfg, int price) const { - int const pop_id = cfg->getPaymentOptions().pop_id; +/** + * private: read price directly from config file (used with PaymentMethod::Steps) + * + * return duration in minutes for greatest pra_price < price + */ +uint32_t Calculator::GetDurationForPrice(Configuration *cfg, int price) const { + int const pop_id = cfg->getPaymentOptions().pop_id; + uint32_t duration = 0; 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 durationId = itr->second.pra_payment_unit_id; int const pra_price = itr->second.pra_price; + uint32_t const durationUnit = cfg->Duration.find(durationId)->second.pun_duration; if (price == pra_price) { - int const durationId = itr->second.pra_payment_unit_id; - int const durationUnit = cfg->Duration.find(durationId)->second.pun_duration; - return durationUnit; } + if (pra_price < price) { + duration = durationUnit; + } } - return 0; + return duration; }