private void AddItemToBestExchangeRate(CsvFileExchangeRate csvFileExchangeRate, DateTime currentDate)
 {
     _bestExchangeRates.Add(csvFileExchangeRate.Currency,
         new XmlOutputBestExchangeRate
         {
             Country = csvFileExchangeRate.Country,
             Unit = csvFileExchangeRate.Unit,
             Currency = csvFileExchangeRate.Currency,
             MaxForeignExchangeBuyValue = csvFileExchangeRate.ForeignExchangeBuy,
             MinForeignExchangeSellValue = csvFileExchangeRate.ForeignExchangeSell,
             MaxForeignExchangeBuyDate = currentDate,
             MinForeignExchangeSellDate = currentDate
         });
 }
        private void CalculateMinSellMaxBuyValues(CsvFileExchangeRate currentCsvFileExchangeRate, DateTime currentDate, string currentCurrency)
        {
            foreach (KeyValuePair<DateTime, List<CsvFileExchangeRate>> dateToExchangeRatePair in _sortedDateToExchangeRateDictionary.SkipWhile(item => currentDate > item.Key))
            {
                foreach (CsvFileExchangeRate innerLoopCsvFileExchangeRate in dateToExchangeRatePair.Value.Where(item => item.Currency == currentCurrency))
                {
                    var originDiff = _bestExchangeRates[currentCurrency].MaxForeignExchangeBuyValue - _bestExchangeRates[currentCurrency].MinForeignExchangeSellValue;
                    var newDiff = innerLoopCsvFileExchangeRate.ForeignExchangeBuy - currentCsvFileExchangeRate.ForeignExchangeSell;

                    if (newDiff > originDiff)
                    {
                        _bestExchangeRates[currentCurrency].MinForeignExchangeSellValue = currentCsvFileExchangeRate.ForeignExchangeSell;
                        _bestExchangeRates[currentCurrency].MinForeignExchangeSellDate = currentDate;

                        _bestExchangeRates[currentCurrency].MaxForeignExchangeBuyValue = innerLoopCsvFileExchangeRate.ForeignExchangeBuy;
                        _bestExchangeRates[currentCurrency].MaxForeignExchangeBuyDate = dateToExchangeRatePair.Key;
                    }
                }
            }
        }
        private void ProcessItem(CsvFileExchangeRate currentCsvFileExchangeRate, DateTime currentDate)
        {
            var currentCurrency = currentCsvFileExchangeRate.Currency;

            if (!_bestExchangeRates.ContainsKey(currentCurrency))
            {
                AddItemToBestExchangeRate(currentCsvFileExchangeRate, currentDate);
                CalculateMinSellMaxBuyValues(currentCsvFileExchangeRate, currentDate, currentCurrency);

                return;
            }

            if (currentCsvFileExchangeRate.ForeignExchangeSell < _bestExchangeRates[currentCurrency].MinForeignExchangeSellValue)
            {
                CalculateMinSellMaxBuyValues(currentCsvFileExchangeRate, currentDate, currentCurrency);
            }
        }