diff --git a/library/src/calculate_price.cpp b/library/src/calculate_price.cpp index 0041d08..cdb5a98 100644 --- a/library/src/calculate_price.cpp +++ b/library/src/calculate_price.cpp @@ -946,6 +946,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); @@ -976,6 +978,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); @@ -990,17 +995,36 @@ 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); + 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 { + 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; @@ -1023,12 +1047,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