Compare commits
3 Commits
f7af631de6
...
631378deeb
Author | SHA1 | Date | |
---|---|---|---|
631378deeb | |||
9d713c894d | |||
38eca50d83 |
@ -674,13 +674,24 @@ Ticket Calculator::private_GetDurationFromCost(Configuration *cfg,
|
|||||||
|
|
||||||
// Check prepaid
|
// Check prepaid
|
||||||
if (!prepaid) {
|
if (!prepaid) {
|
||||||
if ((current.time() < worktime_from) || (current.time() > worktime_to)) {
|
if (current.time() < worktime_from) {
|
||||||
qDebug() << "[STOP] * Ticket is not valid * ";
|
qDebug() << "[STOP] TICKET IS NOT VALID: "
|
||||||
|
<< QString("%1 (current) < %2 (start)")
|
||||||
|
.arg(current.toString(Qt::ISODate)
|
||||||
|
.arg(worktime_from.toString(Qt::ISODate)));
|
||||||
|
return Ticket();
|
||||||
|
} else
|
||||||
|
if (current.time() > worktime_to) {
|
||||||
|
qDebug() << "[STOP] TICKET IS NOT VALID: "
|
||||||
|
<< QString("%1 (current) > %2 (end)")
|
||||||
|
.arg(current.toString(Qt::ISODate)
|
||||||
|
.arg(worktime_to.toString(Qt::ISODate)));
|
||||||
return Ticket();
|
return Ticket();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "* PREPAID MODE ACTIVE *";
|
|
||||||
if (current.time() < worktime_from) {
|
if (current.time() < worktime_from) {
|
||||||
|
qDebug() << "*** PREPAID *** Current time is before time range start, fast-forward to start"
|
||||||
|
<< worktime_from.toString(Qt::ISODate);
|
||||||
current.setTime(worktime_from);
|
current.setTime(worktime_from);
|
||||||
end = current;
|
end = current;
|
||||||
} else if(current.time() > lastWorktimeTo) {
|
} else if(current.time() > lastWorktimeTo) {
|
||||||
@ -696,10 +707,16 @@ Ticket Calculator::private_GetDurationFromCost(Configuration *cfg,
|
|||||||
if (!IsYearPeriodActive(cfg, current)) {
|
if (!IsYearPeriodActive(cfg, current)) {
|
||||||
return Ticket();
|
return Ticket();
|
||||||
}
|
}
|
||||||
if(durationMinutesNetto > maxParkingTimeMinutes) {
|
// if(durationMinutesNetto >= maxParkingTimeMinutes) {
|
||||||
durationMinutesNetto = maxParkingTimeMinutes;
|
// might be useful for overpayment
|
||||||
break;
|
// durationMinutesNetto = maxParkingTimeMinutes;
|
||||||
}
|
// int durationMinutesBrutto = start.secsTo(end) / 60;
|
||||||
|
//
|
||||||
|
// return
|
||||||
|
// Ticket(start, end, durationMinutesNetto,
|
||||||
|
// durationMinutesBrutto, cost, Ticket::s[INVALID_PRICE]);
|
||||||
|
//
|
||||||
|
// }
|
||||||
if(current.time() >= lastWorktimeTo) {
|
if(current.time() >= lastWorktimeTo) {
|
||||||
// Go to next day if minutes not spent
|
// Go to next day if minutes not spent
|
||||||
if (carryOverNotSet) {
|
if (carryOverNotSet) {
|
||||||
@ -711,11 +728,20 @@ Ticket Calculator::private_GetDurationFromCost(Configuration *cfg,
|
|||||||
} else {
|
} else {
|
||||||
if(current.time() < worktime_to) {
|
if(current.time() < worktime_to) {
|
||||||
// Increment input date minutes for each monetary unit
|
// Increment input date minutes for each monetary unit
|
||||||
durationMinutesNetto +=1;
|
durationMinutesNetto += 1;
|
||||||
moneyLeft -= price;
|
moneyLeft -= price;
|
||||||
moneyLeft = std::round(moneyLeft * 1000.0) / 1000.0;
|
moneyLeft = std::round(moneyLeft * 1000.0) / 1000.0;
|
||||||
current = current.addSecs(60);
|
current = current.addSecs(60);
|
||||||
end = current;
|
|
||||||
|
//qCritical() << "moneyLeft" << moneyLeft
|
||||||
|
// << "durationMinutesNetto" << durationMinutesNetto
|
||||||
|
// << "current" << current.toString(Qt::ISODate);
|
||||||
|
|
||||||
|
if(durationMinutesNetto <= maxParkingTimeMinutes) {
|
||||||
|
// stop updating of end-date if parking time is
|
||||||
|
// overshot
|
||||||
|
end = current;
|
||||||
|
}
|
||||||
} else break;
|
} else break;
|
||||||
}
|
}
|
||||||
} // while(durationMinutes > 0) {
|
} // while(durationMinutes > 0) {
|
||||||
@ -723,7 +749,7 @@ Ticket Calculator::private_GetDurationFromCost(Configuration *cfg,
|
|||||||
} // for (int w = currentRange; w < ranges; ++w, ++totalTimeRanges) {
|
} // for (int w = currentRange; w < ranges; ++w, ++totalTimeRanges) {
|
||||||
} // for (current = start; durationMinutes > 0; current = current.addDays(1)) {
|
} // for (current = start; durationMinutes > 0; current = current.addDays(1)) {
|
||||||
|
|
||||||
int durationMinutesBrutto = start.secsTo(end) / 60;
|
int durationMinutesBrutto = start.secsTo(end) / 60;
|
||||||
|
|
||||||
//qCritical() << "start" << start.toString(Qt::ISODate) << "end"
|
//qCritical() << "start" << start.toString(Qt::ISODate) << "end"
|
||||||
// << end.toString(Qt::ISODate) << durationMinutesBrutto;
|
// << end.toString(Qt::ISODate) << durationMinutesBrutto;
|
||||||
|
@ -37,8 +37,8 @@ extern "C" char* strptime(const char* s,
|
|||||||
#define SCHOENAU_KOENIGSEE (0)
|
#define SCHOENAU_KOENIGSEE (0)
|
||||||
#define NEUHAUSER_KORNEUBURG (0)
|
#define NEUHAUSER_KORNEUBURG (0)
|
||||||
#define NEUHAUSER_LINSINGER_MASCHINENBAU (0)
|
#define NEUHAUSER_LINSINGER_MASCHINENBAU (0)
|
||||||
#define NEUHAUSER_NORDISCHES_AUSBILDUNGSZENTRUM (1)
|
#define NEUHAUSER_NORDISCHES_AUSBILDUNGSZENTRUM (0)
|
||||||
#define NEUHAUSER_BILEXA_GALTUER (0)
|
#define NEUHAUSER_BILEXA_GALTUER (1)
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
@ -146,6 +146,7 @@ int main() {
|
|||||||
qCritical() << "start=" << start.toString(Qt::ISODate)
|
qCritical() << "start=" << start.toString(Qt::ISODate)
|
||||||
<< "end" << end.toString(Qt::ISODate) << "price" << price.netto;
|
<< "end" << end.toString(Qt::ISODate) << "price" << price.netto;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int offset = 480; offset < 1080; ++offset) {
|
for (int offset = 480; offset < 1080; ++offset) {
|
||||||
QDateTime start = s.addSecs(offset * 60);
|
QDateTime start = s.addSecs(offset * 60);
|
||||||
CalcState cs = compute_price_for_daily_ticket(&cfg, start, end,
|
CalcState cs = compute_price_for_daily_ticket(&cfg, start, end,
|
||||||
@ -184,15 +185,15 @@ int main() {
|
|||||||
|
|
||||||
double cost = Calculator::GetInstance().GetCostFromDuration(&cfg, 4, start, end, marken[duration], nextDay, prePaid);
|
double cost = Calculator::GetInstance().GetCostFromDuration(&cfg, 4, start, end, marken[duration], nextDay, prePaid);
|
||||||
//qCritical() << "";
|
//qCritical() << "";
|
||||||
//qCritical() << "start" << start.toString(Qt::ISODate)
|
|
||||||
// << "end" << end.toString(Qt::ISODate)
|
|
||||||
// << "duration" << marken[duration]
|
|
||||||
// << "cost" << cost;
|
|
||||||
|
|
||||||
std::string d = Calculator::GetInstance().GetDurationFromCost(&cfg, 4, start.toString(Qt::ISODate).toStdString().c_str(), cost);
|
|
||||||
qCritical() << "start" << start.toString(Qt::ISODate)
|
qCritical() << "start" << start.toString(Qt::ISODate)
|
||||||
<< "cost" << cost
|
<< "end" << end.toString(Qt::ISODate)
|
||||||
<< "until" << d.c_str() << start.secsTo(QDateTime::fromString(d.c_str(), Qt::ISODate)) / 60;
|
<< "duration" << marken[duration]
|
||||||
|
<< "cost" << cost;
|
||||||
|
|
||||||
|
//std::string d = Calculator::GetInstance().GetDurationFromCost(&cfg, 4, start.toString(Qt::ISODate).toStdString().c_str(), cost);
|
||||||
|
//qCritical() << "start" << start.toString(Qt::ISODate)
|
||||||
|
// << "cost" << cost
|
||||||
|
// << "until" << d.c_str() << start.secsTo(QDateTime::fromString(d.c_str(), Qt::ISODate)) / 60;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -254,7 +255,7 @@ int main() {
|
|||||||
int pop_min_price;
|
int pop_min_price;
|
||||||
int pop_max_price;
|
int pop_max_price;
|
||||||
|
|
||||||
for (int t=2; t < 3; ++t) {
|
for (int t=1; t < 2; ++t) {
|
||||||
//for (int t=6; t < 7; t+=20) {
|
//for (int t=6; t < 7; t+=20) {
|
||||||
switch (t) {
|
switch (t) {
|
||||||
case 1: {
|
case 1: {
|
||||||
@ -301,15 +302,18 @@ int main() {
|
|||||||
pop_min_price = get_minimal_parkingprice(&cfg);
|
pop_min_price = get_minimal_parkingprice(&cfg);
|
||||||
pop_max_price = get_maximal_parkingprice(&cfg);
|
pop_max_price = get_maximal_parkingprice(&cfg);
|
||||||
|
|
||||||
qCritical() << " pop_min_time: " << pop_min_time;
|
qCritical() << " pop_min_time: " << pop_min_time;
|
||||||
qCritical() << " pop_max_time: " << pop_max_time;
|
qCritical() << " pop_max_time: " << pop_max_time;
|
||||||
qCritical() << "pop_min_price: " << pop_min_price;
|
qCritical() << " pop_min_price: " << pop_min_price;
|
||||||
qCritical() << "pop_max_price: " << pop_max_price;
|
qCritical() << " pop_max_price: " << pop_max_price;
|
||||||
|
qCritical() << "pop_daily_card_price: " << cfg.getPaymentOptions().pop_daily_card_price;
|
||||||
|
|
||||||
{
|
{
|
||||||
// zone 1 (lila)
|
// zone 1 (lila)
|
||||||
QDateTime s(QDate(2023, 11, 30), QTime());
|
QDateTime s(QDate(2023, 11, 30), QTime());
|
||||||
QDateTime end;
|
QDateTime end;
|
||||||
|
int cnt = 1;
|
||||||
|
#if 0
|
||||||
for (int duration = 15; duration <= pop_max_time; duration += 5) {
|
for (int duration = 15; duration <= pop_max_time; duration += 5) {
|
||||||
for (int offset = 480; offset < 1080; ++offset) {
|
for (int offset = 480; offset < 1080; ++offset) {
|
||||||
QDateTime start = s.addSecs(offset * 60);
|
QDateTime start = s.addSecs(offset * 60);
|
||||||
@ -317,19 +321,34 @@ int main() {
|
|||||||
|
|
||||||
double cost = Calculator::GetInstance().GetCostFromDuration(&cfg, 3, start, end, duration);
|
double cost = Calculator::GetInstance().GetCostFromDuration(&cfg, 3, start, end, duration);
|
||||||
// Q_ASSERT(cost == duration*2.5);
|
// Q_ASSERT(cost == duration*2.5);
|
||||||
qCritical() << "";
|
//qCritical() << "";
|
||||||
qCritical() << "start" << start.toString(Qt::ISODate)
|
qCritical() << cnt << "start" << start.toString(Qt::ISODate)
|
||||||
<< "end" << end.toString(Qt::ISODate)
|
<< "end" << end.toString(Qt::ISODate)
|
||||||
<< "duration" << duration
|
<< "duration" << duration
|
||||||
<< "cost" << cost;
|
<< "cost" << cost;
|
||||||
|
|
||||||
std::string duration = Calculator::GetInstance().GetDurationFromCost(&cfg, 3, start.toString(Qt::ISODate).toStdString().c_str(), cost);
|
std::string duration = Calculator::GetInstance().GetDurationFromCost(&cfg,
|
||||||
|
3,
|
||||||
|
start.toString(Qt::ISODate).toStdString().c_str(),
|
||||||
|
cost, false, true);
|
||||||
//Q_ASSERT(cost == duration*2.5);
|
//Q_ASSERT(cost == duration*2.5);
|
||||||
qCritical() << "start" << start.toString(Qt::ISODate)
|
qCritical() << cnt << "start" << start.toString(Qt::ISODate)
|
||||||
<< "cost" << cost
|
<< "cost" << cost
|
||||||
<< "until" << duration.c_str() << start.secsTo(QDateTime::fromString(duration.c_str(), Qt::ISODate)) / 60;
|
<< "until" << duration.c_str() << start.secsTo(QDateTime::fromString(duration.c_str(), Qt::ISODate)) / 60;
|
||||||
|
++cnt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
QDateTime start = s.addSecs(480 * 60); // 8:00:00
|
||||||
|
double cost = 2000;
|
||||||
|
std::string duration = Calculator::GetInstance().GetDurationFromCost(&cfg,
|
||||||
|
3,
|
||||||
|
start.toString(Qt::ISODate).toStdString().c_str(),
|
||||||
|
cost, false, true);
|
||||||
|
qCritical() << cnt << "start" << start.toString(Qt::ISODate)
|
||||||
|
<< "cost" << cost
|
||||||
|
<< "until" << duration.c_str() << start.secsTo(QDateTime::fromString(duration.c_str(), Qt::ISODate)) / 60;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user