Exemplo n.º 1
0
        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;
                }
            }
        }