public void UpdateContestant(ContestantVm model) { var context = DataEntitiesProvider.Provide(); var c = context.Contestants.SingleOrDefault(x => x.Mind_Sport_ID == model.ContestantId); if (c == null) { throw new ArgumentOutOfRangeException("Contestant ID " + model.ContestantId + " not recognised"); } if (!context.Nationalities.Any(x => x.Name == model.Nationality)) { throw new ArgumentOutOfRangeException("Nationality " + model.Nationality + " not recognised"); } c.Title = model.Title; c.Firstname = model.Firstname; c.Initials = model.Initials; c.Lastname = model.Lastname; c.DateofBirth = model.DateOfBirth; c.Male = model.IsMale; c.OnlineNicknames = model.OnlineNicknames; c.BgaNickname = model.BgaNickname; c.Nationality = model.Nationality; c.Notes = model.Notes; context.SaveChanges(); }
public ContestantVm GetContestant(int id) { var context = DataEntitiesProvider.Provide(); var vm = new ContestantVm(); var contestant = context.Contestants.Single(x => x.Mind_Sport_ID == id); var olympiad = context.Olympiad_Infoes.First(x => x.Current); vm.ContestantId = id; vm.Title = contestant.Title; vm.Firstname = contestant.Firstname; vm.Initials = contestant.Initials; vm.Lastname = contestant.Lastname; vm.FullName = contestant.FullName(); vm.DateOfBirth = contestant.DateofBirth; vm.IsMale = contestant.Male; vm.OnlineNicknames = contestant.OnlineNicknames; vm.BgaNickname = contestant.BgaNickname; vm.Nationality = contestant.Nationality; vm.Nationalities = context.Nationalities.Select(x => x.Name).OrderBy(x => x); vm.Notes = contestant.Notes; vm.PointsType = olympiad.Ruleset; var entries = contestant.Entrants .Join(context.Events, e => e.EventId, g => g.EIN, (e, g) => new { e = e, g = g }) .Where(x => x.e.OlympiadId == olympiad.Id && x.g.OlympiadId == olympiad.Id) .OrderBy(x => x.g.Code).ToList(); vm.Events = entries.Select(e => new ContestantVm.EventVm() { EventId = e.e.EventId.Value, Absent = e.e.Absent, Code = e.g.Code, Name = e.g.Mind_Sport, Fee = e.e.Fee, //StandardFee = (e.g.Entry_Fee != null) ? fees[e.g.Entry_Fee].Value : 0, //IncludedInMaxFee = (e.g.incMaxFee.HasValue && e.g.incMaxFee.Value), //IsEvent = (e.g.Number > 0), Medal = e.e.Medal ?? "", JuniorMedal = e.e.JuniorMedal ?? "", Partner = e.e.Partner ?? "", Penta = e.e.Penta_Score, Rank = e.e.Rank.HasValue ? e.e.Rank.Value : 0, // Receipt = e.e.Receipt.Value, // TieBreak = e.e.Tie_break ?? "", //Date = e.e.Event.Start }).OrderBy(x => x.Code); return(vm); }
public ContestantVm GetModel(int id) { var context = DataEntitiesProvider.Provide(); var currentOlympiad = context.Olympiad_Infoes.First(x => x.Current); var contestant = context.Contestants.FirstOrDefault(x => x.Mind_Sport_ID == id); if (contestant == null) { throw new ArgumentOutOfRangeException($"No contestant with id {id}"); } var medalEvents1 = context.Entrants.Where(x => x.Mind_Sport_ID == id && (x.Medal != null || x.JuniorMedal != null) && x.OlympiadId != null) .Select(x => new ContestantVm.MedalVm { Year = x.Event.Olympiad_Info.YearOf.Value, Code = x.Event.Code, Name = x.Event.Mind_Sport, Medal = x.Medal ?? x.JuniorMedal }) .OrderByDescending(x => x.Year); var medalEvents = medalEvents1.ToList(); var gmCodes = new List <string>(); var imCodes = new List <string>(); var cmCodes = new List <string>(); foreach (var code in medalEvents.Select(x => x.Code).Distinct()) { var name = medalEvents.First(x => x.Code == code).Name; var golds = medalEvents.Count(x => x.Code == code && x.Medal == "Gold"); var silvers = medalEvents.Count(x => x.Code == code && x.Medal == "Silver"); var bronzes = medalEvents.Count(x => x.Code == code && x.Medal == "Bronze"); if (golds >= 2 || (golds == 1 && silvers >= 2)) { gmCodes.Add(name); } else if ((golds == 1 && silvers + bronzes > 0) || silvers >= 2 || (silvers == 1 && bronzes >= 2)) { imCodes.Add(name); } else if ((silvers == 1 && bronzes > 0) || bronzes >= 2) { cmCodes.Add(name); } } var events = context.Entrants .Where(x => x.Mind_Sport_ID == id && x.OlympiadId == currentOlympiad.Id && !x.Absent) .Select(x => new ContestantVm.EventVm() { Code = x.Event.Code, Name = x.Event.Mind_Sport, Rank = x.Rank, Medal = x.Medal, JuniorMedal = x.JuniorMedal, Partner = x.Partner, Penta = x.Penta_Score }) .OrderBy(evt => evt.Name); var model = new ContestantVm { Id = id, Name = string.Format("{0} {1}", contestant.Firstname, contestant.Lastname), Nationality = contestant.Nationality ?? "default", Medals = medalEvents, Grandmasters = gmCodes, InternationalMasters = imCodes, CandidateMasters = cmCodes, Events = events, PointsType = currentOlympiad.Ruleset }; return(model); }