private async Task PopulateSearchResults(Spine providerSpineDetails, Organisation providerOrganisationDetails, Spine consumerEnablement, Organisation consumerOrganisationDetails, string consumerOrganisationType = "") { var requestParameters = _tokenService.ConstructRequestParameters( _contextAccessor.HttpContext.GetAbsoluteUri(), providerSpineDetails, providerOrganisationDetails, consumerEnablement, consumerOrganisationDetails, (int)SpineMessageTypes.GpConnectSearchFreeSlots, consumerOrganisationType); var startDate = Convert.ToDateTime(SelectedDateRange.Split(":")[0]); var endDate = Convert.ToDateTime(SelectedDateRange.Split(":")[1]); if (requestParameters != null) { var capabilityStatement = await _queryExecutionService.ExecuteFhirCapabilityStatement(requestParameters, providerSpineDetails.SspHostname); CapabilityStatementOk = capabilityStatement.CapabilityStatementNoIssues; if (CapabilityStatementOk) { var searchResults = await _queryExecutionService.ExecuteFreeSlotSearch(requestParameters, startDate, endDate, providerSpineDetails.SspHostname, User.GetClaimValue("UserId").StringToInteger()); SlotSearchOk = searchResults.SlotSearchNoIssues; if (SlotSearchOk) { SearchExportId = searchResults.SearchExportId; SearchResults = new List <List <SlotEntrySimple> >(); SearchResultsPast = new List <List <SlotEntrySimple> >(); SearchResultsTotalCount = searchResults.SlotCount; SearchResultsCurrentCount = searchResults.CurrentSlotCount; SearchResultsPastCount = searchResults.PastSlotCount; SearchResults.AddRange(searchResults.CurrentSlotEntriesByLocationGrouping); SearchResultsPast.AddRange(searchResults.PastSlotEntriesByLocationGrouping); } else { ProviderErrorDisplay = searchResults.ProviderError; ProviderErrorCode = searchResults.ProviderErrorCode; ProviderErrorDiagnostics = searchResults.ProviderErrorDiagnostics; _auditSearchIssues.Add(string.Format(SearchConstants.ISSUEWITHSENDINGMESSAGETOPROVIDERSYSTEMTEXT, ProviderErrorDisplay, ProviderErrorCode)); } } else { ProviderErrorDisplay = capabilityStatement.ProviderError; ProviderErrorCode = capabilityStatement.ProviderErrorCode; ProviderErrorDiagnostics = capabilityStatement.ProviderErrorDiagnostics; _auditSearchIssues.Add(string.Format(SearchConstants.ISSUEWITHSENDINGMESSAGETOPROVIDERSYSTEMTEXT, ProviderErrorDisplay, ProviderErrorCode)); } } }
private async Task <Organisation> GetAndMapOrganisationResponse(string odsCode, FhirApiQuery fhirApiQuery) { var query = fhirApiQuery.QueryText.SearchAndReplace(new Dictionary <string, string> { { "{odsCode}", Regex.Escape(odsCode) } }); var tokenSource = new CancellationTokenSource(); var token = tokenSource.Token; var response = await _fhirRequestExecution.ExecuteFhirQuery <DTO.Response.Fhir.Organisation>(query, _spineOptionsDelegate.CurrentValue.SpineFhirApiDirectoryServicesFqdn, token, SpineMessageTypes.SpineFhirApiOrganisationQuery); if (response != null && !response.HasErrored && response.Issue == null) { var organisation = new Organisation { OdsCode = odsCode, OrganisationName = response.OrganisationName, OrganisationTypeCode = response.Type.Coding.OrganisationTypeDisplay, PostalAddress = response.PostalAddress.PostalAddressCommaSeparated, PostalCode = response.PostalAddress.PostalCode }; return(organisation); } return(null); }
private OrganisationErrorCodeOrDetail GetOrganisationErrorCodeOrDetail(string providerOdsCode, string consumerOdsCode, List <SpineList> providerGpConnectDetails, List <OrganisationList> providerOrganisationDetails, List <SpineList> consumerGpConnectDetails, List <OrganisationList> consumerOrganisationDetails, string consumerOrganisationType = "") { var providerOrganisationLookupErrors = providerOrganisationDetails.FirstOrDefault(x => x.OdsCode == providerOdsCode && x.ErrorCode != ErrorCode.None)?.ErrorCode; var providerGpConnectDetailsErrors = providerGpConnectDetails.FirstOrDefault(x => x.OdsCode == providerOdsCode && x.ErrorCode != ErrorCode.None)?.ErrorCode; var providerErrorCode = providerOrganisationLookupErrors ?? providerGpConnectDetailsErrors ?? ErrorCode.None; var consumerErrorCode = ErrorCode.None; if (!string.IsNullOrEmpty(consumerOdsCode)) { var consumerOrganisationLookupErrors = consumerOrganisationDetails.FirstOrDefault(x => x.OdsCode == consumerOdsCode && x.ErrorCode != ErrorCode.None)?.ErrorCode; var consumerGpConnectDetailsErrors = consumerGpConnectDetails.FirstOrDefault(x => x.OdsCode == consumerOdsCode && x.ErrorCode != ErrorCode.None)?.ErrorCode; consumerErrorCode = consumerOrganisationLookupErrors ?? consumerGpConnectDetailsErrors ?? ErrorCode.None; } var errorSource = ErrorCode.None; var details = string.Empty; var additionalDetails = string.Empty; Organisation providerOrganisation = null; Organisation consumerOrganisation = null; Spine providerSpine = null; if (providerErrorCode == ErrorCode.None) { providerOrganisation = providerOrganisationDetails.FirstOrDefault(x => x.OdsCode == providerOdsCode)?.Organisation; providerSpine = providerGpConnectDetails.FirstOrDefault(x => x.OdsCode == providerOdsCode)?.Spine; } else { errorSource = providerErrorCode; details = string.Format(errorSource.GetDescription(), providerOdsCode); } if (consumerErrorCode == ErrorCode.None) { consumerOrganisation = consumerOrganisationDetails.FirstOrDefault(x => x.OdsCode == consumerOdsCode)?.Organisation; } else if (consumerErrorCode == ErrorCode.ConsumerNotEnabledForGpConnectAppointmentManagement) { consumerOrganisation = consumerOrganisationDetails.FirstOrDefault(x => x.OdsCode == consumerOdsCode)?.Organisation; additionalDetails = string.Format(consumerErrorCode.GetDescription(), consumerOdsCode); } else { errorSource = consumerErrorCode; details = string.Format(errorSource.GetDescription(), consumerOdsCode); } return(new OrganisationErrorCodeOrDetail { SuppliedProviderOdsCode = providerOdsCode, SuppliedConsumerOdsCode = consumerOdsCode, errorSource = errorSource, details = details, additionalDetails = additionalDetails, providerOrganisation = providerOrganisation, consumerOrganisation = consumerOrganisation, providerSpine = providerSpine }); }