Example #1
0
        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);
        }
Example #2
0
        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);
                }
            }
        }