public void Update(TariffDTO item) { var oldTariff = _context.TariffEntities.FirstOrDefault(x => x.Id == item.Id); if (oldTariff != null) { TariffEntity tariff = _mapper.Map <TariffEntity>(item); _context.Entry(oldTariff).CurrentValues.SetValues(tariff); } else { throw new InvalidOperationException(); } }
/// <summary> /// Recursive calculation. Note that this calculation assumes that lower pricing modells /// always just have a baseCost with no consumptionCosts associated. /// </summary> /// <param name="tariffEntity"></param> /// <param name="consumptionKWh"></param> /// <returns></returns> private decimal calculateAnnualCosts(TariffEntity tariffEntity, decimal consumptionKWh) { if (tariffEntity == null) { // no further pricing tier return(0); } if (tariffEntity.KWhLimit < consumptionKWh) { // also add current pricing tier costs as next pricing tier calculates from then on (see model 2). return(tariffEntity.BaseCostsAnnual + calculateAnnualCosts(tariffEntity.NextPricingTier, consumptionKWh - tariffEntity.KWhLimit.Value)); } return(tariffEntity.BaseCostsAnnual + tariffEntity.ConsumptionCostsPerKWh * consumptionKWh); }
/// <summary> /// Fetches a specific tariff with corresponding meta-data (e.g. pricing tier, initial tariff, ...) /// </summary> /// <param name="id">Product ID to search for</param> public async Task <TariffDTO> Get(Guid id) { using (_dbContext) { TariffEntity tariff = await _dbContext.Tariffs.FindAsync(id); if (tariff != null) { // Load additional data (used this way to have the benefits of Find() by still including external data) await _dbContext.Entry(tariff).Reference(t => t.NextPricingTier).LoadAsync(); return(tariff.Adapt <TariffDTO>()); } return(null); } }