From 1c13a705c8cd038796a7bb9af1e590ebe5a733d1 Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Tue, 7 Nov 2023 14:41:45 +0100 Subject: [PATCH] Implemented GetCostFromDuration() for tariffs with step-structure and no special days --- library/src/calculator_functions.cpp | 45 ++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/library/src/calculator_functions.cpp b/library/src/calculator_functions.cpp index 7e8e3f3..a62f705 100644 --- a/library/src/calculator_functions.cpp +++ b/library/src/calculator_functions.cpp @@ -339,17 +339,38 @@ std::string Calculator::GetDurationFromCost(Configuration* cfg, /////////////////////////////////////// /// +/// + +uint32_t Calculator::GetCostFromDuration(Configuration const* cfg, + QDateTime const &start, + quint64 timeStepInMinutes, + uint8_t paymentMethod) { + // for instance, a tariff as used in Schoenau, Koenigssee: only steps, no + // special days, nonstop. + if (paymentMethod == PaymentMethod::Steps + && cfg->SpecialDays.size() == 0 + && cfg->SpecialDaysWorktime.size() == 0) { + QDateTime const end = start.addSecs(timeStepInMinutes*60); + return GetCostFromDuration(cfg, start, end, paymentMethod); + } + return 0; +} + +uint32_t Calculator::GetCostFromDuration(Configuration const* cfg, + QDateTime const &start, + QDateTime const &end, + uint8_t paymentMethod) { + if (paymentMethod == PaymentMethod::Steps + && cfg->SpecialDays.size() == 0 + && cfg->SpecialDaysWorktime.size() == 0) { + int const timeStepInMinutes = start.secsTo(end) / 60; + return GetPriceForTimeStep(cfg, paymentMethod, timeStepInMinutes); + } + return 0; +} + double Calculator::GetCostFromDuration(Configuration* cfg, uint8_t payment_option, const QDateTime start_datetime, QDateTime & end_datetime, double durationMin, bool nextDay, bool prepaid) { - if (cfg->project.project == "Schoenau" || cfg->project.project == "schoenau") { - static QList const timeSteps = GetTimeSteps(cfg, payment_option); - if (!timeSteps.contains(durationMin)) { - return 0.0f; // error: timestep not valid - } - - return GetPriceForTimeStep(cfg, payment_option, durationMin); - } - // Get input date QDateTime inputDate = start_datetime; @@ -566,7 +587,7 @@ QList Calculator::GetTimeSteps(Configuration const *cfg, int paymentOption) return timeSteps; } -double Calculator::GetPriceForTimeStep(Configuration const *cfg, int paymentOption, int timeStep) { +uint32_t Calculator::GetPriceForTimeStep(Configuration const *cfg, uint8_t paymentOption, int timeStep) { int const pop_id = cfg->PaymentOption.find(paymentOption)->second.pop_id; @@ -579,9 +600,9 @@ double Calculator::GetPriceForTimeStep(Configuration const *cfg, int paymentOpti int const pun_duration = cfg->Duration.find(payment_unit_id)->second.pun_duration; if (timeStep == pun_duration) { - return itr->second.pra_price; + return (uint32_t)(itr->second.pra_price); } } - return 0.0; + return 0; }