public static List <SearchResult> MatchUpExistingCompletedStandards(this List <SearchResult> searchResults, SearchQuery request, string likedSurname, IEnumerable <int> approvedStandards, ICertificateRepository certificateRepository, IContactQueryRepository contactRepository, IOrganisationQueryRepository _organisationRepository, ILogger <SearchHandler> logger) { logger.LogInformation("MatchUpExistingCompletedStandards Before Get Certificates for uln from db"); var certificates = certificateRepository.GetDraftAndCompletedCertificatesFor(request.Uln).Result; logger.LogInformation("MatchUpExistingCompletedStandards After Get Certificates for uln from db"); // Don't match up existing standards if paramters for filtering not passed in. if (string.IsNullOrWhiteSpace(likedSurname) || approvedStandards == null || approvedStandards.Count() == 0) { return(searchResults); } var searchingEpao = _organisationRepository.Get(request.EpaOrgId).Result; if (searchResults.Count > 0) { foreach (var searchResult in searchResults) { var certificate = certificates.SingleOrDefault(s => s.StandardCode == searchResult.StdCode); if (certificate != null) { var hasPreviousSubmission = certificate.CertificateLogs.Any(l => l.Action == CertificateActions.Submit); if (hasPreviousSubmission) { searchResult.PopulateCertificateBasicInformation(certificate); searchResult.PopulateCertificateExtraInformationDependingOnPermission(request, contactRepository, certificate, searchingEpao, logger); } } } } else if (certificates.Count > 0) { foreach (var certificate in certificates) { // Don't return certficate if the EPAO isn't able to assess that standard if (!approvedStandards.Contains(certificate.StandardCode)) { continue; } var certificateData = JsonConvert.DeserializeObject <CertificateData>(certificate.CertificateData); // Don't return certificate if the name does not match. if (!string.Equals(certificateData.LearnerFamilyName.Trim(), likedSurname.Trim(), StringComparison.CurrentCultureIgnoreCase)) { continue; } // Create a new search result as it would be when returned by the Learner record var searchResult = new SearchResult { Uln = certificate.Uln, FamilyName = certificateData.LearnerFamilyName, GivenNames = certificateData.LearnerGivenNames, StdCode = certificate.StandardCode, UkPrn = certificate.ProviderUkPrn, CreatedAt = certificate.CreatedAt, LearnStartDate = certificateData.LearningStartDate }; searchResult.PopulateCertificateBasicInformation(certificate); searchResult.PopulateCertificateExtraInformationDependingOnPermission(request, contactRepository, certificate, searchingEpao, logger); searchResults.Add(searchResult); } } return(searchResults); }