From 60002404daa8a44856c0c57793ede34a989aa089 Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Tue, 12 Dec 2023 10:43:16 +0100 Subject: [PATCH] GetDurationFromCost(): 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 | 42 ++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/library/src/calculator_functions.cpp b/library/src/calculator_functions.cpp index 9c2d690..a5f3c76 100644 --- a/library/src/calculator_functions.cpp +++ b/library/src/calculator_functions.cpp @@ -128,14 +128,40 @@ std::string Calculator::GetDurationFromCost(Configuration* cfg, // Get input date QDateTime inputDate = QDateTime::fromString(start_datetime,Qt::ISODate); - // use tariff with structure as for instance Schnau, Koenigsee: - // without given YearPeriod, SpecialDays and SpecialDaysWorktime - if (cfg->YearPeriod.size() == 0 - && cfg->SpecialDays.size() == 0 - && cfg->SpecialDaysWorktime.size() == 0) - { - inputDate = inputDate.addSecs(GetDurationForPrice(cfg, price) * 60); - return inputDate.toString(Qt::ISODate).toStdString(); + static const PaymentMethod paymentMethodId = Utilities::getPaymentMethodId(cfg); + if (paymentMethodId == PaymentMethod::Steps) { + if (tariffIs24_7(cfg)) { + // use tariff with structure as for instance Schoenau, Koenigsee: + // without given YearPeriod, SpecialDays and SpecialDaysWorktime + inputDate = inputDate.addSecs(GetDurationForPrice(cfg, price) * 60); + return inputDate.toString(Qt::ISODate).toStdString(); + } else { + QDateTime const &start = QDateTime::fromString(start_datetime, Qt::ISODate); + if (Utilities::IsYearPeriodActive(cfg, start)) { + if (!prepaid) { + BusinessHours businessHours = Utilities::getBusinessHours(cfg, paymentMethodId); + if (businessHours == BusinessHours::OnlyWeekDays) { + int const weekdayId = start.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.time(); + + if (from <= startTime && startTime <= until) { + return inputDate.addSecs(GetDurationForPrice(cfg, price) * 60).toString(Qt::ISODate).toStdString(); + } + } + } + } + + qCritical() << __PRETTY_FUNCTION__ << "NOT YET IMPLEMENTED"; + return 0; + } + } } Ticket t = private_GetDurationFromCost(cfg, inputDate, price, prepaid);