Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
04e1fe40ba
|
|||
397e0f9061
|
|||
e6b5bc0f4d
|
|||
3cfaf88a6d
|
|||
1be07a2415
|
|||
25b3143d88
|
|||
0856f10ca9 | |||
88c703ecc2
|
|||
465b2274a1 | |||
f946cd13e4
|
|||
62c52fd580 | |||
1023f6ede1 | |||
36b3e85d1b | |||
b394ed46cc | |||
3dda2d8355 | |||
1152c3824e | |||
4271c0fb31 |
@@ -36,10 +36,11 @@ int CALCULATE_LIBRARY_API get_minimal_parkingtime(Configuration const *cfg,
|
|||||||
int paymentOptionIndex) {
|
int paymentOptionIndex) {
|
||||||
int minTime = 0;
|
int minTime = 0;
|
||||||
|
|
||||||
|
qCritical() << __func__ << __LINE__ << "permit" << PermitType(permitType).toString();
|
||||||
|
|
||||||
paymentOptionIndex = cfg->getPaymentOptionIndex(permitType);
|
paymentOptionIndex = cfg->getPaymentOptionIndex(permitType);
|
||||||
|
|
||||||
qCritical() << __func__ << __LINE__ << "paymentOptionIndex" << paymentOptionIndex;
|
qCritical() << __func__ << __LINE__ << "paymentOptionIndex" << paymentOptionIndex;
|
||||||
qCritical() << __func__ << __LINE__ << "permit" << PermitType(permitType).toString();
|
|
||||||
|
|
||||||
switch(permitType) {
|
switch(permitType) {
|
||||||
case PERMIT_TYPE::SHORT_TERM_PARKING: { // e.g. szeged (customer_281)
|
case PERMIT_TYPE::SHORT_TERM_PARKING: { // e.g. szeged (customer_281)
|
||||||
@@ -508,10 +509,12 @@ int CALCULATE_LIBRARY_API compute_next_timestep(parking_tariff_t *tariff, int cu
|
|||||||
// without given YearPeriod, SpecialDays and SpecialDaysWorktime
|
// without given YearPeriod, SpecialDays and SpecialDaysWorktime
|
||||||
if ((paymentMethodId == PaymentMethod::Steps) ||
|
if ((paymentMethodId == PaymentMethod::Steps) ||
|
||||||
// progressive tariff: e.g. Neuhauser, Kirchdorf (743)
|
// progressive tariff: e.g. Neuhauser, Kirchdorf (743)
|
||||||
(paymentMethodId == PaymentMethod::Progressive))
|
(paymentMethodId == PaymentMethod::Progressive) ||
|
||||||
// (paymentMethodId == PaymentMethod::Degressive)) degressive tariff: e.g. Fuchs Technik (500)
|
// degressive tariff: e.g. Fuchs Technik (500)
|
||||||
|
(paymentMethodId == PaymentMethod::Degressive))
|
||||||
{
|
{
|
||||||
QList<int> &stepList = Calculator::GetInstance().GetTimeSteps(tariff, paymentOptionIndex);
|
QList<int> &stepList = Calculator::GetInstance().GetTimeSteps(tariff, paymentOptionIndex);
|
||||||
|
|
||||||
int const size = stepList.size();
|
int const size = stepList.size();
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
qCritical() << "compute_next_timestep() *ERROR empty step-list*";
|
qCritical() << "compute_next_timestep() *ERROR empty step-list*";
|
||||||
@@ -721,9 +724,14 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
|
|||||||
|
|
||||||
int paymentOptionIndex = tariff->getPaymentOptionIndex(permitType);
|
int paymentOptionIndex = tariff->getPaymentOptionIndex(permitType);
|
||||||
|
|
||||||
|
QList<int> tlist = Calculator::GetInstance().GetTimeSteps(tariff, paymentOptionIndex);
|
||||||
|
//Q_UNUSED(tlist);
|
||||||
|
|
||||||
double minMin = tariff->getPaymentOptions(paymentOptionIndex).pop_min_time;
|
double minMin = tariff->getPaymentOptions(paymentOptionIndex).pop_min_time;
|
||||||
double maxMin = tariff->getPaymentOptions(paymentOptionIndex).pop_max_time;
|
double maxMin = tariff->getPaymentOptions(paymentOptionIndex).pop_max_time;
|
||||||
|
|
||||||
|
// netto_parking_time = minMin;
|
||||||
|
|
||||||
// DEBUG
|
// DEBUG
|
||||||
qCritical() << "compute_price_for_parking_ticket() " << endl
|
qCritical() << "compute_price_for_parking_ticket() " << endl
|
||||||
<< " paymentOptionIndex: " << paymentOptionIndex << endl
|
<< " paymentOptionIndex: " << paymentOptionIndex << endl
|
||||||
@@ -731,8 +739,8 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
|
|||||||
<< " netto_parking_time: " << netto_parking_time << endl
|
<< " netto_parking_time: " << netto_parking_time << endl
|
||||||
<< " start + netto: " << start_parking_time.addSecs(netto_parking_time * 60) << endl
|
<< " start + netto: " << start_parking_time.addSecs(netto_parking_time * 60) << endl
|
||||||
<< " minMin: " << minMin << endl
|
<< " minMin: " << minMin << endl
|
||||||
<< " maxMin: " << maxMin
|
<< " maxMin: " << maxMin << endl
|
||||||
<< " prepaid: " << prepaid
|
<< " prepaid: " << prepaid << endl
|
||||||
<< " permitType: " << permitType.toString();
|
<< " permitType: " << permitType.toString();
|
||||||
|
|
||||||
if (netto_parking_time < 0) {
|
if (netto_parking_time < 0) {
|
||||||
@@ -741,14 +749,17 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
|
|||||||
start_parking_time.toString(Qt::ISODate)));
|
start_parking_time.toString(Qt::ISODate)));
|
||||||
return calcState.set(CalcState::State::NEGATIVE_PARKING_TIME);
|
return calcState.set(CalcState::State::NEGATIVE_PARKING_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (netto_parking_time > maxMin) {
|
if (netto_parking_time > maxMin) {
|
||||||
calcState.setDesc(QString("duration=%1, maxMin=%2").arg(netto_parking_time).arg(maxMin));
|
calcState.setDesc(QString("duration=%1, maxMin=%2").arg(netto_parking_time).arg(maxMin));
|
||||||
return calcState.set(CalcState::State::ABOVE_MAX_PARKING_TIME);
|
return calcState.set(CalcState::State::ABOVE_MAX_PARKING_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (netto_parking_time < minMin) {
|
if (netto_parking_time < minMin) {
|
||||||
calcState.setDesc(QString("duration=%1, minMin=%2").arg(netto_parking_time).arg(minMin));
|
calcState.setDesc(QString("duration=%1, minMin=%2").arg(netto_parking_time).arg(minMin));
|
||||||
return calcState.set(CalcState::State::BELOW_MIN_PARKING_TIME);
|
return calcState.set(CalcState::State::BELOW_MIN_PARKING_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (netto_parking_time == 0) {
|
if (netto_parking_time == 0) {
|
||||||
return calcState.set(CalcState::State::SUCCESS);
|
return calcState.set(CalcState::State::SUCCESS);
|
||||||
}
|
}
|
||||||
@@ -766,9 +777,8 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
|
|||||||
return calcState;
|
return calcState;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<int> tlist = Calculator::GetInstance().GetTimeSteps(tariff);
|
|
||||||
Q_UNUSED(tlist);
|
|
||||||
|
|
||||||
|
// compute cost (price)
|
||||||
cost = Calculator::GetInstance().GetCostFromDuration(tariff, start_parking_time, netto_parking_time, paymentOptionIndex);
|
cost = Calculator::GetInstance().GetCostFromDuration(tariff, start_parking_time, netto_parking_time, paymentOptionIndex);
|
||||||
|
|
||||||
int weekDay = start_parking_time.date().dayOfWeek();
|
int weekDay = start_parking_time.date().dayOfWeek();
|
||||||
@@ -778,8 +788,8 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
|
|||||||
if (yperiod.has_value()) {
|
if (yperiod.has_value()) {
|
||||||
ATBPeriodYear const &period = yperiod.value();
|
ATBPeriodYear const &period = yperiod.value();
|
||||||
pop_carry_over_option_id = period.pye_id;
|
pop_carry_over_option_id = period.pye_id;
|
||||||
|
qCritical() << __func__ << __LINE__ << "re-computed carry-over-id" << pop_carry_over_option_id;
|
||||||
}
|
}
|
||||||
qCritical() << __func__ << __LINE__ << "carryOver-id" << pop_carry_over_option_id;
|
|
||||||
|
|
||||||
QTime const carryOverStart = tariff->TariffCarryOverOptions.find(pop_carry_over_option_id)->second.carryover[weekDay].static_start;
|
QTime const carryOverStart = tariff->TariffCarryOverOptions.find(pop_carry_over_option_id)->second.carryover[weekDay].static_start;
|
||||||
int const carryOverDuration = tariff->TariffCarryOverOptions.find(pop_carry_over_option_id)->second.carryover[weekDay].duration;
|
int const carryOverDuration = tariff->TariffCarryOverOptions.find(pop_carry_over_option_id)->second.carryover[weekDay].duration;
|
||||||
@@ -793,17 +803,22 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
|
|||||||
std::optional<ATBPrepaid> prepaidOption = tariff->getPrepaidType(prepaid_option_id);
|
std::optional<ATBPrepaid> prepaidOption = tariff->getPrepaidType(prepaid_option_id);
|
||||||
if (prepaidOption.has_value()) {
|
if (prepaidOption.has_value()) {
|
||||||
ATBPrepaid const &p = prepaidOption.value();
|
ATBPrepaid const &p = prepaidOption.value();
|
||||||
if (start_parking_time.time() < p.static_end) { // static_end: e.g. 08:00:00
|
if (p.never) {
|
||||||
effectiveStartTime.setTime(p.static_end);
|
qCritical() << __func__ << __LINE__ << "prepaid: no";
|
||||||
} else
|
} else {
|
||||||
if (start_parking_time.time() > p.static_start) { // static_start: e.g. 22:00:00
|
if (start_parking_time.time() < p.static_end) { // static_end: e.g. 08:00:00
|
||||||
effectiveStartTime.setTime(p.static_start);
|
effectiveStartTime.setTime(p.static_end);
|
||||||
|
} else
|
||||||
|
if (start_parking_time.time() > p.static_start) { // static_start: e.g. 22:00:00
|
||||||
|
effectiveStartTime.setTime(p.static_start);
|
||||||
|
effectiveStartTime == effectiveStartTime.addSecs(carryOverDuration * 60);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle carry over
|
// handle carry over
|
||||||
int minutesUntilCarryOver = effectiveStartTime.time().secsTo(carryOverStart) / 60;
|
int minutesUntilCarryOver = effectiveStartTime.time().secsTo(carryOverStart) / 60;
|
||||||
if (netto_parking_time > minutesUntilCarryOver) {
|
if (netto_parking_time >= minutesUntilCarryOver) {
|
||||||
int const rest = netto_parking_time - minutesUntilCarryOver;
|
int const rest = netto_parking_time - minutesUntilCarryOver;
|
||||||
QDateTime s(effectiveStartTime);
|
QDateTime s(effectiveStartTime);
|
||||||
s = s.addSecs(minutesUntilCarryOver * 60);
|
s = s.addSecs(minutesUntilCarryOver * 60);
|
||||||
@@ -841,6 +856,12 @@ CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
|
|||||||
return calcState.set(CalcState::State::INVALID_START_DATE);
|
return calcState.set(CalcState::State::INVALID_START_DATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (end_parking_time.time().hour() == 0 && end_parking_time.time().minute() == 0) {
|
||||||
|
end_parking_time = end_parking_time.addDays(-1);
|
||||||
|
end_parking_time.setTime(QTime(23, 59, 0));
|
||||||
|
}
|
||||||
|
qCritical() << __func__ << __LINE__ << "end_parking_time" << end_parking_time.toString(Qt::ISODate);
|
||||||
|
|
||||||
return calcState.set(CalcState::State::SUCCESS);
|
return calcState.set(CalcState::State::SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -982,15 +1003,20 @@ CalcState CALCULATE_LIBRARY_API compute_duration_for_parking_ticket(
|
|||||||
} else {
|
} else {
|
||||||
ticketEndTime = QDateTime::fromString(endTime,Qt::ISODate);
|
ticketEndTime = QDateTime::fromString(endTime,Qt::ISODate);
|
||||||
|
|
||||||
// DEBUG
|
|
||||||
//qCritical() << "compute_duration_for_parking_ticket(): ";
|
|
||||||
//qCritical() << " endTime: " << endTime;
|
|
||||||
//qCritical() << " ticketEndTime: " << ticketEndTime;
|
|
||||||
|
|
||||||
if (!ticketEndTime.isValid()) {
|
if (!ticketEndTime.isValid()) {
|
||||||
calcState.setDesc(QString("ticketEndTime=%1").arg(endTime));
|
calcState.setDesc(QString("ticketEndTime=%1").arg(endTime));
|
||||||
return calcState.set(CalcState::State::WRONG_ISO_TIME_FORMAT);
|
return calcState.set(CalcState::State::WRONG_ISO_TIME_FORMAT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ticketEndTime.time().hour() == 0 && ticketEndTime.time().minute() == 0) {
|
||||||
|
ticketEndTime = ticketEndTime.addDays(-1);
|
||||||
|
ticketEndTime.setTime(QTime(23, 59, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
// DEBUG
|
||||||
|
qCritical() << "compute_duration_for_parking_ticket(): ";
|
||||||
|
qCritical() << " endTime: " << endTime;
|
||||||
|
qCritical() << " ticketEndTime: " << ticketEndTime;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return calcState.set(CalcState::State::INVALID_START_DATE);
|
return calcState.set(CalcState::State::INVALID_START_DATE);
|
||||||
|
@@ -181,8 +181,8 @@ std::string Calculator::GetDurationFromCost(Configuration* cfg,
|
|||||||
price = pra_price;
|
price = pra_price;
|
||||||
}
|
}
|
||||||
|
|
||||||
//qCritical() << DBG_HEADER << " PRICE" << price << "COST" << cost;
|
// qCritical() << DBG_HEADER << " PRICE" << price << "COST" << cost;
|
||||||
//qCritical() << DBG_HEADER << " duration id" << durationId;
|
// qCritical() << DBG_HEADER << " duration id" << durationId;
|
||||||
|
|
||||||
auto search = cfg->Duration.find(durationId);
|
auto search = cfg->Duration.find(durationId);
|
||||||
if (search != cfg->Duration.end()) {
|
if (search != cfg->Duration.end()) {
|
||||||
@@ -207,11 +207,16 @@ std::string Calculator::GetDurationFromCost(Configuration* cfg,
|
|||||||
//found = true;
|
//found = true;
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") duration_previous" << duration_previous;
|
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") duration_previous" << duration_previous;
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") duration in minutes" << durationInMinutes;
|
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") duration in minutes" << durationInMinutes;
|
||||||
QDateTime d(inputDate.addSecs(duration_previous * 60));
|
QDateTime d;
|
||||||
|
if (pop_accumulate_durations) {
|
||||||
|
d = inputDate.addSecs(durationInMinutes * 60);
|
||||||
|
} else {
|
||||||
|
d = inputDate.addSecs(duration_previous * 60);
|
||||||
|
}
|
||||||
|
|
||||||
qCritical() << DBG_HEADER << " provided price (cost):" << cost;
|
qCritical() << DBG_HEADER << " provided price (cost):" << cost;
|
||||||
qCritical() << DBG_HEADER << " computed time for price (minutes):" << duration_previous;
|
qCritical() << DBG_HEADER << " computed time for price (minutes):" << duration_previous;
|
||||||
qCritical() << DBG_HEADER << "configured minimal parking time (minutes):" << cfg->getPaymentOptions(paymentOptionIndex).pop_min_time;
|
qCritical() << DBG_HEADER << " minimal parking time (minutes):" << cfg->getPaymentOptions(paymentOptionIndex).pop_min_time;
|
||||||
|
|
||||||
if (duration_previous < cfg->getPaymentOptions(paymentOptionIndex).pop_min_time) {
|
if (duration_previous < cfg->getPaymentOptions(paymentOptionIndex).pop_min_time) {
|
||||||
return CalcState::BELOW_MIN_PARKING_TIME.toStdString(); // minimal parking time is set by GetTimeSteps()
|
return CalcState::BELOW_MIN_PARKING_TIME.toStdString(); // minimal parking time is set by GetTimeSteps()
|
||||||
@@ -339,8 +344,6 @@ std::string Calculator::GetDurationFromCost(Configuration* cfg,
|
|||||||
#if DEBUG_GET_DURATION_FROM_COST==1
|
#if DEBUG_GET_DURATION_FROM_COST==1
|
||||||
qCritical() << DBG_HEADER << "(ADAPTED) INPUT-DATE" << inputDate.toString(Qt::ISODate);
|
qCritical() << DBG_HEADER << "(ADAPTED) INPUT-DATE" << inputDate.toString(Qt::ISODate);
|
||||||
#endif
|
#endif
|
||||||
//qCritical() << __func__ << __LINE__;
|
|
||||||
|
|
||||||
// inputDate is now located in a valid operational-working-range
|
// inputDate is now located in a valid operational-working-range
|
||||||
// find this working-time-range
|
// find this working-time-range
|
||||||
int pwd_period_day_in_week_id = inputDate.date().dayOfWeek();
|
int pwd_period_day_in_week_id = inputDate.date().dayOfWeek();
|
||||||
@@ -354,8 +357,6 @@ std::string Calculator::GetDurationFromCost(Configuration* cfg,
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
//qCritical() << __func__ << __LINE__;
|
|
||||||
|
|
||||||
QTime current_working_time_from;
|
QTime current_working_time_from;
|
||||||
QTime current_working_time_to;
|
QTime current_working_time_to;
|
||||||
|
|
||||||
@@ -1013,12 +1014,15 @@ uint32_t Calculator::GetCostFromDuration(Configuration * cfg,
|
|||||||
int paymentOptionIndex) const {
|
int paymentOptionIndex) const {
|
||||||
static const PaymentMethod paymentMethodId = Utilities::getPaymentMethodId(cfg);
|
static const PaymentMethod paymentMethodId = Utilities::getPaymentMethodId(cfg);
|
||||||
|
|
||||||
//qCritical() << __func__ << __LINE__ << "paymentOptionIndex" << paymentOptionIndex;
|
// qCritical() << __func__ << __LINE__ << "paymentOptionIndex" << paymentOptionIndex;
|
||||||
|
|
||||||
if (paymentMethodId == PaymentMethod::Steps ||
|
if (paymentMethodId == PaymentMethod::Steps ||
|
||||||
paymentMethodId == PaymentMethod::Degressive) {
|
paymentMethodId == PaymentMethod::Degressive) {
|
||||||
int const timeStepInMinutes = start.secsTo(end) / 60;
|
int const timeStepInMinutes = start.secsTo(end) / 60;
|
||||||
|
QList<int> tlist = Calculator::GetInstance().GetTimeSteps(cfg, paymentOptionIndex, start);
|
||||||
|
qCritical() << DBG_HEADER << " start" << start.toString(Qt::ISODate);
|
||||||
|
qCritical() << DBG_HEADER << " end" << end.toString(Qt::ISODate);
|
||||||
|
qCritical() << DBG_HEADER << "timeStepList" << timeStepInMinutes << tlist;
|
||||||
qCritical() << DBG_HEADER << "timeStepInMinutes" << timeStepInMinutes << start.toString(Qt::ISODate);
|
qCritical() << DBG_HEADER << "timeStepInMinutes" << timeStepInMinutes << start.toString(Qt::ISODate);
|
||||||
|
|
||||||
return GetPriceForTimeStep(cfg, timeStepInMinutes, paymentOptionIndex);
|
return GetPriceForTimeStep(cfg, timeStepInMinutes, paymentOptionIndex);
|
||||||
@@ -2526,10 +2530,10 @@ QList<int> &Calculator::GetTimeSteps(Configuration *cfg, int paymentOptionIndex,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else { // if (carryOverTimeRangeFrom == QTime(0, 0, 0)) {
|
} else { // if (carryOverTimeRangeFrom == QTime(0, 0, 0)) {
|
||||||
//if (DBG_LEVEL >= DBG_DEBUG) {
|
if (DBG_LEVEL >= DBG_DEBUG) {
|
||||||
qCritical() << "(" << __func__ << ":" << __LINE__ << ") carry over time range from:" << carryOverTimeRangeFrom.toString(Qt::ISODate);
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") carry over time range from:" << carryOverTimeRangeFrom.toString(Qt::ISODate);
|
||||||
qCritical() << "(" << __func__ << ":" << __LINE__ << ") carry over time range to:" << carryOverTimeRangeTo.toString(Qt::ISODate);
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") carry over time range to:" << carryOverTimeRangeTo.toString(Qt::ISODate);
|
||||||
//}
|
}
|
||||||
|
|
||||||
m_timeSteps[paymentOptionIndex].clear();
|
m_timeSteps[paymentOptionIndex].clear();
|
||||||
|
|
||||||
@@ -2553,7 +2557,7 @@ QList<int> &Calculator::GetTimeSteps(Configuration *cfg, int paymentOptionIndex,
|
|||||||
qCritical() << "(" << __func__ << ":" << __LINE__ << ") interpolation end:" << interpolationEnd.toString(Qt::ISODate);
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") interpolation end:" << interpolationEnd.toString(Qt::ISODate);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qCritical() << "(" << __func__ << ":" << __LINE__ << ") TODO";
|
// qCritical() << "(" << __func__ << ":" << __LINE__ << ") TODO";
|
||||||
}
|
}
|
||||||
|
|
||||||
// int const start_time = start.time().hour() * 60 + start.time().minute();
|
// int const start_time = start.time().hour() * 60 + start.time().minute();
|
||||||
@@ -2581,7 +2585,7 @@ QList<int> &Calculator::GetTimeSteps(Configuration *cfg, int paymentOptionIndex,
|
|||||||
for (auto[itr, rangeEnd] = cfg->PaymentRate.equal_range(pop_id); itr != rangeEnd; ++itr) {
|
for (auto[itr, rangeEnd] = cfg->PaymentRate.equal_range(pop_id); itr != rangeEnd; ++itr) {
|
||||||
int const durationId = itr->second.pra_payment_unit_id;
|
int const durationId = itr->second.pra_payment_unit_id;
|
||||||
|
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") durationId" << durationId;
|
// qCritical() << "(" << __func__ << ":" << __LINE__ << ") durationId" << durationId;
|
||||||
// int const price = itr->second.pra_price;
|
// int const price = itr->second.pra_price;
|
||||||
|
|
||||||
auto search = cfg->Duration.find(durationId);
|
auto search = cfg->Duration.find(durationId);
|
||||||
@@ -2605,7 +2609,8 @@ QList<int> &Calculator::GetTimeSteps(Configuration *cfg, int paymentOptionIndex,
|
|||||||
ATBInterpolation interpolation = ipolCheck.value();
|
ATBInterpolation interpolation = ipolCheck.value();
|
||||||
|
|
||||||
if (duration.pun_interpolation_id == (int)ATBInterpolation::DYNAMIC_ABSTRACT_TIMEPOINT_AND_STATIC_PRICE) {
|
if (duration.pun_interpolation_id == (int)ATBInterpolation::DYNAMIC_ABSTRACT_TIMEPOINT_AND_STATIC_PRICE) {
|
||||||
qCritical() << "(" << __func__ << ":" << __LINE__ << ") HIER NICHT";
|
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") payment option id:" << pop_id;
|
||||||
|
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") pun_intnerpolation_id:" << duration.pun_interpolation_id;
|
||||||
|
|
||||||
interpolation.dynamic_start = start.time();
|
interpolation.dynamic_start = start.time();
|
||||||
interpolation.dynamic_start.setHMS(start.time().hour(), start.time().minute(), 0);
|
interpolation.dynamic_start.setHMS(start.time().hour(), start.time().minute(), 0);
|
||||||
@@ -2660,6 +2665,7 @@ QList<int> &Calculator::GetTimeSteps(Configuration *cfg, int paymentOptionIndex,
|
|||||||
if (duration.pun_interpolation_id == (int)ATBInterpolation::NO_INTERPOLATION) {
|
if (duration.pun_interpolation_id == (int)ATBInterpolation::NO_INTERPOLATION) {
|
||||||
|
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") pun_id:" << duration.pun_id;
|
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") pun_id:" << duration.pun_id;
|
||||||
|
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") paymentOptionIndex:" << paymentOptionIndex;
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") pun duration:" << duration.pun_duration;
|
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") pun duration:" << duration.pun_duration;
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") next time step:" << nextTimeStep.toString(Qt::ISODate);
|
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") next time step:" << nextTimeStep.toString(Qt::ISODate);
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") runtime in minutes (2):" << runtimeInMinutes;
|
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") runtime in minutes (2):" << runtimeInMinutes;
|
||||||
@@ -2672,6 +2678,7 @@ QList<int> &Calculator::GetTimeSteps(Configuration *cfg, int paymentOptionIndex,
|
|||||||
m_timeSteps[paymentOptionIndex] << duration.pun_duration;
|
m_timeSteps[paymentOptionIndex] << duration.pun_duration;
|
||||||
search->second = duration;
|
search->second = duration;
|
||||||
cfg->getPaymentOptions(paymentOptionIndex).pop_min_time = runtimeInMinutes;
|
cfg->getPaymentOptions(paymentOptionIndex).pop_min_time = runtimeInMinutes;
|
||||||
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") pop_min_time" << cfg->getPaymentOptions(paymentOptionIndex).pop_min_time;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2748,7 +2755,6 @@ QList<int> &Calculator::GetTimeSteps(Configuration *cfg, int paymentOptionIndex,
|
|||||||
m_timeSteps[paymentOptionIndex] << duration.pun_duration;
|
m_timeSteps[paymentOptionIndex] << duration.pun_duration;
|
||||||
search->second = duration;
|
search->second = duration;
|
||||||
} else {
|
} else {
|
||||||
qCritical() << "(" << __func__ << ":" << __LINE__ << ") HIER NICHT";
|
|
||||||
cfg->Duration.erase(search);
|
cfg->Duration.erase(search);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2782,7 +2788,7 @@ QList<int> &Calculator::GetTimeSteps(Configuration *cfg, int paymentOptionIndex,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qCritical() << "(" << __func__ << ":" << __LINE__ << ") NEW timeSteps:" << m_timeSteps;
|
// qCritical() << "(" << __func__ << ":" << __LINE__ << ") NEW timeSteps:" << m_timeSteps;
|
||||||
|
|
||||||
if (DBG_LEVEL >= DBG_DEBUG) {
|
if (DBG_LEVEL >= DBG_DEBUG) {
|
||||||
qCritical() << "(" << __func__ << ":" << __LINE__ << ") NEW timeSteps:" << m_timeSteps;
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") NEW timeSteps:" << m_timeSteps;
|
||||||
@@ -2809,13 +2815,19 @@ uint32_t Calculator::GetPriceForTimeStep(Configuration *cfg, int timeStep, int p
|
|||||||
// paymentOptionIndex = 1;
|
// paymentOptionIndex = 1;
|
||||||
|
|
||||||
int const pop_id = cfg->getPaymentOptions(paymentOptionIndex).pop_id;
|
int const pop_id = cfg->getPaymentOptions(paymentOptionIndex).pop_id;
|
||||||
|
int const pop_accumulate_durations = cfg->getPaymentOptions(paymentOptionIndex).pop_accumulate_durations;
|
||||||
int const pop_accumulate_prices = cfg->getPaymentOptions(paymentOptionIndex).pop_accumulate_prices;
|
int const pop_accumulate_prices = cfg->getPaymentOptions(paymentOptionIndex).pop_accumulate_prices;
|
||||||
|
|
||||||
uint32_t price = 0;
|
uint32_t price = 0;
|
||||||
|
int pun_duration = 0;
|
||||||
|
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") paymentOptionIndex" << paymentOptionIndex;
|
if (DBG_LEVEL >= DBG_DEBUG) {
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") timeStep" << timeStep;
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") paymentOptionIndex" << paymentOptionIndex;
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") pop_id" << pop_id;
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") timeStep" << timeStep;
|
||||||
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") pop_id" << pop_id;
|
||||||
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") pop_accumulate_prices" << pop_accumulate_prices;
|
||||||
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") pop_accumulate_durations" << pop_accumulate_durations;
|
||||||
|
}
|
||||||
|
|
||||||
for (auto[itr, rangeEnd] = cfg->PaymentRate.equal_range(pop_id); itr != rangeEnd; ++itr)
|
for (auto[itr, rangeEnd] = cfg->PaymentRate.equal_range(pop_id); itr != rangeEnd; ++itr)
|
||||||
{
|
{
|
||||||
@@ -2827,19 +2839,26 @@ uint32_t Calculator::GetPriceForTimeStep(Configuration *cfg, int timeStep, int p
|
|||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") pun_id" << pun_id;
|
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") pun_id" << pun_id;
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") pun_unit_id" << payment_unit_id;
|
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") pun_unit_id" << payment_unit_id;
|
||||||
|
|
||||||
int const pun_duration = cfg->Duration.find(payment_unit_id)->second.pun_duration;
|
if (pop_accumulate_durations) {
|
||||||
//int const pun_duration = cfg->Duration.find(2)->second.pun_duration;
|
pun_duration += cfg->Duration.find(payment_unit_id)->second.pun_duration;
|
||||||
|
} else {
|
||||||
|
pun_duration = cfg->Duration.find(payment_unit_id)->second.pun_duration;
|
||||||
|
}
|
||||||
|
|
||||||
if (pop_accumulate_prices) {
|
if (pop_accumulate_prices) {
|
||||||
price += itr->second.pra_price;
|
price += itr->second.pra_price;
|
||||||
} else {
|
} else {
|
||||||
price = (uint32_t)(itr->second.pra_price);
|
price = (uint32_t)(itr->second.pra_price);
|
||||||
}
|
}
|
||||||
|
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") price" << price;
|
if (DBG_LEVEL >= DBG_DEBUG) {
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") pun_id" << pun_id;
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ")";
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") pun_unit_id" << payment_unit_id;
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") price" << price;
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") pun_duration" << pun_duration;
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") pun_id" << pun_id;
|
||||||
//qCritical() << "(" << __func__ << ":" << __LINE__ << ") timeStep" << timeStep;
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") pun_unit_id" << payment_unit_id;
|
||||||
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") pun_duration" << pun_duration;
|
||||||
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") timeStep" << timeStep;
|
||||||
|
}
|
||||||
|
|
||||||
if (timeStep == pun_duration) {
|
if (timeStep == pun_duration) {
|
||||||
qCritical() << "(" << __func__ << ":" << __LINE__ << ") return price" << price;
|
qCritical() << "(" << __func__ << ":" << __LINE__ << ") return price" << price;
|
||||||
|
@@ -47,9 +47,9 @@ extern "C" char* strptime(const char* s,
|
|||||||
#define NEUHAUSER_CHRISTOPH_REISEN (0)
|
#define NEUHAUSER_CHRISTOPH_REISEN (0)
|
||||||
#define NEUHAUSER_PERNEGG_AN_DER_MUR (0)
|
#define NEUHAUSER_PERNEGG_AN_DER_MUR (0)
|
||||||
#define NEUHAUSER_STOCKERAU (0)
|
#define NEUHAUSER_STOCKERAU (0)
|
||||||
#define KLEIPEDA_LITAUEN (1)
|
#define KLEIPEDA_LITAUEN (0)
|
||||||
#define SEXTEN (0)
|
#define SEXTEN (0)
|
||||||
#define SCHNALS_LEITER_KIRCHL (0)
|
#define SCHNALS_LEITER_KIRCHL (1)
|
||||||
#define SCHNALS_STAUMAUER (SCHNALS_LEITER_KIRCHL)
|
#define SCHNALS_STAUMAUER (SCHNALS_LEITER_KIRCHL)
|
||||||
#define VALSER_ALM (0)
|
#define VALSER_ALM (0)
|
||||||
|
|
||||||
@@ -575,8 +575,8 @@ int main() {
|
|||||||
int pop_max_price;
|
int pop_max_price;
|
||||||
int pop_daily_card_price;
|
int pop_daily_card_price;
|
||||||
|
|
||||||
//input.open("/home/linux/customer_505/etc/psa_tariff/tariff01.json");
|
input.open("/home/linux/customer_505/etc/psa_tariff/tariff01.json");
|
||||||
input.open("/opt/ptu5/opt/customer_505/etc/psa_tariff/tariff01.json");
|
//input.open("/opt/ptu5/opt/customer_505/etc/psa_tariff/tariff01.json");
|
||||||
|
|
||||||
std::stringstream sstr;
|
std::stringstream sstr;
|
||||||
while(input >> sstr.rdbuf());
|
while(input >> sstr.rdbuf());
|
||||||
@@ -588,10 +588,13 @@ int main() {
|
|||||||
cout << endl;
|
cout << endl;
|
||||||
|
|
||||||
if (isParsed) {
|
if (isParsed) {
|
||||||
pop_min_time = get_minimal_parkingtime(&cfg);
|
//PermitType permitType(PERMIT_TYPE::SHORT_TERM_PARKING);
|
||||||
pop_max_time = get_maximal_parkingtime(&cfg);
|
PermitType permitType(PERMIT_TYPE::DAY_TICKET_PKW);
|
||||||
pop_min_price = get_minimal_parkingprice(&cfg);
|
|
||||||
pop_max_price = get_maximal_parkingprice(&cfg);
|
pop_min_time = get_minimal_parkingtime(&cfg, permitType);
|
||||||
|
pop_max_time = get_maximal_parkingtime(&cfg, permitType);
|
||||||
|
pop_min_price = get_minimal_parkingprice(&cfg, permitType);
|
||||||
|
pop_max_price = get_maximal_parkingprice(&cfg, permitType);
|
||||||
pop_daily_card_price = cfg.getPaymentOptions().pop_daily_card_price;
|
pop_daily_card_price = cfg.getPaymentOptions().pop_daily_card_price;
|
||||||
|
|
||||||
qCritical() << " pop_min_time: " << pop_min_time;
|
qCritical() << " pop_min_time: " << pop_min_time;
|
||||||
@@ -649,10 +652,10 @@ int main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//for (int minutes = 0; minutes < 1440; ++minutes) {
|
//for (int minutes = 0; minutes < 1440; ++minutes) {
|
||||||
for (int minutes = 1020; minutes <= 1020; minutes += 1) {
|
for (int minutes = 480; minutes <= 480; minutes += 1) {
|
||||||
QDateTime start = s.addSecs(minutes * 60);
|
QDateTime start = s.addSecs(minutes * 60);
|
||||||
|
|
||||||
qCritical() << "start" << start.toString(Qt::ISODate);
|
// qCritical() << "start" << start.toString(Qt::ISODate);
|
||||||
|
|
||||||
QDateTime effectiveStart = start;
|
QDateTime effectiveStart = start;
|
||||||
|
|
||||||
@@ -669,8 +672,7 @@ int main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
PermitType permitType(PERMIT_TYPE::SHORT_TERM_PARKING);
|
for (int i = 700; i <= 1400; i += 700) {
|
||||||
for (int i = 200; i <= 200; i += 10) {
|
|
||||||
cost = i;
|
cost = i;
|
||||||
|
|
||||||
if ((cs = compute_duration_for_parking_ticket(&cfg, start, cost, end, permitType))) { // return value
|
if ((cs = compute_duration_for_parking_ticket(&cfg, start, cost, end, permitType))) { // return value
|
||||||
@@ -682,38 +684,20 @@ int main() {
|
|||||||
// qCritical() << cs.toString();
|
// qCritical() << cs.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
qCritical() << "start" << start.toString(Qt::ISODate) << "< cost" << cost
|
//qCritical() << "start" << start.toString(Qt::ISODate) << "< cost" << cost
|
||||||
<< "> end" << end.toString(Qt::ISODate);
|
// << "> end" << end.toString(Qt::ISODate);
|
||||||
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
for (int i = 700; i <= 1400; i += 700) {
|
|
||||||
//for (int i = 2100; i <= 2100; i += 10) {
|
|
||||||
cost = i;
|
|
||||||
|
|
||||||
if ((cs = compute_duration_for_parking_ticket(&cfg, start, cost, end, PermitType(PERMIT_TYPE::SHORT_TERM_PARKING_PKW)))) { // return value
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!cs) {
|
|
||||||
qCritical() << "ERROR CalcState" << cs.toString() << endl;
|
|
||||||
} else {
|
|
||||||
// qCritical() << cs.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
qCritical() << "start" << start.toString(Qt::ISODate) << "< cost" << cost
|
|
||||||
<< "> end" << end.toString(Qt::ISODate);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
start = QDateTime::currentDateTime();
|
start = QDateTime::currentDateTime();
|
||||||
start.setTime(QTime(9, 57, 0));
|
//start.setTime(QTime(9, 57, 0));
|
||||||
|
|
||||||
for (int i = 66; i <= 66; i += 6) {
|
for (int netto_parking_time = 60; netto_parking_time <= 60; netto_parking_time += 60) {
|
||||||
|
|
||||||
QDateTime end;
|
QDateTime end;
|
||||||
struct price_t price;
|
struct price_t price;
|
||||||
cs = compute_price_for_parking_ticket(&cfg, start, i, end, &price);
|
cs = compute_price_for_parking_ticket(&cfg, start, netto_parking_time, end, &price, permitType, true);
|
||||||
|
|
||||||
qCritical() << "start" << start.toString(Qt::ISODate) << "end" << end.toString(Qt::ISODate)
|
qCritical() << "start" << start.toString(Qt::ISODate) << "end" << end.toString(Qt::ISODate)
|
||||||
<< "price" << price.netto;
|
<< "price" << price.netto;
|
||||||
@@ -919,22 +903,24 @@ int main() {
|
|||||||
s.setTime(QTime(12, 0, 0));
|
s.setTime(QTime(12, 0, 0));
|
||||||
|
|
||||||
int minimal_parking_price = get_minimal_parkingprice(&cfg,
|
int minimal_parking_price = get_minimal_parkingprice(&cfg,
|
||||||
PermitType(PERMIT_TYPE::SHORT_TERM_PARKING),
|
PermitType(PERMIT_TYPE::SHORT_TERM_PARKING_PKW),
|
||||||
paymentOptionIndex, s);
|
paymentOptionIndex, s);
|
||||||
|
|
||||||
|
#if 0
|
||||||
qCritical() << "minimal parking price" << minimal_parking_price;
|
qCritical() << "minimal parking price" << minimal_parking_price;
|
||||||
|
|
||||||
for (int i = 0; i < 8; ++i) {
|
for (int i = 0; i < 8; ++i) {
|
||||||
calcState = compute_duration_for_parking_ticket(&cfg, s,
|
calcState = compute_duration_for_parking_ticket(&cfg, s,
|
||||||
(double)minimal_parking_price + i*800,
|
(double)minimal_parking_price + i*800,
|
||||||
end, PermitType(PERMIT_TYPE::SHORT_TERM_PARKING));
|
end, PermitType(PERMIT_TYPE::SHORT_TERM_PARKING_PKW));
|
||||||
qCritical() << "RUN" << i << end.toString(Qt::ISODate) << calcState.toString();
|
qCritical() << "RUN" << i << end.toString(Qt::ISODate) << calcState.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
s.setTime(QTime(15, 0, 0));
|
s.setTime(QTime(15, 0, 0));
|
||||||
|
|
||||||
minimal_parking_price = get_minimal_parkingprice(&cfg,
|
minimal_parking_price = get_minimal_parkingprice(&cfg,
|
||||||
PermitType(PERMIT_TYPE::SHORT_TERM_PARKING),
|
PermitType(PERMIT_TYPE::SHORT_TERM_PARKING_PKW),
|
||||||
paymentOptionIndex, s);
|
paymentOptionIndex, s);
|
||||||
|
|
||||||
qCritical() << "minimal parking price" << minimal_parking_price;
|
qCritical() << "minimal parking price" << minimal_parking_price;
|
||||||
@@ -942,9 +928,10 @@ int main() {
|
|||||||
for (int i = 0; i < 8; ++i) {
|
for (int i = 0; i < 8; ++i) {
|
||||||
calcState = compute_duration_for_parking_ticket(&cfg, s,
|
calcState = compute_duration_for_parking_ticket(&cfg, s,
|
||||||
(double)minimal_parking_price + i*800,
|
(double)minimal_parking_price + i*800,
|
||||||
end, PermitType(PERMIT_TYPE::SHORT_TERM_PARKING));
|
end, PermitType(PERMIT_TYPE::SHORT_TERM_PARKING_PKW));
|
||||||
qCritical() << "RUN" << i << end.toString(Qt::ISODate) << calcState.toString();
|
qCritical() << "RUN" << i << end.toString(Qt::ISODate) << calcState.toString();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user