Example #1
0
        public static IEnumerable <GetTrainingCourseProviderListItem> OrderByScoreAndDistance(
            this IEnumerable <GetTrainingCourseProviderListItem> source,
            DeliveryModeType requestDeliveryModes = DeliveryModeType.NotFound)
        {
            _filteredDeliveryMode = requestDeliveryModes;
            var returnList = new List <GetTrainingCourseProviderListItem>();
            var getTrainingCourseProviderListItems = source.ToList();

            returnList.AddRange(AddFilteredProviders(getTrainingCourseProviderListItems, returnList, GetProvidersUnderFiveMilesWithScoreGreaterThanOrEqualToSix));
            returnList.AddRange(AddFilteredProviders(getTrainingCourseProviderListItems, returnList, GetProvidersWithinFiveToTenMilesWithScoreGreaterThanOrEqualToSix));
            returnList.AddRange(AddFilteredProviders(getTrainingCourseProviderListItems, returnList, GetProvidersWithinTenMilesWithScoreLessThanSix));
            returnList.AddRange(AddFilteredProviders(getTrainingCourseProviderListItems, returnList, item => GetProvidersBetweenTwoDistances(item, 10, 15)));
            returnList.AddRange(AddFilteredProviders(getTrainingCourseProviderListItems, returnList, item => GetProvidersBetweenTwoDistances(item, 15, 20)));
            returnList.AddRange(AddFilteredProviders(getTrainingCourseProviderListItems, returnList, item => GetProvidersBetweenTwoDistances(item, 20, 25)));
            returnList.AddRange(AddFilteredProviders(getTrainingCourseProviderListItems, returnList, item => GetProvidersBetweenTwoDistances(item, 25, 30)));
            returnList.AddRange(AddFilteredProviders(getTrainingCourseProviderListItems, returnList, item => GetProvidersBetweenTwoDistances(item, 30, 40)));
            returnList.AddRange(AddFilteredProviders(getTrainingCourseProviderListItems, returnList, item => GetProvidersBetweenTwoDistances(item, 40, 50)));
            returnList.AddRange(AddFilteredProviders(getTrainingCourseProviderListItems, returnList, item => GetProvidersBetweenTwoDistances(item, 50, 60)));
            returnList.AddRange(AddFilteredProviders(getTrainingCourseProviderListItems, returnList, item => GetProvidersBetweenTwoDistances(item, 60, 70)));
            returnList.AddRange(AddFilteredProviders(getTrainingCourseProviderListItems, returnList, item => GetProvidersBetweenTwoDistances(item, 70, 80)));
            returnList.AddRange(AddFilteredProviders(getTrainingCourseProviderListItems, returnList, item => GetProvidersBetweenTwoDistances(item, 80, 90)));
            returnList.AddRange(AddFilteredProviders(getTrainingCourseProviderListItems, returnList, item => GetProvidersBetweenTwoDistances(item, 90, 100)));
            returnList.AddRange(AddFilteredProviders(getTrainingCourseProviderListItems, returnList, GetProvidersOverOneHundredMiles));

            return(returnList.ToList());
        }
Example #2
0
        public static IEnumerable <GetTrainingCourseProviderListItem> OrderByProviderScore(
            this IEnumerable <GetTrainingCourseProviderListItem> source, List <DeliveryModeType> requestDeliveryModes = null)
        {
            _providerScores = new Dictionary <int, decimal>();

            var getTrainingCourseProviderListItems = source.ToList();

            AddFeedbackRateScore(getTrainingCourseProviderListItems);

            AddAchievementRateScore(getTrainingCourseProviderListItems);

            var scoredAndSortedProviders =
                _providerScores.Join(getTrainingCourseProviderListItems,
                                     achievementRateScore => achievementRateScore.Key,
                                     getTrainingCourseProviderListItem => getTrainingCourseProviderListItem.ProviderId,
                                     (achievementRateScore, getTrainingCourseProviderListItem) =>
                                     new { achievementRateScore, getTrainingCourseProviderListItem })
                .OrderByDescending(t => t.achievementRateScore.Value)
                .Select(c =>
            {
                var getTrainingCourseProviderListItem   = c.getTrainingCourseProviderListItem;
                getTrainingCourseProviderListItem.Score = c.achievementRateScore.Value;
                return(getTrainingCourseProviderListItem);
            })
                .OrderByDescending(c => c.Score)
                .ThenByDescending(c => c.OverallAchievementRate)
                .ThenByDescending(c => c.OverallCohort)
                .ThenByDescending(c => c.EmployerFeedback.TotalEmployerResponses)
                .ThenByDescending(c => c.ApprenticeFeedback.TotalApprenticeResponses)
                .ThenBy(c => c.Name)
                .ToList();

            _filteredDeliveryMode = DeliveryModeType.NotFound;
            if (requestDeliveryModes != null && requestDeliveryModes.Count(c => c != DeliveryModeType.National) == 1) //TODO need to exclude national
            {
                _filteredDeliveryMode = requestDeliveryModes.First(c => c != DeliveryModeType.National);
            }

            if (!getTrainingCourseProviderListItems.All(c => c.HasLocation) ||
                getTrainingCourseProviderListItems.All(c => c.DeliveryModes.All(x => x.DeliveryModeType == DeliveryModeType.Workplace)) ||
                _filteredDeliveryMode == DeliveryModeType.Workplace)
            {
                return(scoredAndSortedProviders);
            }

            return(scoredAndSortedProviders.OrderByScoreAndDistance(_filteredDeliveryMode));
        }
Example #3
0
        public DeliveryModeViewModel Map(DeliveryMode source, DeliveryModeType deliveryModeType)
        {
            var viewModel = source ?? new DeliveryModeViewModel();

            viewModel.DeliveryModeType         = deliveryModeType;
            viewModel.IsAvailable              = source != default;
            viewModel.FormattedDistanceInMiles = source != default && deliveryModeType != DeliveryModeType.Workplace
                ? source.DistanceInMiles.FormatDistance() == "1"
                    ? ": 1 mile away"
                    : $": {source.DistanceInMiles.FormatDistance()} miles away"
                : null;
            viewModel.NationalText = source != default &&
                                     source.National && deliveryModeType == DeliveryModeType.Workplace ? "(national)" : null;
            viewModel.AddressFormatted = source != default ?
                                         BuildFormattedAddress(source)
                : "";
            return(viewModel);
        }
        public void Then_Maps_Delivery_Types_Returning_The_Smallest_Distance_Only_For_One_Type(string deliveryModeString, DeliveryModeType deliveryModeType, string sectorSubjectArea, GetProvidersListItem source)
        {
            source.AchievementRates = null;
            source.DeliveryTypes    = new List <GetDeliveryTypeItem>
            {
                new GetDeliveryTypeItem
                {
                    DeliveryModes   = deliveryModeString,
                    DistanceInMiles = 2.5m
                },
                new GetDeliveryTypeItem
                {
                    DeliveryModes   = deliveryModeString,
                    DistanceInMiles = 3.1m
                },
                new GetDeliveryTypeItem
                {
                    DeliveryModes   = deliveryModeString,
                    DistanceInMiles = 5.5m
                }
            };

            var response = new GetTrainingCourseProviderListItem().Map(source, sectorSubjectArea, 1, new List <DeliveryModeType>(), new List <FeedbackRatingType>(), true);

            response.DeliveryModes.Count.Should().Be(1);
            response.DeliveryModes.FirstOrDefault(c => c.DeliveryModeType == deliveryModeType)?.DistanceInMiles.Should().Be(2.5m);
            response.DeliveryModes.FirstOrDefault().National.Should().BeFalse();
        }