public List <WeekRates> GetWeekRatesReport(int year, int month, string[] currencies) { var rawData = GetRatesFromDb(year, month, currencies); var result = new List <WeekRates>(); //в чехии свои гос праздники //в базе у нас только рабочие даты //неделю можно определять, у нас номер недели меньше чем предыдущий //стандартный DayOfWeek с воскресенья начинается var weekNum = -1; var prevWeekDay = Int32.MaxValue; foreach (var item in rawData) { var day = item.Key; if (day.EuroDayOfWeek() < prevWeekDay) { weekNum++; var weekRates = new WeekRates(); result.Add(weekRates); } prevWeekDay = day.EuroDayOfWeek(); var week = result[weekNum]; week.Days.Add(day.Day); foreach (var rate in item) { if (!week.CurrencyRates.TryGetValue(rate.CurrencyCode, out var currencyData)) { currencyData = new WeekRateData(); currencyData.Max = rate.FinalRate; currencyData.Min = rate.FinalRate; week.CurrencyRates[rate.CurrencyCode] = currencyData; } currencyData.Max = rate.FinalRate > currencyData.Max ? rate.FinalRate : currencyData.Max; currencyData.Min = rate.FinalRate < currencyData.Min ? rate.FinalRate : currencyData.Min; currencyData.AddRates(rate.FinalRate); } } return(result); }
public void TestVesion1() { var rawData = data; var result = new List <WeekRates>(); var weekNum = -1; var prevWeekDay = Int32.MaxValue; foreach (var item in rawData) { var day = item.Key; if (day.EuroDayOfWeek() < prevWeekDay) { weekNum++; var weekRates = new WeekRates(); result.Add(weekRates); } prevWeekDay = day.EuroDayOfWeek(); var week = result[weekNum]; week.Days.Add(day.Day); foreach (var rate in item) { if (!week.CurrencyRates.TryGetValue(rate.CurrencyCode, out var currencyData)) { currencyData = new WeekRateData(); currencyData.Max = rate.FinalRate; currencyData.Min = rate.FinalRate; week.CurrencyRates[rate.CurrencyCode] = currencyData; } currencyData.Max = rate.FinalRate > currencyData.Max ? rate.FinalRate : currencyData.Max; currencyData.Min = rate.FinalRate < currencyData.Min ? rate.FinalRate : currencyData.Min; //currencyData.ad currencyData.AddRates(rate.FinalRate); //currencyData.RatesValues.Add(rate.FinalRate); } } }