예제 #1
0
        public async Task <IActionResult> Create([Bind("Id,InnovationScore,UsefulnessScore,QualityScore,CompanyValueScore,PresentationScore,Team")] JudgeScoreViewModel teamScoreViewModel)
        {
            if (ModelState.IsValid)
            {
                var me = User.FindFirst(ClaimTypes.NameIdentifier).Value;
                //If user already inserted score for this team, don't reinsert inform them
                var record = await _context.JudgeScores.Where(x => x.Team.TeamCode == teamScoreViewModel.Team && x.KolpiUserId == me).ToListAsync();

                var team = await _context.Teams.FirstAsync(x => x.TeamCode.Equals(teamScoreViewModel.Team));

                if (record.Any())
                {
                    return(RedirectToAction(nameof(HomeController.Error), "Home", new { errorCode = "Duplicate Record", message = $"You aleady evaluated team: {team.TeamName}. Please update their score if you wish to." }));
                }

                var teamScore = new JudgeScore(teamScoreViewModel)
                {
                    KolpiUserId = me,
                    Team        = team
                };

                _context.Add(teamScore);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }

            //Something went wrong, keep user on same page
            return(View(teamScoreViewModel));
        }
예제 #2
0
        public async Task <IActionResult> Create([Bind("Name,Value")] Settings settings)
        {
            if (ModelState.IsValid)
            {
                settings.DateCreated = DateTime.Now;
                settings.CreatedBy   = User.FindFirst(ClaimTypes.NameIdentifier).Value;

                _context.Add(settings);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(settings));
        }
예제 #3
0
        public async Task <IActionResult> Create([Bind("TeamName,Avatar,Theme,ProblemStatement,ITRequirements,Location,OtherRequirements,Participants")] TeamViewModel teamViewModel)
        {
            //if (teamViewModel.Location.Equals("Kathmandu", StringComparison.InvariantCultureIgnoreCase))
            //    return RedirectToAction("Error", "Home", new ErrorViewModel { ErrorCode = "Registration", Message = "Team registration expired for Nepal center." });

            if (ModelState.IsValid)
            {
                if (!ParticipantsEnteredCorrectly(teamViewModel.Participants))
                {
                    ViewData["locations"] = FetchEventLocationSelectItemList();
                    return(View(teamViewModel));
                }
                //Raw participants in text are good to deserialize
                var participantsDtos = TeamViewModel.DeserializeParticipants(teamViewModel.Participants);

                List <Participant> partcipantsOnDb = _context.Participants
                                                     .Where(x => x.Team.CreatedOn.Year == DateTime.Now.Year).ToList();

                //partcipantsOnDb = _context.Teams
                //    .Include(x => x.Participants)
                //    .Where(x => IsCurrentYear(x.CreatedOn))
                //    .SelectMany(x => x.Participants).ToList();



                var alreadyTakenParticipants = partcipantsOnDb.Intersect(participantsDtos, ComplexTypeComparer <Participant> .Create(x => x.Inumber));
                if (alreadyTakenParticipants.Any())
                {
                    ModelState.AddModelError("Participants", $"Participants submitted are already involved with other teams: {string.Join(", ", alreadyTakenParticipants.Select(x => x.Name))}. Note: individual participants are distinguished by their INumber.");
                    ViewData["locations"] = FetchEventLocationSelectItemList();
                    return(View(teamViewModel));
                }

                //Autogenerate properties at creation time
                teamViewModel.CreatedBy = User.FindFirst(ClaimTypes.Name)?.Value ?? "";
                teamViewModel.CreatedOn = DateTime.Now;
                teamViewModel.TeamCode  = Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", "");


                _context.Add(new Team(teamViewModel, participantsDtos));
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(teamViewModel));
        }
예제 #4
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));
        }
예제 #5
0
        public async Task <IActionResult> CreateSurveyThread(SurveyThreadViewModel surveyViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(surveyViewModel));
            }

            var buffer = new byte[5];

            new Random().NextBytes(buffer);
            var hash = string.Join("", buffer.Select(b => b.ToString("X2")));

            surveyViewModel.ThreadHash  = hash;
            surveyViewModel.AbsoluteUrl = $"{Request.Scheme}://{Request.Host.Value}/feedback/{hash}";
            surveyViewModel.UserId      = User.FindFirst(ClaimTypes.NameIdentifier).Value;

            var survey = new SurveyThread(surveyViewModel);

            _context.Add(survey);
            await _context.SaveChangesAsync();

            return(RedirectToAction(nameof(AdminIndex)));
        }