From a95a39a557a1c5e66e3e993a2283183c096b774b Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Tue, 12 Dec 2023 10:52:16 +0100 Subject: [PATCH] GetCostFromDuration(): 1: Get payment method from tariff file. 2: Use tariffIs24_7() helper (Tariff for Schoenau is such a case) 3: Add new code for neuhauser/linsinger maschinenbau: Very similar to Schoenau, but here there are extra operating times 6.00-18.00 during the week, 6-12 on Saturday. Check if the current time is inside such time ranges and return associated price. --- library/src/calculator_functions.cpp | 39 +++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/library/src/calculator_functions.cpp b/library/src/calculator_functions.cpp index 8038e0d..677dd13 100644 --- a/library/src/calculator_functions.cpp +++ b/library/src/calculator_functions.cpp @@ -217,12 +217,39 @@ double Calculator::GetCostFromDuration(Configuration* cfg, Q_UNUSED(payment_option); Q_UNUSED(nextDay); - if (cfg->YearPeriod.size() == 0 - && cfg->SpecialDays.size() == 0 - && cfg->SpecialDaysWorktime.size() == 0) - { - end_datetime = start_datetime.addSecs(durationMinutes*60); - return GetCostFromDuration(cfg, start_datetime, end_datetime); + static const PaymentMethod paymentMethodId = Utilities::getPaymentMethodId(cfg); + if (paymentMethodId == PaymentMethod::Steps) { + if (tariffIs24_7(cfg)) { + end_datetime = start_datetime.addSecs(durationMinutes*60); + return GetCostFromDuration(cfg, start_datetime, end_datetime); + } else { + if (Utilities::IsYearPeriodActive(cfg, start_datetime)) { + if (!prepaid) { + BusinessHours businessHours = Utilities::getBusinessHours(cfg, paymentMethodId); + if (businessHours == BusinessHours::OnlyWeekDays) { + int const weekdayId = start_datetime.date().dayOfWeek(); + + using WTIterator = std::multimap::const_iterator; + std::pair p = cfg->WeekDaysWorktime.equal_range(weekdayId); + + for (WTIterator itr = p.first; itr != p.second; ++itr) { + QTime const &from = Utilities::WeekDaysWorkTimeFrom(itr); + QTime const &until = Utilities::WeekDaysWorkTimeUntil(itr); + QTime const &startTime = start_datetime.time(); + + if (from <= startTime && startTime <= until) { + end_datetime = start_datetime.addSecs(durationMinutes*60); + return GetCostFromDuration(cfg, start_datetime, end_datetime); + } + } + } + } + + qCritical() << __PRETTY_FUNCTION__ << "NOT YET IMPLEMENTED"; + end_datetime = QDateTime(); + return 0; + } + } } QDateTime start = start_datetime;