Fix: GetDurationForPrice return proper value not only '0'
This commit is contained in:
		@@ -43,9 +43,6 @@ private:
 | 
			
		||||
    // 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, QDateTime const &end) const;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    uint32_t GetPriceForTimeStep(Configuration *cfg, int timeStep) const;
 | 
			
		||||
    uint32_t GetDurationForPrice(Configuration *cfg, int price) const;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -634,22 +634,29 @@ uint32_t Calculator::GetPriceForTimeStep(Configuration *cfg, int timeStep) const
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 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)
 | 
			
		||||
    {
 | 
			
		||||
        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;
 | 
			
		||||
        uint32_t const durationUnit = cfg->Duration.find(durationId)->second.pun_duration;
 | 
			
		||||
 | 
			
		||||
        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;
 | 
			
		||||
        }
 | 
			
		||||
        if (pra_price < price) {
 | 
			
		||||
            duration = durationUnit;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
    return duration;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user