Compare commits

..

19 Commits

Author SHA1 Message Date
23748966de Merge branch 'moransBranch' of git.mimbach49.de:GerhardHoffmann/MOBILISIS-Calculator into moransBranch 2023-05-19 15:49:38 +02:00
a453886f0a Merge branch 'master' into moransBranch 2023-05-16 15:35:47 +02:00
eef94a3fb3 Change interface: use QDateTime
- use QDateTime instead of char*-string
 - GetCostFromDuration: add end_datetime as a return value
2023-05-16 15:31:53 +02:00
88a0b6ebe2 Make main.c compile again 2023-05-16 11:10:49 +02:00
3097819c01 Update interface for 'compute_duration_for_daily_ticket() 2023-05-16 11:07:21 +02:00
acf799da7e Add explaining comments 2023-05-15 17:37:51 +02:00
3bf71f84d5 Merge branch 'moransBranch' 2023-05-15 17:33:51 +02:00
73f5eca656 Tariff config: add day ticket 2023-05-15 17:23:10 +02:00
b8753cc2ed Update tariff config for test 2023-05-15 17:06:57 +02:00
29986e0451 Merge branch 'moransBranch' of git.mimbach49.de:GerhardHoffmann/MOBILISIS-Calculator into moransBranch 2023-05-15 16:58:48 +02:00
1146db743c Add explaining comments 2023-05-15 16:58:28 +02:00
c6302edec5 Format all json files 2023-05-15 16:57:45 +02:00
90eae152bf Merge branch 'moransBranch' 2023-05-12 14:48:19 +02:00
6d001f1501 Fix: QDateTime.addSecs() creates a new object 2023-05-12 14:28:30 +02:00
de32022b89 Merge branch 'moransBranch' of git.mimbach49.de:GerhardHoffmann/MOBILISIS-Calculator into moransBranch 2023-05-12 14:10:57 +02:00
1e2f1589ac Fix: QDateTime::fromString() 2023-05-12 14:10:16 +02:00
ee1f7eca44 Merge branch 'master' of git.mimbach49.de:GerhardHoffmann/MOBILISIS-Calculator 2023-05-12 12:43:49 +02:00
1069c5ad90 main: add test for GetDurationFromCost 2023-05-12 12:43:07 +02:00
46bffc250d Fix: includepath for main 2023-05-12 12:41:37 +02:00
12 changed files with 2268 additions and 528 deletions

View File

@@ -109,7 +109,7 @@ CalcState CALCULATE_LIBRARY_API init_tariff(parking_tariff_t **tariff,
void CALCULATE_LIBRARY_API free_tariff(parking_tariff_t *tariff); void CALCULATE_LIBRARY_API free_tariff(parking_tariff_t *tariff);
int CALCULATE_LIBRARY_API get_zone_nr(int zone = -1); int CALCULATE_LIBRARY_API get_zone_nr(int zone = -1);
CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( // deprecated
parking_tariff_t *tariff, parking_tariff_t *tariff,
time_t start_parking_time, time_t start_parking_time,
time_t end_parking_time, time_t end_parking_time,
@@ -118,10 +118,11 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
parking_tariff_t *tariff, parking_tariff_t *tariff,
QDateTime const &start_parking_time, QDateTime const &start_parking_time,
QDateTime const &end_parking_time, int netto_parking_time,
struct price_t *price); QDateTime &end_parking_time, // return value
struct price_t *price); // return value
CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket( CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket( // deprecated
parking_tariff_t *tariff, parking_tariff_t *tariff,
time_t start_parking_time, time_t start_parking_time,
double cost, double cost,
@@ -131,17 +132,12 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
parking_tariff_t *tariff, parking_tariff_t *tariff,
QDateTime const &start_parking_time, QDateTime const &start_parking_time,
double cost, double cost,
QDateTime &ticketEndTime); QDateTime &ticketEndTime); // return value
CalcState CALCULATE_LIBRARY_API compute_duration_for_daily_ticket( CalcState CALCULATE_LIBRARY_API compute_duration_for_daily_ticket(
parking_tariff_t *tariff, parking_tariff_t *tariff,
QString const &start_parking_time, QDateTime const &start_parking_time,
uint8_t paymentMethod); QDateTime &ticketEndTime);
CalcState CALCULATE_LIBRARY_API compute_duration_for_24hour_daily_ticket(
parking_tariff_t *tariff,
QString const &start_parking_time,
uint8_t paymentMethod);
//#ifdef __cplusplus //#ifdef __cplusplus
//} // extern "C" //} // extern "C"
//#endif //#endif

View File

@@ -23,13 +23,11 @@ public:
/// <param name="tariff_cfg">Pointer to configuration</param> /// <param name="tariff_cfg">Pointer to configuration</param>
/// <param name="vehicle_type">Type of vehicle</param> /// <param name="vehicle_type">Type of vehicle</param>
/// <param name="start_datetime">Date/time of payment to be conducted in ISO8601 format (e.g. 2022-12-25T08:00:00Z) </param> /// <param name="start_datetime">Date/time of payment to be conducted in ISO8601 format (e.g. 2022-12-25T08:00:00Z) </param>
/// <param name="end_datetime">Date/time of park end to be conducted in ISO8601 format (e.g. 2022-12-25T08:00:00Z) </param>
/// <param name="durationMin">Duration of parking in minutes</param> /// <param name="durationMin">Duration of parking in minutes</param>
/// <returns>Returns cost (data type: double)</returns> /// <returns>Returns cost (data type: double)</returns>
double GetCostFromDuration(Configuration* cfg, uint8_t vehicle_type, char const* start_datetime, double durationMin, bool nextDay = false, bool prepaid = false); double GetCostFromDuration(Configuration* cfg, uint8_t vehicle_type, const QDateTime start_datetime, QDateTime & end_datetime, double durationMin, bool nextDay = false, bool prepaid = false);
// Daily ticket // Daily ticket
QString GetDailyTicketDuration(Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over); QString GetDailyTicketDuration(Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over);
// 24-hour daily ticket
QString Get24HourTicketDuration(Configuration* cfg, QString start_datetime, uint8_t payment_option);
}; };

View File

@@ -15,5 +15,4 @@ public:
double pop_min_price; double pop_min_price;
int pop_carry_over; int pop_carry_over;
int pop_daily_card_price; int pop_daily_card_price;
int pop_multi_hour_price;
}; };

View File

@@ -92,10 +92,12 @@ void CALCULATE_LIBRARY_API free_tariff(parking_tariff_t *tariff) {
} }
} }
// this is currently not used
CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
parking_tariff_t *tariff, parking_tariff_t *tariff,
time_t start_parking_time, // in minutes time_t start_parking_time, // in minutes
time_t end_parking_time, // in minutes time_t end_parking_time, // netto time in minutes
struct price_t *price) { struct price_t *price) {
CalcState calcState; CalcState calcState;
double minMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_time; double minMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_time;
@@ -129,11 +131,12 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
QTime const t(0, 0, 0); QTime const t(0, 0, 0);
QDateTime start(d, t, Qt::UTC); QDateTime start(d, t, Qt::UTC);
start = start.toLocalTime().addSecs(start_parking_time * 60); start = start.toLocalTime().addSecs(start_parking_time * 60);
QDateTime end(start);
if (start.isValid()) { if (start.isValid()) {
QString cs = start.toString(Qt::ISODate);
double cost = calculator.GetCostFromDuration( double cost = calculator.GetCostFromDuration(
tariff, PaymentOption::Option1, tariff, PaymentOption::Option1,
cs.toLocal8Bit().constData(), start,
end,
duration, false, true); duration, false, true);
double minCost = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_price; double minCost = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_price;
if (cost < minCost) { if (cost < minCost) {
@@ -152,8 +155,10 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
parking_tariff_t *tariff, parking_tariff_t *tariff,
QDateTime const &start_parking_time, QDateTime const &start_parking_time,
QDateTime const &end_parking_time, int netto_parking_time,
struct price_t *price) { QDateTime &end_parking_time,
struct price_t *price)
{
CalcState calcState; CalcState calcState;
double minMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_time; double minMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_time;
double maxMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_max_time; double maxMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_max_time;
@@ -161,39 +166,37 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
// DEBUG // DEBUG
qCritical() << "compute_price_for_parking_ticket() " << endl qCritical() << "compute_price_for_parking_ticket() " << endl
<< " start_parking_time: " << start_parking_time << endl << " start_parking_time: " << start_parking_time << endl
<< " end_parking_time: " << end_parking_time << endl << " netto_parking_time: " << netto_parking_time << endl
<< " minMin: " << minMin << endl << " minMin: " << minMin << endl
<< " maxMin: " << maxMin; << " maxMin: " << maxMin;
int const duration = (end_parking_time.toSecsSinceEpoch() - if (netto_parking_time < 0) {
start_parking_time.toSecsSinceEpoch()) / 60;
if (duration < 0) {
calcState.setDesc(QString("end=%1, start=%2") calcState.setDesc(QString("end=%1, start=%2")
.arg(end_parking_time.toString(Qt::ISODate), .arg(end_parking_time.toString(Qt::ISODate),
start_parking_time.toString(Qt::ISODate))); start_parking_time.toString(Qt::ISODate)));
return calcState.set(CalcState::State::NEGATIVE_PARING_TIME); return calcState.set(CalcState::State::NEGATIVE_PARING_TIME);
} }
if (duration > maxMin) { if (netto_parking_time > maxMin) {
calcState.setDesc(QString("duration=%1, maxMin=%2").arg(duration, maxMin)); calcState.setDesc(QString("duration=%1, maxMin=%2").arg(netto_parking_time).arg(maxMin));
return calcState.set(CalcState::State::ABOVE_MAX_PARKING_TIME); return calcState.set(CalcState::State::ABOVE_MAX_PARKING_TIME);
} }
if (duration < minMin) { if (netto_parking_time < minMin) {
calcState.setDesc(QString("duration=%1, minMin=%2").arg(duration, minMin)); calcState.setDesc(QString("duration=%1, minMin=%2").arg(netto_parking_time).arg(minMin));
return calcState.set(CalcState::State::BELOW_MIN_PARKING_TIME); return calcState.set(CalcState::State::BELOW_MIN_PARKING_TIME);
} }
if (duration == 0) { if (netto_parking_time == 0) {
memset(price, 0x00, sizeof(*price)); memset(price, 0x00, sizeof(*price));
return calcState.set(CalcState::State::SUCCESS); return calcState.set(CalcState::State::SUCCESS);
} }
if (start_parking_time.isValid()) { if (start_parking_time.isValid()) {
QString cs = start_parking_time.toString(Qt::ISODate);
double cost = calculator.GetCostFromDuration( double cost = calculator.GetCostFromDuration(
tariff, PaymentOption::Option1, tariff, PaymentOption::Option1,
cs.toLocal8Bit().constData(), start_parking_time, // starting time
duration, false, true); end_parking_time, // return value: end time
netto_parking_time, // minutes, netto
false, true);
double minCost = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_price; double minCost = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_price;
if (cost < minCost) { if (cost < minCost) {
calcState.setDesc(QString("minCost=%1, cost=%2").arg(minCost, cost)); calcState.setDesc(QString("minCost=%1, cost=%2").arg(minCost, cost));
@@ -233,7 +236,7 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
duration = calculator.GetDurationFromCost(tariff, PaymentOption::Option1, duration = calculator.GetDurationFromCost(tariff, PaymentOption::Option1,
cs.toLocal8Bit().constData(), cs.toLocal8Bit().constData(),
price, false, true).c_str(); price, false, true).c_str();
QDateTime d = QDateTime::fromString(duration); QDateTime d = QDateTime::fromString(duration, Qt::ISODate);
if (!d.isValid()) { if (!d.isValid()) {
calcState.setDesc(QString("ticketEndTime=%1").arg(duration)); calcState.setDesc(QString("ticketEndTime=%1").arg(duration));
return calcState.set(CalcState::State::WRONG_ISO_TIME_FORMAT); return calcState.set(CalcState::State::WRONG_ISO_TIME_FORMAT);
@@ -249,7 +252,8 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
parking_tariff_t *tariff, parking_tariff_t *tariff,
QDateTime const &start_parking_time, QDateTime const &start_parking_time,
double price, double price,
QDateTime &ticketEndTime) { QDateTime &ticketEndTime)
{
CalcState calcState; CalcState calcState;
if (start_parking_time.isValid()) { if (start_parking_time.isValid()) {
QString cs = start_parking_time.toString(Qt::ISODate); QString cs = start_parking_time.toString(Qt::ISODate);
@@ -275,20 +279,31 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
return calcState.set(CalcState::State::SUCCESS); return calcState.set(CalcState::State::SUCCESS);
} }
CalcState CALCULATE_LIBRARY_API compute_duration_for_daily_ticket(parking_tariff_t *tariff, QString const &start_parking_time,uint8_t paymentMethod) CalcState CALCULATE_LIBRARY_API compute_duration_for_daily_ticket(parking_tariff_t *tariff, QDateTime const &start_parking_time, QDateTime &ticketEndTime)
{ {
CalcState calcState; CalcState calcState;
QString result = calculator.GetDailyTicketDuration(tariff, start_parking_time, PaymentOption::Option1,false); if (start_parking_time.isValid()) {
qDebug() << "DailyTicket() => " + result; QString cs = start_parking_time.toString(Qt::ISODate);
return calcState.set(CalcState::State::SUCCESS); QString endTime = calculator.GetDailyTicketDuration(tariff,
} cs.toLocal8Bit().constData(),
PaymentOption::Option1,
CalcState CALCULATE_LIBRARY_API compute_duration_for_24hour_daily_ticket(parking_tariff_t *tariff, QString const &start_parking_time,uint8_t paymentMethod) false); // carry over
{ ticketEndTime = QDateTime::fromString(endTime,Qt::ISODate);
CalcState calcState;
QString result = calculator.Get24HourTicketDuration(tariff, start_parking_time, PaymentOption::Option1,false); // DEBUG
qDebug() << "24HourDailyTicket() => " + result; qCritical() << "compute_duration_for_daily_ticket(): ";
qCritical() << " endTime: " << endTime;
qCritical() << " ticketEndTime: " << ticketEndTime;
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);
}
return calcState.set(CalcState::State::SUCCESS); return calcState.set(CalcState::State::SUCCESS);
} }

View File

@@ -10,7 +10,6 @@
double total_duration_min = 0.0f; double total_duration_min = 0.0f;
double total_cost = 0.0f; double total_cost = 0.0f;
bool overtime = false; bool overtime = false;
int protection_counter = 0;
#ifdef _WIN32 #ifdef _WIN32
inline struct tm* localtime_r(const time_t *clock, struct tm* result){ inline struct tm* localtime_r(const time_t *clock, struct tm* result){
@@ -20,41 +19,6 @@ inline struct tm* localtime_r(const time_t *clock, struct tm* result){
} }
#endif #endif
QString Calculator::Get24HourTicketDuration(Configuration *cfg, QString start_datetime, uint8_t payment_option)
{
if(start_datetime.isNull() || start_datetime.isEmpty()) return "Invalid date-time";
protection_counter = 0;
double day_price = 0.0f;
int current_special_day_id = -1;
QDateTime inputDateTime = QDateTime::fromString(start_datetime, Qt::ISODate);
QTime worktime_from;
QTime worktime_to;
int daily_24hour_card_price = cfg->PaymentOption.find(payment_option)->second.pop_multi_hour_price;
if(daily_24hour_card_price <= 0) return "24-hour daily ticket: price zero or less";
bool is_special_day = Utilities::CheckSpecialDay(cfg, start_datetime.toStdString().c_str(), &current_special_day_id, &day_price);
if(is_special_day)
{
worktime_from = QTime::fromString(cfg->SpecialDaysWorktime.find(current_special_day_id)->second.pedwt_time_from.c_str(), Qt::ISODate);
worktime_to = QTime::fromString(cfg->SpecialDaysWorktime.find(current_special_day_id)->second.pedwt_time_to.c_str(),Qt::ISODate);
return "24-hour ticket cannot be bought on special day";
}
// Check next special day
inputDateTime = inputDateTime.addSecs(86400);
while(Utilities::CheckSpecialDay(cfg, inputDateTime.toString(Qt::ISODate).toLocal8Bit(), &current_special_day_id, &day_price))
{
protection_counter++;
if(protection_counter >=7) return NULL;
inputDateTime = inputDateTime.addSecs(86400);
}
return inputDateTime.toString(Qt::ISODate) + ", price = " + to_string(daily_24hour_card_price).c_str();
}
QString Calculator::GetDailyTicketDuration(Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over) QString Calculator::GetDailyTicketDuration(Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over)
{ {
if(start_datetime.isNull() || start_datetime.isEmpty()) return NULL; if(start_datetime.isNull() || start_datetime.isEmpty()) return NULL;
@@ -149,7 +113,6 @@ std::string Calculator::GetDurationFromCost(Configuration* cfg,
bool nextDay, bool nextDay,
bool prepaid) bool prepaid)
{ {
// Get input date // Get input date
QDateTime inputDate = QDateTime::fromString(start_datetime,Qt::ISODate); QDateTime inputDate = QDateTime::fromString(start_datetime,Qt::ISODate);
@@ -238,10 +201,7 @@ std::string Calculator::GetDurationFromCost(Configuration* cfg,
if (price_per_unit < 0) price_per_unit = 1.0f; if (price_per_unit < 0) price_per_unit = 1.0f;
// Commented on 07.06.2023 if((price/price_per_unit) < minMin) return "PARKING NOT ALLOWED";
//if((price/price_per_unit) < minMin)
// return "PARKING NOT ALLOWED";
LOG_DEBUG("Calculated price per minute: ", price_per_unit); LOG_DEBUG("Calculated price per minute: ", price_per_unit);
if (price_per_unit < 0) if (price_per_unit < 0)
@@ -358,11 +318,11 @@ std::string Calculator::GetDurationFromCost(Configuration* cfg,
if (calc_price > 0 && total_duration_min > 0) if (calc_price > 0 && total_duration_min > 0)
{ {
inputDate.addSecs(-(int)ceil(calc_price) * 60); inputDate = inputDate.addSecs(-(int)ceil(calc_price) * 60);
} }
if(price >= min_price && total_duration_min >= minMin) if(price >= min_price && total_duration_min >= minMin)
qDebug() << "Valid until: " << inputDate.toString(Qt::ISODate); qDebug() << "GetDurationFromCost(): Valid until: " << inputDate.toString(Qt::ISODate);
else else
{ {
qDebug() << "Parking not allowed"; qDebug() << "Parking not allowed";
@@ -381,10 +341,10 @@ std::string Calculator::GetDurationFromCost(Configuration* cfg,
/////////////////////////////////////// ///////////////////////////////////////
/// <inheritdoc/> /// <inheritdoc/>
double Calculator::GetCostFromDuration(Configuration* cfg, uint8_t payment_option, const char* start_datetime, double durationMin, bool nextDay, bool prepaid) double Calculator::GetCostFromDuration(Configuration* cfg, uint8_t payment_option, const QDateTime start_datetime, QDateTime & end_datetime, double durationMin, bool nextDay, bool prepaid)
{ {
// Get input date // Get input date
QDateTime inputDate = QDateTime::fromString(start_datetime,Qt::ISODate); QDateTime inputDate = start_datetime;
// Get day of week // Get day of week
int weekdayId = 0; int weekdayId = 0;
@@ -471,7 +431,7 @@ double Calculator::GetCostFromDuration(Configuration* cfg, uint8_t payment_optio
{ {
LOG_DEBUG("- No workday found, trying to find next available day"); LOG_DEBUG("- No workday found, trying to find next available day");
inputDate = inputDate.addDays(1); inputDate = inputDate.addDays(1);
return floor(GetCostFromDuration(cfg, payment_option, inputDate.toString(Qt::ISODate).toStdString().c_str(), durationMin, true, prepaid)); return floor(GetCostFromDuration(cfg, payment_option, inputDate, end_datetime, durationMin, true, prepaid));
} }
worktime_from = QTime::fromString(cfg->WeekDaysWorktime.find(weekdayId)->second.pwd_time_from.c_str()); worktime_from = QTime::fromString(cfg->WeekDaysWorktime.find(weekdayId)->second.pwd_time_from.c_str());
worktime_to = QTime::fromString(cfg->WeekDaysWorktime.find(weekdayId)->second.pwd_time_to.c_str()); worktime_to = QTime::fromString(cfg->WeekDaysWorktime.find(weekdayId)->second.pwd_time_to.c_str());
@@ -484,7 +444,7 @@ double Calculator::GetCostFromDuration(Configuration* cfg, uint8_t payment_optio
{ {
inputDate = inputDate.addDays(1); inputDate = inputDate.addDays(1);
inputDate.setTime(worktime_from); inputDate.setTime(worktime_from);
return GetCostFromDuration(cfg, payment_option, inputDate.toString(Qt::ISODate).toStdString().c_str(), durationMin, true, prepaid); return GetCostFromDuration(cfg, payment_option, inputDate, end_datetime, durationMin, true, prepaid);
} }
// If overtime flag is set // If overtime flag is set
@@ -514,7 +474,7 @@ double Calculator::GetCostFromDuration(Configuration* cfg, uint8_t payment_optio
{ {
LOG_DEBUG(" *** PREPAID *** Current time is past the time range end, searching for next available day"); LOG_DEBUG(" *** PREPAID *** Current time is past the time range end, searching for next available day");
inputDate = inputDate.addDays(1); inputDate = inputDate.addDays(1);
return GetCostFromDuration(cfg, payment_option, inputDate.toString(Qt::ISODate).toStdString().c_str(), durationMin, true, prepaid); return GetCostFromDuration(cfg, payment_option, inputDate, end_datetime, durationMin, true, prepaid);
} }
} }
@@ -566,7 +526,7 @@ double Calculator::GetCostFromDuration(Configuration* cfg, uint8_t payment_optio
LOG_DEBUG("Reached end of worktime, searching for the next working day"); LOG_DEBUG("Reached end of worktime, searching for the next working day");
inputDate = inputDate.addDays(1); inputDate = inputDate.addDays(1);
overtime = true; overtime = true;
return GetCostFromDuration(cfg, payment_option, inputDate.toString(Qt::ISODate).toStdString().c_str(), total_duration_min); return GetCostFromDuration(cfg, payment_option, inputDate, end_datetime, total_duration_min);
} }
// Increment input date minutes for each monetary unit // Increment input date minutes for each monetary unit
@@ -575,7 +535,10 @@ double Calculator::GetCostFromDuration(Configuration* cfg, uint8_t payment_optio
total_cost += price_per_unit; total_cost += price_per_unit;
} }
qDebug() << "Valid until:" << inputDate.toString(Qt::ISODate).toStdString().c_str(); qDebug() << "GetCostFromDuration(): Valid until:" << inputDate.toString(Qt::ISODate).toStdString().c_str();
end_datetime = inputDate;
double ret_val = total_cost; double ret_val = total_cost;
total_cost = 0.0f; total_cost = 0.0f;
return ceil(ret_val); return ceil(ret_val);

View File

@@ -155,7 +155,6 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
else if (strcmp(inner_obj_name, "pop_min_price") == 0) PaymentOption.pop_min_price = 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") == 0) PaymentOption.pop_carry_over = 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_daily_card_price") == 0) PaymentOption.pop_daily_card_price = k->value.GetInt();
else if (strcmp(inner_obj_name, "pop_multi_hour_price") == 0) PaymentOption.pop_multi_hour_price = k->value.GetInt();
break; break;
case MemberType::DurationType: case MemberType::DurationType:
if (strcmp(inner_obj_name, "pun_id") == 0) Duration.pun_id = k->value.GetInt(); if (strcmp(inner_obj_name, "pun_id") == 0) Duration.pun_id = k->value.GetInt();

View File

@@ -26,35 +26,69 @@ extern "C" char* strptime(const char* s,
#include <QDebug> #include <QDebug>
#include <QDateTime> #include <QDateTime>
#include <QDir>
#include <fstream>
#include <sstream>
#include "calculator_functions.h"
#include <calculate_price.h>
int main() { int main() {
parking_tariff_t *tariff = 0; std::ifstream input(QDir::homePath().append("/tariff01.json").toStdString());
if (init_tariff(&tariff, "C:\\Users\\MROD\\Documents\\QtCreator\\Old\\build-MOBILISIS-Calculator-Desktop_Qt_5_12_12_MSVC2017_32bit-Debug\\main\\etc\\psa_tariff\\tariff01.json")) std::stringstream sstr;
while(input >> sstr.rdbuf());
std::string json(sstr.str());
Calculator calculator;
Configuration cfg;
bool isParsed = cfg.ParseJson(&cfg, json.c_str());
cout << endl;
char const *startDate = "";
if (isParsed)
{ {
startDate = "2023-05-10T13:52:18.665Z";
std::string duration = calculator.GetDurationFromCost(&cfg, 3, (char *)startDate, 33, false, true);
cout << "---> startDate " << startDate << " _price_ = " << 33
<< " Total duration is: " << duration << endl;
}
return 0;
parking_tariff_t *tariff = 0;
if (init_tariff(&tariff, "/etc/psa_tariff/")) {
struct price_t price; struct price_t price;
memset(&price, 0x00, sizeof(price)); memset(&price, 0x00, sizeof(price));
QDateTime start = QDateTime::fromString("2023-06-01T07:50:00.000Z",Qt::ISODate); //QDateTime::currentDateTime(); QDateTime start = QDateTime::fromString("2023-05-11T07:50:00",Qt::ISODate); //QDateTime::currentDateTime();
time_t start_parking_time = start.toSecsSinceEpoch() / 60; time_t start_parking_time = start.toSecsSinceEpoch() / 60;
time_t end_parking_time = start_parking_time + 1230; time_t end_parking_time = start_parking_time + 615;
// if (compute_price_for_parking_ticket(tariff, if (compute_price_for_parking_ticket(tariff,
// start_parking_time, start_parking_time,
// end_parking_time, end_parking_time,
// &price)) &price))
// { {
// qDebug() << "GetCostFromDuration() => price=" << price.netto; qDebug() << "GetCostFromDuration() => price=" << price.netto;
// } }
// QString duration; QString duration;
// if(compute_duration_for_parking_ticket(tariff,start_parking_time,1650,duration)) if(compute_duration_for_parking_ticket(tariff,start_parking_time,3090,duration))
// { {
// qDebug() << "GetDurationFromCost() => duration=" << duration; qDebug() << "GetDurationFromCost() => duration=" << duration;
// } }
// Daily ticket // Daily ticket
// compute_duration_for_daily_ticket(tariff,start.toString(Qt::ISODate),3); //compute_duration_for_daily_ticket(tariff,start.toString(Qt::ISODate),3);
compute_duration_for_24hour_daily_ticket(tariff,start.toString(Qt::ISODate),3);
//Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over //Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over
// // tests // // tests

View File

@@ -7,6 +7,8 @@ QMAKE_CFLAGS = -c -pipe -std=c11 -g -O0 -Wall -Wno-attributes -W -DDEBUG -D_REEN
QMAKE_CXX_FLAGS += -std=c11 QMAKE_CXX_FLAGS += -std=c11
INCLUDEPATH += $$_PRO_FILE_PWD_/../../MOBILISIS-Calculator/library/include/mobilisis/ INCLUDEPATH += $$_PRO_FILE_PWD_/../../MOBILISIS-Calculator/library/include/mobilisis/
INCLUDEPATH += $$_PRO_FILE_PWD_/../../MOBILISIS-Calculator/library/include/rapidjson/
INCLUDEPATH += $$_PRO_FILE_PWD_/../../MOBILISIS-Calculator/library/include/
INCLUDEPATH += . INCLUDEPATH += .
unix { unix {

View File

@@ -28,25 +28,23 @@
], ],
"PaymentOption": [ "PaymentOption": [
{ {
"pop_id": 1049, "pop_id": 17,
"pop_label": "Zone Lila", "pop_label": "Zone 1",
"pop_payment_method_id": 3, "pop_payment_method_id": 3,
"pop_day_end_time": "16:25:00", "pop_day_end_time": "00:00:00",
"pop_day_night_end_time": "16:25:00", "pop_day_night_end_time": "00:00:00",
"pop_price_night": 0, "pop_price_night": 0,
"pop_min_time": 15, "pop_min_time": 15,
"pop_max_time": 300, "pop_max_time": 10000,
"pop_min_price": 0, "pop_min_price": 0,
"pop_carry_over": 1, "pop_carry_over": 1,
"pop_daily_card_price": 900, "pop_daily_card_price": 900
"pop_multi_hour_price":500
} }
], ],
"PaymentRate": [ "PaymentRate": [
{ {
"pra_payment_option_id": 1049, "pra_payment_option_id": 17,
"pra_payment_unit_id": 1, "pra_payment_unit_id": 3,
"pra_price": 150 "pra_price": 150
} }
], ],
@@ -56,6 +54,11 @@
"pun_label": "1h", "pun_label": "1h",
"pun_duration": 60 "pun_duration": 60
}, },
{
"pun_id": 2,
"pun_label": "1 min",
"pun_duration": 1
},
{ {
"pun_id": 3, "pun_id": 3,
"pun_label": "15 min", "pun_label": "15 min",
@@ -63,48 +66,94 @@
}, },
{ {
"pun_id": 4, "pun_id": 4,
"pun_label": "1 min", "pun_label": "1d",
"pun_duration": 1 "pun_duration": 1440
},
{
"pun_id": 6,
"pun_label": "2h",
"pun_duration": 120
},
{
"pun_id": 7,
"pun_label": "3h",
"pun_duration": 180
},
{
"pun_id": 11,
"pun_label": "4h",
"pun_duration": 240
},
{
"pun_id": 17,
"pun_label": "30 min",
"pun_duration": 30
},
{
"pun_id": 18,
"pun_label": "1.5h",
"pun_duration": 90
},
{
"pun_id": 20,
"pun_label": "10min",
"pun_duration": 10
} }
], ],
"WeekDaysWorktime": [ "WeekDaysWorktime": [
{ {
"pwd_id": 621, "pwd_id": 540,
"pwd_period_week_day_id": 36, "pwd_period_week_day_id": 32,
"pwd_period_day_in_week_id": 1, "pwd_period_day_in_week_id": 1,
"pwd_time_from": "08:00:00", "pwd_time_from": "08:00:00",
"pwd_time_to": "18:00:00" "pwd_time_to": "18:00:00"
}, },
{ {
"pwd_id": 622, "pwd_id": 541,
"pwd_period_week_day_id": 36, "pwd_period_week_day_id": 32,
"pwd_period_day_in_week_id": 2, "pwd_period_day_in_week_id": 2,
"pwd_time_from": "08:00:00", "pwd_time_from": "08:00:00",
"pwd_time_to": "18:00:00" "pwd_time_to": "18:00:00"
}, },
{ {
"pwd_id": 623, "pwd_id": 542,
"pwd_period_week_day_id": 36, "pwd_period_week_day_id": 32,
"pwd_period_day_in_week_id": 3, "pwd_period_day_in_week_id": 3,
"pwd_time_from": "08:00:00", "pwd_time_from": "08:00:00",
"pwd_time_to": "18:00:00" "pwd_time_to": "18:00:00"
}, },
{ {
"pwd_id": 624, "pwd_id": 543,
"pwd_period_week_day_id": 36, "pwd_period_week_day_id": 32,
"pwd_period_day_in_week_id": 4, "pwd_period_day_in_week_id": 4,
"pwd_time_from": "08:00:00", "pwd_time_from": "08:00:00",
"pwd_time_to": "18:00:00" "pwd_time_to": "18:00:00"
}, },
{ {
"pwd_id": 625, "pwd_id": 544,
"pwd_period_week_day_id": 36, "pwd_period_week_day_id": 32,
"pwd_period_day_in_week_id": 5, "pwd_period_day_in_week_id": 5,
"pwd_time_from": "08:00:00", "pwd_time_from": "08:00:00",
"pwd_time_to": "18:00:00" "pwd_time_to": "18:00:00"
} }
], ],
"PeriodYear": [ "PeriodYear": [
{
"pye_id": 1,
"pye_label": "Summer",
"pye_start_month": 6,
"pye_start_day": 1,
"pye_end_month": 9,
"pye_end_day": 30
},
{
"pye_id": 2,
"pye_label": "Winter",
"pye_start_month": 10,
"pye_start_day": 1,
"pye_end_month": 5,
"pye_end_day": 31
},
{ {
"pye_id": 8, "pye_id": 8,
"pye_label": "Whole year", "pye_label": "Whole year",
@@ -112,62 +161,6 @@
"pye_start_day": 1, "pye_start_day": 1,
"pye_end_month": 12, "pye_end_month": 12,
"pye_end_day": 31 "pye_end_day": 31
},
{
"pye_id": 9,
"pye_label": "Whole year",
"pye_start_month": 1,
"pye_start_day": 1,
"pye_end_month": 12,
"pye_end_day": 31
},
{
"pye_id": 10,
"pye_label": "Whole year",
"pye_start_month": 1,
"pye_start_day": 1,
"pye_end_month": 12,
"pye_end_day": 31
},
{
"pye_id": 11,
"pye_label": "Whole Year",
"pye_start_month": 1,
"pye_start_day": 1,
"pye_end_month": 12,
"pye_end_day": 31
},
{
"pye_id": 12,
"pye_label": "Whole Year",
"pye_start_month": 1,
"pye_start_day": 1,
"pye_end_month": 12,
"pye_end_day": 31
},
{
"pye_id": 13,
"pye_label": "Whole Year",
"pye_start_month": 1,
"pye_start_day": 1,
"pye_end_month": 12,
"pye_end_day": 31
},
{
"pye_id": 14,
"pye_label": "Whole Year",
"pye_start_month": 1,
"pye_start_day": 1,
"pye_end_month": 12,
"pye_end_day": 31
},
{
"pye_id": 15,
"pye_label": "Whole year",
"pye_start_month": 1,
"pye_start_day": 1,
"pye_end_month": 12,
"pye_end_day": 31
} }
], ],
"SpecialDaysWorktime": [ "SpecialDaysWorktime": [
@@ -248,6 +241,34 @@
"pedwt_time_to": "00:00:00", "pedwt_time_to": "00:00:00",
"pedwt_price": 0 "pedwt_price": 0
}, },
{
"pedwt_id": 2180,
"pedwt_period_exc_day_id": 2017,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2181,
"pedwt_period_exc_day_id": 2018,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2182,
"pedwt_period_exc_day_id": 2019,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2183,
"pedwt_period_exc_day_id": 2020,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{ {
"pedwt_id": 2184, "pedwt_id": 2184,
"pedwt_period_exc_day_id": 2021, "pedwt_period_exc_day_id": 2021,
@@ -255,6 +276,13 @@
"pedwt_time_to": "00:00:00", "pedwt_time_to": "00:00:00",
"pedwt_price": 0 "pedwt_price": 0
}, },
{
"pedwt_id": 2185,
"pedwt_period_exc_day_id": 2023,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{ {
"pedwt_id": 2188, "pedwt_id": 2188,
"pedwt_period_exc_day_id": 2031, "pedwt_period_exc_day_id": 2031,
@@ -276,6 +304,20 @@
"pedwt_time_to": "00:00:00", "pedwt_time_to": "00:00:00",
"pedwt_price": 0 "pedwt_price": 0
}, },
{
"pedwt_id": 2196,
"pedwt_period_exc_day_id": 2035,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2198,
"pedwt_period_exc_day_id": 2036,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{ {
"pedwt_id": 2200, "pedwt_id": 2200,
"pedwt_period_exc_day_id": 2037, "pedwt_period_exc_day_id": 2037,
@@ -290,180 +332,54 @@
"pedwt_time_to": "00:00:00", "pedwt_time_to": "00:00:00",
"pedwt_price": 0 "pedwt_price": 0
}, },
{
"pedwt_id": 2219,
"pedwt_period_exc_day_id": 2041,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2220,
"pedwt_period_exc_day_id": 2042,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2221,
"pedwt_period_exc_day_id": 2043,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2222,
"pedwt_period_exc_day_id": 2044,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2223,
"pedwt_period_exc_day_id": 2045,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "01:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2224,
"pedwt_period_exc_day_id": 2046,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{ {
"pedwt_id": 2226, "pedwt_id": 2226,
"pedwt_period_exc_day_id": 2016, "pedwt_period_exc_day_id": 2016,
"pedwt_time_from": "00:00:00", "pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00", "pedwt_time_to": "00:00:00",
"pedwt_price": 0 "pedwt_price": 0
},
{
"pedwt_id": 2245,
"pedwt_period_exc_day_id": 2035,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2246,
"pedwt_period_exc_day_id": 2036,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2249,
"pedwt_period_exc_day_id": 2050,
"pedwt_time_from": "08:00:00",
"pedwt_time_to": "16:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2250,
"pedwt_period_exc_day_id": 2051,
"pedwt_time_from": "08:00:00",
"pedwt_time_to": "16:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2251,
"pedwt_period_exc_day_id": 2052,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2252,
"pedwt_period_exc_day_id": 2053,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2253,
"pedwt_period_exc_day_id": 2054,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2254,
"pedwt_period_exc_day_id": 2055,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2255,
"pedwt_period_exc_day_id": 2056,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2256,
"pedwt_period_exc_day_id": 2057,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2257,
"pedwt_period_exc_day_id": 2058,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2258,
"pedwt_period_exc_day_id": 2059,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2259,
"pedwt_period_exc_day_id": 2060,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2260,
"pedwt_period_exc_day_id": 2061,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2261,
"pedwt_period_exc_day_id": 2062,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2262,
"pedwt_period_exc_day_id": 2063,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2263,
"pedwt_period_exc_day_id": 2064,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2264,
"pedwt_period_exc_day_id": 2065,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2265,
"pedwt_period_exc_day_id": 2066,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2266,
"pedwt_period_exc_day_id": 2067,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2267,
"pedwt_period_exc_day_id": 2068,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2268,
"pedwt_period_exc_day_id": 2069,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2269,
"pedwt_period_exc_day_id": 2070,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
},
{
"pedwt_id": 2270,
"pedwt_period_exc_day_id": 2071,
"pedwt_time_from": "00:00:00",
"pedwt_time_to": "00:00:00",
"pedwt_price": 0
} }
], ],
"SpecialDays": [ "SpecialDays": [
@@ -499,6 +415,38 @@
"ped_period_special_day_id": 2, "ped_period_special_day_id": 2,
"ped_year": 0 "ped_year": 0
}, },
{
"ped_id": 2017,
"ped_label": "Holiday (Hungary)",
"ped_date_start": "2022-12-27",
"ped_date_end": "2022-12-27",
"ped_period_special_day_id": 1,
"ped_year": 0
},
{
"ped_id": 2018,
"ped_label": "Holiday (Hungary)",
"ped_date_start": "2022-12-28",
"ped_date_end": "2022-12-28",
"ped_period_special_day_id": 1,
"ped_year": 0
},
{
"ped_id": 2019,
"ped_label": "Holiday (Hungary)",
"ped_date_start": "2022-12-29",
"ped_date_end": "2022-12-29",
"ped_period_special_day_id": 1,
"ped_year": 0
},
{
"ped_id": 2020,
"ped_label": "Holiday (Hungary)",
"ped_date_start": "2022-12-30",
"ped_date_end": "2022-12-30",
"ped_period_special_day_id": 1,
"ped_year": 0
},
{ {
"ped_id": 2021, "ped_id": 2021,
"ped_label": "Holiday (Hungary)", "ped_label": "Holiday (Hungary)",
@@ -515,6 +463,14 @@
"ped_period_special_day_id": 2, "ped_period_special_day_id": 2,
"ped_year": 0 "ped_year": 0
}, },
{
"ped_id": 2023,
"ped_label": "Holiday (Hungary)",
"ped_date_start": "2023-01-02",
"ped_date_end": "2023-01-02",
"ped_period_special_day_id": 1,
"ped_year": 2024
},
{ {
"ped_id": 2024, "ped_id": 2024,
"ped_label": "Good Friday", "ped_label": "Good Friday",
@@ -601,7 +557,7 @@
"ped_date_start": "2024-03-31", "ped_date_start": "2024-03-31",
"ped_date_end": "2024-03-31", "ped_date_end": "2024-03-31",
"ped_period_special_day_id": 2, "ped_period_special_day_id": 2,
"ped_year": 2024 "ped_year": 0
}, },
{ {
"ped_id": 2036, "ped_id": 2036,
@@ -609,7 +565,7 @@
"ped_date_start": "2024-04-01", "ped_date_start": "2024-04-01",
"ped_date_end": "2024-04-01", "ped_date_end": "2024-04-01",
"ped_period_special_day_id": 2, "ped_period_special_day_id": 2,
"ped_year": 2024 "ped_year": 0
}, },
{ {
"ped_id": 2037, "ped_id": 2037,
@@ -628,180 +584,52 @@
"ped_year": 2024 "ped_year": 2024
}, },
{ {
"ped_id": 2050, "ped_id": 2041,
"ped_label": "Uskrs",
"ped_date_start": "2023-04-16",
"ped_date_end": "2023-04-16",
"ped_period_special_day_id": 1,
"ped_year": 0
},
{
"ped_id": 2051,
"ped_label": "Uskrs",
"ped_date_start": "2023-04-16",
"ped_date_end": "2023-04-16",
"ped_period_special_day_id": 1,
"ped_year": 0
},
{
"ped_id": 2052,
"ped_label": "Christmas 1st day",
"ped_date_start": "2022-12-25",
"ped_date_end": "2022-12-25",
"ped_period_special_day_id": 2,
"ped_year": 0
},
{
"ped_id": 2053,
"ped_label": "Christmas 2nd day",
"ped_date_start": "2022-12-26",
"ped_date_end": "2022-12-26",
"ped_period_special_day_id": 2,
"ped_year": 0
},
{
"ped_id": 2054,
"ped_label": "Republic Day (Hungary)",
"ped_date_start": "2022-10-23",
"ped_date_end": "2022-10-23",
"ped_period_special_day_id": 2,
"ped_year": 0
},
{
"ped_id": 2055,
"ped_label": "Christmas (Sunday)",
"ped_date_start": "2022-12-24",
"ped_date_end": "2022-12-24",
"ped_period_special_day_id": 2,
"ped_year": 0
},
{
"ped_id": 2056,
"ped_label": "Holiday (Hungary)", "ped_label": "Holiday (Hungary)",
"ped_date_start": "2022-12-31", "ped_date_start": "2024-12-27",
"ped_date_end": "2022-12-31", "ped_date_end": "2024-12-27",
"ped_period_special_day_id": 1, "ped_period_special_day_id": 1,
"ped_year": 0 "ped_year": 0
}, },
{ {
"ped_id": 2057, "ped_id": 2042,
"ped_label": "NewYear", "ped_label": "Holiday (Hungary)",
"ped_date_start": "2023-01-01", "ped_date_start": "2024-12-28",
"ped_date_end": "2023-01-01", "ped_date_end": "2024-12-28",
"ped_period_special_day_id": 2, "ped_period_special_day_id": 1,
"ped_year": 0 "ped_year": 0
}, },
{ {
"ped_id": 2058, "ped_id": 2043,
"ped_label": "Good Friday", "ped_label": "Holiday (Hungary)",
"ped_date_start": "2023-04-07", "ped_date_start": "2024-12-29",
"ped_date_end": "2023-04-07", "ped_date_end": "2024-12-29",
"ped_period_special_day_id": 2, "ped_period_special_day_id": 1,
"ped_year": 2023
},
{
"ped_id": 2059,
"ped_label": "Easter Sunday",
"ped_date_start": "2023-04-09",
"ped_date_end": "2023-04-09",
"ped_period_special_day_id": 2,
"ped_year": 2023
},
{
"ped_id": 2060,
"ped_label": "Easter Monday",
"ped_date_start": "2023-04-10",
"ped_date_end": "2023-04-10",
"ped_period_special_day_id": 2,
"ped_year": 2023
},
{
"ped_id": 2061,
"ped_label": "Whit Sunday",
"ped_date_start": "2023-05-28",
"ped_date_end": "2023-05-28",
"ped_period_special_day_id": 2,
"ped_year": 2023
},
{
"ped_id": 2062,
"ped_label": "Whit Monday",
"ped_date_start": "2023-05-29",
"ped_date_end": "2023-05-29",
"ped_period_special_day_id": 2,
"ped_year": 2023
},
{
"ped_id": 2063,
"ped_label": "Revolution Day (Hungary)",
"ped_date_start": "2023-03-15",
"ped_date_end": "2023-03-15",
"ped_period_special_day_id": 2,
"ped_year": 0 "ped_year": 0
}, },
{ {
"ped_id": 2064, "ped_id": 2044,
"ped_label": "Labour Day", "ped_label": "Holiday (Hungary)",
"ped_date_start": "2023-05-01", "ped_date_start": "2024-12-30",
"ped_date_end": "2023-05-01", "ped_date_end": "2024-12-30",
"ped_period_special_day_id": 2, "ped_period_special_day_id": 1,
"ped_year": 0 "ped_year": 0
}, },
{ {
"ped_id": 2065, "ped_id": 2045,
"ped_label": "Saint Stephens Day (Hungary)", "ped_label": "Holiday (Hungary)",
"ped_date_start": "2023-08-20", "ped_date_start": "2024-12-31",
"ped_date_end": "2023-08-20", "ped_date_end": "2024-12-31",
"ped_period_special_day_id": 2, "ped_period_special_day_id": 1,
"ped_year": 0 "ped_year": 0
}, },
{ {
"ped_id": 2066, "ped_id": 2046,
"ped_label": "All Saints Day", "ped_label": "Holiday (Hungary)",
"ped_date_start": "2023-11-01", "ped_date_start": "2025-01-02",
"ped_date_end": "2023-11-01", "ped_date_end": "2025-01-02",
"ped_period_special_day_id": 2, "ped_period_special_day_id": 1,
"ped_year": 0 "ped_year": 2025
},
{
"ped_id": 2067,
"ped_label": "Good Friday",
"ped_date_start": "2024-03-29",
"ped_date_end": "2024-03-29",
"ped_period_special_day_id": 2,
"ped_year": 2024
},
{
"ped_id": 2068,
"ped_label": "Easter",
"ped_date_start": "2024-03-31",
"ped_date_end": "2024-03-31",
"ped_period_special_day_id": 2,
"ped_year": 2024
},
{
"ped_id": 2069,
"ped_label": "Easter Monday",
"ped_date_start": "2024-04-01",
"ped_date_end": "2024-04-01",
"ped_period_special_day_id": 2,
"ped_year": 2024
},
{
"ped_id": 2070,
"ped_label": "Whit Monday",
"ped_date_start": "2024-05-20",
"ped_date_end": "2024-05-20",
"ped_period_special_day_id": 2,
"ped_year": 2024
},
{
"ped_id": 2071,
"ped_label": "Whit Sunday",
"ped_date_start": "2024-05-19",
"ped_date_end": "2024-05-19",
"ped_period_special_day_id": 2,
"ped_year": 2024
} }
] ]
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long