Compare commits
3 Commits
c2a8f0b00b
...
f46adac56d
Author | SHA1 | Date | |
---|---|---|---|
f46adac56d | |||
c799c24658 | |||
dbcd27b377 |
@ -87,7 +87,6 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
|
||||
ATBSpecialDays SpecialDays;
|
||||
ATBWeekDays WeekDays;
|
||||
ATBWeekDaysWorktime WeekDaysWorktime;
|
||||
ATBPaymentOption PaymentOption;
|
||||
ATBPeriodYear YearPeriod;
|
||||
ATBDailyTicket DailyTicket;
|
||||
ATBTimeBase TimeBase;
|
||||
@ -96,6 +95,7 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
|
||||
ATBTimeStepConfig TimeStepConfig;
|
||||
|
||||
MemberType mb_type = MemberType::UnknownType;
|
||||
this->currentPaymentOptions.clear();
|
||||
|
||||
// Get all JSON object members
|
||||
// This code should run only once (to load JSON variables into memory)
|
||||
@ -320,22 +320,37 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
|
||||
else if (strcmp(inner_obj_name, "pra_price") == 0) PaymentRate.pra_price = k->value.GetDouble();
|
||||
break;
|
||||
case MemberType::PaymentOptionType:
|
||||
if (strcmp(inner_obj_name, "pop_id") == 0) PaymentOption.pop_id = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pop_label") == 0) PaymentOption.pop_label = k->value.GetString();
|
||||
else if (strcmp(inner_obj_name, "pop_payment_method_id") == 0) PaymentOption.pop_payment_method_id = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pop_day_end_time") == 0) PaymentOption.pop_day_end_time = k->value.GetString();
|
||||
else if (strcmp(inner_obj_name, "pop_day_night_end_time") == 0) PaymentOption.pop_day_night_end_time = k->value.GetString();
|
||||
else if (strcmp(inner_obj_name, "pop_price_night") == 0) PaymentOption.pop_price_night = k->value.GetDouble();
|
||||
else if (strcmp(inner_obj_name, "pop_min_time") == 0) PaymentOption.pop_min_time = k->value.GetDouble();
|
||||
else if (strcmp(inner_obj_name, "pop_max_time") == 0) PaymentOption.pop_max_time = k->value.GetDouble();
|
||||
else if (strcmp(inner_obj_name, "pop_min_price") == 0) PaymentOption.pop_min_price = k->value.GetDouble();
|
||||
else if (strcmp(inner_obj_name, "pop_carry_over") == 0) PaymentOption.pop_carry_over = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pop_carry_over_time_range_id") == 0) PaymentOption.pop_carry_over_time_range_id = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pop_daily_card_price") == 0) PaymentOption.pop_daily_card_price = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pop_business_hours") == 0) PaymentOption.pop_business_hours = k->value.GetInt();
|
||||
else if (strcmp(inner_obj_name, "pop_time_step_config") == 0) PaymentOption.pop_time_step_config = k->value.GetInt();
|
||||
this->currentPaymentOptions.append(PaymentOption);
|
||||
PaymentOption.reset();
|
||||
if (strcmp(inner_obj_name, "pop_id") == 0) {
|
||||
this->currentPaymentOptions.append(ATBPaymentOption());
|
||||
this->currentPaymentOptions.last().reset();
|
||||
this->currentPaymentOptions.last().pop_id = k->value.GetInt();
|
||||
} else if (strcmp(inner_obj_name, "pop_label") == 0) {
|
||||
this->currentPaymentOptions.last().pop_label = k->value.GetString();
|
||||
} else if (strcmp(inner_obj_name, "pop_payment_method_id") == 0) {
|
||||
this->currentPaymentOptions.last().pop_payment_method_id = k->value.GetInt();
|
||||
} else if (strcmp(inner_obj_name, "pop_day_end_time") == 0) {
|
||||
this->currentPaymentOptions.last().pop_day_end_time = k->value.GetString();
|
||||
} else if (strcmp(inner_obj_name, "pop_day_night_end_time") == 0) {
|
||||
this->currentPaymentOptions.last().pop_day_night_end_time = k->value.GetString();
|
||||
} else if (strcmp(inner_obj_name, "pop_price_night") == 0) {
|
||||
this->currentPaymentOptions.last().pop_price_night = k->value.GetDouble();
|
||||
} else if (strcmp(inner_obj_name, "pop_min_time") == 0) {
|
||||
this->currentPaymentOptions.last().pop_min_time = k->value.GetDouble();
|
||||
} else if (strcmp(inner_obj_name, "pop_max_time") == 0) {
|
||||
this->currentPaymentOptions.last().pop_max_time = k->value.GetDouble();
|
||||
} else if (strcmp(inner_obj_name, "pop_min_price") == 0) {
|
||||
this->currentPaymentOptions.last().pop_min_price = k->value.GetDouble();
|
||||
} else if (strcmp(inner_obj_name, "pop_carry_over") == 0) {
|
||||
this->currentPaymentOptions.last().pop_carry_over = k->value.GetInt();
|
||||
} else if (strcmp(inner_obj_name, "pop_carry_over_time_range_id") == 0) {
|
||||
this->currentPaymentOptions.last().pop_carry_over_time_range_id = k->value.GetInt();
|
||||
} else if (strcmp(inner_obj_name, "pop_daily_card_price") == 0) {
|
||||
this->currentPaymentOptions.last().pop_daily_card_price = k->value.GetInt();
|
||||
} else if (strcmp(inner_obj_name, "pop_business_hours") == 0) {
|
||||
this->currentPaymentOptions.last().pop_business_hours = k->value.GetInt();
|
||||
} else if (strcmp(inner_obj_name, "pop_time_step_config") == 0) {
|
||||
this->currentPaymentOptions.last().pop_time_step_config = k->value.GetInt();
|
||||
}
|
||||
break;
|
||||
case MemberType::DurationType:
|
||||
if (strcmp(inner_obj_name, "pun_id") == 0) Duration.pun_id = k->value.GetInt();
|
||||
@ -397,9 +412,12 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
|
||||
// qCritical() << "PaymentRate" << PaymentRate;
|
||||
cfg->PaymentRate.insert(pair<int, ATBPaymentRate>(PaymentRate.pra_payment_option_id, PaymentRate));
|
||||
break;
|
||||
case MemberType::PaymentOptionType:
|
||||
case MemberType::PaymentOptionType: {
|
||||
if (!this->currentPaymentOptions.isEmpty()) {
|
||||
ATBPaymentOption const &PaymentOption = this->currentPaymentOptions.last();
|
||||
cfg->PaymentOption.insert(pair<int, ATBPaymentOption>(PaymentOption.pop_payment_method_id, PaymentOption));
|
||||
break;
|
||||
}
|
||||
} break;
|
||||
case MemberType::DurationType:
|
||||
cfg->Duration.insert(pair<int, ATBDuration>(Duration.pun_id, Duration));
|
||||
break;
|
||||
@ -453,10 +471,12 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
|
||||
}
|
||||
|
||||
ATBPaymentOption const &Configuration::getPaymentOptions() const {
|
||||
Q_ASSERT(!this->currentPaymentOptions.isEmpty());
|
||||
return this->currentPaymentOptions.at(0);
|
||||
}
|
||||
|
||||
ATBPaymentOption &Configuration::getPaymentOptions() {
|
||||
Q_ASSERT(!this->currentPaymentOptions.isEmpty());
|
||||
return this->currentPaymentOptions[0];
|
||||
}
|
||||
|
||||
@ -479,7 +499,7 @@ Configuration::getDailyTicketsForAllKeys() const {
|
||||
}
|
||||
|
||||
if (tickets.size() > 0) {
|
||||
value.value_or(tickets);
|
||||
value = value.value_or(tickets);
|
||||
}
|
||||
|
||||
return value;
|
||||
@ -490,18 +510,14 @@ Configuration::getDailyTicketsForKey(int key) const {
|
||||
QVector<ATBDailyTicket> tickets;
|
||||
std::optional<QVector<ATBDailyTicket>> value;
|
||||
|
||||
std::pair<
|
||||
std::multimap<int, ATBDailyTicket>::const_iterator,
|
||||
std::multimap<int, ATBDailyTicket>::const_iterator
|
||||
> p = this->DailyTicket.equal_range(key);
|
||||
tickets.clear();
|
||||
|
||||
for (std::multimap<int, ATBDailyTicket>::const_iterator it = p.first;
|
||||
it != p.second; ++it) {
|
||||
for (auto[it, rangeEnd] = this->DailyTicket.equal_range(key); it != rangeEnd; ++it) {
|
||||
tickets.append(it->second);
|
||||
}
|
||||
|
||||
if (tickets.size() > 0) {
|
||||
value.value_or(tickets);
|
||||
value = value.value_or(tickets);
|
||||
}
|
||||
|
||||
return value;
|
||||
@ -518,7 +534,7 @@ Configuration::getPaymentRateForAllKeys() const {
|
||||
}
|
||||
|
||||
if (paymentRates.size() > 0) {
|
||||
value.value_or(paymentRates);
|
||||
value = value.value_or(paymentRates);
|
||||
}
|
||||
|
||||
return value;
|
||||
@ -530,18 +546,14 @@ Configuration::getPaymentRateForKey(int key) const {
|
||||
QVector<ATBPaymentRate> paymentRate;
|
||||
std::optional<QVector<ATBPaymentRate>> value;
|
||||
|
||||
std::pair<
|
||||
std::multimap<int, ATBPaymentRate>::const_iterator,
|
||||
std::multimap<int, ATBPaymentRate>::const_iterator
|
||||
> p = this->PaymentRate.equal_range(key);
|
||||
paymentRate.clear();
|
||||
|
||||
for (std::multimap<int, ATBPaymentRate>::const_iterator it = p.first;
|
||||
it != p.second; ++it) {
|
||||
for (auto[it, rangeEnd] = this->PaymentRate.equal_range(key); it != rangeEnd; ++it) {
|
||||
paymentRate.append(it->second);
|
||||
}
|
||||
|
||||
if (paymentRate.size() > 0) {
|
||||
value.value_or(paymentRate);
|
||||
value = value.value_or(paymentRate);
|
||||
}
|
||||
|
||||
return value;
|
||||
@ -570,7 +582,7 @@ Configuration::getWeekDayWorkTime(QTime const &time, Qt::DayOfWeek dayOfWeek) {
|
||||
ATBWeekDaysWorktime const &wt = it->second;
|
||||
if (QTime::fromString(wt.pwd_time_from.c_str(), Qt::ISODate) >= time
|
||||
&& QTime::fromString(wt.pwd_time_to.c_str(), Qt::ISODate) < time) {
|
||||
value.value_or(wt);
|
||||
value = value.value_or(wt);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -31,13 +31,13 @@ extern "C" char* strptime(const char* s,
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include "calculator_functions.h"
|
||||
#include <calculate_price.h>
|
||||
#include "calculate_price.h"
|
||||
|
||||
#define SZEGED (0)
|
||||
#define SZEGED (1)
|
||||
#define SCHOENAU_KOENIGSEE (0)
|
||||
#define NEUHAUSER_KORNEUBURG (0)
|
||||
#define NEUHAUSER_LINSINGER_MASCHINENBAU (0)
|
||||
#define NEUHAUSER_NORDISCHES_AUSBILDUNGSZENTRUM (1)
|
||||
#define NEUHAUSER_NORDISCHES_AUSBILDUNGSZENTRUM (0)
|
||||
#define NEUHAUSER_BILEXA_GALTUER (0)
|
||||
|
||||
|
||||
@ -230,33 +230,37 @@ int main() {
|
||||
|
||||
#elif SZEGED==1
|
||||
std::ifstream input;
|
||||
int pop_min_time;
|
||||
int pop_max_time;
|
||||
int pop_min_price;
|
||||
int pop_max_price;
|
||||
|
||||
for (int t=6; t < 7; t+=20) {
|
||||
for (int t=2; t < 3; ++t) {
|
||||
//for (int t=6; t < 7; t+=20) {
|
||||
switch (t) {
|
||||
case 1: {
|
||||
input.open("/opt/ptu5/opt/customer_281/etc/psa_tariff/tariff01.json");
|
||||
pop_max_time = 6*60;
|
||||
//pop_max_time = 6*60;
|
||||
} break;
|
||||
case 2: {
|
||||
input.open("/opt/ptu5/opt/customer_281/etc/psa_tariff/tariff02.json");
|
||||
pop_max_time = 5*60;
|
||||
//pop_max_time = 5*60;
|
||||
} break;
|
||||
case 3: {
|
||||
input.open("/opt/ptu5/opt/customer_281/etc/psa_tariff/tariff03.json");
|
||||
pop_max_time = 6*60;
|
||||
//pop_max_time = 6*60;
|
||||
} break;
|
||||
case 4: {
|
||||
input.open("/opt/ptu5/opt/customer_281/etc/psa_tariff/tariff04.json");
|
||||
pop_max_time = 4*60;
|
||||
//pop_max_time = 4*60;
|
||||
} break;
|
||||
case 5: {
|
||||
input.open("/opt/ptu5/opt/customer_281/etc/psa_tariff/tariff05.json");
|
||||
pop_max_time = 6*60;
|
||||
//pop_max_time = 6*60;
|
||||
} break;
|
||||
case 6: {
|
||||
input.open("/opt/ptu5/opt/customer_281/etc/psa_tariff/tariff06.json");
|
||||
pop_max_time = 4*60;
|
||||
//pop_max_time = 4*60;
|
||||
} break;
|
||||
default:
|
||||
continue;
|
||||
@ -265,13 +269,24 @@ int main() {
|
||||
while(input >> sstr.rdbuf());
|
||||
std::string json(sstr.str());
|
||||
|
||||
Calculator calculator;
|
||||
Configuration cfg;
|
||||
|
||||
bool isParsed = cfg.ParseJson(&cfg, json.c_str());
|
||||
cout << endl;
|
||||
|
||||
if (isParsed) {
|
||||
// test library functions
|
||||
|
||||
pop_min_time = get_minimal_parkingtime(&cfg);
|
||||
pop_max_time = get_maximal_parkingtime(&cfg);
|
||||
pop_min_price = get_minimal_parkingprice(&cfg);
|
||||
pop_max_price = get_maximal_parkingprice(&cfg);
|
||||
|
||||
qCritical() << " pop_min_time: " << pop_min_time;
|
||||
qCritical() << " pop_max_time: " << pop_max_time;
|
||||
qCritical() << "pop_min_price: " << pop_min_price;
|
||||
qCritical() << "pop_max_price: " << pop_max_price;
|
||||
|
||||
{
|
||||
// zone 1 (lila)
|
||||
QDateTime s(QDate(2023, 11, 30), QTime());
|
||||
@ -281,15 +296,15 @@ int main() {
|
||||
QDateTime start = s.addSecs(offset * 60);
|
||||
// qCritical() << "start" << start.toString(Qt::ISODate);
|
||||
|
||||
double cost = calculator.GetCostFromDuration(&cfg, 3, start, end, duration);
|
||||
double cost = Calculator::GetInstance().GetCostFromDuration(&cfg, 3, start, end, duration);
|
||||
// Q_ASSERT(cost == duration*2.5);
|
||||
//qCritical() << "";
|
||||
//qCritical() << "start" << start.toString(Qt::ISODate)
|
||||
// << "end" << end.toString(Qt::ISODate)
|
||||
// << "duration" << duration
|
||||
// << "cost" << cost;
|
||||
qCritical() << "";
|
||||
qCritical() << "start" << start.toString(Qt::ISODate)
|
||||
<< "end" << end.toString(Qt::ISODate)
|
||||
<< "duration" << duration
|
||||
<< "cost" << cost;
|
||||
|
||||
std::string duration = calculator.GetDurationFromCost(&cfg, 3, start.toString(Qt::ISODate).toStdString().c_str(), cost);
|
||||
std::string duration = Calculator::GetInstance().GetDurationFromCost(&cfg, 3, start.toString(Qt::ISODate).toStdString().c_str(), cost);
|
||||
//Q_ASSERT(cost == duration*2.5);
|
||||
qCritical() << "start" << start.toString(Qt::ISODate)
|
||||
<< "cost" << cost
|
||||
@ -297,20 +312,22 @@ int main() {
|
||||
}
|
||||
}
|
||||
}
|
||||
#if 0
|
||||
{
|
||||
QDateTime start(QDate(2023, 12, 1), QTime(18, 0));
|
||||
QDateTime end;
|
||||
double cost = calculator.GetCostFromDuration(&cfg, 3, start, end, 60);
|
||||
double cost = Calculator::GetInstance().GetCostFromDuration(&cfg, 3, start, end, 60);
|
||||
// Q_ASSERT(cost == 150);
|
||||
qCritical() << "end" << end.toString(Qt::ISODate) << "cost" << cost;
|
||||
}
|
||||
{
|
||||
QDateTime start(QDate(2023, 10, 31), QTime(18, 0));
|
||||
QDateTime end;
|
||||
double cost = calculator.GetCostFromDuration(&cfg, 3, start, end, 60);
|
||||
double cost = Calculator::GetInstance().GetCostFromDuration(&cfg, 3, start, end, 60);
|
||||
//Q_ASSERT(cost == 150);
|
||||
qCritical() << "end" << end.toString(Qt::ISODate) << "cost" << cost;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user