public ChampionshipViewModel() { Filter = new ChampionshipItemFilter(); YearItems = new List <string>(); foreach (var item in Directory.GetFiles(FolderFactory.ChampionshipFolder)) { var fi = new FileInfo(item); YearItems.Add(fi.Name.Replace(".xml", "")); } YearItems = YearItems.OrderByDescending(o => o).ToList(); MonthItems = new List <Months> { new Months { MonthId = 0, MonthName = "alle" } }; foreach (var indx in Functions.GetMonths()) { var monthName = new DateTime(DateTime.Now.Year, indx, 1).ToString("MMMM", CultureInfo.CreateSpecificCulture("nl")); MonthItems.Add(new Months { MonthId = indx, MonthName = monthName }); } ShowMonthsInGrid(); TopItems = new List <int> { 1, 2, 3, 4, 5 }; Items = GetChampionshipItems(Filter); EnableButtons(true); }
private List <ChampionshipItem> GetChampionshipItems(ChampionshipItemFilter filter) { ShowMonthsInGrid(); var list = XmlFactory.ReadXml <ChampionshipItem>(FolderFactory.ChampionshipFolder, !string.IsNullOrEmpty(filter?.Year) ? filter.Year : Functions.GetCurrentChampionship()); list = filter != null && filter.Month > 0 ? list.Where(w => w.GameMonth.Equals(filter.Month)).OrderByDescending(o => o.Score).ToList() : list.OrderByDescending(o => o.Score).ToList(); var groupList = list.GroupBy(g => new { g.ListMemberId, g.GameId }).ToList(); var newList = new List <ChampionshipItem>(); int.TryParse(ConfigurationManager.AppSettings["ChampionshipStartMonth"], out var startMonth); int.TryParse(ConfigurationManager.AppSettings["ChampionshipEndMonth"], out var endMonth); foreach (var item in groupList) { ChampionshipItem first = null; foreach (var championshipItem in item) { first = championshipItem; break; } if (first != null) { newList.Add(new ChampionshipItem { NumberOfJuryMembers = first.NumberOfJuryMembers, MaxPoints = first.MaxPoints, GameMonth = filter != null && filter.Month > 0 ? first.GameMonth : 0, MemberId = item.FirstOrDefault()?.MemberId, Score = filter != null && filter.Top == 0 ? item.Sum(s => s.Score) : item.Take(filter?.Top ?? 2).Sum(s => s.Score), ScorePercentage = (filter != null && filter.Top == 0 ? item.Sum(s => s.Score) : item.Take(filter?.Top ?? 2).Sum(s => s.Score)) / (double)((first.NumberOfJuryMembers - (first.Deviation && first.NumberOfJuryMembers > 2 && first.Deviation ? 2 : 0)) * first.MaxPoints * (filter?.Top ?? 2)) * 100 * (filter?.Top ?? 2) }); } if (filter != null && filter.Month.Equals(0)) { foreach (var it in newList) { var indx = 1; for (var i = startMonth; i <= (startMonth > endMonth ? 12 + endMonth : endMonth); i++) { var type = it.GetType(); var property = type.GetProperties().FirstOrDefault(w => w.Name.Contains(indx.ToString())); property?.SetValue(it, Math.Round(list.Where(w => w.GameMonth.Equals(i > 12 ? i - 12 : i) && w.MemberId.Equals(it.MemberId)).Take(filter.Top).Sum(s => s.Score * 1.0 / ((s.NumberOfJuryMembers - (s.NumberOfJuryMembers > 2 && s.Deviation ? 2 : 0)) * s.MaxPoints * filter.Top)) * 100.0 * filter.Top, 2)); indx++; } } } } var memberTotals = newList.GroupBy(g => IsMemberIdNumeric ? g.MemberId.PadLeft(5, '0') : g.MemberId).ToList(); var groupMemberItems = new List <ChampionshipItem>(); foreach (var item in memberTotals) { var members = XmlFactory.ReadXml <MemberItem>(FolderFactory.MemberFolder, FolderTypes.Members.ToString()); var member = members.FirstOrDefault(w => w.ListMemberId.Equals(item.FirstOrDefault()?.ListMemberId)); ChampionshipItem first = null; foreach (var championshipItem in item) { first = championshipItem; break; } groupMemberItems.Add(new ChampionshipItem { GameMonth = first?.GameMonth ?? 0, MemberId = item.FirstOrDefault()?.MemberId, FirstName = member != null ? member.FirstName : "John", LastName = member != null ? member.LastName : "Doe", Group = member != null ? member.Group : "", Score = item.Sum(s => s.Score), Score1 = first?.Score1, Score2 = first?.Score2, Score3 = first?.Score3, Score4 = first?.Score4, Score5 = first?.Score5, Score6 = first?.Score6, Score7 = first?.Score7, Score8 = first?.Score8, Score9 = first?.Score9, Score10 = first?.Score10, Score11 = first?.Score11, Score12 = first?.Score12, ScorePercentage = item.Sum(s => s.ScorePercentage) / (filter?.Top ?? 2) }); } if (filter != null) { if (!string.IsNullOrEmpty(filter.FirstName)) { groupMemberItems = groupMemberItems.Where(w => w.FirstName.ToUpper().Contains(filter.FirstName.ToUpper())).ToList(); } if (!string.IsNullOrEmpty(filter.LastName)) { groupMemberItems = groupMemberItems.Where(w => w.LastName.ToUpper().Contains(filter.LastName.ToUpper())).ToList(); } if (!string.IsNullOrEmpty(filter.Group)) { groupMemberItems = groupMemberItems.Where(w => !string.IsNullOrEmpty(w.Group) && w.Group.ToUpper().Contains(filter.Group.ToUpper())).ToList(); } } groupMemberItems = groupMemberItems.OrderByDescending(o => o.ScorePercentage).ThenBy(o => o.LastName).ToList(); NumberOfRegistrations = $"{groupMemberItems.Count.ToString(CultureInfo.InvariantCulture)} registraties"; return(groupMemberItems); }