private async Task <IActionResult> LoadViewModel(string view)
        {
            var username = GetUsernameFromClaim();

            Logger.LogDebug($"Load View Model for CertificateOptionViewModel for {username}");

            var viewModel = new CertificateOptionViewModel();

            CheckAndSetRedirectToCheck(viewModel);

            if (!TryGetCertificateSession("CertificateOptionViewModel", username, out CertificateSession certSession))
            {
                return(RedirectToAction("Index", "Search"));
            }

            var certificate = await CertificateApiClient.GetCertificate(certSession.CertificateId);

            if (certSession.Options == null || !certSession.Options.Any())
            {
                return(RedirectToAction("Index", "Search"));
            }

            if (certSession.Options.Count == 1)
            {
                return(RedirectToAction("Declare", "CertificateDeclaration"));
            }

            Logger.LogDebug($"Got Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id}");

            viewModel.FromCertificate(certificate, certSession.Options);

            Logger.LogDebug($"Got View Model of type CertificateOptionViewModel requested by {username}");

            return(View(view, viewModel));
        }
        private async Task <IActionResult> LoadViewModel(string view, bool?isFromStandard)
        {
            var username = ContextAccessor.HttpContext.User.FindFirst("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn")?.Value;

            Logger.LogInformation($"Load View Model for CertificateOptionViewModel for {username}");

            var viewModel = new CertificateOptionViewModel {
                IsFromStandard = isFromStandard ?? false
            };

            var query = ContextAccessor.HttpContext.Request.Query;

            if (query.ContainsKey("redirecttocheck") && bool.Parse(query["redirecttocheck"]))
            {
                Logger.LogInformation($"RedirectToCheck for CertificateOptionViewModel is true");
                SessionService.Set("redirecttocheck", "true");
                viewModel.BackToCheckPage = true;
            }
            else
            {
                SessionService.Remove("redirecttocheck");
            }

            var sessionString = SessionService.Get("CertificateSession");

            if (sessionString == null)
            {
                Logger.LogInformation($"Session for CertificateOptionViewModel requested by {username} has been lost. Redirecting to Search Index");
                return(RedirectToAction("Index", "Search"));
            }
            var certSession = JsonConvert.DeserializeObject <CertificateSession>(sessionString);

            var certificate = await CertificateApiClient.GetCertificate(certSession.CertificateId);

            if (!certSession.Options.Any())
            {
                if (ContextAccessor.HttpContext.Request.Query.ContainsKey("fromback"))
                {
                    if (certificate.IsPrivatelyFunded)
                    {
                        return(RedirectToAction("StandardCode", "CertificatePrivateStandardCode"));
                    }
                    return(RedirectToAction("Declare", "CertificateDeclaration"));
                }

                return(RedirectToAction("Grade", "CertificateGrade"));
            }

            Logger.LogInformation($"Got Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id}");

            viewModel.FromCertificate(certificate, certSession.Options);

            Logger.LogInformation($"Got View Model of type CertificateOptionViewModel requested by {username}");

            return(View(view, viewModel));
        }
        private async Task <IActionResult> SaveViewModel(CertificateOptionViewModel vm, string returnToIfModelNotValid, RedirectToActionResult nextAction, string action)
        {
            var username = GetUsernameFromClaim();

            Logger.LogDebug($"Save View Model for CertificateOptionViewModel for {username} with values: {GetModelValues(vm)}");

            var certificate = await CertificateApiClient.GetCertificate(vm.Id);

            var certData = JsonConvert.DeserializeObject <CertificateData>(certificate.CertificateData);

            SessionService.RemoveRedirectedFromVersion();

            var sessionString = SessionService.Get(nameof(CertificateSession));

            if (sessionString == null)
            {
                Logger.LogDebug($"Session for CertificateOptionViewModel requested by {username} has been lost. Redirecting to Search Index");
                return(RedirectToAction("Index", "Search"));
            }
            var certSession = JsonConvert.DeserializeObject <CertificateSession>(sessionString);

            if (!ModelState.IsValid)
            {
                vm.Options = certSession.Options;
                Logger.LogDebug($"Model State not valid for CertificateOptionViewModel requested by {username} with Id {certificate.Id}. Errors: {ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage)}");
                return(View(returnToIfModelNotValid, vm));
            }

            var updatedCertificate = vm.GetCertificateFromViewModel(certificate, certData);

            try
            {
                await CertificateApiClient.UpdateCertificate(new UpdateCertificateRequest(updatedCertificate) { Username = username, Action = action });
            }
            catch
            {
                Logger.LogError($"Unable to update certificate with Id {certificate.Id}.");
                return(RedirectToAction("Error", "Home"));
            }

            Logger.LogDebug($"Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id} updated.");

            if (SessionService.GetRedirectToCheck())
            {
                Logger.LogDebug($"Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id} redirecting back to Certificate Check.");
                return(new RedirectToActionResult("Check", "CertificateCheck", null));
            }

            Logger.LogDebug($"Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id} redirecting to {nextAction.ControllerName} {nextAction.ActionName}");
            return(nextAction);
        }
        private async Task <IActionResult> SaveViewModel(CertificateOptionViewModel vm, string returnToIfModelNotValid, RedirectToActionResult nextAction, string action)
        {
            var username = ContextAccessor.HttpContext.User.FindFirst("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn")?.Value;

            Logger.LogInformation($"Save View Model for CertificateOptionViewModel for {username} with values: {GetModelValues(vm)}");

            var certificate = await CertificateApiClient.GetCertificate(vm.Id);

            var certData = JsonConvert.DeserializeObject <CertificateData>(certificate.CertificateData);

            var sessionString = SessionService.Get("CertificateSession");

            if (sessionString == null)
            {
                Logger.LogInformation($"Session for CertificateOptionViewModel requested by {username} has been lost. Redirecting to Search Index");
                return(RedirectToAction("Index", "Search"));
            }
            var certSession = JsonConvert.DeserializeObject <CertificateSession>(sessionString);

            if (!ModelState.IsValid)
            {
                vm.FamilyName = certData.LearnerFamilyName;
                vm.GivenNames = certData.LearnerGivenNames;
                vm.Options    = certSession.Options;
                Logger.LogInformation($"Model State not valid for CertificateOptionViewModel requested by {username} with Id {certificate.Id}. Errors: {ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage)}");
                return(View(returnToIfModelNotValid, vm));
            }

            var updatedCertificate = vm.GetCertificateFromViewModel(certificate, certData);

            await CertificateApiClient.UpdateCertificate(new UpdateCertificateRequest(updatedCertificate) { Username = username, Action = action });

            Logger.LogInformation($"Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id} updated.");

            if (SessionService.Exists("redirecttocheck") && bool.Parse(SessionService.Get("redirecttocheck")))
            {
                Logger.LogInformation($"Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id} redirecting back to Certificate Check.");
                return(new RedirectToActionResult("Check", "CertificateCheck", null));
            }

            Logger.LogInformation($"Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id} redirecting to {nextAction.ControllerName} {nextAction.ActionName}");
            return(nextAction);
        }
Ejemplo n.º 5
0
        public async Task WhenPostingOptionSelected_And_UpdateCertificateFails_Then_RedirectToError(CertificateSession session, CertificateOptionViewModel model)
        {
            var sessionString = JsonConvert.SerializeObject(session);

            _mockSessionService.Setup(s => s.Get(nameof(CertificateSession))).Returns(sessionString);
            _mockCertificateApiClient.Setup(c => c.UpdateCertificate(It.IsAny <UpdateCertificateRequest>())).ThrowsAsync(new Exception());

            var result = await _certificateOptionController.Option(model) as RedirectToActionResult;

            result.ControllerName.Should().Be("Home");
            result.ActionName.Should().Be("Error");
        }
Ejemplo n.º 6
0
        public async Task WhenPostingBackToOptionsPage_RedirectsToCertificateDeclaration(CertificateSession session, CertificateOptionViewModel model)
        {
            session.Options = null;
            var sessionString = JsonConvert.SerializeObject(session);

            _mockSessionService.Setup(s => s.Get(nameof(CertificateSession))).Returns(sessionString);

            var result = await _certificateOptionController.Option(model) as RedirectToActionResult;

            result.ControllerName.Should().Be("CertificateDeclaration");
            result.ActionName.Should().Be("Declare");
        }
 public async Task <IActionResult> Option(CertificateOptionViewModel vm)
 {
     return(await SaveViewModel(vm,
                                returnToIfModelNotValid : "~/Views/Certificate/Option.cshtml",
                                nextAction : RedirectToAction("Declare", "CertificateDeclaration"), action : CertificateActions.Option));
 }
Ejemplo n.º 8
0
 public async Task <IActionResult> Option(CertificateOptionViewModel vm)
 {
     return(await SaveViewModel(vm,
                                returnToIfModelNotValid : "~/Views/CertificateAmend/Option.cshtml",
                                nextAction : RedirectToAction("Check", "CertificateAmend", new { certificateId = vm.Id }), action : CertificateActions.Option));
 }