diff --git a/calculate_parking_tickets/calculate_parking_tickets_tariff.cpp b/calculate_parking_tickets/calculate_parking_tickets_tariff.cpp index e5bbfa1..68cd89d 100644 --- a/calculate_parking_tickets/calculate_parking_tickets_tariff.cpp +++ b/calculate_parking_tickets/calculate_parking_tickets_tariff.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -23,6 +24,11 @@ using namespace rapidjson; #define MAX_PARKING_PRICE "max_parking_price" #define MAX_PRICE_FOR_24_HOURS "max_price_for_24_hours" #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[] { "week1", "week2", "week3" @@ -59,6 +65,37 @@ parking_tariff_t *parking_tariff_t::parseTariff(const char *confFile) { 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)) { Value::MemberIterator o = d.FindMember(FREE_OF_CHARGE); 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); } } + 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)) { Value::MemberIterator o = d.FindMember(MAX_PRICE_FOR_24_HOURS); 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); } } - 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();