public ActionResult CreateTeam(vmRegistration_CreateTeam model)
        {
            if (!Utilities.IsValidCart())
                return RedirectToAction("Index", "home");

            ViewBag.showTeamCode = "false";
            if (ModelState.IsValid)
            {

                var reg = (Registration)SessionManager.CurrentCart.ActionItems[model.ItemId].ActionObject;

                if (model.RegistrationType.ToLower() == "team")
                {
                    switch (model.TeamType.ToLower())
                    {
                        case "existing":
                            JoinExistingTeam(model, reg);
                            break;

                        case "new":
                            CreateNewTeam(model, reg);
                            break;
                    }
                }
                else
                {
                    reg.Team = null;
                    reg.TeamId = null;
                }

                if (ModelState.IsValid)
                    return RedirectToAction("RegistrationDetails", new { itemId = model.ItemId });

            }

            model.EventOverview = _service.GetEventOverviewById(model.EventId);
            return View(model);
        }
        public ActionResult CreateTeam(Guid itemId)
        {
            if (!Utilities.IsValidCart())
                return RedirectToAction("Index", "home");

            ViewBag.showTeamCode = "false";
            var reg = (Registration)SessionManager.CurrentCart.ActionItems[itemId].ActionObject;
            var wave = _service.GetEventWaveById(reg.EventWaveId);

            var vm = new vmRegistration_CreateTeam
                {
                    ItemId = itemId,
                    EventId = wave.EventDate.EventId,
                    EventOverview = _service.GetEventOverviewById(wave.EventDate.EventId)
                };

            if (reg.TeamId.HasValue)
            {
                vm.RegistrationType = "team";
                vm.TeamType = "existing";
                vm.TeamCode = _service.GetTeamById(reg.TeamId.Value).Code;
            }
            else if (reg.Team != null)
            {
                vm.RegistrationType = "team";
                vm.TeamType = "new";
                vm.TeamName = reg.Team.Name;
            }
            else
            {
                vm.RegistrationType = "individual";
                vm.TeamType = "new";
            }

            return View(vm);
        }
        private void JoinExistingTeam(vmRegistration_CreateTeam model, Registration reg)
        {
            if (string.IsNullOrEmpty(model.TeamCode))
            {
                ModelState.AddModelError("TeamCode", "Team Code is Required.");
                ViewBag.showTeamCode = "true";
                return;
            }

            var existingTeam = _service.GetTeamByCode(model.EventId, model.TeamCode);

            if (existingTeam != null)
                reg.TeamId = existingTeam.TeamId;
            else
                ModelState.AddModelError("TeamCode", "There is no team using this code for this event.");
        }
        private void CreateNewTeam(vmRegistration_CreateTeam model, Registration reg)
        {
            if (string.IsNullOrEmpty(model.TeamName))
            {
                ModelState.AddModelError("TeamName", "Team Name is Required");
                return;
            }

            Match match = Regex.Match(model.TeamName, @"([a-zA-Z].*?){3}", RegexOptions.IgnoreCase);

            if (!match.Success)
            {
                ModelState.AddModelError("TeamName", "Team Name must contain at least 3 letters.");
                return;
            }

            Team newTeam = new Team {EventId = model.EventId, Name = model.TeamName, CreatorID = CurrentUser.UserId};

            ServiceResult tempTeamResult = _service.GenerateTempTeam(newTeam);

            if (!tempTeamResult.Success)
                Utilities.AddModelStateErrors(ModelState, tempTeamResult.GetServiceErrors());
            else
                reg.Team = newTeam;
        }