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);
        }
Example #3
0
        /// <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);
            }
        }