From de0be1d19b8e0799e6a4e1ce1c9d1c4e88a71c05 Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Wed, 23 Apr 2025 10:59:39 +0200 Subject: [PATCH 1/2] Minor: added/changed debug messages. --- library/src/calculate_price.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/library/src/calculate_price.cpp b/library/src/calculate_price.cpp index acf8980..ca9fef3 100644 --- a/library/src/calculate_price.cpp +++ b/library/src/calculate_price.cpp @@ -850,6 +850,8 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( QDateTime effectiveStartTime(start_parking_time); + qCritical() << __func__ << ":" << __LINE__ << "effectiveStartTime:" + << effectiveStartTime.toString(Qt::ISODate); // handle special days int const specialDayId = tariff->specialDayId(start_parking_time); @@ -880,6 +882,9 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( } } + qCritical() << __func__ << ":" << __LINE__ << "effectiveStartTime:" + << effectiveStartTime.toString(Qt::ISODate); + // handle prepaid option int const prepaid_option_id = tariff->getPaymentOptions(paymentOptionIndex).pop_prepaid_option_id; std::optional prepaidOption = tariff->getPrepaidType(prepaid_option_id); @@ -894,17 +899,23 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( if (start_parking_time.time() < p.prepaid[weekDay].static_end) { // static_end: e.g. 08:00:00 effectiveStartTime.setTime(p.prepaid[weekDay].static_end); + qCritical() << __func__ << ":" << __LINE__ << "effectiveStartTime:" + << effectiveStartTime.toString(Qt::ISODate); } else if (start_parking_time.time() > p.prepaid[weekDay].static_start) { // static_start: e.g. 22:00:00 effectiveStartTime.setTime(p.prepaid[weekDay].static_start); } } + } else { + qCritical() << __func__ << ":" << __LINE__ << "no prepaid option set"; } + // set seconds to 0 effectiveStartTime.setTime(QTime(effectiveStartTime.time().hour(), effectiveStartTime.time().minute(), 0)); - qCritical() << __func__ << ":" << __LINE__ << "effectiveStartTime:" << effectiveStartTime.toString(Qt::ISODate); + qCritical() << __func__ << ":" << __LINE__ << "effectiveStartTime:" + << effectiveStartTime.toString(Qt::ISODate); int const carryOver = tariff->getPaymentOptions(paymentOptionIndex).pop_carry_over; @@ -927,12 +938,12 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( s = s.addSecs(minutesUntilCarryOver * 60); s = s.addSecs(carryOverDuration * 60); end_parking_time = s.addSecs(rest * 60); + qCritical() << __func__ << ":" << __LINE__ << "end-parking-time:" << end_parking_time.toString(Qt::ISODate); } else { end_parking_time = effectiveStartTime.addSecs(netto_parking_time*60); + qCritical() << __func__ << ":" << __LINE__ << "end-parking-time:" << end_parking_time.toString(Qt::ISODate); } - qCritical() << __func__ << ":" << __LINE__ << "end-parking-time:" << end_parking_time.toString(Qt::ISODate); - weekDay = end_parking_time.date().dayOfWeek(); // musste man in einer schleife machen From 78cae243891ceb399d243e3989f22c9d04bb68b3 Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Wed, 23 Apr 2025 11:00:33 +0200 Subject: [PATCH 2/2] Fix: if start-time is out-of-range (after valid time for sell), switch to next valid time, taking into account if next valid time is on next day. --- library/src/calculate_price.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/library/src/calculate_price.cpp b/library/src/calculate_price.cpp index ca9fef3..874e975 100644 --- a/library/src/calculate_price.cpp +++ b/library/src/calculate_price.cpp @@ -903,7 +903,20 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( << effectiveStartTime.toString(Qt::ISODate); } else if (start_parking_time.time() > p.prepaid[weekDay].static_start) { // static_start: e.g. 22:00:00 - effectiveStartTime.setTime(p.prepaid[weekDay].static_start); + QTime const midnight(23, 59, 59); + QTime const midnight24(0, 0, 0); + + if ((p.prepaid[weekDay].static_start <= midnight && midnight24 <= p.prepaid[weekDay].static_end) + || (p.prepaid[weekDay].static_start == midnight && midnight == p.prepaid[weekDay].static_end) + || (p.prepaid[weekDay].static_start == midnight24 && midnight24 == p.prepaid[weekDay].static_end)) { + effectiveStartTime = effectiveStartTime.addDays(1); + weekDay = effectiveStartTime.date().dayOfWeek(); + qCritical() << __func__ << ":" << __LINE__ + << "effectiveStartTime: new week day [" << weekDay << "] (Mon=1, Tue=2, ..., Sun=7)"; + } + effectiveStartTime.setTime(p.prepaid[weekDay].static_end); + qCritical() << __func__ << ":" << __LINE__ << "effectiveStartTime:" + << effectiveStartTime.toString(Qt::ISODate); } } } else {