public async Task <IActionResult> VoteTeams() { var participantVoteViewModel = new ParticipantVoteViewModel { Teams = await GetTeamsSelectList() }; return(View(participantVoteViewModel)); }
public async Task <IActionResult> VoteTeams(ParticipantVoteViewModel voteViewModel) { var editSetting = await _context.Settings.FirstOrDefaultAsync(x => x.Name == Setting.Voting); var allowVoting = editSetting?.Value == "1"; if (!allowVoting) { ModelState.AddModelError("", $"Voting Disabled: Bear with us! Once judeges submit their scores, we will open this up to vote for teams of your choice."); voteViewModel.Teams = await GetTeamsSelectList(); return(View(voteViewModel)); } if (ModelState.IsValid) { // Validation - dropdown uniqueness var votes = new List <string> { voteViewModel.OrderOneTeam, voteViewModel.OrderTwoTeam, voteViewModel.OrderThreeTeam, voteViewModel.OrderFourTeam, voteViewModel.OrderFiveTeam }; if (votes.Distinct().Count() != votes.Count) { ModelState.AddModelError("", $"You can't make same team take multiple ranks, or do you? Your top five selections must be unique."); voteViewModel.Teams = await GetTeamsSelectList(); return(View(voteViewModel)); } var me = User.FindFirst(ClaimTypes.NameIdentifier).Value; //Validation - Has user already voted? var record = await _context.ParticipantVotes.Where(x => x.UserId.Equals(me) && x.VotedOn.Value.Year == DateTime.Now.Year).ToListAsync(); if (record.Any()) { return(RedirectToAction(nameof(HomeController.Error), "Home", new { errorCode = "Already Voted", message = $"Don't be so greedy :), You have aleady voted for people's choice award. Thanks!" })); } var participantVote = new ParticipantVote(voteViewModel) { UserId = me, VotedOn = DateTime.Now }; _context.Add(participantVote); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(PeoplesChoiceController.Thanks))); } //Something went wrong, keep user on same page return(View(voteViewModel)); }