Example #1
0
        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);
        }