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));
        }