Beispiel #1
0
        private async Task <Provider> GetProviderFromUkprn(int ukprn)
        {
            Provider provider;
            OrganisationSearchResult searchResult = null;

            try
            {
                searchResult = await _roatpApiClient.GetOrganisationByUkprn(ukprn);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Unable to get Provider from AssessmentOrgsApi. Ukprn: {ukprn}");
            }

            if (searchResult is null)
            {
                // see if we can get it from Organisation Table
                var org = await _organisationQueryRepository.GetByUkPrn(ukprn);

                if (org != null)
                {
                    provider = new Provider {
                        ProviderName = org.EndPointAssessorName, Ukprn = ukprn
                    };
                }
                else
                {
                    // see whether there are any previous certificates with this ukrpn and a ProviderName....
                    var previousProviderName = await _certificateRepository.GetPreviousProviderName(ukprn);

                    provider = new Provider {
                        ProviderName = previousProviderName ?? "Unknown", Ukprn = ukprn
                    };
                }
            }
            else
            {
                provider = new Provider {
                    ProviderName = searchResult.ProviderName, Ukprn = ukprn
                };
            }

            return(provider);
        }
        private async Task <PaginatedList <CertificateSummaryResponse> > MapCertificates(PaginatedList <CertificateHistoryModel> certificates)
        {
            var certificateResponses = certificates?.Items.Select(
                certificate =>
            {
                var latestCertificateStatusDate = (new[] { certificate.UpdatedAt, certificate.CreatedAt }.Max()).Value;

                var recordedBy = certificate.CertificateLogs
                                 .OrderByDescending(q => q.EventTime)
                                 .FirstOrDefault(certificateLog =>
                                                 certificateLog.Action == Domain.Consts.CertificateActions.Submit)?.Username;

                var printStatusAt        = certificate?.StatusAt;
                var printReasonForChange = certificate?.ReasonForChange;

                var trainingProviderName = string.Empty;
                try
                {
                    if (certificate.ProviderName == null)
                    {
                        var provider = _roatpApiClient
                                       .GetOrganisationByUkprn(certificate.ProviderUkPrn).Result;

                        if (provider == null)
                        {
                            throw new EntityNotFoundException($"Provider {certificate.ProviderUkPrn} not found", null);
                        }

                        trainingProviderName = provider.ProviderName;
                        _certificateRepository.UpdateProviderName(certificate.Id, trainingProviderName).GetAwaiter().GetResult();
                    }
                    else
                    {
                        trainingProviderName = certificate.ProviderName;
                    }
                }
                catch (EntityNotFoundException)
                {
                    if (certificate.EndPointAssessorUkprn != null)
                    {
                        _logger.LogInformation(
                            $"Cannot find training provider for ukprn {certificate.EndPointAssessorUkprn.Value}");
                    }
                }

                return(new CertificateSummaryResponse
                {
                    CertificateReference = certificate.CertificateReference,
                    Uln = certificate.Uln,
                    CreatedAt = certificate.CreatedAt,
                    CreatedDay = certificate.CreateDay,
                    UpdatedAt = certificate.UpdatedAt,
                    PrintStatusAt = printStatusAt,
                    ContactOrganisation = certificate.ContactOrganisation,
                    ContactName = certificate.ContactName,
                    TrainingProvider = trainingProviderName,
                    RecordedBy = recordedBy,
                    CourseOption = certificate.CourseOption,
                    FullName = certificate.FullName,
                    OverallGrade = certificate.OverallGrade,
                    StandardReference = certificate.StandardReference,
                    StandardName = certificate.StandardName,
                    Version = certificate.Version,
                    Level = certificate.StandardLevel,
                    AchievementDate = certificate.AchievementDate,
                    LearningStartDate = certificate.LearningStartDate,
                    ContactAddLine1 = certificate.ContactAddLine1,
                    ContactAddLine2 = certificate.ContactAddLine2,
                    ContactAddLine3 = certificate.ContactAddLine3,
                    ContactAddLine4 = certificate.ContactAddLine4,
                    ContactPostCode = certificate.ContactPostCode,
                    Status = certificate.Status,
                    ReasonForChange = printReasonForChange,
                    LatestStatusDatetime = latestCertificateStatusDate
                });
            });

            var responses = certificateResponses?.ToList();

            if (responses != null)
            {
                foreach (var response in responses)
                {
                    var displayName = (await _contactQueryRepository.GetContact(response.RecordedBy))?.DisplayName;
                    response.RecordedBy = displayName ?? response.RecordedBy;
                }
            }

            var paginatedList = new PaginatedList <CertificateSummaryResponse>(responses,
                                                                               certificates?.TotalRecordCount ?? 0,
                                                                               certificates?.PageIndex ?? 1,
                                                                               certificates?.PageSize ?? 10
                                                                               );

            return(paginatedList);
        }