public ApprenticeshipSearchViewModel CreateSavedSearch(Guid candidateId, ApprenticeshipSearchViewModel viewModel)
        {
            var categoryFullName      = default(string);
            var subCategoriesFullName = default(string);

            string[] subCategories = null;
            if (!string.IsNullOrEmpty(viewModel.Category))
            {
                var category = viewModel.Categories.SingleOrDefault(c => c.CodeName == viewModel.Category);
                if (category != null)
                {
                    categoryFullName = FullNameFormatter.Format(category.FullName);

                    if (viewModel.SubCategories != null && viewModel.SubCategories.Length > 0)
                    {
                        var selectedSubCategories = category.SubCategories.Where(sc => viewModel.SubCategories.Contains(sc.CodeName)).ToList();
                        subCategories = selectedSubCategories.Select(sc => sc.CodeName).ToArray();
                        var subCategoryFullNames = selectedSubCategories.Select(sc => FullNameFormatter.Format(sc.FullName));
                        subCategoriesFullName = string.Join("|", subCategoryFullNames);
                    }
                }
            }

            var savedSearch = new SavedSearch
            {
                CandidateId                = candidateId,
                SearchMode                 = viewModel.SearchMode,
                Keywords                   = viewModel.Keywords,
                Location                   = viewModel.Location,
                Latitude                   = viewModel.Latitude,
                Longitude                  = viewModel.Longitude,
                Hash                       = viewModel.Hash,
                WithinDistance             = viewModel.WithinDistance,
                ApprenticeshipLevel        = viewModel.ApprenticeshipLevel,
                Category                   = viewModel.Category,
                CategoryFullName           = categoryFullName,
                SubCategories              = subCategories,
                SubCategoriesFullName      = subCategoriesFullName,
                SearchField                = viewModel.SearchField,
                DisplaySubCategory         = viewModel.DisplaySubCategory,
                DisplayDescription         = viewModel.DisplayDescription,
                DisplayDistance            = viewModel.DisplayDistance,
                DisplayClosingDate         = viewModel.DisplayClosingDate,
                DisplayStartDate           = viewModel.DisplayStartDate,
                DisplayApprenticeshipLevel = viewModel.DisplayApprenticeshipLevel,
                DisplayWage                = viewModel.DisplayWage
            };

            try
            {
                var candidate = _candidateService.GetCandidate(candidateId);

                var searchHash            = savedSearch.GetSearchHash();
                var existingSavedSearches = _candidateService.GetSavedSearches(candidateId);

                if (existingSavedSearches == null || !existingSavedSearches.Select(s => s.GetSearchHash()).Contains(searchHash))
                {
                    _candidateService.CreateSavedSearch(savedSearch);
                }

                var saveCandidate = false;

                if (!candidate.CommunicationPreferences.SavedSearchPreferences.EnableEmail && !candidate.CommunicationPreferences.SavedSearchPreferences.EnableText)
                {
                    candidate.CommunicationPreferences.SavedSearchPreferences.EnableEmail = true;
                    saveCandidate = true;
                }

                if (saveCandidate)
                {
                    _candidateService.SaveCandidate(candidate);
                    if (candidate.MobileVerificationRequired())
                    {
                        _candidateService.SendMobileVerificationCode(candidate);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error("Error creating saved search", ex);
                viewModel.ViewModelMessage = VacancySearchResultsPageMessages.SaveSearchFailed;
            }

            return(viewModel);
        }