get_minimal_parking_price(): compute this price dynamically according to settings
in the tariff-file. Introduced for Fuchs (500) for Valser Alm (Location: Fane)
This commit is contained in:
parent
7233bc55c2
commit
9a6b2b195d
@ -94,21 +94,56 @@ int CALCULATE_LIBRARY_API get_minimal_parkingprice(Configuration *cfg,
|
||||
int minPrice = -1;
|
||||
paymentOptionIndex = cfg->getPaymentOptionIndex(permitType);
|
||||
|
||||
switch(permitType) {
|
||||
case PERMIT_TYPE::SHORT_TERM_PARKING: { // e.g. szeged (customer_281)
|
||||
minPrice = cfg->getPaymentOptions(paymentOptionIndex).pop_min_price;
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_ADULT: {
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_TEEN: {
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_CHILD: {
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET: {
|
||||
minPrice = compute_product_price(cfg, permitType, start);
|
||||
} break;
|
||||
default:
|
||||
minPrice = cfg->getPaymentOptions(paymentOptionIndex).pop_min_price;
|
||||
int payment_method_id = cfg->getPaymentOptions(paymentOptionIndex).pop_payment_method_id;
|
||||
|
||||
if (payment_method_id == PaymentMethod::Degressive) {
|
||||
// Degressive: new for Fuchs Technik (500), ValserAlm (Fane):
|
||||
// the minimal price has to be calculated, in cannot be hard coded into
|
||||
// the tariff file.
|
||||
// The working times have a reference into the payment rates. Two special
|
||||
// entries (with the numbers 1000/1001) point to the respective prices.
|
||||
switch(permitType) {
|
||||
default: {
|
||||
// find the correct work time range
|
||||
int weekDay = start.date().dayOfWeek();
|
||||
std::optional<QVector<ATBWeekDaysWorktime>> const &wd = cfg->getAllWeekDayWorkTimes();
|
||||
if (wd.has_value()) {
|
||||
QVector<ATBWeekDaysWorktime> const &vec = wd.value();
|
||||
for (int i = 0; i < vec.size(); ++i) {
|
||||
ATBWeekDaysWorktime const &wt = vec[i];
|
||||
if (wt.pwd_period_day_in_week_id == weekDay) {
|
||||
if (start.time() >= QTime::fromString(QString::fromStdString(wt.pwd_time_from), Qt::ISODate)
|
||||
&& start.time() <= QTime::fromString(QString::fromStdString(wt.pwd_time_to), Qt::ISODate)) {
|
||||
// found worktime range
|
||||
int pop_id = wt.pwd_pop_id; // 1000 or 1001
|
||||
for (auto[itr, rangeEnd] = cfg->PaymentRate.equal_range(pop_id); itr != rangeEnd; ++itr) {
|
||||
i = vec.size(); // to leave outer loop
|
||||
minPrice = itr->second.pra_price; // this is now the minimal price
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
switch(permitType) {
|
||||
case PERMIT_TYPE::SHORT_TERM_PARKING: { // e.g. szeged (customer_281)
|
||||
minPrice = cfg->getPaymentOptions(paymentOptionIndex).pop_min_price;
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_ADULT: {
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_TEEN: {
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET_CHILD: {
|
||||
} break;
|
||||
case PERMIT_TYPE::DAY_TICKET: {
|
||||
minPrice = compute_product_price(cfg, permitType, start);
|
||||
} break;
|
||||
default:
|
||||
minPrice = cfg->getPaymentOptions(paymentOptionIndex).pop_min_price;
|
||||
}
|
||||
}
|
||||
|
||||
return minPrice;
|
||||
|
Loading…
Reference in New Issue
Block a user