public async Task <ActionResult> Submit(FormSubmissionViewModel model) { var vm = await GetFormSubmissionViewModel(model.SelectedSectors); vm.SelectedSectors = model.SelectedSectors; vm.Name = model.Name; vm.AgreeToTerms = model.AgreeToTerms; if (ModelState.IsValid) { var createRequest = new SubmissionCreateOrUpdateRequest { SessionId = GetCurrentSessionId, FormSubmissionViewModel = vm }; var response = await _submissionService.CreateOrUpdateSubmission(createRequest); if (response.Success) { TempData[Constants.Constants.FlashMessage] = new FlashMessage { Message = StringResources.FormSavedSuccessMessage, MessageType = MessageType.Success }; } else { TempData[Constants.Constants.FlashMessage] = new FlashMessage { Message = StringResources.FormSavedErrorMessage, MessageType = MessageType.Danger }; } return(RedirectToAction(Constants.Constants.HomeIndexAction, Constants.Constants.HomeController)); } TempData[Constants.Constants.FormSubmissionViewModel] = vm; return(RedirectToAction(Constants.Constants.HomeIndexAction, Constants.Constants.HomeController)); }
/// <summary> /// Creates or updates a submission /// </summary> /// <param name="request">SubmissionCreateOrUpdateRequest</param> /// <returns></returns> public async Task <SubmissionCreateOrUpdateResponse> CreateOrUpdateSubmission(SubmissionCreateOrUpdateRequest request) { using (TransactionScope scope = new TransactionScope()) { try { var currentSubmission = await GetSubmissionBySessionId(request.SessionId); var updatedAt = DateTime.Now; if (currentSubmission == null) { currentSubmission = new Submission { ID = Guid.NewGuid(), AgreeToTerms = request.FormSubmissionViewModel.AgreeToTerms, Name = request.FormSubmissionViewModel.Name, SessionId = request.SessionId, CreatedAt = updatedAt }; } currentSubmission.UpdatedAt = updatedAt; // clear previous sectors currentSubmission.SubmissionSectors = new List <SubmissionSector>(); await _submissionSectorEditRepository.ClearSectorsFromSubmission(currentSubmission); var selectedSectors = await _sectorReadRepository.GetSectorsByIds(request.FormSubmissionViewModel.SelectedSectors.ToList()); selectedSectors .ForEach(sector => { currentSubmission.SubmissionSectors.Add(new SubmissionSector { Id = Guid.NewGuid(), Submission = currentSubmission, Sector = sector }); }); await _submissionEditRepository.InsertOrModifyAsync(currentSubmission, s => s.ID == currentSubmission.ID); scope.Complete(); return(new SubmissionCreateOrUpdateResponse { Error = null, Success = true, Response = currentSubmission }); } catch (TransactionAbortedException ex) { throw; } } }