Added overoaded versions for compute_price_for_parking_ticket() and
compute_duration_for_parking_ticket() using QDateTime parameters. Added new error code WRONG_ISO_TIME_FORMAT.
This commit is contained in:
		@@ -139,6 +139,57 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
 | 
			
		||||
    return calcState.set(CalcState::State::SUCCESS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
 | 
			
		||||
                                            parking_tariff_t *tariff,
 | 
			
		||||
                                            QDateTime const &start_parking_time,
 | 
			
		||||
                                            QDateTime const &end_parking_time,
 | 
			
		||||
                                            struct price_t *price) {
 | 
			
		||||
    CalcState calcState;
 | 
			
		||||
    double minMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_time;
 | 
			
		||||
    double maxMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_max_time;
 | 
			
		||||
 | 
			
		||||
    int const duration = (end_parking_time.toSecsSinceEpoch() -
 | 
			
		||||
                          start_parking_time.toMSecsSinceEpoch()) / 60;
 | 
			
		||||
 | 
			
		||||
    if (duration < 0) {
 | 
			
		||||
        calcState.setDesc(QString("end=%1, start=%2")
 | 
			
		||||
                            .arg(end_parking_time.toString(Qt::ISODate),
 | 
			
		||||
                                 start_parking_time.toString(Qt::ISODate)));
 | 
			
		||||
        return calcState.set(CalcState::State::NEGATIVE_PARING_TIME);
 | 
			
		||||
    }
 | 
			
		||||
    if (duration > maxMin) {
 | 
			
		||||
        calcState.setDesc(QString("duration=%1, maxMin=%2").arg(duration, maxMin));
 | 
			
		||||
        return calcState.set(CalcState::State::ABOVE_MAX_PARKING_TIME);
 | 
			
		||||
    }
 | 
			
		||||
    if (duration < minMin) {
 | 
			
		||||
        calcState.setDesc(QString("duration=%1, minMin=%2").arg(duration, minMin));
 | 
			
		||||
        return calcState.set(CalcState::State::BELOW_MIN_PARKING_TIME);
 | 
			
		||||
    }
 | 
			
		||||
    if (duration == 0) {
 | 
			
		||||
        memset(price, 0x00, sizeof(*price));
 | 
			
		||||
        return calcState.set(CalcState::State::SUCCESS);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (start_parking_time.isValid()) {
 | 
			
		||||
        QString cs = start_parking_time.toString(Qt::ISODate);
 | 
			
		||||
        double cost = calculator.GetCostFromDuration(
 | 
			
		||||
                        tariff, PaymentOption::Option1,
 | 
			
		||||
                        cs.toLocal8Bit().constData(),
 | 
			
		||||
                        duration, false, true);
 | 
			
		||||
        double minCost = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_price;
 | 
			
		||||
        if (cost < minCost) {
 | 
			
		||||
            calcState.setDesc(QString("minCost=%1, cost=%2").arg(minCost, cost));
 | 
			
		||||
            return calcState.set(CalcState::State::BELOW_MIN_PARKING_PRICE);
 | 
			
		||||
        }
 | 
			
		||||
        price->units = cost;
 | 
			
		||||
        price->netto = cost;
 | 
			
		||||
    } else {
 | 
			
		||||
        return calcState.set(CalcState::State::INVALID_START_DATE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return calcState.set(CalcState::State::SUCCESS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
 | 
			
		||||
                                            parking_tariff_t *tariff,
 | 
			
		||||
                                            time_t start_parking_time,
 | 
			
		||||
@@ -154,6 +205,35 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
 | 
			
		||||
        duration = calculator.GetDurationFromCost(tariff, PaymentOption::Option1,
 | 
			
		||||
                                                  cs.toLocal8Bit().constData(),
 | 
			
		||||
                                                  price, false, true).c_str();
 | 
			
		||||
        QDateTime d = QDateTime::fromString(duration);
 | 
			
		||||
        if (!d.isValid()) {
 | 
			
		||||
            calcState.setDesc(QString("ticketEndTime=%1").arg(duration));
 | 
			
		||||
            return calcState.set(CalcState::State::WRONG_ISO_TIME_FORMAT);
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        return calcState.set(CalcState::State::INVALID_START_DATE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return calcState.set(CalcState::State::SUCCESS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
 | 
			
		||||
                                            parking_tariff_t *tariff,
 | 
			
		||||
                                            QDateTime const &start_parking_time,
 | 
			
		||||
                                            double price,
 | 
			
		||||
                                            QDateTime &ticketEndTime) {
 | 
			
		||||
    CalcState calcState;
 | 
			
		||||
    if (start_parking_time.isValid()) {
 | 
			
		||||
        QString cs = start_parking_time.toString(Qt::ISODate);
 | 
			
		||||
        QString endTime = calculator.GetDurationFromCost(
 | 
			
		||||
                                        tariff, PaymentOption::Option1,
 | 
			
		||||
                                        cs.toLocal8Bit().constData(),
 | 
			
		||||
                                        price, false, true).c_str();
 | 
			
		||||
        ticketEndTime = QDateTime::fromString(endTime);
 | 
			
		||||
        if (!ticketEndTime.isValid()) {
 | 
			
		||||
            calcState.setDesc(QString("ticketEndTime=%1").arg(endTime));
 | 
			
		||||
            return calcState.set(CalcState::State::WRONG_ISO_TIME_FORMAT);
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        return calcState.set(CalcState::State::INVALID_START_DATE);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user