Exemple #1
0
        public async Task <IActionResult> SelectVenue([FromForm][Bind("TeamId, VenueId")] TeamVenueSelectModel model, CancellationToken cancellationToken)
        {
            // model binding is not case-sensitive

            var teamEntity = await
                             _appDb.TeamRepository.GetTeamEntityAsync(new PredicateExpression(TeamFields.Id == model.TeamId),
                                                                      cancellationToken);

            if (teamEntity == null || !model.VenueId.HasValue ||
                !await _appDb.VenueRepository.IsValidVenueIdAsync(model.VenueId, cancellationToken))
            {
                return(NotFound());
            }

            if (!(await _authorizationService.AuthorizeAsync(User, new TeamEntity(teamEntity.Id),
                                                             Authorization.TeamOperations.EditTeam)).Succeeded)
            {
                return(JsonAjaxRedirectForModal(Url.Action(nameof(Error.AccessDenied), nameof(Error),
                                                           new { ReturnUrl = Url.Action(nameof(MyTeam), nameof(Team), new { Organization = _siteContext.UrlSegmentValue, model.TeamId }) })));
            }

            model.TournamentId = _siteContext.TeamTournamentId;

            if (!ModelState.IsValid)
            {
                return(PartialView(ViewNames.Team._SelectVenueModalPartial, model));
            }

            TempData.Put <MyTeamMessageModel.MyTeamMessage>(nameof(MyTeamMessageModel.MyTeamMessage), new MyTeamMessageModel.MyTeamMessage {
                AlertType = SiteAlertTagHelper.AlertType.Danger, MessageId = MyTeamMessageModel.MessageId.TeamDataFailure
            });
            try
            {
                teamEntity.VenueId = model.VenueId;
                if (await _appDb.GenericRepository.SaveEntityAsync(teamEntity, false, false, cancellationToken))
                {
                    TempData.Put <MyTeamMessageModel.MyTeamMessage>(nameof(MyTeamMessageModel.MyTeamMessage), new MyTeamMessageModel.MyTeamMessage {
                        AlertType = SiteAlertTagHelper.AlertType.Success, MessageId = MyTeamMessageModel.MessageId.VenueCreateSuccess
                    });
                }
                else
                {
                    throw new Exception("Failed to save team entity");
                }
            }
            catch (Exception e)
            {
                _logger.LogCritical(e, "Failed to save selected venue for team id {0}, venue id {1}", model.TeamId, model.VenueId);
            }

            return(JsonAjaxRedirectForModal(Url.Action(nameof(MyTeam), nameof(Team), new { Organization = _siteContext.UrlSegmentValue, model.TeamId })));
        }
Exemple #2
0
        public async Task <IActionResult> SelectVenue([FromForm][Bind("TeamId, VenueId")] TeamVenueSelectModel selectVenueModel, CancellationToken cancellationToken)
        {
            // model binding is not case-sensitive
            // Note: TeamId is not taken from TeamVenueSelectModel, but from ApplicationSessionModel

            var sessionModel = await GetModelFromSession(cancellationToken);

            if (!sessionModel.IsFromSession)
            {
                return(RedirectToAction(nameof(SelectTeam), new { Organization = _tenantContext.SiteContext.UrlSegmentValue }));
            }
            ViewData["TournamentName"] = sessionModel.TournamentName;

            if (!sessionModel.Team.IsNew)
            {
                var teamEntity = await _appDb.TeamRepository.GetTeamEntityAsync(
                    new PredicateExpression(TeamFields.Id == sessionModel.Team.Id),
                    cancellationToken);

                if (teamEntity == null)
                {
                    return(RedirectToAction(nameof(SelectTeam), new { Organization = _tenantContext.SiteContext.UrlSegmentValue }));
                }
            }

            if (selectVenueModel.VenueId.HasValue && !await _appDb.VenueRepository.IsValidVenueIdAsync(selectVenueModel.VenueId, cancellationToken))
            {
                return(RedirectToAction(nameof(SelectVenue), new { Organization = _tenantContext.SiteContext.UrlSegmentValue }));
            }

            selectVenueModel.TournamentId = sessionModel.PreviousTournamentId ?? _tenantContext.TournamentContext.ApplicationTournamentId;

            if (!ModelState.IsValid)
            {
                return(View(ViewNames.TeamApplication.SelectVenue, selectVenueModel));
            }

            sessionModel.Venue.IsNew = !selectVenueModel.VenueId.HasValue;
            sessionModel.Venue.Id    = selectVenueModel.VenueId ?? 0;

            SaveModelToSession(sessionModel);

            return(RedirectToAction(nameof(EditVenue), new { Organization = _tenantContext.SiteContext.UrlSegmentValue }));
        }