コード例 #1
0
        /// <summary>
        /// Get list of exchange rates chart datapoints by model's criteria.
        /// </summary>
        /// <param name="statisticsModel"></param>
        /// <returns></returns>
        private List <CurrencyChartDataPoint> GetExchangeRates(ExchangeRatesStatisticsModel statisticsModel)
        {
            List <ExchangeRatesHistory>   baseRatesHistory       = GetExchangeRatesForCurrency(statisticsModel, statisticsModel.BaseCurrencyCode);
            List <ExchangeRatesHistory>   relationalRatesHistory = GetExchangeRatesForCurrency(statisticsModel, statisticsModel.RelationalCurrencyCode);
            List <CurrencyChartDataPoint> resultingDataForChart  = new List <CurrencyChartDataPoint>();

            foreach (ExchangeRatesHistory baseRateHistoryItem in baseRatesHistory)
            {
                //database keeps rates only for USD, so we have to calculate any other rate
                ExchangeRatesHistory relationalRateHistoryItem = relationalRatesHistory.Where(r => r.Date == baseRateHistoryItem.Date).First();
                double calculatedRate = calculatedRate = relationalRateHistoryItem.CurrencyRate / baseRateHistoryItem.CurrencyRate;
                //remember calculated rate in chart data
                resultingDataForChart.Add(new CurrencyChartDataPoint(baseRateHistoryItem.Date, calculatedRate));
            }

            return(resultingDataForChart.OrderBy(er => er.Date).ToList());
        }
コード例 #2
0
        /// <summary>
        /// Show to user exchange rates statistics by his query
        /// </summary>
        /// <param name="statisticsModel"></param>
        /// <returns></returns>
        public ActionResult GetExchangeRatesForPeriod(ExchangeRatesStatisticsModel statisticsModel)
        {
            if (statisticsModel.EndDate > statisticsModel.StartDate &&
                (statisticsModel.EndDate - statisticsModel.StartDate).TotalDays < MaxStatisticsInterval)
            {
                statisticsModel.ExchangeRatesChartData = GetExchangeRates(statisticsModel);
            }
            else
            {
                ModelState.AddModelError("", string.Format(
                                             "Wrong period. Start date must be earlier than end date. Period length must be less than {0} days", MaxStatisticsInterval));
            }

            ViewBag.AvailableCurrencies = GetAvailableCurrencies();

            //the same view as in Index action
            return(View("Index", statisticsModel));
        }
コード例 #3
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);
        }
コード例 #4
0
        /// <summary>
        /// Initial action.
        /// </summary>
        /// <param name="statisticsModel"></param>
        /// <returns></returns>
        public ActionResult Index(ExchangeRatesStatisticsModel statisticsModel)
        {
            ViewBag.AvailableCurrencies = GetAvailableCurrencies();

            return(View(statisticsModel));
        }