public async Task <IActionResult> Edit([FromForm] VenueEditModel model, CancellationToken cancellationToken) { var venueEntity = (await _appDb.VenueRepository.GetVenuesAsync( new PredicateExpression(VenueFields.Id == model.Venue?.Id), cancellationToken)).FirstOrDefault(); if (venueEntity == null) { return(NotFound()); } var venueTeams = await _appDb.VenueRepository.GetVenueTeamRowsAsync(new PredicateExpression(VenueTeamFields.VenueId == venueEntity.Id), cancellationToken); if (!(await _authorizationService.AuthorizeAsync(User, venueTeams, Authorization.VenueOperations.EditVenue)).Succeeded) { return(Forbid()); } model = GetEditModel(false, venueEntity, null, venueTeams.Select(vt => vt.TeamName).Distinct().OrderBy(n => n).ToList(), model.ReturnUrl); model.Venue.MapEntityToFormFields(model.VenueEntity); // sync input with new model instance if (!await TryUpdateModelAsync(model)) { return(View(ViewNames.Venue.EditVenue, model)); } ModelState.Clear(); model.Venue.MapFormFieldsToEntity(model.VenueEntity); var geoResponse = new GoogleGeo.GeoResponse { Success = false }; if (model.ShouldAutoUpdateLocation()) { geoResponse = await SetupModelForGeoLocation(model, cancellationToken); } if (!await model.ValidateAsync( new VenueValidator(model.VenueEntity, (geoResponse, model.VenuesForDistance)), ModelState, cancellationToken)) { return(View(ViewNames.Venue.EditVenue, model)); } if (await _appDb.GenericRepository.SaveEntityAsync <VenueEntity>(model.VenueEntity, false, false, cancellationToken)) { return(Redirect(SetAdjustedReturnResult(nameof(Edit), model.ReturnUrl, true))); } return(View(ViewNames.Venue.EditVenue, model)); }
public async Task <IActionResult> Create([FromForm] VenueEditModel model, CancellationToken cancellationToken) { TeamEntity teamEntity = null; if (model.TeamId.HasValue) { teamEntity = await _appDb.TeamRepository.GetTeamEntityAsync(new PredicateExpression(TeamFields.Id == model.TeamId.Value), cancellationToken); if (teamEntity == null) { return(NotFound()); } } if (!await CreateIsAuthorized(model.TeamId)) { return(Forbid()); } model = GetEditModel(true, new VenueEntity(), teamEntity, new string[] { }, model.ReturnUrl); model.Venue.MapEntityToFormFields(model.VenueEntity); // sync input with new model instance if (!await TryUpdateModelAsync(model)) { return(View(ViewNames.Venue.EditVenue, model)); } ModelState.Clear(); model.Venue.MapFormFieldsToEntity(model.VenueEntity); var geoResponse = new GoogleGeo.GeoResponse { Success = false }; if (model.ShouldAutoUpdateLocation()) { geoResponse = await SetupModelForGeoLocation(model, cancellationToken); } if (!await model.ValidateAsync( // with parameter geoResponse == NULL, there is no geo validation new VenueValidator(model.VenueEntity, (geoResponse, model.VenuesForDistance)), ModelState, cancellationToken)) { return(View(ViewNames.Venue.EditVenue, model)); } try { if (teamEntity != null) { // Save the new venue for an existing team teamEntity.Venue = model.VenueEntity; return(await _appDb.GenericRepository.SaveEntityAsync <TeamEntity>(teamEntity, false, true, cancellationToken) ? Redirect(SetAdjustedReturnResult(nameof(Create), model.ReturnUrl, true)) : Redirect(SetAdjustedReturnResult(nameof(Create), model.ReturnUrl, false))); } else { // Save the venue (only) return(await _appDb.GenericRepository.SaveEntityAsync <VenueEntity>(model.VenueEntity, false, false, cancellationToken) ? Redirect(SetAdjustedReturnResult(nameof(Create), model.ReturnUrl, true)) : Redirect(SetAdjustedReturnResult(nameof(Create), model.ReturnUrl, false))); } } catch (Exception e) { _logger.LogCritical(e, "Failed to save venue."); return(Redirect(SetAdjustedReturnResult(nameof(Create), model.ReturnUrl, false))); } }
public async Task <IActionResult> EditVenue([FromForm] VenueEditModel venueEditModel, CancellationToken cancellationToken) { var sessionModel = await GetModelFromSession(cancellationToken); if (!sessionModel.IsFromSession) { return(RedirectToAction(nameof(SelectTeam), new { Organization = _tenantContext.SiteContext.UrlSegmentValue })); } ViewData["TournamentName"] = sessionModel.TournamentName; var venueEntity = new VenueEntity(); if (!venueEditModel.Venue.IsNew) { venueEntity = (await _appDb.VenueRepository.GetVenuesAsync( new PredicateExpression(VenueFields.Id == venueEditModel.Venue?.Id), cancellationToken)).FirstOrDefault(); if (venueEntity == null) { return(RedirectToAction(nameof(SelectVenue), new { Organization = _tenantContext.SiteContext.UrlSegmentValue })); } } var venueTeams = await _appDb.VenueRepository.GetVenueTeamRowsAsync(new PredicateExpression(VenueTeamFields.VenueId == venueEntity.Id), cancellationToken); venueEditModel = GetVenueEditModel(venueEntity, null, venueTeams.Select(vt => vt.TeamName).Distinct().OrderBy(n => n).ToList()); venueEditModel.Venue.MapEntityToFormFields(venueEditModel.VenueEntity); // sync input with new model instance if (!await TryUpdateModelAsync(venueEditModel)) { return(View(ViewNames.TeamApplication.EditVenue, venueEditModel)); } ModelState.Clear(); venueEditModel.Venue.MapFormFieldsToEntity(venueEditModel.VenueEntity); var geoResponse = new GoogleGeo.GeoResponse { Success = false }; if (venueEditModel.ShouldAutoUpdateLocation()) { geoResponse = await SetupVenueModelForGeoLocation(venueEditModel, cancellationToken); } if (!await venueEditModel.ValidateAsync( new VenueValidator(venueEditModel.VenueEntity, (geoResponse, venueEditModel.VenuesForDistance)), ModelState, cancellationToken)) { return(View(ViewNames.TeamApplication.EditVenue, venueEditModel)); } sessionModel.Venue.MapEntityToFormFields(venueEditModel.VenueEntity); SaveModelToSession(sessionModel); sessionModel.VenueIsSet = true; return(RedirectToAction(nameof(Confirm), new { Organization = _tenantContext.SiteContext.UrlSegmentValue })); }