Compare commits

...

4 Commits

4 changed files with 76 additions and 86 deletions

View File

@ -13,36 +13,8 @@
using namespace std; using namespace std;
class Calculator { class Calculator {
QDateTime m_start;
mutable uint16_t m_timeStepCompensation = 0;
public: public:
explicit Calculator() = default; explicit Calculator() = default;
explicit Calculator(QDateTime const start) : m_start(start) {
m_start.setTime(QTime(start.time().hour(), start.time().minute(), 0));
qCritical() << "init m_start time:" << m_start.toString(Qt::ISODate);
}
void setStartDateTime(QDateTime const &start) {
m_start = start;
m_start.setTime(QTime(start.time().hour(), start.time().minute(), 0));
qCritical() << "set m_start time:" << m_start.toString(Qt::ISODate);
}
QDateTime const &getStartDateTime() const {
return m_start;
}
QDateTime &getStartDateTime() {
return m_start;
}
void setTimeStepCompensation(uint16_t timeStepCompensation) {
m_timeStepCompensation = timeStepCompensation;
}
uint16_t getTimeStepCompensation() const {
return m_timeStepCompensation;
}
/// <summary> /// <summary>
/// Gets duration in seconds from cost /// Gets duration in seconds from cost
@ -72,7 +44,7 @@ public:
// helper function to find time steps for a tariff with PaymentMethod::Steps // helper function to find time steps for a tariff with PaymentMethod::Steps
// (e.g. Schoenau/Koenigsee) // (e.g. Schoenau/Koenigsee)
// //
QList<int> GetTimeSteps(Configuration *cfg) const; QList<int> GetTimeSteps(Configuration *cfg, quint64 startInMinutes = QDateTime::currentSecsSinceEpoch() / 60) const;
QList<int> GetSteps(Configuration *cfg) const { return GetTimeSteps(cfg); } QList<int> GetSteps(Configuration *cfg) const { return GetTimeSteps(cfg); }
// additional helper functions // additional helper functions
@ -89,7 +61,7 @@ public:
} }
// testing public: // testing public:
private: //private:
// Introduced for PaymentMethod::Steps (e.g. Schoenau) // Introduced for PaymentMethod::Steps (e.g. Schoenau)
// For tariff of following structure: only steps, no special days, nonstop. // For tariff of following structure: only steps, no special days, nonstop.
uint32_t GetCostFromDuration(Configuration *cfg, QDateTime const &start, quint64 durationMinutes) const; uint32_t GetCostFromDuration(Configuration *cfg, QDateTime const &start, quint64 durationMinutes) const;

View File

@ -58,7 +58,8 @@ public:
/// <returns>Returns operation status bool (OK | FAIL) </returns> /// <returns>Returns operation status bool (OK | FAIL) </returns>
bool ParseJson(Configuration* cfg, const char* json); bool ParseJson(Configuration* cfg, const char* json);
ATBPaymentOption const &getPaymentOptions(); ATBPaymentOption &getPaymentOptions();
ATBPaymentOption const &getPaymentOptions() const;
QVector<ATBDailyTicket> const &getDailyTickets() const; QVector<ATBDailyTicket> const &getDailyTickets() const;
private: private:

View File

@ -695,14 +695,23 @@ Ticket Calculator::private_GetDurationFromCost(Configuration *cfg,
cost, Ticket::s[VALID]); cost, Ticket::s[VALID]);
} }
QList<int> Calculator::GetTimeSteps(Configuration *cfg) const { QList<int> Calculator::GetTimeSteps(Configuration *cfg, quint64 startInMinutes) const {
QList<int> timeSteps; static QList<int> timeSteps;
if (timeSteps.size() == 0) {
int const pop_id = cfg->getPaymentOptions().pop_id; int const pop_id = cfg->getPaymentOptions().pop_id;
int const pop_carry_over = cfg->getPaymentOptions().pop_carry_over; int const pop_carry_over = cfg->getPaymentOptions().pop_carry_over;
int const pop_time_step_config = cfg->getPaymentOptions().pop_time_step_config; int const pop_time_step_config = cfg->getPaymentOptions().pop_time_step_config;
qCritical() << " payment option id:" << pop_id;
qCritical() << " payment option carry over:" << pop_carry_over;
qCritical() << "payment option time step config:" << pop_time_step_config;
if (pop_time_step_config == (int)ATBTimeStepConfig::TimeStepConfig::DYNAMIC) { if (pop_time_step_config == (int)ATBTimeStepConfig::TimeStepConfig::DYNAMIC) {
QDateTime start;
start.setSecsSinceEpoch(startInMinutes * 60);
uint16_t timeStepCompensation = 0;
if (pop_carry_over) { if (pop_carry_over) {
int const pop_carry_over_time_range_id = cfg->getPaymentOptions().pop_carry_over_time_range_id; int const pop_carry_over_time_range_id = cfg->getPaymentOptions().pop_carry_over_time_range_id;
QTime const carryOverTimeRangeFrom = cfg->TimeRange.find(pop_carry_over_time_range_id)->second.time_range_from; QTime const carryOverTimeRangeFrom = cfg->TimeRange.find(pop_carry_over_time_range_id)->second.time_range_from;
@ -716,14 +725,11 @@ QList<int> Calculator::GetTimeSteps(Configuration *cfg) const {
if (search != cfg->Duration.end()) { if (search != cfg->Duration.end()) {
ATBDuration duration = search->second; ATBDuration duration = search->second;
if (durationId == 1) { if (durationId == 1) {
//duration.pun_duration_min = search->second.pun_duration_min; QDateTime carryOver = start;
//duration.pun_duration_max = search->second.pun_duration_max;
QDateTime carryOver = m_start;
carryOver = carryOver.addDays(1); carryOver = carryOver.addDays(1);
carryOver.setTime(QTime(0, 0, 0)); carryOver.setTime(QTime(0, 0, 0));
int const timeStep = std::ceil(m_start.secsTo(carryOver) / 60.0); int const timeStep = std::ceil(start.secsTo(carryOver) / 60.0);
if (timeStep < duration.pun_duration_min || timeStep > duration.pun_duration_max) { if (timeStep < duration.pun_duration_min || timeStep > duration.pun_duration_max) {
qCritical() qCritical()
<< QString("ERROR timeStep (%1) < durationMin (%2) || timeStep (%3)) > durationMax (%4)") << QString("ERROR timeStep (%1) < durationMin (%2) || timeStep (%3)) > durationMax (%4)")
@ -731,11 +737,18 @@ QList<int> Calculator::GetTimeSteps(Configuration *cfg) const {
.arg(timeStep).arg(duration.pun_duration_max); .arg(timeStep).arg(duration.pun_duration_max);
break; break;
} }
qCritical() << "configured minimal parking time:" << cfg->getPaymentOptions().pop_min_time;
// set dynamic minimal parking time
cfg->getPaymentOptions().pop_min_time = timeStep;
qCritical() << " computed minimal parking time:" << cfg->getPaymentOptions().pop_min_time;
duration.pun_duration = timeStep; duration.pun_duration = timeStep;
m_timeStepCompensation = duration.pun_duration_max - duration.pun_duration; timeStepCompensation = duration.pun_duration_max - duration.pun_duration;
timeSteps << duration.pun_duration; timeSteps << duration.pun_duration;
} else { } else {
duration.pun_duration = duration.pun_duration_max - m_timeStepCompensation; duration.pun_duration = duration.pun_duration_max - timeStepCompensation;
timeSteps << duration.pun_duration;; timeSteps << duration.pun_duration;;
} }
@ -763,6 +776,7 @@ QList<int> Calculator::GetTimeSteps(Configuration *cfg) const {
timeSteps << durationUnit; timeSteps << durationUnit;
} }
} }
}
return timeSteps; return timeSteps;
} }

View File

@ -442,7 +442,10 @@ bool Configuration::ParseJson(Configuration* cfg, const char* json)
const ATBPaymentOption & Configuration::getPaymentOptions() ATBPaymentOption const &Configuration::getPaymentOptions() const {
{ return this->currentPaymentOptions;
}
ATBPaymentOption &Configuration::getPaymentOptions() {
return this->currentPaymentOptions; return this->currentPaymentOptions;
} }