private DasProvider ExportProvider(
            int ukprn,
            int exportKey,
            IEnumerable <Provider> providers,
            List <Apprenticeship> apprenticeships,
            Core.DataStore.CosmosDb.Models.FeChoice feChoice)
        {
            var evt = new EventTelemetry {
                Name = "ComposeProviderForExport"
            };

            evt.Properties.TryAdd("UKPRN", $"{ukprn}");
            evt.Metrics.TryAdd("ProviderApprenticeships", apprenticeships.Count());
            evt.Metrics.TryAdd("MatchingProviders", providers?.Count() ?? 0);

            if (!(providers?.Any() ?? false))
            {
                throw new ProviderNotFoundException(ukprn);
            }

            try
            {
                var dasProvider = _DASHelper.CreateDasProviderFromProvider(exportKey, providers.First(), feChoice);

                if (dasProvider != null)
                {
                    var apprenticeshipLocations = apprenticeships.Where(x => x.ApprenticeshipLocations != null)
                                                  .SelectMany(x => x.ApprenticeshipLocations).Distinct(new ApprenticeshipLocationSameAddress());

                    var index         = 1000;
                    var locationIndex = new Dictionary <string, ApprenticeshipLocation>(apprenticeshipLocations
                                                                                        .Where(x => x.RecordStatus == RecordStatus.Live)
                                                                                        .Select(x => new KeyValuePair <string, ApprenticeshipLocation>($"{exportKey:D4}{index++:D4}", x)));

                    var exportStandards  = apprenticeships.Where(x => x.StandardCode.HasValue);
                    var exportFrameworks = apprenticeships.Where(x => x.FrameworkCode.HasValue);

                    evt.Metrics.TryAdd("Provider Locations", locationIndex.Count());
                    evt.Metrics.TryAdd("Provider Standards", exportStandards.Count());
                    evt.Metrics.TryAdd("Provider Frameworks", exportFrameworks.Count());

                    dasProvider.Locations  = _DASHelper.ApprenticeshipLocationsToLocations(exportKey, locationIndex);
                    dasProvider.Standards  = _DASHelper.ApprenticeshipsToStandards(exportKey, exportStandards, locationIndex);
                    dasProvider.Frameworks = _DASHelper.ApprenticeshipsToFrameworks(exportKey, exportFrameworks, locationIndex);

                    _telemetryClient.TrackEvent(evt);

                    return(dasProvider);
                }
            }
            catch (Exception e)
            {
                throw new ProviderExportException(ukprn, e);
            }

            throw new ProviderNotFoundException(ukprn);
        }
コード例 #2
0
        public async Task Handle_WithValidCourseIdAndCourseRunId_ReturnsOkWithResult()
        {
            var venue = new Venue
            {
                VenueId   = Guid.NewGuid(),
                VenueName = "TestVenueName"
            };

            var lars = new Core.Search.Models.Lars
            {
                LearnAimRef      = "00112233",
                LearnAimRefTitle = "TestLearnAimRefTitle"
            };

            var courseRun = new CourseRun
            {
                CourseRunId     = Guid.NewGuid(),
                CourseRunStatus = CourseStatus.Live,
                DurationUnit    = CourseDurationUnit.Months,
                DurationValue   = 3,
                VenueId         = venue.VenueId
            };

            var alternativeCourseRun = new CourseRun
            {
                CourseRunId     = Guid.NewGuid(),
                CourseRunStatus = CourseStatus.Live,
                DurationUnit    = CourseDurationUnit.Months,
                DurationValue   = 3,
                VenueId         = venue.VenueId
            };

            var course = new Course
            {
                CourseId      = Guid.NewGuid(),
                ProviderUkprn = 12345678,
                LearnAimRef   = lars.LearnAimRef,
                CourseRuns    = new[]
                {
                    courseRun,
                    alternativeCourseRun
                }
            };

            var provider = new Provider
            {
                Id = Guid.NewGuid(),
                UnitedKingdomProviderReferenceNumber = "12345678",
                ProviderContact = new[]
                {
                    new Core.DataStore.CosmosDb.Models.ProviderContact
                    {
                        ContactEmail = "*****@*****.**",
                        ContactType  = "P"
                    }
                }
            };

            var sqlProvider = new Core.DataStore.Sql.Models.Provider
            {
                ProviderId        = provider.Id,
                ProviderName      = "TestProviderAlias",
                DisplayNameSource = ProviderDisplayNameSource.ProviderName
            };

            var feChoice = new Core.DataStore.CosmosDb.Models.FeChoice
            {
                UKPRN = course.ProviderUkprn,
                EmployerSatisfaction = 1.2M,
                LearnerSatisfaction  = 3.4M
            };

            SqlQueryDispatcher.Setup(s => s.ExecuteQuery(It.IsAny <GetCourse>()))
            .ReturnsAsync(course);

            CosmosDbQueryDispatcher.Setup(s => s.ExecuteQuery(It.IsAny <Core.DataStore.CosmosDb.Queries.GetProviderByUkprn>()))
            .ReturnsAsync(provider);

            LarsSearchClient.Setup(s => s.Search(It.IsAny <LarsLearnAimRefSearchQuery>()))
            .ReturnsAsync(new SearchResult <Core.Search.Models.Lars>
            {
                Items = new[] { new SearchResultItem <Core.Search.Models.Lars> {
                                    Record = lars
                                } }
            });

            SqlQueryDispatcher.Setup(s => s.ExecuteQuery(It.IsAny <GetVenuesByProvider>()))
            .ReturnsAsync(new[] { venue });

            CosmosDbQueryDispatcher.Setup(s => s.ExecuteQuery(It.IsAny <GetFeChoiceForProvider>()))
            .ReturnsAsync(feChoice);

            SqlQueryDispatcher.Setup(s => s.ExecuteQuery(It.IsAny <Core.DataStore.Sql.Queries.GetProviderById>()))
            .ReturnsAsync(sqlProvider);

            var result = await HttpClient.GetAsync(CourseRunDetailUrl(course.CourseId, courseRun.CourseRunId));

            result.StatusCode.Should().Be(StatusCodes.Status200OK);

            var resultJson = JObject.Parse(await result.Content.ReadAsStringAsync());

            using (new AssertionScope())
            {
                resultJson.ToObject <object>().Should().NotBeNull();
                resultJson["provider"].ToObject <object>().Should().NotBeNull();
                resultJson["provider"]["ukprn"].ToObject <int>().Should().Be(provider.Ukprn);
                resultJson["provider"]["providerName"].ToObject <string>().Should().Be(sqlProvider.DisplayName);
                resultJson["provider"]["tradingName"].ToObject <string>().Should().Be(sqlProvider.DisplayName);
                resultJson["provider"]["email"].ToObject <string>().Should().Be(provider.ProviderContact.Single().ContactEmail);
                resultJson["provider"]["learnerSatisfaction"].ToObject <decimal>().Should().Be(feChoice.LearnerSatisfaction);
                resultJson["provider"]["employerSatisfaction"].ToObject <decimal>().Should().Be(feChoice.EmployerSatisfaction);
                resultJson["course"].ToObject <object>().Should().NotBeNull();
                resultJson["course"]["courseId"].ToObject <Guid>().Should().Be(course.CourseId);
                resultJson["venue"].ToObject <object>().Should().NotBeNull();
                resultJson["venue"]["venueName"].ToObject <string>().Should().Be(venue.VenueName);
                resultJson["qualification"].ToObject <object>().Should().NotBeNull();
                resultJson["qualification"]["learnAimRef"].ToObject <string>().Should().Be(lars.LearnAimRef);
                resultJson["qualification"]["learnAimRefTitle"].ToObject <string>().Should().Be(lars.LearnAimRefTitle);
                resultJson["alternativeCourseRuns"][0]["courseRunId"].ToObject <Guid>().Should().Be(alternativeCourseRun.CourseRunId);
                resultJson["courseRunId"].ToObject <Guid>().Should().Be(courseRun.CourseRunId);
            }
        }
コード例 #3
0
        public DasProvider CreateDasProviderFromProvider(int exportKey, Models.Providers.Provider provider, Core.DataStore.CosmosDb.Models.FeChoice feChoice)
        {
            if (!int.TryParse(provider.UnitedKingdomProviderReferenceNumber, out var ukprn))
            {
                throw new InvalidUkprnException(provider.UnitedKingdomProviderReferenceNumber);
            }

            if (!provider.ProviderContact.Any())
            {
                throw new MissingContactException();
            }

            try
            {
                var contactDetails = provider.ProviderContact.FirstOrDefault();

                return(new DasProvider
                {
                    Id = provider.ProviderId ?? _intIdentifier + exportKey,
                    Email = contactDetails?.ContactEmail,
                    EmployerSatisfaction = feChoice?.EmployerSatisfaction,
                    LearnerSatisfaction = feChoice?.LearnerSatisfaction,
                    MarketingInfo = provider.MarketingInformation,
                    Name = provider.Name,
                    TradingName = provider.Name,
                    NationalProvider = provider.NationalApprenticeshipProvider,
                    UKPRN = ukprn,
                    Website = contactDetails?.ContactWebsiteAddress,
                    Phone = !string.IsNullOrWhiteSpace(contactDetails?.ContactTelephone1)
                        ? contactDetails?.ContactTelephone1
                        : contactDetails?.ContactTelephone2
                });
            }

            catch (Exception e)
            {
                throw new ProviderExportException(ukprn, e);
            }
        }