Esempio n. 1
0
        public async Task <IActionResult> UkprnOnRegister(int ukprn)
        {
            var registerStatus = await _retryPolicy.ExecuteAsync(
                context => _apiClient.GetOrganisationRegisterStatus(ukprn.ToString()),
                new Context());

            return(Ok(registerStatus));
        }
        public async Task <ApplyGatewayDetails> GetExternalApiCheckDetails(Guid applicationId)
        {
            var applyGatewayDetails = new ApplyGatewayDetails();

            var ukprn = await _qnaApiClient.GetQuestionTag(applicationId, RoatpWorkflowQuestionTags.UKPRN);

            var ukrlpResults = await _roatpApiClient.GetUkrlpDetails(ukprn);

            if (ukrlpResults == null)
            {
                var message = $"Unable to retrieve UKRLP details for application {applicationId}";
                _logger.LogError(message);
                throw new ServiceUnavailableException(message);
            }

            var ukrlpDetails = ukrlpResults.Results.FirstOrDefault();

            applyGatewayDetails.UkrlpDetails = Mapper.Map <ProviderDetails>(ukrlpDetails);

            var roatpStatus = await _roatpApiClient.GetOrganisationRegisterStatus(ukprn);

            if (roatpStatus == null)
            {
                var message = $"Unable to retrieve RoATP register details for application {applicationId}";
                _logger.LogError(message);
                throw new ServiceUnavailableException(message);
            }

            applyGatewayDetails.RoatpRegisterDetails = roatpStatus;

            var companiesHouseVerification = ukrlpDetails.VerificationDetails
                                             .FirstOrDefault(x => x.VerificationAuthority == VerificationAuthorities.CompaniesHouseAuthority);

            if (companiesHouseVerification != null)
            {
                await LookupCompaniesHouseDetails(applyGatewayDetails, companiesHouseVerification.VerificationId);
            }
            var charityCommissionVerification = ukrlpDetails.VerificationDetails
                                                .FirstOrDefault(x => x.VerificationAuthority == VerificationAuthorities.CharityCommissionAuthority);

            if (charityCommissionVerification != null)
            {
                await LookupCharityCommissionDetails(applyGatewayDetails, charityCommissionVerification.VerificationId);
            }
            applyGatewayDetails.SourcesCheckedOn = DateTime.Now;

            return(applyGatewayDetails);
        }
Esempio n. 3
0
        public async Task <IActionResult> VerifyOrganisationDetails()
        {
            var applicationDetails = _sessionService.Get <ApplicationDetails>(ApplicationDetailsKey);
            var providerDetails    = applicationDetails.UkrlpLookupDetails;

            var existingApplicationStatuses = await _applicationApiClient.GetExistingApplicationStatus(providerDetails.UKPRN);

            if (existingApplicationStatuses.Any(x => x.Status == ApplicationStatus.InProgress))
            {
                return(RedirectToAction("ApplicationInProgress", "RoatpShutterPages", new ExistingApplicationViewModel {
                    UKPRN = providerDetails.UKPRN
                }));
            }
            else if (existingApplicationStatuses.Any(x => x.Status == ApplicationStatus.Submitted || x.Status == ApplicationStatus.GatewayAssessed))
            {
                return(RedirectToAction("ApplicationPreviouslySubmitted", "RoatpShutterPages", new ExistingApplicationViewModel {
                    UKPRN = providerDetails.UKPRN
                }));
            }

            CompaniesHouseSummary companyDetails = null;
            Charity charityDetails = null;

            if (providerDetails.VerifiedByCompaniesHouse)
            {
                var companiesHouseVerification = providerDetails.VerificationDetails.FirstOrDefault(x =>
                                                                                                    x.VerificationAuthority == VerificationAuthorities.CompaniesHouseAuthority);

                companyDetails = await _companiesHouseApiClient.GetCompanyDetails(companiesHouseVerification.VerificationId);

                if ((companyDetails.Directors == null || companyDetails.Directors.Count == 0) &&
                    (companyDetails.PersonsWithSignificantControl == null ||
                     companyDetails.PersonsWithSignificantControl.Count == 0))
                {
                    companyDetails.ManualEntryRequired = true;
                }

                if (companyDetails.Status == CompaniesHouseSummary.ServiceUnavailable)
                {
                    return(RedirectToAction("CompaniesHouseNotAvailable", "RoatpShutterPages"));
                }
                else if (companyDetails.Status == CompaniesHouseSummary.CompanyStatusNotFound)
                {
                    return(RedirectToAction("CompanyNotFound", "RoatpShutterPages"));
                }
                else if (!CompaniesHouseValidator.CompaniesHouseStatusValid(providerDetails.UKPRN, companyDetails.Status, _logger))
                {
                    return(RedirectToAction("CompanyNotFound", "RoatpShutterPages"));
                }

                applicationDetails.CompanySummary = companyDetails;
            }

            if (applicationDetails.UkrlpLookupDetails.VerifiedbyCharityCommission)
            {
                var charityCommissionVerification = providerDetails.VerificationDetails.FirstOrDefault(x =>
                                                                                                       x.VerificationAuthority == VerificationAuthorities.CharityCommissionAuthority);

                string verificationId = charityCommissionVerification.VerificationId;
                if (verificationId.Contains("-"))
                {
                    verificationId = verificationId.Substring(0, verificationId.IndexOf("-"));
                }

                if (IsEnglandAndWalesCharityCommissionNumber(verificationId))
                {
                    bool isValidCharityNumber = int.TryParse(verificationId, out var charityNumber);
                    if (!isValidCharityNumber)
                    {
                        return(RedirectToAction("CharityNotFound", "RoatpShutterPages"));
                    }

                    try
                    {
                        charityDetails = await _outerApiClient.GetCharityDetails(charityNumber);
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError(ex, "Error fetching charity details for charity number `{charityNumber}`", charityNumber);
                        return(RedirectToAction("CharityCommissionNotAvailable", "RoatpShutterPages"));
                    }

                    if (!charityDetails.IsActivelyTrading)
                    {
                        return(RedirectToAction("CharityNotFound", "RoatpShutterPages"));
                    }

                    applicationDetails.CharitySummary = Mapper.Map <CharityCommissionSummary>(charityDetails);
                }
                else
                {
                    applicationDetails.CharitySummary = new CharityCommissionSummary
                    {
                        TrusteeManualEntryRequired = true
                    };
                }
            }

            var roatpRegisterStatus = await _roatpApiClient.GetOrganisationRegisterStatus(applicationDetails.UKPRN);

            applicationDetails.RoatpRegisterStatus = roatpRegisterStatus;

            _sessionService.Set(ApplicationDetailsKey, applicationDetails);

            if (ProviderEligibleToChangeRoute(roatpRegisterStatus))
            {
                return(RedirectToAction("ProviderAlreadyOnRegister"));
            }

            return(RedirectToAction("SelectApplicationRoute"));
        }