예제 #1
0
 /// <summary>
 /// Add new exchange rates history entries to database
 /// </summary>
 /// <param name="rates">list of entities to add</param>
 private void AddRatesToDb(List <ExchangeRatesHistory> rates)
 {
     try
     {
         using (ExchangeRatesDataModelContainer dbModel = new ExchangeRatesDataModelContainer())
         {
             foreach (var rate in rates)
             {
                 rate.Currency = dbModel.Currencies.Where(c => c.ServiceCode == rate.Currency.ServiceCode).First();
                 dbModel.ExchangeRatesHistories.AddObject(rate);
             }
             dbModel.SaveChanges();
         }
     }
     catch (Exception e)
     {
         throw new ApplicationException("Unable to add rates history to Database", e);
     }
 }
예제 #2
0
        /// <summary>
        /// Get list of exchange rates history entities for specific period (from model) for specific currency
        /// </summary>
        /// <param name="statisticsModel">Data Model</param>
        /// <param name="currencyCode">Currency Code</param>
        /// <returns></returns>
        private List <ExchangeRatesHistory> GetExchangeRatesForCurrency(ExchangeRatesStatisticsModel statisticsModel, string currencyCode)
        {
            List <ExchangeRatesHistory> ratesHistory = new List <ExchangeRatesHistory>();

            try
            {
                using (ExchangeRatesDataModelContainer dbModel = new ExchangeRatesDataModelContainer())
                {
                    //Extract existing data from database
                    ratesHistory = dbModel.ExchangeRatesHistories
                                   .Where(r =>
                                          r.Date >= statisticsModel.StartDate &&
                                          r.Date <= statisticsModel.EndDate &&
                                          (r.Currency.ServiceCode == currencyCode))
                                   .ToList();
                }
            }
            catch (Exception e)
            {
                throw new ApplicationException("Unable to get rates history from Database", e);
            }

            for (DateTime currentDate = statisticsModel.StartDate; currentDate <= statisticsModel.EndDate; currentDate = currentDate.AddDays(1))
            {
                List <ExchangeRatesHistory> existingRate = ratesHistory
                                                           .Where(rh => rh.Date == currentDate).ToList();

                if (existingRate.Count == 0)
                {
                    List <ExchangeRatesHistory> ratesFromService = GetExchangeRatesFromService(currentDate)
                                                                   .Where(r => r.Currency.ServiceCode == currencyCode).ToList();
                    AddRatesToDb(ratesFromService);
                    ratesHistory.AddRange(ratesFromService);
                }
            }
            return(ratesHistory);
        }