public IActionResult JoinCompetition(string eventID, string competitionID) { ViewData["ReturnUrl"] = "/Event/ViewEvent?eventID=" + eventID; var competition = QueryController.GetCompetitionFromId(QueryController.GetEventFromId(_context, eventID), competitionID); if (competition != null) { JoinCompetitionViewModel model = new JoinCompetitionViewModel { Competition = competition }; ViewData["eventID"] = eventID; ViewData["competitionID"] = competitionID; return(View(model)); } ViewData["error"] = "Invalid event or competition."; return(View("Error")); }
public async Task <IActionResult> JoinCompetition(string eventID, string competitionID, JoinCompetitionViewModel model, string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; ViewData["eventID"] = eventID; ViewData["competitionID"] = competitionID; Event evnt = QueryController.GetEventFromId(_context, eventID); Competition comp = evnt.Competitions.Where(o => o.id == competitionID).First(); ApplicationUser user = QueryController.GetCurrentUserAsync(_userManager, User); model.Competition = comp; if (ModelState.IsValid) //&& QueryController.IsUserParticipatingInCompetition(_context,user.details.id,competitionID) > 0) { //If model is valid and the user isn't already participating int participants = comp.getParticipants(); Team team = null; if (model.JoinIndividual) { if (model.TeamName == "" || model.TeamName == null) { model.TeamName = user.details.FirstName + " " + user.details.LastName + "'s team"; } if (+1 <= comp.EntryCapacity) { //If adding one participant is within capacity add team team = new Team { ManagerID = user.Id, TeamName = model.TeamName, TeamMembers = null, ManagerParticipation = true }; } else { TempData["modal"] = "This competition is unfortunately full."; return(View(model)); } } else if (model.TeamMembers != null) { int teamSize = model.TeamMembers.Length + (model.ManagerParticipation ? 1 : 0); //Firstly check if Team Size is between the competitions Min and Max team sizes otherwise let user know if (teamSize >= model.Competition.TeamSizeMin && teamSize <= model.Competition.TeamSizeMax) { if (model.TeamName == "" || model.TeamName == null) { model.TeamName = user.details.FirstName + " " + user.details.LastName + "'s team"; } if (model.ManagerParticipation) { //Manager competing if (participants + model.TeamMembers.Length + 1 <= comp.EntryCapacity) { //Competition not full List <TeamMember> members = new List <TeamMember>(); foreach (String s in model.TeamMembers) { members.Add(new TeamMember { MemberName = s }); } team = new Team { ManagerID = user.Id, TeamName = model.TeamName, TeamMembers = members, ManagerParticipation = model.ManagerParticipation }; } else { //Competition full TempData["modal"] = "This competition only has room for " + (comp.EntryCapacity - participants) + "participants. You tried to add: " + (model.TeamMembers.Length + 1); return(View(model)); } } else { //Manager not competing if (participants + model.TeamMembers.Length + 1 <= comp.EntryCapacity) { //Competition not full List <TeamMember> members = new List <TeamMember>(); foreach (String s in model.TeamMembers) { members.Add(new TeamMember { MemberName = s }); } team = new Team { ManagerID = user.Id, TeamName = model.TeamName, TeamMembers = members, ManagerParticipation = model.ManagerParticipation }; } else { //Competition full TempData["modal"] = "This competition only has room for " + (comp.EntryCapacity - participants) + "participants.You tried to add: " + model.TeamMembers.Length; return(View(model)); } } //team will never be null here but check anyway if (team != null) { comp.Teams.Add(team); await _context.SaveChangesAsync(); TempData["modal"] = "Successfully joined competition."; } else { TempData["modal"] = "Unknown error occured please try again."; } return(RedirectToLocal(returnUrl)); } else { ModelState.AddModelError("TeamMembers", "Invalid amount of team members added. Please review competition min and max team sizes"); return(View(model)); } } if (team != null) { comp.Teams.Add(team); await _context.SaveChangesAsync(); TempData["modal"] = "Successfully joined competition."; } else { //They entered no team members ModelState.AddModelError("TeamMembers", "Invalid amount of team members added. Please review competition min and max team sizes"); return(View(model)); } return(RedirectToLocal(returnUrl)); } else { return(View(model)); } }