ComputeDurationFromCost():

Use helper function computeMinutesUntilCarryOverEnd() to compute
	the offset until the end of the carry-over-range.
This commit is contained in:
Gerhard Hoffmann 2024-10-10 11:36:14 +02:00
parent 7e2f40a7b5
commit 5e673788b4

View File

@ -458,7 +458,7 @@ Calculator::ComputeDurationFromCost(Configuration *cfg,
arg(cost).arg(nettoParktimeForCost); arg(cost).arg(nettoParktimeForCost);
int cnt = 0; int cnt = 0;
while (++cnt < 1000 && netto_parking_time_in_minutes < nettoParktimeForCost) { while (++cnt < 10 && netto_parking_time_in_minutes < nettoParktimeForCost) {
// qCritical() << __func__ << ":" << __LINE__ << "cnt [" << cnt; // qCritical() << __func__ << ":" << __LINE__ << "cnt [" << cnt;
brutto_parking_time_in_minutes = free_parking_time_in_minutes + netto_parking_time_in_minutes; brutto_parking_time_in_minutes = free_parking_time_in_minutes + netto_parking_time_in_minutes;
@ -555,8 +555,9 @@ Calculator::ComputeDurationFromCost(Configuration *cfg,
.arg(free_parking_time_in_minutes); .arg(free_parking_time_in_minutes);
if (std::optional<ATBTariffCarryOver> co = getCarryOver(cfg, dt)) { if (std::optional<ATBTariffCarryOver> co = getCarryOver(cfg, dt)) {
TimeRange const &carryOverTimeRange = co.value().m_range; int minutes = co.value().computeMinutesUntilCarryOverEnd(dt);
free_parking_time_in_minutes += carryOverTimeRange.m_duration; if (minutes > 0) {
free_parking_time_in_minutes += minutes;
brutto_parking_time_in_minutes = free_parking_time_in_minutes + netto_parking_time_in_minutes; brutto_parking_time_in_minutes = free_parking_time_in_minutes + netto_parking_time_in_minutes;
dt = inputDate.addSecs(brutto_parking_time_in_minutes * 60); dt = inputDate.addSecs(brutto_parking_time_in_minutes * 60);
@ -569,6 +570,7 @@ Calculator::ComputeDurationFromCost(Configuration *cfg,
.arg(netto_parking_time_in_minutes) .arg(netto_parking_time_in_minutes)
.arg(free_parking_time_in_minutes); .arg(free_parking_time_in_minutes);
} }
}
if (std::optional<ATBTariffService> serv = getService(cfg, dt)) { if (std::optional<ATBTariffService> serv = getService(cfg, dt)) {
TimeRange const &serviceTimeRange = serv.value().m_range; TimeRange const &serviceTimeRange = serv.value().m_range;
@ -577,6 +579,8 @@ Calculator::ComputeDurationFromCost(Configuration *cfg,
int rest_parking_time_in_minutes = nettoParktimeForCost - netto_parking_time_in_minutes; int rest_parking_time_in_minutes = nettoParktimeForCost - netto_parking_time_in_minutes;
ATBTime t(dt.time().hour(), dt.time().minute(), 0, 0); ATBTime t(dt.time().hour(), dt.time().minute(), 0, 0);
int timeToServiceEnd = t.secsTo(serviceTimeRange.m_end.toString(Qt::ISODate)) / 60; int timeToServiceEnd = t.secsTo(serviceTimeRange.m_end.toString(Qt::ISODate)) / 60;
// TODO: wohl aehnlich wie carry-over zu behandlen
if (serviceTimeRange.m_duration > 0) { if (serviceTimeRange.m_duration > 0) {
if (timeToServiceEnd < rest_parking_time_in_minutes) { if (timeToServiceEnd < rest_parking_time_in_minutes) {
netto_parking_time_in_minutes += timeToServiceEnd; netto_parking_time_in_minutes += timeToServiceEnd;