load and parse additional (included) tariff-files
This commit is contained in:
		@@ -5,12 +5,15 @@
 | 
				
			|||||||
#include "utilities.h"
 | 
					#include "utilities.h"
 | 
				
			||||||
#include "tariff_global_defines.h"
 | 
					#include "tariff_global_defines.h"
 | 
				
			||||||
#include "period_year.h"
 | 
					#include "period_year.h"
 | 
				
			||||||
 | 
					#include "tariff_permit_type.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QFile>
 | 
					#include <QFile>
 | 
				
			||||||
#include <QFileInfo>
 | 
					#include <QFileInfo>
 | 
				
			||||||
#include <QDateTime>
 | 
					#include <QDateTime>
 | 
				
			||||||
#include <QDebug>
 | 
					#include <QDebug>
 | 
				
			||||||
#include <QList>
 | 
					#include <QList>
 | 
				
			||||||
 | 
					#include <map>
 | 
				
			||||||
 | 
					#include <memory>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QString const CalcState::SUCCESS = "SUCCESS";
 | 
					QString const CalcState::SUCCESS = "SUCCESS";
 | 
				
			||||||
QString const CalcState::ERROR_PARSING_ZONE_NR = "ERROR_PARSING_ZONE_NR";
 | 
					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::OUTSIDE_ALLOWED_PARKING_TIME = "OUTSIDE_ALLOWED_PARKING_TIME";
 | 
				
			||||||
QString const CalcState::SUCCESS_MAXPRICE = "SUCCESS_MAXPRICE";
 | 
					QString const CalcState::SUCCESS_MAXPRICE = "SUCCESS_MAXPRICE";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static std::map<PERMIT_TYPE, std::unique_ptr<parking_tariff_t>> tariffs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QList<int> CALCULATE_LIBRARY_API get_time_steps(Configuration *cfg) {
 | 
					QList<int> CALCULATE_LIBRARY_API get_time_steps(Configuration *cfg) {
 | 
				
			||||||
    return Calculator::GetInstance().GetTimeSteps(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 << ")";
 | 
					    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<parking_tariff_t> t = std::make_unique<parking_tariff_t>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                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<PERMIT_TYPE>(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;
 | 
					    return calcState;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user