public async Task <OneOf <NotFound, TLevelDetailViewModel> > Handle(Query request, CancellationToken cancellationToken) { var tLevel = await _sqlQueryDispatcher.ExecuteQuery(new GetTLevel() { TLevelId = request.TLevelId }); if (tLevel == null) { return(new NotFound()); } var getProvider = _cosmosDbQueryDispatcher.ExecuteQuery( new Core.DataStore.CosmosDb.Queries.GetProviderById() { ProviderId = tLevel.ProviderId }); var getSqlProvider = _sqlQueryDispatcher.ExecuteQuery( new Core.DataStore.Sql.Queries.GetProviderById { ProviderId = tLevel.ProviderId }); var getVenues = _sqlQueryDispatcher.ExecuteQuery( new GetVenuesByIds() { VenueIds = tLevel.Locations.Select(l => l.VenueId) }); await Task.WhenAll(getProvider, getSqlProvider, getVenues); var provider = await getProvider; var sqlProvider = await getSqlProvider; var venues = await getVenues; var feChoice = await _cosmosDbQueryDispatcher.ExecuteQuery( new GetFeChoiceForProvider() { ProviderUkprn = provider.Ukprn }); var providerContact = provider.ProviderContact .SingleOrDefault(c => c.ContactType == "P"); return(new TLevelDetailViewModel() { TLevelId = tLevel.TLevelId, TLevelDefinitionId = tLevel.TLevelDefinition.TLevelDefinitionId, Qualification = new QualificationViewModel() { FrameworkCode = tLevel.TLevelDefinition.FrameworkCode, ProgType = tLevel.TLevelDefinition.ProgType, QualificationLevel = tLevel.TLevelDefinition.QualificationLevel.ToString(), TLevelName = HtmlEncode(tLevel.TLevelDefinition.Name) }, Provider = new ProviderViewModel() { ProviderName = sqlProvider.DisplayName, Ukprn = provider.UnitedKingdomProviderReferenceNumber, AddressLine1 = HtmlEncode( ViewModelFormatting.ConcatAddressLines( providerContact?.ContactAddress?.SAON?.Description, providerContact?.ContactAddress?.PAON?.Description, providerContact?.ContactAddress?.StreetDescription)), AddressLine2 = HtmlEncode(providerContact?.ContactAddress?.Locality), Town = HtmlEncode(providerContact?.ContactAddress?.PostTown ?? providerContact?.ContactAddress?.Items?.ElementAtOrDefault(0)), Postcode = providerContact?.ContactAddress?.PostCode, County = HtmlEncode(providerContact?.ContactAddress?.County ?? providerContact?.ContactAddress?.Items?.ElementAtOrDefault(1)), Email = providerContact?.ContactEmail, Telephone = providerContact?.ContactTelephone1, Fax = providerContact?.ContactFax, Website = ViewModelFormatting.EnsureHttpPrefixed(providerContact?.ContactWebsiteAddress), LearnerSatisfaction = feChoice?.LearnerSatisfaction, EmployerSatisfaction = feChoice?.EmployerSatisfaction }, WhoFor = HtmlEncode(tLevel.WhoFor), EntryRequirements = HtmlEncode(tLevel.EntryRequirements), WhatYoullLearn = HtmlEncode(tLevel.WhatYoullLearn), HowYoullLearn = HtmlEncode(tLevel.HowYoullLearn), HowYoullBeAssessed = HtmlEncode(tLevel.HowYoullBeAssessed), WhatYouCanDoNext = HtmlEncode(tLevel.WhatYouCanDoNext), Website = ViewModelFormatting.EnsureHttpPrefixed(tLevel.Website), StartDate = tLevel.StartDate, Locations = tLevel.Locations .Select(l => (Venue: venues[l.VenueId], Location: l)) .Select(t => new TLevelLocationViewModel() { TLevelLocationId = t.Location.TLevelLocationId, VenueName = HtmlEncode(t.Venue.VenueName), AddressLine1 = HtmlEncode(t.Venue.AddressLine1), AddressLine2 = HtmlEncode(t.Venue.AddressLine2), Town = HtmlEncode(t.Venue.Town), County = HtmlEncode(t.Venue.County), Postcode = HtmlEncode(t.Venue.Postcode), Telephone = t.Venue.Telephone, Email = t.Venue.Email, Website = ViewModelFormatting.EnsureHttpPrefixed(t.Venue.Website), Latitude = Convert.ToDecimal(t.Venue.Latitude), Longitude = Convert.ToDecimal(t.Venue.Longitude) }) .ToArray() });
public void ConcatAddressLines_WithPaonAndStreetAndNoSaon_ReturnsPaonAndStreetWithSpace() { var result = ViewModelFormatting.ConcatAddressLines(null, "TestPaon", "TestStreet"); result.Should().Be("TestPaon TestStreet"); }
public void ConcatAddressLines_WithWhiteSpacePaddedSaonAndPaonAndStreet_ReturnsSaonPaonAndStreetWithSpaces() { var result = ViewModelFormatting.ConcatAddressLines(" TestSaon ", " TestPaon ", " TestStreet "); result.Should().Be("TestSaon TestPaon TestStreet"); }
public void ConcatAddressLines_WithSaonAndPaonAndNoStreet_ReturnsSaonAndPaonWithSpace() { var result = ViewModelFormatting.ConcatAddressLines("TestSaon", "TestPaon", null); result.Should().Be("TestSaon TestPaon"); }
public void ConcatAddressLines_WithStreetAndNoSaonOrPaon_ReturnsStreet() { var result = ViewModelFormatting.ConcatAddressLines(null, null, "TestStreet"); result.Should().Be("TestStreet"); }
public void ConcatAddressLines_WithPaonAndNoSaonOrStreet_ReturnsPaon() { var result = ViewModelFormatting.ConcatAddressLines(null, "TestPaon", null); result.Should().Be("TestPaon"); }
public void ConcatAddressLines_WithNullOrWhiteSpaceSaonPaonOrStreet_ReturnsEmptyString(string saon, string paon, string street) { var result = ViewModelFormatting.ConcatAddressLines(saon, paon, street); result.Should().Be(string.Empty); }
public async Task <ViewModel> Handle(Query request, CancellationToken cancellationToken) { var tLevels = await _sqlQueryDispatcher.ExecuteQuery(new GetTLevels()); var providerIds = tLevels.Select(t => t.ProviderId).Distinct(); var getProviders = _cosmosDbQueryDispatcher.ExecuteQuery( new CosmosQueries.GetProvidersByIds { ProviderIds = providerIds }); var getSqlProviders = _sqlQueryDispatcher.ExecuteQuery( new GetProvidersByIds { ProviderIds = providerIds }); var getVenues = _sqlQueryDispatcher.ExecuteQuery( new GetVenuesByIds() { VenueIds = tLevels.SelectMany(t => t.Locations.Select(l => l.VenueId)).Distinct() }); await Task.WhenAll(getProviders, getSqlProviders, getVenues); var providers = await getProviders; var sqlProviders = await getSqlProviders; var venues = await getVenues; var feChoices = await _cosmosDbQueryDispatcher.ExecuteQuery( new CosmosQueries.GetFeChoicesByProviderUkprns { ProviderUkprns = providers.Values.Select(p => p.Ukprn) }); return(new ViewModel { TLevels = tLevels.Select(t => { var provider = providers[t.ProviderId]; var sqlProvider = sqlProviders[t.ProviderId]; var feChoice = feChoices.GetValueOrDefault(provider.Ukprn); var providerContact = provider.ProviderContact .SingleOrDefault(c => c.ContactType == "P"); return new TLevelDetailViewModel { TLevelId = t.TLevelId, TLevelDefinitionId = t.TLevelDefinition.TLevelDefinitionId, Qualification = new QualificationViewModel { TLevelName = t.TLevelDefinition.Name, FrameworkCode = t.TLevelDefinition.FrameworkCode, ProgType = t.TLevelDefinition.ProgType, QualificationLevel = t.TLevelDefinition.QualificationLevel.ToString(), }, Provider = new ProviderViewModel { ProviderName = sqlProvider.DisplayName, Ukprn = provider.UnitedKingdomProviderReferenceNumber, AddressLine1 = ViewModelFormatting.ConcatAddressLines(providerContact?.ContactAddress?.SAON?.Description, providerContact?.ContactAddress?.PAON?.Description, providerContact?.ContactAddress?.StreetDescription), AddressLine2 = providerContact?.ContactAddress?.Locality, Town = providerContact?.ContactAddress?.PostTown ?? providerContact?.ContactAddress?.Items?.ElementAtOrDefault(0), Postcode = providerContact?.ContactAddress?.PostCode, County = providerContact?.ContactAddress?.County ?? providerContact?.ContactAddress?.Items?.ElementAtOrDefault(1), Email = providerContact?.ContactEmail, Telephone = providerContact?.ContactTelephone1, Fax = providerContact?.ContactFax, Website = ViewModelFormatting.EnsureHttpPrefixed(providerContact?.ContactWebsiteAddress), LearnerSatisfaction = feChoice?.LearnerSatisfaction, EmployerSatisfaction = feChoice?.EmployerSatisfaction }, WhoFor = t.WhoFor, EntryRequirements = t.EntryRequirements, WhatYoullLearn = t.WhatYoullLearn, HowYoullLearn = t.HowYoullLearn, HowYoullBeAssessed = t.HowYoullBeAssessed, WhatYouCanDoNext = t.WhatYouCanDoNext, Website = ViewModelFormatting.EnsureHttpPrefixed(t.Website), StartDate = t.StartDate, Locations = t.Locations.Select(l => { var venue = venues[l.VenueId]; return new TLevelLocationViewModel { TLevelLocationId = l.TLevelLocationId, VenueName = venue.VenueName, AddressLine1 = venue.AddressLine1, AddressLine2 = venue.AddressLine2, Town = venue.Town, County = venue.County, Postcode = venue.Postcode, Telephone = venue.Telephone, Email = venue.Email, Website = ViewModelFormatting.EnsureHttpPrefixed(venue.Website), Latitude = Convert.ToDecimal(venue.Latitude), Longitude = Convert.ToDecimal(venue.Longitude) }; }).ToArray(), }; }).ToArray() }); }