From c598014dd06bd6c87a63967ee90c9651426f7f37 Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Fri, 15 Dec 2023 13:24:29 +0100 Subject: [PATCH] Add parsing of ATBDailyTicket DailyTicket; ATBTimeBase TimeBase; ATBCustomer Customer; ATBTimeRange TimeRange; --- library/src/configuration.cpp | 168 +++++++++++++++++++++++++++++++--- 1 file changed, 153 insertions(+), 15 deletions(-) diff --git a/library/src/configuration.cpp b/library/src/configuration.cpp index 714e99b..56bcb28 100644 --- a/library/src/configuration.cpp +++ b/library/src/configuration.cpp @@ -77,16 +77,21 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json) } printf("%s", "Valid JSON configuration identified\n"); - ATBCurrency Currency; - ATBDuration Duration; - ATBPaymentMethod PaymentMethod; - ATBPaymentRate PaymentRate; - ATBSpecialDaysWorktime SpecialDaysWorktime; - ATBSpecialDays SpecialDays; - ATBWeekDays WeekDays; - ATBWeekDaysWorktime WeekDaysWorktime; - ATBPaymentOption PaymentOption; - ATBPeriodYear YearPeriod; + ATBCurrency Currency; + ATBDuration Duration; + ATBPaymentMethod PaymentMethod; + ATBPaymentRate PaymentRate; + ATBSpecialDaysWorktime SpecialDaysWorktime; + ATBSpecialDays SpecialDays; + ATBWeekDays WeekDays; + ATBWeekDaysWorktime WeekDaysWorktime; + ATBPaymentOption PaymentOption; + ATBPeriodYear YearPeriod; + ATBDailyTicket DailyTicket; + ATBTimeBase TimeBase; + ATBCustomer Customer; + ATBTimeRange TimeRange; + MemberType mb_type = MemberType::UnknownType; // Get all JSON object members @@ -118,14 +123,14 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json) continue; } - //printf(" -%s\n", mb_name); + printf(" -%s\n", mb_name); // Get array for each JSON object member auto mb_array = document[mb_name].GetArray(); if (mb_array.Size() <= 0) break; //Iterate over provided array - for (auto j = 0; j < mb_array.Size(); j++) + for (rapidjson::SizeType j = 0; j < mb_array.Size(); j++) { // Get all inner objects, don't print name if NULL auto inner_obj = mb_array[j].GetObject(); @@ -145,12 +150,133 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json) // Identify member type mb_type = IdentifyJsonMember(mb_name); -//#pragma region Get_values switch (mb_type) { case MemberType::UnknownType: break; - case MemberType::CurrencyType: + case MemberType::TimeRangeType: + if (QString(inner_obj_name) == QString("time_range_id")) { + if (k->value.IsInt()) { + TimeRange.time_range_id = k->value.GetInt(); + } + } else + if (QString(inner_obj_name) == QString("time_range_from")) { + if (k->value.IsString()) { + QTime timeRangeFrom = QTime::fromString(QString::fromStdString(k->value.GetString()), Qt::ISODate); + TimeRange.time_range_from = timeRangeFrom; + } + } else + if (QString(inner_obj_name) == QString("time_range_to")) { + if (k->value.IsString()) { + QTime timeRangeTo = QTime::fromString(QString::fromStdString(k->value.GetString()), Qt::ISODate); + TimeRange.time_range_to = timeRangeTo; + } + } + break; + case MemberType::TimeBaseType: + if (QString(inner_obj_name) == QString("tbase_type")) { + if (k->value.IsInt()) { + int timeBase = k->value.GetInt(); + switch (timeBase) { + case (int)ATBTimeBase::TimeBaseType::ABSOLUTE: + TimeBase.tbase_type = ATBTimeBase::TimeBaseType::ABSOLUTE; + break; + case (int)ATBTimeBase::TimeBaseType::RELATIVE: + TimeBase.tbase_type = ATBTimeBase::TimeBaseType::RELATIVE; + break; + } + } + } + break; + case MemberType::DailyTicketType: + if (QString(inner_obj_name) == QString("daily_ticket_payment_option_id")) { + if (k->value.IsInt()) { + DailyTicket.daily_ticket_payment_option_id = k->value.GetInt(); + } + } else + if (QString(inner_obj_name) == QString("daily_ticket_unit_id")) { + if (k->value.IsInt()) { + DailyTicket.daily_ticket_unit_id = k->value.GetInt(); + } + } else + if (QString(inner_obj_name) == QString("daily_ticket_price")) { + if (k->value.IsInt()) { + DailyTicket.daily_ticket_price = k->value.GetInt(); + } + } else + if (QString(inner_obj_name) == QString("daily_ticket_tbase_type")) { + if (k->value.IsInt()) { + int baseType = k->value.GetInt(); + switch(baseType) { + case (int)ATBTimeBase::TimeBaseType::ABSOLUTE: + DailyTicket.daily_ticket_tbase_type = ATBTimeBase::TimeBaseType::ABSOLUTE; + break; + case (int)ATBTimeBase::TimeBaseType::RELATIVE: + DailyTicket.daily_ticket_tbase_type = ATBTimeBase::TimeBaseType::RELATIVE; + break; + } + } + } else + if (QString(inner_obj_name) == QString("daily_ticket_clearance_customer_type")) { + if (k->value.IsInt()) { + int CustomerType = k->value.GetInt(); + switch (CustomerType) { + case (int)ATBCustomer::CustomerType::ADULT: + DailyTicket.daily_ticket_clearance_customer_type = ATBCustomer::CustomerType::ADULT; + break; + case (int)ATBCustomer::CustomerType::CHILD: + DailyTicket.daily_ticket_clearance_customer_type = ATBCustomer::CustomerType::CHILD; + break; + case (int)ATBCustomer::CustomerType::TEEN: + DailyTicket.daily_ticket_clearance_customer_type = ATBCustomer::CustomerType::TEEN; + break; + } + } + } else + if (QString(inner_obj_name) == QString("daily_ticket_weekday_range")) { + if (k->value.IsInt()) { + DailyTicket.daily_ticket_weekday_range = k->value.GetInt(); + } + } else + if (QString(inner_obj_name) == QString("daily_ticket_special_day_range")) { + if (k->value.IsInt()) { + DailyTicket.daily_ticket_special_day_range = k->value.GetInt(); + } + } + break; + case MemberType::CustomerType: + if (QString(inner_obj_name) == QString("cust_type")) { + if (k->value.IsInt()) { + int cust_type = k->value.GetInt(); + switch (cust_type) { + case (int)ATBCustomer::CustomerType::ADULT: + Customer.cust_type = ATBCustomer::CustomerType::ADULT; + break; + case (int)ATBCustomer::CustomerType::CHILD: + Customer.cust_type = ATBCustomer::CustomerType::CHILD; + break; + case (int)ATBCustomer::CustomerType::TEEN: + Customer.cust_type = ATBCustomer::CustomerType::TEEN; + break; + } + } + } else + if (QString(inner_obj_name) == QString("cust_label")) { + if (k->value.IsString()) { + QString label(QString::fromStdString(k->value.GetString())); + if (label.contains("ADULT", Qt::CaseInsensitive)) { + Customer.cust_label = label; + } else + if (label.contains("CHILD", Qt::CaseInsensitive)) { + Customer.cust_label = label; + } else + if (label.contains("TEEN", Qt::CaseInsensitive)) { + Customer.cust_label = label; + } + } + } + break; + case MemberType::CurrencyType: if (strcmp(inner_obj_name, "pcu_id") == 0) Currency.pcu_id = k->value.GetInt(); else if (strcmp(inner_obj_name, "pcu_sign") == 0) Currency.pcu_sign = k->value.GetString(); else if (strcmp(inner_obj_name, "pcu_major") == 0) Currency.pcu_major = k->value.GetString(); @@ -258,7 +384,19 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json) case MemberType::PeriodYearType: cfg->YearPeriod.insert(pair(YearPeriod.pye_id, YearPeriod)); break; - default: + case MemberType::DailyTicketType: + qCritical() << DailyTicket; + break; + case MemberType::CustomerType: + qCritical() << Customer; + break; + case MemberType::TimeBaseType: + qCritical() << TimeBase; + break; + case MemberType::TimeRangeType: + qCritical() << TimeRange; + break; + default: break; } }