diff --git a/library/include/mobilisis/configuration.h b/library/include/mobilisis/configuration.h index dea96a9..65bce06 100644 --- a/library/include/mobilisis/configuration.h +++ b/library/include/mobilisis/configuration.h @@ -49,6 +49,8 @@ public: /// Returns operation status bool (OK | FAIL) bool ParseJson(Configuration* cfg, const char* json); + ATBPaymentOption const & getPaymentOptions(); + private: /// /// Identify type of JSON member @@ -56,4 +58,6 @@ private: /// /// MemberType IdentifyJsonMember(const char* member_name); + + ATBPaymentOption currentPaymentOptions; }; diff --git a/library/src/calculate_price.cpp b/library/src/calculate_price.cpp index aec29d2..405989d 100644 --- a/library/src/calculate_price.cpp +++ b/library/src/calculate_price.cpp @@ -100,8 +100,8 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( time_t end_parking_time, // netto time in minutes struct price_t *price) { CalcState calcState; - double minMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_time; - double maxMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_max_time; + double minMin = tariff->PaymentOption.find(tariff->getPaymentOptions().pop_payment_method_id)->second.pop_min_time; + double maxMin = tariff->PaymentOption.find(tariff->getPaymentOptions().pop_payment_method_id)->second.pop_max_time; if (minMin < 0 || maxMin < 0 || maxMin < minMin) { calcState.setDesc(QString("minMin=%1, maxMin=%2").arg(minMin).arg(maxMin)); @@ -134,11 +134,12 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( QDateTime end(start); if (start.isValid()) { double cost = calculator.GetCostFromDuration( - tariff, PaymentOption::Option1, + tariff, + tariff->getPaymentOptions().pop_payment_method_id, start, end, duration, false, true); - double minCost = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_price; + double minCost = tariff->PaymentOption.find(tariff->getPaymentOptions().pop_payment_method_id)->second.pop_min_price; if (cost < minCost) { calcState.setDesc(QString("minCost=%1, cost=%2").arg(minCost).arg(cost)); return calcState.set(CalcState::State::BELOW_MIN_PARKING_PRICE); @@ -160,8 +161,8 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( struct price_t *price) { CalcState calcState; - double minMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_min_time; - double maxMin = tariff->PaymentOption.find(PaymentOption::Option1)->second.pop_max_time; + double minMin = tariff->getPaymentOptions().pop_min_time; + double maxMin = tariff->getPaymentOptions().pop_max_time; // DEBUG qCritical() << "compute_price_for_parking_ticket() " << endl @@ -192,12 +193,13 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket( if (start_parking_time.isValid()) { double cost = calculator.GetCostFromDuration( - tariff, PaymentOption::Option1, + tariff, + tariff->getPaymentOptions().pop_payment_method_id, start_parking_time, // starting time 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->getPaymentOptions().pop_min_price; if (cost < minCost) { calcState.setDesc(QString("minCost=%1, cost=%2").arg(minCost, cost)); return calcState.set(CalcState::State::BELOW_MIN_PARKING_PRICE); @@ -233,7 +235,8 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket( qCritical() << " start (cs): " << cs; qCritical() << " price: " << price; - duration = calculator.GetDurationFromCost(tariff, PaymentOption::Option1, + duration = calculator.GetDurationFromCost(tariff, + tariff->getPaymentOptions().pop_payment_method_id, cs.toLocal8Bit().constData(), price, false, true).c_str(); QDateTime d = QDateTime::fromString(duration, Qt::ISODate); @@ -258,7 +261,8 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket( if (start_parking_time.isValid()) { QString cs = start_parking_time.toString(Qt::ISODate); QString endTime = calculator.GetDurationFromCost( - tariff, PaymentOption::Option1, + tariff, + tariff->getPaymentOptions().pop_payment_method_id, cs.toLocal8Bit().constData(), price, false, true).c_str(); ticketEndTime = QDateTime::fromString(endTime,Qt::ISODate); @@ -286,7 +290,7 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_daily_ticket(parking_tariff ticketEndTime = calculator.GetDailyTicketDuration(tariff, start_parking_time, - PaymentOption::Option1, + tariff->getPaymentOptions().pop_payment_method_id, false); // carry over // DEBUG diff --git a/library/src/calculator_functions.cpp b/library/src/calculator_functions.cpp index 5cbe092..67ac6b3 100644 --- a/library/src/calculator_functions.cpp +++ b/library/src/calculator_functions.cpp @@ -378,12 +378,11 @@ uint32_t Calculator::GetCostFromDuration(Configuration const* cfg, double Calculator::GetCostFromDuration(Configuration* cfg, uint8_t payment_option, const QDateTime start_datetime, QDateTime & end_datetime, double durationMin, bool nextDay, bool prepaid) { // condition for 'PaymentMethod::Steps' (e.g. 332/Schoenau): - if (payment_option == PaymentOption::Option1 - && cfg->SpecialDays.size() == 0 + if (cfg->SpecialDays.size() == 0 && cfg->SpecialDaysWorktime.size() == 0) { - QDateTime const end = start_datetime.addSecs(durationMin*60); - return GetCostFromDuration(cfg, start_datetime, end, PaymentMethod::Steps); + end_datetime = start_datetime.addSecs(durationMin*60); + return GetCostFromDuration(cfg, start_datetime, end_datetime, PaymentMethod::Steps); } // Get input date diff --git a/library/src/configuration.cpp b/library/src/configuration.cpp index 0c50499..2dbdc99 100644 --- a/library/src/configuration.cpp +++ b/library/src/configuration.cpp @@ -169,7 +169,8 @@ 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_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(); - break; + this->currentPaymentOptions = PaymentOption; + break; case MemberType::DurationType: if (strcmp(inner_obj_name, "pun_id") == 0) Duration.pun_id = k->value.GetInt(); else if (strcmp(inner_obj_name, "pun_label") == 0) Duration.pun_label = k->value.GetString(); @@ -259,3 +260,10 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json) return false; } } + + + +const ATBPaymentOption & Configuration::getPaymentOptions() +{ + return this->currentPaymentOptions; +}