public IActionResult Index(string filter = "upcoming") { IEnumerable <EventRegistration> singerRegistrations = new List <EventRegistration>(); VoiceGroup?voice = VoiceGroup.S1; int? singerId = 0; var user = _userMapper.FindBy(u => u.UserName == User.Identity.Name).FirstOrDefault(); if (user != null && user.SingerId != null) { singerRegistrations = _eventRegistrationMapper.FindBy(er => er.SingerId == user.SingerId).ToList(); voice = _singerMapper.Find(user.SingerId.Value).VoiceGroup; singerId = user.SingerId; } IQueryable <Event> events = new List <Event>().AsQueryable(); if (filter == "upcoming") { events = _eventMapper.FindBy(e => e.To >= DateTime.Now).OrderBy(e => e.From); } else if (filter == "all") { events = _eventMapper.FindAll().OrderByDescending(e => e.From); } var eventIds = events.Select(e => e.Id).ToList(); var activeSingers = _singerMapper.FindBy(s => s.IsActive == true).Count(); var allEventRegistrations = _eventRegistrationMapper.FindBy(er => eventIds.Contains(er.EventId.Value)).ToList(); var model = events.ToList().Select(e => { var answeredYes = allEventRegistrations.Where(er => er.EventId.Value == e.Id && er.Answer == true).Count(); var answeredNo = allEventRegistrations.Where(er => er.EventId.Value == e.Id && er.Answer == false).Count(); var registrationInfo = singerRegistrations.FirstOrDefault(r => r.EventId == e.Id); if (registrationInfo == null) { return(new SingerEventListViewModel(e, new EventRegistrationViewModel(voice, e.Id, singerId, e.EndOfRegistration), activeSingers, answeredYes, answeredNo)); } else { return(new SingerEventListViewModel(e, new EventRegistrationViewModel(registrationInfo, voice, e.EndOfRegistration), activeSingers, answeredYes, answeredNo)); } }).OrderBy(ri => ri.From).AsEnumerable(); return(View(model)); }
public IActionResult Sheets(int?id) { if (id == null) { return(NotFound()); } var song = _songMapper.Find(id.Value); var activeSingers = _singerMapper.FindBy(s => s.IsActive); var songSheetsInfo = _sheetsInfoMapper.FindBy(si => si.SongId == song.Id); var hasCopyInfos = songSheetsInfo.Where(info => info.Status == SheetInfoType.HasCopy).Select(s => s.SingerId.Value).ToList(); var orderedInfos = songSheetsInfo.Where(info => info.Status == SheetInfoType.Ordered).Select(s => s.SingerId.Value).ToList(); var singersIdsWithoutSheetsInfo = activeSingers.Select(s => s.Id).ToList().Except(hasCopyInfos).Except(orderedInfos); var singersWhoHave = activeSingers.Where(s => hasCopyInfos.Contains(s.Id)).Select(s => new SingerInfoViewModel(s.Id, s.FirstName, s.Surname, s.VoiceGroup, SheetInfoType.HasCopy)).OrderBy(s => s.Voice).ThenBy(s => s.Surname).ToList(); var singersWhoOrdered = activeSingers.Where(s => orderedInfos.Contains(s.Id)).Select(s => new SingerInfoViewModel(s.Id, s.FirstName, s.Surname, s.VoiceGroup, SheetInfoType.Ordered)).OrderBy(s => s.Voice).ThenBy(s => s.Surname).ToList(); var singersWhoDontHave = activeSingers.Where(s => singersIdsWithoutSheetsInfo.Contains(s.Id)).Select(s => new SingerInfoViewModel(s.Id, s.FirstName, s.Surname, s.VoiceGroup, SheetInfoType.NoCopy)).OrderBy(s => s.Voice).ThenBy(s => s.Surname).ToList(); return(View(new SheetsStatusViewModel(song, singersWhoOrdered, singersWhoHave, singersWhoDontHave))); }