From e172e814e7a4301a6a0466ada5066aca239d87a5 Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Tue, 6 May 2025 11:57:14 +0200 Subject: [PATCH] load and parse additional (included) tariff-files --- library/src/calculate_price.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/library/src/calculate_price.cpp b/library/src/calculate_price.cpp index acf8980..157bcd8 100644 --- a/library/src/calculate_price.cpp +++ b/library/src/calculate_price.cpp @@ -5,12 +5,15 @@ #include "utilities.h" #include "tariff_global_defines.h" #include "period_year.h" +#include "tariff_permit_type.h" #include #include #include #include #include +#include +#include QString const CalcState::SUCCESS = "SUCCESS"; QString const CalcState::ERROR_PARSING_ZONE_NR = "ERROR_PARSING_ZONE_NR"; @@ -28,6 +31,9 @@ QString const CalcState::OVERPAID = "OVERPAID"; QString const CalcState::OUTSIDE_ALLOWED_PARKING_TIME = "OUTSIDE_ALLOWED_PARKING_TIME"; QString const CalcState::SUCCESS_MAXPRICE = "SUCCESS_MAXPRICE"; + +static std::map> tariffs; + QList CALCULATE_LIBRARY_API get_time_steps(Configuration *cfg) { return Calculator::GetInstance().GetTimeSteps(cfg); } @@ -464,6 +470,31 @@ CalcState CALCULATE_LIBRARY_API init_tariff(parking_tariff_t **tariff, char cons qCritical() << "init_tariff: Parsing tariff config (" << confFile << ")"; + if ((*tariff)->TariffIncludes.size() > 0) { + qCritical() << "init_tariff: TariffIncludes" << (*tariff)->TariffIncludes; + for (int i = 0 ; i < (*tariff)->TariffIncludes.size(); ++i) { + QFile f(QString("/etc/psa_tariff/%1").arg((*tariff)->TariffIncludes.at(i))); + if (f.exists() && + f.open(QIODevice::ReadOnly | QIODevice::Text)) { + + QString json = f.readAll(); + std::unique_ptr t = std::make_unique(); + + if (! t->ParseJson(t.get(), json.toStdString().c_str())) { + qCritical() << " ... error parsing tariff in" << f.fileName(); + qCritical() << " ... json" << json; + } else { + PERMIT_TYPE pt = static_cast(t->getPaymentOptions().pop_product_id); + if (tariffs.count(pt) == 0) { + const auto [it, success] = tariffs.insert(std::make_pair(pt, std::move(t))); + qCritical() << " ... insertion" << success; + qCritical() << " ... insertion" << (int)it->first << it->second->getPaymentOptions().pop_product_name; + qCritical() << " ... insertion" << tariffs[pt]->getPaymentOptions().pop_product_name; + } + } + } + } + } return calcState; }