From 268d43cdeafb921fcca22febc1c610534261b8ea Mon Sep 17 00:00:00 2001 From: Siegfried Siegert Date: Tue, 16 May 2023 16:43:45 +0200 Subject: [PATCH] GetDailyTicketDuration: use QDateTime for timestamps --- .../include/mobilisis/calculator_functions.h | 2 +- library/src/calculate_price.cpp | 9 ++---- library/src/calculator_functions.cpp | 31 +++++++++++-------- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/library/include/mobilisis/calculator_functions.h b/library/include/mobilisis/calculator_functions.h index 1fc9743..4b09771 100644 --- a/library/include/mobilisis/calculator_functions.h +++ b/library/include/mobilisis/calculator_functions.h @@ -29,5 +29,5 @@ public: 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 - QString GetDailyTicketDuration(Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over); + QDateTime GetDailyTicketDuration(Configuration* cfg, const QDateTime start_datetime, uint8_t payment_option, bool carry_over); }; diff --git a/library/src/calculate_price.cpp b/library/src/calculate_price.cpp index caed186..aec29d2 100644 --- a/library/src/calculate_price.cpp +++ b/library/src/calculate_price.cpp @@ -283,21 +283,18 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_daily_ticket(parking_tariff { CalcState calcState; if (start_parking_time.isValid()) { - QString cs = start_parking_time.toString(Qt::ISODate); - QString endTime = calculator.GetDailyTicketDuration(tariff, - cs.toLocal8Bit().constData(), + ticketEndTime = calculator.GetDailyTicketDuration(tariff, + start_parking_time, PaymentOption::Option1, false); // carry over - ticketEndTime = QDateTime::fromString(endTime,Qt::ISODate); // DEBUG qCritical() << "compute_duration_for_daily_ticket(): "; - qCritical() << " endTime: " << endTime; qCritical() << " ticketEndTime: " << ticketEndTime; if (!ticketEndTime.isValid()) { - calcState.setDesc(QString("ticketEndTime=%1").arg(endTime)); + calcState.setDesc(QString("ticketEndTime=%1").arg(ticketEndTime.toString(Qt::ISODate))); return calcState.set(CalcState::State::WRONG_ISO_TIME_FORMAT); } diff --git a/library/src/calculator_functions.cpp b/library/src/calculator_functions.cpp index 2ffceaa..b1e1b68 100644 --- a/library/src/calculator_functions.cpp +++ b/library/src/calculator_functions.cpp @@ -19,20 +19,25 @@ inline struct tm* localtime_r(const time_t *clock, struct tm* result){ } #endif -QString Calculator::GetDailyTicketDuration(Configuration* cfg, QString start_datetime, uint8_t payment_option, bool carry_over) +QDateTime Calculator::GetDailyTicketDuration(Configuration* cfg, const QDateTime start_datetime, uint8_t payment_option, bool carry_over) { - if(start_datetime.isNull() || start_datetime.isEmpty()) return NULL; + if(!start_datetime.isValid()) { + return QDateTime(); + } double day_price = 0.0f; int current_special_day_id = -1; - bool is_special_day = Utilities::CheckSpecialDay(cfg, start_datetime.toStdString().c_str(), ¤t_special_day_id, &day_price); + bool is_special_day = Utilities::CheckSpecialDay(cfg, start_datetime.toString(Qt::ISODate).toStdString().c_str(), ¤t_special_day_id, &day_price); - QDateTime inputDateTime = QDateTime::fromString(start_datetime, Qt::ISODate); + QDateTime inputDateTime = start_datetime; QTime worktime_from; QTime worktime_to; int daily_card_price = cfg->PaymentOption.find(payment_option)->second.pop_daily_card_price; - if(daily_card_price <= 0) return "Daily ticket price zero or less"; + if(daily_card_price <= 0) { + LOG_ERROR("Calculator::GetDailyTicketDuration(): Daily ticket price zero or less"); + return QDateTime(); + } if(is_special_day) { @@ -46,21 +51,21 @@ QString Calculator::GetDailyTicketDuration(Configuration* cfg, QString start_dat { // Go to next day if outside worktime inputDateTime = inputDateTime.addSecs(86400); - return GetDailyTicketDuration(cfg,inputDateTime.toString(Qt::ISODate), payment_option,true); + return GetDailyTicketDuration(cfg,inputDateTime, payment_option,true); } if(day_price <=0) { // Go to next day if special day price is 0 inputDateTime = inputDateTime.addSecs(86400); - return GetDailyTicketDuration(cfg,inputDateTime.toString(Qt::ISODate), payment_option,true); + return GetDailyTicketDuration(cfg,inputDateTime, payment_option,true); } int diff = abs(inputDateTime.time().secsTo(worktime_to)); inputDateTime = inputDateTime.addSecs(diff); //qDebug() << "Ticket is valid until: " << inputDateTime.toString(Qt::ISODate) << "price = " << daily_card_price << ", duration = " << diff / 60; - return inputDateTime.toString(Qt::ISODate) + ", price = " + to_string(daily_card_price).c_str() + ", duration = " + to_string((diff/60)).c_str(); + return inputDateTime; } else { @@ -76,7 +81,7 @@ QString Calculator::GetDailyTicketDuration(Configuration* cfg, QString start_dat if(found <=0) { inputDateTime = inputDateTime.addSecs(86400); - return GetDailyTicketDuration(cfg,inputDateTime.toString(Qt::ISODate), payment_option,true); + return GetDailyTicketDuration(cfg,inputDateTime, payment_option,true); } else { @@ -92,18 +97,18 @@ QString Calculator::GetDailyTicketDuration(Configuration* cfg, QString start_dat { // Go to next day if outside worktime inputDateTime = inputDateTime.addSecs(86400); - return GetDailyTicketDuration(cfg,inputDateTime.toString(Qt::ISODate), payment_option,true); + return GetDailyTicketDuration(cfg,inputDateTime, payment_option,true); } int diff = abs(inputDateTime.time().secsTo(worktime_to)); inputDateTime = inputDateTime.addSecs(diff); - //qDebug() << "Ticket is valid until: " << inputDateTime.toString(Qt::ISODate) << "price = " << daily_card_price << ", duration = " << diff / 60; - return inputDateTime.toString(Qt::ISODate) + ", price = " + to_string(daily_card_price).c_str() + ", duration = " + to_string((diff/60)).c_str(); + //qDebug() << "Ticket is valid until: " << inputDateTime.toString(Qt::ISODate) << "price = " << daily_card_price << ", duration = " << diff / 60; + return inputDateTime; } } - return NULL; + return QDateTime(); } /// std::string Calculator::GetDurationFromCost(Configuration* cfg,