check for time-step-config == STATIC

This commit is contained in:
Gerhard Hoffmann 2024-08-21 17:46:35 +02:00
parent f8805e9e78
commit a3983ed427

View File

@ -915,6 +915,7 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
bool prepaid = true; bool prepaid = true;
int paymentOptionIndex = tariff->getPaymentOptionIndex(permitType); int paymentOptionIndex = tariff->getPaymentOptionIndex(permitType);
int prepaid_option_id = tariff->getPaymentOptions(paymentOptionIndex).pop_prepaid_option_id; int prepaid_option_id = tariff->getPaymentOptions(paymentOptionIndex).pop_prepaid_option_id;
if (prepaid_option_id == 2) { if (prepaid_option_id == 2) {
prepaid = false; prepaid = false;
} }
@ -930,20 +931,23 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
if (start_parking_time.isValid()) { if (start_parking_time.isValid()) {
// handle prepaid option int const pop_time_step_config = tariff->getPaymentOptions(paymentOptionIndex).pop_time_step_config;
QDateTime effectiveStartTime(start_parking_time); if (pop_time_step_config == (int)ATBTimeStepConfig::TimeStepConfig::STATIC) {
int const prepaid_option_id = tariff->getPaymentOptions(paymentOptionIndex).pop_prepaid_option_id; // handle prepaid option
std::optional<ATBPrepaid> prepaidOption = tariff->getPrepaidType(prepaid_option_id); QDateTime effectiveStartTime(start_parking_time);
if (prepaidOption.has_value()) { int const prepaid_option_id = tariff->getPaymentOptions(paymentOptionIndex).pop_prepaid_option_id;
ATBPrepaid const &p = prepaidOption.value(); std::optional<ATBPrepaid> prepaidOption = tariff->getPrepaidType(prepaid_option_id);
if (p.never) { if (prepaidOption.has_value()) {
qCritical() << __func__ << __LINE__ << "prepaid: no"; ATBPrepaid const &p = prepaidOption.value();
} else { if (p.never) {
if (start_parking_time.time() < p.static_end) { // static_end: e.g. 08:00:00 qCritical() << __func__ << __LINE__ << "prepaid: no";
effectiveStartTime.setTime(p.static_end); } else {
} else if (start_parking_time.time() < p.static_end) { // static_end: e.g. 08:00:00
if (start_parking_time.time() > p.static_start) { // static_start: e.g. 22:00:00 effectiveStartTime.setTime(p.static_end);
effectiveStartTime.setTime(p.static_start); } else
if (start_parking_time.time() > p.static_start) { // static_start: e.g. 22:00:00
effectiveStartTime.setTime(p.static_start);
}
} }
} }
} }
@ -1020,53 +1024,55 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
return calcState.set(CalcState::State::WRONG_ISO_TIME_FORMAT); return calcState.set(CalcState::State::WRONG_ISO_TIME_FORMAT);
} }
// handle carry over for ticket-end-time if (pop_time_step_config == (int)ATBTimeStepConfig::TimeStepConfig::STATIC) {
qCritical() << __func__ << ":" << __LINE__ << "ticketEndTime:" << ticketEndTime.toString(Qt::ISODate); // handle carry over for ticket-end-time
qCritical() << __func__ << ":" << __LINE__ << "ticketEndTime:" << ticketEndTime.toString(Qt::ISODate);
int weekDay = start_parking_time.date().dayOfWeek(); int weekDay = start_parking_time.date().dayOfWeek();
int pop_carry_over_option_id = tariff->getPaymentOptions(paymentOptionIndex).pop_carry_over_option_id; int pop_carry_over_option_id = tariff->getPaymentOptions(paymentOptionIndex).pop_carry_over_option_id;
qCritical() << __func__ << __LINE__ << "configured carry-over-id" << pop_carry_over_option_id; qCritical() << __func__ << __LINE__ << "configured carry-over-id" << pop_carry_over_option_id;
std::optional<ATBPeriodYear> yperiod = Utilities::GetYearPeriodActive(tariff, start_parking_time); std::optional<ATBPeriodYear> yperiod = Utilities::GetYearPeriodActive(tariff, start_parking_time);
if (yperiod.has_value()) { if (yperiod.has_value()) {
ATBPeriodYear const &period = yperiod.value(); ATBPeriodYear const &period = yperiod.value();
pop_carry_over_option_id = period.pye_id; pop_carry_over_option_id = period.pye_id;
qCritical() << __func__ << __LINE__ << "re-computed carry-over-id" << pop_carry_over_option_id; qCritical() << __func__ << __LINE__ << "re-computed carry-over-id" << pop_carry_over_option_id;
} }
QTime carryOverStart; QTime carryOverStart;
QTime carryOverEnd; QTime carryOverEnd;
int carryOverDuration = -1; int carryOverDuration = -1;
// using TariffCarryOverType = std::multimap<int, ATBCarryOver>; // using TariffCarryOverType = std::multimap<int, ATBCarryOver>;
std::multimap<int, ATBCarryOver>::const_iterator it; std::multimap<int, ATBCarryOver>::const_iterator it;
if ((it = tariff->TariffCarryOverOptions.find(pop_carry_over_option_id)) != if ((it = tariff->TariffCarryOverOptions.find(pop_carry_over_option_id)) !=
tariff->TariffCarryOverOptions.cend()) { tariff->TariffCarryOverOptions.cend()) {
carryOverStart = it->second.carryover[weekDay].static_start; carryOverStart = it->second.carryover[weekDay].static_start;
carryOverEnd = it->second.carryover[weekDay].static_end; carryOverEnd = it->second.carryover[weekDay].static_end;
carryOverDuration = it->second.carryover[weekDay].duration; carryOverDuration = it->second.carryover[weekDay].duration;
} }
if (carryOverStart.isValid() && carryOverEnd.isValid()) { if (carryOverStart.isValid() && carryOverEnd.isValid()) {
qCritical() << __func__ << __LINE__ << "carryOverStart" << carryOverStart.toString(Qt::ISODate); qCritical() << __func__ << __LINE__ << "carryOverStart" << carryOverStart.toString(Qt::ISODate);
qCritical() << __func__ << __LINE__ << "carryOverEnd" << carryOverEnd.toString(Qt::ISODate); qCritical() << __func__ << __LINE__ << "carryOverEnd" << carryOverEnd.toString(Qt::ISODate);
qCritical() << __func__ << __LINE__ << "carryOverDuration" << carryOverDuration; qCritical() << __func__ << __LINE__ << "carryOverDuration" << carryOverDuration;
} }
if (carryOverStart.isValid() && carryOverEnd.isValid() && carryOverDuration != -1) { if (carryOverStart.isValid() && carryOverEnd.isValid() && carryOverDuration != -1) {
qCritical() << __func__ << __LINE__ << "ticketEndTime.time():" << ticketEndTime.time().toString(Qt::ISODate);
if (ticketEndTime.time() > carryOverStart) {
qCritical() << __func__ << __LINE__ << "ticketEndTime.time():" << ticketEndTime.time().toString(Qt::ISODate); qCritical() << __func__ << __LINE__ << "ticketEndTime.time():" << ticketEndTime.time().toString(Qt::ISODate);
ticketEndTime = ticketEndTime.addSecs(carryOverDuration * 60); if (ticketEndTime.time() > carryOverStart) {
} else {
qCritical() << __func__ << __LINE__ << "ticketEndTime.time():" << ticketEndTime.time().toString(Qt::ISODate);
if (ticketEndTime.time() < carryOverEnd) {
qCritical() << __func__ << __LINE__ << "ticketEndTime.time():" << ticketEndTime.time().toString(Qt::ISODate); qCritical() << __func__ << __LINE__ << "ticketEndTime.time():" << ticketEndTime.time().toString(Qt::ISODate);
ticketEndTime = ticketEndTime.addSecs(carryOverDuration * 60); ticketEndTime = ticketEndTime.addSecs(carryOverDuration * 60);
} else {
qCritical() << __func__ << __LINE__ << "ticketEndTime.time():" << ticketEndTime.time().toString(Qt::ISODate);
if (ticketEndTime.time() < carryOverEnd) {
qCritical() << __func__ << __LINE__ << "ticketEndTime.time():" << ticketEndTime.time().toString(Qt::ISODate);
ticketEndTime = ticketEndTime.addSecs(carryOverDuration * 60);
}
} }
} else {
qCritical() << __func__ << __LINE__ << "WARNING: wrong carry-over-settings";
} }
} else {
qCritical() << __func__ << __LINE__ << "WARNING: wrong carry-over-settings";
} }
if (ticketEndTime.time().hour() == 0 && ticketEndTime.time().minute() == 0) { if (ticketEndTime.time().hour() == 0 && ticketEndTime.time().minute() == 0) {