Exemple #1
0
        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()
            });
Exemple #2
0
        public void ConcatAddressLines_WithPaonAndStreetAndNoSaon_ReturnsPaonAndStreetWithSpace()
        {
            var result = ViewModelFormatting.ConcatAddressLines(null, "TestPaon", "TestStreet");

            result.Should().Be("TestPaon TestStreet");
        }
Exemple #3
0
        public void ConcatAddressLines_WithWhiteSpacePaddedSaonAndPaonAndStreet_ReturnsSaonPaonAndStreetWithSpaces()
        {
            var result = ViewModelFormatting.ConcatAddressLines(" TestSaon ", " TestPaon ", " TestStreet ");

            result.Should().Be("TestSaon TestPaon TestStreet");
        }
Exemple #4
0
        public void ConcatAddressLines_WithSaonAndPaonAndNoStreet_ReturnsSaonAndPaonWithSpace()
        {
            var result = ViewModelFormatting.ConcatAddressLines("TestSaon", "TestPaon", null);

            result.Should().Be("TestSaon TestPaon");
        }
Exemple #5
0
        public void ConcatAddressLines_WithStreetAndNoSaonOrPaon_ReturnsStreet()
        {
            var result = ViewModelFormatting.ConcatAddressLines(null, null, "TestStreet");

            result.Should().Be("TestStreet");
        }
Exemple #6
0
        public void ConcatAddressLines_WithPaonAndNoSaonOrStreet_ReturnsPaon()
        {
            var result = ViewModelFormatting.ConcatAddressLines(null, "TestPaon", null);

            result.Should().Be("TestPaon");
        }
Exemple #7
0
        public void ConcatAddressLines_WithNullOrWhiteSpaceSaonPaonOrStreet_ReturnsEmptyString(string saon, string paon, string street)
        {
            var result = ViewModelFormatting.ConcatAddressLines(saon, paon, street);

            result.Should().Be(string.Empty);
        }
Exemple #8
0
        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()
            });
        }