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