Example #1
0
        public async Task <IActionResult> VoteTeams()
        {
            var participantVoteViewModel = new ParticipantVoteViewModel {
                Teams = await GetTeamsSelectList()
            };

            return(View(participantVoteViewModel));
        }
Example #2
0
        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));
        }