Fix: GetDurationForPrice return proper value not only '0'

This commit is contained in:
Siegfried Siegert 2023-11-23 15:06:57 +01:00
parent 8f2609c4ae
commit 7ee90a9e8a
Signed by: SiegfriedSiegert
GPG Key ID: 68371E015E8F0B03
2 changed files with 14 additions and 10 deletions

View File

@ -43,9 +43,6 @@ private:
// 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;
uint32_t GetCostFromDuration(Configuration *cfg, QDateTime const &start, QDateTime const &end) const; uint32_t GetCostFromDuration(Configuration *cfg, QDateTime const &start, QDateTime const &end) const;
//
uint32_t GetPriceForTimeStep(Configuration *cfg, int timeStep) const; uint32_t GetPriceForTimeStep(Configuration *cfg, int timeStep) const;
uint32_t GetDurationForPrice(Configuration *cfg, int price) const; uint32_t GetDurationForPrice(Configuration *cfg, int price) const;
}; };

View File

@ -634,22 +634,29 @@ uint32_t Calculator::GetPriceForTimeStep(Configuration *cfg, int timeStep) const
return 0; return 0;
} }
uint32_t Calculator::GetDurationForPrice(Configuration *cfg, int price) const { /**
int const pop_id = cfg->getPaymentOptions().pop_id; * private: read price directly from config file (used with PaymentMethod::Steps)
*
* return duration in minutes for greatest pra_price < price
*/
uint32_t Calculator::GetDurationForPrice(Configuration *cfg, int price) const {
int const pop_id = cfg->getPaymentOptions().pop_id;
uint32_t duration = 0;
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 payment_unit_id = itr->second.pra_payment_unit_id; int const durationId = itr->second.pra_payment_unit_id;
int const pra_price = itr->second.pra_price; int const pra_price = itr->second.pra_price;
uint32_t const durationUnit = cfg->Duration.find(durationId)->second.pun_duration;
if (price == pra_price) { if (price == pra_price) {
int const durationId = itr->second.pra_payment_unit_id;
int const durationUnit = cfg->Duration.find(durationId)->second.pun_duration;
return durationUnit; return durationUnit;
} }
if (pra_price < price) {
duration = durationUnit;
}
} }
return 0; return duration;
} }