ComputeDurationFromCost():

Fix: take into account that there may be more than just two
	carry-over-ranges. For instance, in Korneuburg (714), there are three
	as they have a break from 12:00-14:00.
This commit is contained in:
Gerhard Hoffmann 2024-10-10 11:38:14 +02:00
parent 5e673788b4
commit 4b9a4319b3

View File

@ -605,20 +605,41 @@ Calculator::ComputeDurationFromCost(Configuration *cfg,
// qCritical() << __func__ << ":" << __LINE__ << "cnt" << cnt << "]"; // qCritical() << __func__ << ":" << __LINE__ << "cnt" << cnt << "]";
} }
if (cnt >= 1000) { if (cnt >= 10) {
qCritical() << __func__ << ":" << __LINE__ << "BREAK"; qCritical() << __func__ << ":" << __LINE__ << "BREAK";
} }
// configure if last carry-over ranges shall be added to ticket-end-time // configure if last carry-over ranges shall be added to ticket-end-time
dt = inputDate.addSecs(brutto_parking_time_in_minutes * 60);
cnt = 0; cnt = 0;
while (std::optional<ATBTariffCarryOver> co = getCarryOver(cfg, inputDate.addSecs(brutto_parking_time_in_minutes * 60))) { QVector<TimeRange> timeRanges;
if (++cnt > 5) { while (std::optional<ATBTariffCarryOver> co = getCarryOver(cfg, dt)) {
qCritical() << __func__ << ":" << __LINE__ << "BREAK"; if (++cnt > 10) {
break; break;
} }
TimeRange const &carryOverTimeRange = co.value().m_range; TimeRange const &carryOverTimeRange = co.value().m_range;
free_parking_time_in_minutes += carryOverTimeRange.m_duration; if (!timeRanges.isEmpty()) {
if (timeRanges.last().m_end != carryOverTimeRange.m_start) {
break;
}
}
timeRanges.push_back(carryOverTimeRange);
int minutes = co.value().computeMinutesUntilCarryOverEnd(dt);
if (minutes > 0) {
free_parking_time_in_minutes += co.value().computeMinutesUntilCarryOverEnd(dt);
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;
qCritical() << __func__ << ":" << __LINE__ << QString("%1 (%2): brutto: %3 = netto: %4 + free: %5")
.arg(dt.toString(Qt::ISODate))
.arg(weekDay)
.arg(brutto_parking_time_in_minutes)
.arg(netto_parking_time_in_minutes)
.arg(free_parking_time_in_minutes);
dt = inputDate.addSecs(brutto_parking_time_in_minutes * 60);
} else break;
} }
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;