public async Task <ActionResult> Index(EstablishmentSearchViewModel model)
        {
            model.SearchQueryString = Request.QueryString.ToString();

            var retVal = await SearchByUrnAsync(model);

            if (retVal != null)
            {
                return(retVal);
            }

            model.SavedFilterToken = TempData["SavedToken"]?.ToString();

            // if the user navigates back to or reloads the search results => look up saved results token
            if (Request.IsAuthenticated && string.IsNullOrEmpty(model.SavedFilterToken))
            {
                var userId = User.Identity.GetUserId();
                model.SavedFilterToken = (await _userPreferenceRepository.GetAsync(userId))?.SavedSearchToken;
            }

            var payload = await GetEstablishmentSearchPayload(model);

            if (!payload.Success)
            {
                model.Error = payload.ErrorMessage;
            }
            return(await ProcessEstablishmentsSearch(model, payload.Object));
        }
        private async Task <ActionResult> GetLandingPage(ClaimsPrincipal principal)
        {
            // Redirect to the user's last saved search token if there is one.
            var searchToken = (await _userPreferenceRepository.GetAsync(principal.GetUserId()))?.SavedSearchToken;

            if (searchToken != null && (await _tokenRepository.GetAsync(searchToken)) != null)
            {
                TempData["SavedToken"] = searchToken;
                TempData["UserId"]     = principal.GetUserId();
                return(Redirect(string.Concat(Url.RouteUrl("EstabSearch"), "?tok=", searchToken)));
            }

            if (principal.IsInRole(EdubaseRoles.ESTABLISHMENT))
            {
                var urn = await _securityService.GetMyEstablishmentUrn(principal);

                if (urn.HasValue)
                {
                    return(RedirectToRoute("EstabDetails", new { id = urn }));
                }
            }
            else if (principal.IsInRole(EdubaseRoles.EDUBASE_GROUP_MAT))
            {
                var uid = await _securityService.GetMyMATUId(principal);

                if (uid.HasValue)
                {
                    return(RedirectToRoute("GroupDetails", new { id = uid }));
                }
            }
            else if (principal.IsInRole(EdubaseRoles.IEBT))
            {
                var selectedTab = string.Concat("SelectedTab=", SearchViewModel.Tab.Establishments);
                var searchType  = string.Concat("SearchType=", eSearchType.EstablishmentAll);
                var estTypes    = string.Join("&", new[] { ET.NonmaintainedSpecialSchool, ET.BritishSchoolsOverseas, ET.CityTechnologyCollege, ET.OtherIndependentSchool, ET.OnlineProvider }.Select(x => $"{EstablishmentSearchViewModel.BIND_ALIAS_TYPEIDS}={(int)x}"));
                var estStatuses = string.Join("&", new[] { ES.Open, ES.OpenButProposedToClose }.Select(x => $"{EstablishmentSearchViewModel.BIND_ALIAS_STATUSIDS}={(int) x}"));
                return(Redirect(string.Concat(
                                    Url.RouteUrl("EstabSearch"),
                                    "?",
                                    selectedTab,
                                    "&",
                                    searchType,
                                    "&",
                                    estTypes,
                                    "&",
                                    estStatuses)));
            }

            return(RedirectToAction("Index", "Search"));
        }