Check if computed ticket-end-time violates a carry-over-limit defined in
tariff-file.
This commit is contained in:
		| @@ -554,7 +554,7 @@ int CALCULATE_LIBRARY_API compute_next_timestep(parking_tariff_t *tariff, int cu | ||||
|                 } | ||||
|             } | ||||
|             // max. tolerance set to 3 minutes | ||||
|             unsigned const tolerance = std::min(minimalDistance, (unsigned)(3)); | ||||
|             // unsigned const tolerance = std::min(minimalDistance, (unsigned)(3)); | ||||
|             if (j != -1) { | ||||
|                 stepList[j] = currentTimeMinutes; | ||||
|             } | ||||
| @@ -842,6 +842,24 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( | ||||
|                 end_parking_time = effectiveStartTime.addSecs(netto_parking_time*60); | ||||
|             } | ||||
|  | ||||
|  | ||||
|             end_parking_time.setTime(QTime(end_parking_time.time().hour(), | ||||
|                                            end_parking_time.time().minute(), 0)); | ||||
|  | ||||
|             qCritical() << __func__ << ":" << __LINE__ << "end-parking-time:" << end_parking_time.toString(Qt::ISODate); | ||||
|  | ||||
|             weekDay = end_parking_time.date().dayOfWeek(); | ||||
|  | ||||
|             for (auto[itr, rangeEnd] = tariff->WeekDays.equal_range((Qt::DayOfWeek)weekDay); itr != rangeEnd; ++itr) { | ||||
|                 ATBWeekDay const &wd = itr->second; | ||||
|                 bool const parkTimeLimitViolated = wd.getTariffCarryOverSettings().parkingTimeLimitExceeded(end_parking_time, paymentOptionIndex); | ||||
|                 if (parkTimeLimitViolated) { | ||||
|                     calcState.setDesc(QString("line=%1 endTime=%2: park-time-limit violated").arg(__LINE__) | ||||
|                                       .arg(end_parking_time.time().toString(Qt::ISODate))); | ||||
|                     return calcState.set(CalcState::State::ABOVE_MAX_PARKING_TIME); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|         } else { | ||||
|             cost = Calculator::GetInstance().GetCostFromDuration( | ||||
|                         tariff, | ||||
| @@ -1085,25 +1103,43 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket( | ||||
|                 } | ||||
|  | ||||
|                 if (carryOverStart.isValid() && carryOverEnd.isValid()) { | ||||
|                     qCritical() << __func__ << __LINE__ << "carryOverStart" << carryOverStart.toString(Qt::ISODate); | ||||
|                     qCritical() << __func__ << __LINE__ << "carryOverEnd" << carryOverEnd.toString(Qt::ISODate); | ||||
|                     qCritical() << __func__ << __LINE__ << "carryOverDuration" << carryOverDuration; | ||||
|                     qCritical() << __func__ << ":" << __LINE__ << "carryOverStart" << carryOverStart.toString(Qt::ISODate); | ||||
|                     qCritical() << __func__ << ":" << __LINE__ << "carryOverEnd" << carryOverEnd.toString(Qt::ISODate); | ||||
|                     qCritical() << __func__ << ":" << __LINE__ << "carryOverDuration" << carryOverDuration; | ||||
|                 } | ||||
|  | ||||
|                 if (carryOverStart.isValid() && carryOverEnd.isValid() && carryOverDuration != -1) { | ||||
|                     qCritical() << __func__ << __LINE__ << "ticketEndTime.time():" << ticketEndTime.time().toString(Qt::ISODate); | ||||
|                     // 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); | ||||
|                     } else { | ||||
|                         qCritical() << __func__ << __LINE__ << "ticketEndTime.time():" << ticketEndTime.time().toString(Qt::ISODate); | ||||
|                         // 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); | ||||
|                         } | ||||
|                     } | ||||
|                 } else { | ||||
|                     qCritical() << __func__ << __LINE__ << "WARNING: wrong carry-over-settings"; | ||||
|                     qCritical() << __func__ << ":" << __LINE__ << "WARNING: wrong carry-over-settings"; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|  | ||||
|             ticketEndTime.setTime(QTime(ticketEndTime.time().hour(), | ||||
|                                         ticketEndTime.time().minute(), 0)); | ||||
|  | ||||
|             qCritical() << __func__ << ":" << __LINE__ << "ticketEndTime:" << ticketEndTime.toString(Qt::ISODate); | ||||
|  | ||||
|             for (auto[itr, rangeEnd] = tariff->WeekDays.equal_range((Qt::DayOfWeek)(ticketEndTime.date().dayOfWeek())); | ||||
|                  itr != rangeEnd; | ||||
|                  ++itr) { | ||||
|                 ATBWeekDay const &wd = itr->second; | ||||
|                 bool const parkTimeLimitViolated = wd.getTariffCarryOverSettings().parkingTimeLimitExceeded(ticketEndTime, paymentOptionIndex); | ||||
|                 if (parkTimeLimitViolated) { | ||||
|                     calcState.setDesc(QString("line=%1 endTime=%2: park-time-limit violated").arg(__LINE__) | ||||
|                                       .arg(ticketEndTime.time().toString(Qt::ISODate))); | ||||
|                     return calcState.set(CalcState::State::ABOVE_MAX_PARKING_TIME); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user