From 868df3dd326c57896c1460bfda710cbe02ca9e7d Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Wed, 31 Jan 2024 11:40:41 +0100 Subject: [PATCH] Fixed GetDailyTicket(): use pop_id as key to find payment rate. --- library/src/calculator_functions.cpp | 64 ++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 12 deletions(-) diff --git a/library/src/calculator_functions.cpp b/library/src/calculator_functions.cpp index d79efd1..65f44dd 100644 --- a/library/src/calculator_functions.cpp +++ b/library/src/calculator_functions.cpp @@ -862,12 +862,20 @@ Calculator::GetDailyTicketPrice(Configuration* cfg, for (QVector::size_type i=0; i> const &paymentRates = cfg->getPaymentRateForKey(priceId); - if (paymentRates) { - QVector const &pr = paymentRates.value(); - if (pr.size() > 0) { - price.netto = pr.at(0).pra_price; - value.value_or(price); + QVector const &paymentOptions = cfg->getAllPaymentOptions(); + for (QVector::size_type j=0; j < paymentOptions.size(); ++j) { + int const pop_id = paymentOptions.at(j).pop_id; + std::optional> const &paymentRates = cfg->getPaymentRateForKey(pop_id); + if (paymentRates) { + QVector const &pr = paymentRates.value(); + for (QVector::size_type k=0; k < pr.size(); ++k) { + if (pr.at(k).pra_payment_option_id == pop_id) { + if (priceId == pr.at(k).pra_payment_unit_id) { + price.netto = pr.at(k).pra_price; + value = value.value_or(price); + } + } + } } } } @@ -880,12 +888,20 @@ Calculator::GetDailyTicketPrice(Configuration* cfg, for (QVector::size_type i=0; i> const &paymentRates = cfg->getPaymentRateForKey(priceId); - if (paymentRates) { - QVector const &pr = paymentRates.value(); - if (pr.size() > 0) { - price.netto = pr.at(0).pra_price; - value.value_or(price); + QVector const &paymentOptions = cfg->getAllPaymentOptions(); + for (QVector::size_type j=0; j < paymentOptions.size(); ++j) { + int const pop_id = paymentOptions.at(j).pop_id; + std::optional> const &paymentRates = cfg->getPaymentRateForKey(pop_id); + if (paymentRates) { + QVector const &pr = paymentRates.value(); + for (QVector::size_type k=0; k < pr.size(); ++k) { + if (pr.at(k).pra_payment_option_id == pop_id) { + if (priceId == pr.at(k).pra_payment_unit_id) { + price.netto = pr.at(k).pra_price; + value = value.value_or(price); + } + } + } } } } @@ -893,6 +909,30 @@ Calculator::GetDailyTicketPrice(Configuration* cfg, } } break; case PERMIT_TYPE::DAY_TICKET_CHILD: { + std::optional c = cfg->getCustomerForType(ATBCustomer::CustomerType::CHILD); + if (c) { + for (QVector::size_type i=0; i const &paymentOptions = cfg->getAllPaymentOptions(); + for (QVector::size_type j=0; j < paymentOptions.size(); ++j) { + int const pop_id = paymentOptions.at(j).pop_id; + std::optional> const &paymentRates = cfg->getPaymentRateForKey(pop_id); + if (paymentRates) { + QVector const &pr = paymentRates.value(); + for (QVector::size_type k=0; k < pr.size(); ++k) { + if (pr.at(k).pra_payment_option_id == pop_id) { + if (priceId == pr.at(k).pra_payment_unit_id) { + price.netto = pr.at(k).pra_price; + value = value.value_or(price); + } + } + } + } + } + } + } + } } // [[fallthrough]]; case PERMIT_TYPE::SHORT_TERM_PARKING: {