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;