public TournamentOrganizationRegistration AddRegistration(Guid tournamentId, Guid organizationId, Guid billedOrganizationId, int teamsWanted, int adjudicatorsWanted, String notes, User user) { if (tournamentId != Guid.Empty && organizationId != Guid.Empty && billedOrganizationId != Guid.Empty && (teamsWanted > 0 || adjudicatorsWanted > 0)) { TournamentOrganizationRegistration registration = new TournamentOrganizationRegistration { TournamentId = tournamentId, OrganizationId = organizationId, BilledOrganizationId = billedOrganizationId, TeamsWanted = teamsWanted, AdjudicatorsWanted = adjudicatorsWanted, TeamsGranted = 0, TeamsPaid = 0, AdjudicatorsGranted = 0, AdjudicatorsPaid = 0, LockAutoAssign = false, OrganizationStatusDraft = true, Notes = notes }; registration.UpdateTrackingData(user); SetBookingCode(registration); unitOfWork.GetRepository<TournamentOrganizationRegistration>().Insert(registration); unitOfWork.Save(); return registration; } return null; }
public ActionResult Register(TournamentOrganizationRegistration registration) { var ident = HttpContext.User.Identity as ClaimsIdentity; var organizationId = userManager.FindById(ident.GetUserId()).CurrentOrganizationId; var currentOrganizationId = (Guid)(organizationId == null ? Guid.Empty : organizationId); if (currentOrganizationId == Guid.Empty) { return RedirectToAction("Select", "Organization", new { returnUrl = HttpContext.Request.RawUrl }); } var organization = unitOfWork.GetRepository<Organization>().GetById(registration.OrganizationId); var user = unitOfWork.GetRepository<User>().GetById(ident.GetUserId()); //if (user == null) { // return RedirectToAction("Login", "User"); //} if (userManager.HasOrganizationRole(user.Id, currentOrganizationId, OrganizationRole.Delegate)) { var tournament = unitOfWork.GetRepository<Tournament>().GetById(registration.TournamentId); if (tournament != null && IsOpenForRegistration(tournament)) { // check if university is required if (tournament.UniversityRequired && !IsUniversity(organization)) { return View("UniversityRequired"); } // check number of teams and adjudicators if (registration.TeamsWanted > tournament.TeamCap) { ModelState.AddModelError("", Resources.TournamentRegistration.Strings.ErrorTeamsWantedExceedTeamCap); } if (registration.AdjudicatorsWanted > tournament.AdjudicatorCap) { ModelState.AddModelError("", Resources.TournamentRegistration.Strings.ErrorAdjWantedExceedAdjCap); } if (tournament.AdjucatorSubtract != null && registration.AdjudicatorsWanted < registration.TeamsWanted - (int)tournament.AdjucatorSubtract) { ModelState.AddModelError("", Resources.TournamentRegistration.Strings.ErrorAdjWantedBelowPolicy); } // check if organization can be billed if (organization.Id != registration.BilledOrganizationId && organization.LinkedOrganizations.FirstOrDefault( o => o.Id == registration.BilledOrganizationId) == null) { ModelState.AddModelError("BilledOrganizationId", Resources.TournamentRegistration.Strings.ErrorOrganizationCannotBeBilled); } // Everything okay, so register if (ModelState.IsValid) { try { var registrationSaved = unitOfWork.GetRepository<TournamentOrganizationRegistration>().GetById(registration.TournamentId, registration.OrganizationId); // if old registration found, update it if (registrationSaved != null) { registrationSaved.BilledOrganizationId = registration.BilledOrganizationId; registrationSaved.TeamsWanted = registration.TeamsWanted; registrationSaved.AdjudicatorsWanted = registration.AdjudicatorsWanted; registrationSaved.Notes = registration.Notes; registrationSaved.UpdateTrackingData(user); } // otherwise create a new one else { registration.TeamsGranted = 0; registration.TeamsPaid = 0; registration.AdjudicatorsGranted = 0; registration.AdjudicatorsPaid = 0; registration.UpdateTrackingData(user); unitOfWork.GetRepository<TournamentOrganizationRegistration>().Insert(registration); } unitOfWork.Save(); return RedirectToAction("Display", new { organizationId = registration.OrganizationId, tournamentId = registration.TournamentId }); } catch (DataException) { ModelState.AddModelError("", Resources.Strings.ErrorSaveChanges); } } else { registration.OrganizationId = currentOrganizationId; registration.Organization = unitOfWork.GetRepository<Organization>().GetById(currentOrganizationId); // On errors, display registration form again return View(registration); } } else { // tournament not found or not open for registration return RedirectToAction("Index"); } } // if user is not authorized, redirect to home return RedirectToAction("Home", "Index"); }