check for time-step-config == STATIC
This commit is contained in:
		@@ -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) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user