Compare commits
5 Commits
ecaf2a9687
...
62494a2c27
Author | SHA1 | Date | |
---|---|---|---|
62494a2c27 | |||
185b732212 | |||
8fb5699e63 | |||
9a32a765cd | |||
52e2710f9d |
@ -77,10 +77,10 @@ static bool checkCalculatePreConditions(parking_tariff_t const* tariff,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tariff->max_parking_time != -1) {
|
if (tariff->parking_time_max != -1) {
|
||||||
if (parkingTime > tariff->max_parking_time) {
|
if (parkingTime > tariff->parking_time_max) {
|
||||||
qCritical() << "parkingTime" << parkingTime
|
qCritical() << "parkingTime" << parkingTime
|
||||||
<< ">" << tariff->max_parking_time;
|
<< ">" << tariff->parking_time_max;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -286,7 +286,7 @@ bool compute_duration_for_parking_ticket(parking_tariff_t const *tariff,
|
|||||||
minute_t *end_parking_time,
|
minute_t *end_parking_time,
|
||||||
struct price_t const *price) {
|
struct price_t const *price) {
|
||||||
price_t p;
|
price_t p;
|
||||||
for (int i = 0; i < tariff->max_parking_time; ++i) {
|
for (int i = 0; i < tariff->parking_time_max; ++i) {
|
||||||
minute_t end_time = start_parking_time + i;
|
minute_t end_time = start_parking_time + i;
|
||||||
if (compute_price_for_parking_ticket(tariff, start_parking_time,
|
if (compute_price_for_parking_ticket(tariff, start_parking_time,
|
||||||
end_time, &p)) {
|
end_time, &p)) {
|
||||||
|
@ -42,18 +42,5 @@ static constexpr uint16_t const DAYS = 7;
|
|||||||
static constexpr uint32_t const MAX_OFFSET = (uint32_t)sizeof(TariffMinute[3][7][1440]);
|
static constexpr uint32_t const MAX_OFFSET = (uint32_t)sizeof(TariffMinute[3][7][1440]);
|
||||||
static constexpr uint32_t const UNDEFINED_NEXT_MINUTE = MAX_OFFSET;
|
static constexpr uint32_t const UNDEFINED_NEXT_MINUTE = MAX_OFFSET;
|
||||||
|
|
||||||
struct TariffDay {
|
|
||||||
TariffMinute m[1];
|
|
||||||
//TariffMinute m[MINUTES_PER_DAY];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct TariffWeek {
|
|
||||||
TariffDay mon = {{}};
|
|
||||||
};
|
|
||||||
|
|
||||||
struct TariffSteps {
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // CALCULATE_PARKING_TICKETS_GLOBAL_H
|
#endif // CALCULATE_PARKING_TICKETS_GLOBAL_H
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
@ -23,6 +24,11 @@ using namespace rapidjson;
|
|||||||
#define MAX_PARKING_PRICE "max_parking_price"
|
#define MAX_PARKING_PRICE "max_parking_price"
|
||||||
#define MAX_PRICE_FOR_24_HOURS "max_price_for_24_hours"
|
#define MAX_PRICE_FOR_24_HOURS "max_price_for_24_hours"
|
||||||
#define MAX_PARKING_TIME "max_parking_time"
|
#define MAX_PARKING_TIME "max_parking_time"
|
||||||
|
#define TARIFF_VERSION "version"
|
||||||
|
#define TARIFF_FEATURES "tariff_features"
|
||||||
|
#define WAITING_PERIOD "waiting_period"
|
||||||
|
#define PARKING_TIME_MIN "parking_time_min"
|
||||||
|
#define PARKING_TIME_MAX "parking_time_max"
|
||||||
|
|
||||||
static const char *weekStr[] {
|
static const char *weekStr[] {
|
||||||
"week1", "week2", "week3"
|
"week1", "week2", "week3"
|
||||||
@ -59,6 +65,37 @@ parking_tariff_t *parking_tariff_t::parseTariff(const char *confFile) {
|
|||||||
|
|
||||||
tariff = new parking_tariff_t();
|
tariff = new parking_tariff_t();
|
||||||
|
|
||||||
|
if (d.HasMember(TARIFF_VERSION)) {
|
||||||
|
Value::MemberIterator o = d.FindMember(TARIFF_VERSION);
|
||||||
|
assert(o != d.MemberEnd());
|
||||||
|
assert(o->value.IsString());
|
||||||
|
std::string version = o->value.GetString();
|
||||||
|
strncpy(tariff->tariff_version, version.c_str(),
|
||||||
|
std::min((int)version.size(),
|
||||||
|
(int)sizeof(tariff->tariff_version)-1));
|
||||||
|
tariff->tariff_version[sizeof(tariff->tariff_version)-1] = '\0';
|
||||||
|
|
||||||
|
}
|
||||||
|
if (d.HasMember(TARIFF_FEATURES)) {
|
||||||
|
Value::MemberIterator o = d.FindMember(TARIFF_FEATURES);
|
||||||
|
assert(o != d.MemberEnd());
|
||||||
|
assert(o->value.IsArray());
|
||||||
|
int const s = o->value.Size();
|
||||||
|
if (s > 0) {
|
||||||
|
// TODO
|
||||||
|
} else {
|
||||||
|
tariff->tariff_features = 0;
|
||||||
|
memset(tariff->_tariff_features, 0x00,
|
||||||
|
sizeof(tariff->_tariff_features));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (d.HasMember(WAITING_PERIOD)) {
|
||||||
|
Value::MemberIterator o = d.FindMember(WAITING_PERIOD);
|
||||||
|
assert(o != d.MemberEnd());
|
||||||
|
assert(o->value.IsString());
|
||||||
|
std::string wp = o->value.GetString();
|
||||||
|
tariff->waiting_period = std::stoi(wp);
|
||||||
|
}
|
||||||
if (d.HasMember(FREE_OF_CHARGE)) {
|
if (d.HasMember(FREE_OF_CHARGE)) {
|
||||||
Value::MemberIterator o = d.FindMember(FREE_OF_CHARGE);
|
Value::MemberIterator o = d.FindMember(FREE_OF_CHARGE);
|
||||||
assert(o != d.MemberEnd());
|
assert(o != d.MemberEnd());
|
||||||
@ -98,6 +135,24 @@ parking_tariff_t *parking_tariff_t::parseTariff(const char *confFile) {
|
|||||||
tariff->max_parking_price_units = (uint32_t)std::stoul(mp);
|
tariff->max_parking_price_units = (uint32_t)std::stoul(mp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (d.HasMember(PARKING_TIME_MIN)) {
|
||||||
|
Value::MemberIterator o = d.FindMember(PARKING_TIME_MIN);
|
||||||
|
assert(o != d.MemberEnd());
|
||||||
|
assert(o->value.IsString());
|
||||||
|
std::string mp = o->value.GetString();
|
||||||
|
tariff->parking_time_min = (uint32_t)std::stoul(mp);
|
||||||
|
}
|
||||||
|
if (d.HasMember(PARKING_TIME_MAX)) {
|
||||||
|
Value::MemberIterator o = d.FindMember(PARKING_TIME_MAX);
|
||||||
|
assert(o != d.MemberEnd());
|
||||||
|
assert(o->value.IsString());
|
||||||
|
std::string mp = o->value.GetString();
|
||||||
|
if (mp == "unlimited") {
|
||||||
|
tariff->parking_time_max = ~0;
|
||||||
|
} else {
|
||||||
|
tariff->parking_time_max = (uint32_t)std::stoul(mp);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (d.HasMember(MAX_PRICE_FOR_24_HOURS)) {
|
if (d.HasMember(MAX_PRICE_FOR_24_HOURS)) {
|
||||||
Value::MemberIterator o = d.FindMember(MAX_PRICE_FOR_24_HOURS);
|
Value::MemberIterator o = d.FindMember(MAX_PRICE_FOR_24_HOURS);
|
||||||
assert(o != d.MemberEnd());
|
assert(o != d.MemberEnd());
|
||||||
@ -109,17 +164,6 @@ parking_tariff_t *parking_tariff_t::parseTariff(const char *confFile) {
|
|||||||
tariff->max_price_for_24_hours = (uint32_t)std::stoul(mp);
|
tariff->max_price_for_24_hours = (uint32_t)std::stoul(mp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (d.HasMember(MAX_PARKING_TIME)) {
|
|
||||||
Value::MemberIterator o = d.FindMember(MAX_PARKING_TIME);
|
|
||||||
assert(o != d.MemberEnd());
|
|
||||||
assert(o->value.IsString());
|
|
||||||
std::string mp = o->value.GetString();
|
|
||||||
if (mp == "unlimited") {
|
|
||||||
tariff->max_parking_time = ~0;
|
|
||||||
} else {
|
|
||||||
tariff->max_parking_time = (uint32_t)std::stoul(mp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QDate today = QDate::currentDate();
|
QDate today = QDate::currentDate();
|
||||||
|
|
||||||
|
@ -9,6 +9,12 @@
|
|||||||
#include <QPair>
|
#include <QPair>
|
||||||
#include <QList>
|
#include <QList>
|
||||||
|
|
||||||
|
#define FAHRZEUG_AUSWAHL_PKW (uint64_t)(0x0000000000000001)
|
||||||
|
#define FAHRZEUG_AUSWAHL_BUS (uint64_t)(0x0000000000000002)
|
||||||
|
#define FAHRZEUG_AUSWAHL_LKW (uint64_t)(0x0000000000000004)
|
||||||
|
#define VERANSTALTUNG_AUSWAHL_SPORT (uint64_t)(0x0000000000000008)
|
||||||
|
#define VERANSTALTUNG_AUSWAHL_KULTUR (uint64_t)(0x0000000000000010)
|
||||||
|
|
||||||
struct parking_tariff_t {
|
struct parking_tariff_t {
|
||||||
// parking_tariff_t();
|
// parking_tariff_t();
|
||||||
static parking_tariff_t *parseTariff(const char *confFile);
|
static parking_tariff_t *parseTariff(const char *confFile);
|
||||||
@ -38,18 +44,13 @@ struct parking_tariff_t {
|
|||||||
///
|
///
|
||||||
/// \brief waiting_period
|
/// \brief waiting_period
|
||||||
/// @note Also called "Karenzzeit". Allowed values: [0, 3]
|
/// @note Also called "Karenzzeit". Allowed values: [0, 3]
|
||||||
// minute_t waiting_period;
|
minute_t waiting_period;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \brief free_of_charge
|
/// \brief free_of_charge
|
||||||
///
|
///
|
||||||
minute_t free_of_charge;
|
minute_t free_of_charge;
|
||||||
|
|
||||||
///
|
|
||||||
/// \brief max_parking_time
|
|
||||||
///
|
|
||||||
minute_t max_parking_time = -1;
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \brief max_parking_price_units
|
/// \brief max_parking_price_units
|
||||||
///
|
///
|
||||||
@ -60,6 +61,31 @@ struct parking_tariff_t {
|
|||||||
///
|
///
|
||||||
uint32_t max_price_for_24_hours; // 24h limit (default -1)
|
uint32_t max_price_for_24_hours; // 24h limit (default -1)
|
||||||
|
|
||||||
|
///
|
||||||
|
/// \brief tariff_version
|
||||||
|
///
|
||||||
|
char tariff_version[64];
|
||||||
|
|
||||||
|
///
|
||||||
|
/// \brief tariff_features
|
||||||
|
///
|
||||||
|
uint64_t tariff_features;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// \brief _tariff_features
|
||||||
|
///
|
||||||
|
uint64_t _tariff_features[64];
|
||||||
|
|
||||||
|
///
|
||||||
|
/// \brief parking_time_min
|
||||||
|
///
|
||||||
|
minute_t parking_time_min;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// \brief parking_time_max
|
||||||
|
///
|
||||||
|
minute_t parking_time_max;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/// Minimal amount of money for buying a ticket.
|
/// Minimal amount of money for buying a ticket.
|
||||||
///
|
///
|
||||||
|
@ -1,12 +1,27 @@
|
|||||||
{
|
{
|
||||||
"name" : "Germersheim (23.01.2023)",
|
"name" : "Germersheim (23.01.2023)",
|
||||||
|
|
||||||
|
"version" : "1.0.0",
|
||||||
|
|
||||||
"spec1" : "Freiparkzeit: 90min kostenlos",
|
"spec1" : "Freiparkzeit: 90min kostenlos",
|
||||||
"spec2" : "Stundentariff (7.00 - 20:00): 3.50 Euro/h",
|
"spec2" : "Stundentariff (7.00 - 20:00): 3.50 Euro/h",
|
||||||
"spec3" : "Tagesmaximum 18 Euro, gueltig 24Std. ab Einfahrt",
|
"spec3" : "Tagesmaximum 18 Euro, gueltig 24Std. ab Einfahrt",
|
||||||
"spec3.1" : "(d.h gueltig bis 24h nach Einfahrt)",
|
"spec3.1" : "(d.h gueltig bis 24h nach Einfahrt)",
|
||||||
"spec4" : "Nachttarif (20.00 - 7.00): 8 Euro",
|
"spec4" : "Nachttarif (20.00 - 7.00): 8 Euro",
|
||||||
|
|
||||||
|
|
||||||
|
"comment_tariff_features" : [ "unused",
|
||||||
|
"FAHRZEUG_AUSWAHL_PKW",
|
||||||
|
"FAHRZEUG_AUSWAHL_BUS",
|
||||||
|
"FAHRZEUG_AUSWAHL_LKW",
|
||||||
|
"VERANSTALTUNG_AUSWAHL_SPORT",
|
||||||
|
"VERANSTALTUNG_AUSWAHL_KULTUR"
|
||||||
|
],
|
||||||
|
"tariff_features" : [],
|
||||||
|
|
||||||
|
"comment_waiting_period" : "karenzzeit",
|
||||||
|
"waiting_period" : "0",
|
||||||
|
|
||||||
"comment_free_of_charge" : "Freiparkzeit: 90min kostenlos",
|
"comment_free_of_charge" : "Freiparkzeit: 90min kostenlos",
|
||||||
"free_of_charge" : "90",
|
"free_of_charge" : "90",
|
||||||
|
|
||||||
@ -25,8 +40,11 @@
|
|||||||
"comment_max_price_for_24_hours" : "preis fuer 24h ticket (18 Euro)",
|
"comment_max_price_for_24_hours" : "preis fuer 24h ticket (18 Euro)",
|
||||||
"max_price_for_24_hours" : "1800000",
|
"max_price_for_24_hours" : "1800000",
|
||||||
|
|
||||||
"comment_max_parking_time" : "maximale parkzeit (in minuten)",
|
"comment_parking_time_max" : "maximale parkzeit (in minuten)",
|
||||||
"max_parking_time" : "20160",
|
"parking_time_max" : "20160",
|
||||||
|
|
||||||
|
"comment_parking_time_min" : "minimale parkzeit (in minuten)",
|
||||||
|
"parking_time_min" : "0",
|
||||||
|
|
||||||
"week1" : {
|
"week1" : {
|
||||||
"Monday": {
|
"Monday": {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user