示例#1
0
        public async Task <ActionResult> BestInClassCharacteristics(long urn, BestInClassCriteria bicCriteria)
        {
            ViewBag.ModelState = ModelState;

            var benchmarkSchool = await InstantiateBenchmarkSchoolAsync(urn);

            var schoolCharsVM = new BestInClassCharacteristicsViewModel(benchmarkSchool, bicCriteria);

            return(View("BestInClassCharacteristics", schoolCharsVM));
        }
示例#2
0
 public BenchmarkChartListViewModel(List <ChartViewModel> modelList, SchoolComparisonListModel comparisonList, List <ChartViewModel> chartGroups,
                                    ComparisonType comparisonType, BenchmarkCriteria advancedCriteria, SimpleCriteria simpleCriteria, BestInClassCriteria bicCriteria,
                                    FinancialDataModel benchmarkSchoolData, EstablishmentType estabType, EstablishmentType searchedEstabType, string schoolArea, string selectedArea,
                                    string latestTermAcademies, string latestTermMaintained, ComparisonArea areaType, string laCode, long?urn, int basketSize,
                                    TrustComparisonListModel trustComparisonList = null, List <EstablishmentViewModelBase> comparisonSchools = null, bool excludePartial = false)
     : base(modelList, comparisonList)
 {
     this.ChartGroups               = chartGroups;
     this.AdvancedCriteria          = advancedCriteria;
     this.SimpleCriteria            = simpleCriteria;
     this.BicCriteria               = bicCriteria;
     this.ComparisonType            = comparisonType;
     this.BenchmarkSchoolData       = benchmarkSchoolData;
     this.EstablishmentType         = estabType;
     this.SearchedEstablishmentType = searchedEstabType;
     this.SchoolArea           = schoolArea;
     this.SelectedArea         = selectedArea;
     this.TrustComparisonList  = trustComparisonList;
     this.LatestTermAcademies  = latestTermAcademies;
     this.LatestTermMaintained = latestTermMaintained;
     this.AreaType             = areaType;
     this.LaCode            = laCode;
     this.URN               = urn;
     this.BasketSize        = basketSize;
     this.ComparisonSchools = comparisonSchools;
     this.ExcludePartial    = excludePartial;
 }
 public BestInClassCharacteristicsViewModel(SchoolViewModel school, BestInClassCriteria bicCriteria)
 {
     this.BenchmarkSchool = school;
     this.BicCriteria     = bicCriteria;
 }
        public BenchmarkCriteria BuildFromBicComparisonCriteria(FinancialDataModel benchmarkSchoolData, BestInClassCriteria bicCriteria, int percentageMargin = 0)
        {
            var bmCriteria = new BenchmarkCriteria()
            {
                SchoolOverallPhase = new[] { bicCriteria.OverallPhase },
                SchoolPhase        = CriteriaSearchConfig.BIC_ALLOWED_PHASES,
                MinKs2Progress     = bicCriteria.Ks2ProgressScoreMin,
                MaxKs2Progress     = bicCriteria.Ks2ProgressScoreMax,
                MinP8Mea           = bicCriteria.Ks4ProgressScoreMin,
                MaxP8Mea           = bicCriteria.Ks4ProgressScoreMax,
                MinRRToIncome      = bicCriteria.RRPerIncomeMin,
                MinNoPupil         = WithinPositiveLimits(bicCriteria.NoPupilsMin - (bicCriteria.NoPupilsMin * percentageMargin / 100)),
                MaxNoPupil         = bicCriteria.NoPupilsMax + (bicCriteria.NoPupilsMax * percentageMargin / 100),
                MinPerPupilExp     = bicCriteria.PerPupilExpMin,
                MaxPerPupilExp     = bicCriteria.PerPupilExpMax + (bicCriteria.PerPupilExpMax * percentageMargin / 100),
                MinPerFSM          = WithinPercentLimits(bicCriteria.PercentageFSMMin - (bicCriteria.PercentageFSMMin * percentageMargin / 100)),
                MaxPerFSM          = WithinPercentLimits(bicCriteria.PercentageFSMMax + (bicCriteria.PercentageFSMMax * percentageMargin / 100)),
                LondonWeighting    = bicCriteria.LondonWeighting
            };

            if (bicCriteria.OverallPhase == "All-through")
            {
                bmCriteria.SchoolPhase = new[] { "All-through" };
            }

            if (bicCriteria.SENEnabled)
            {
                bmCriteria.MinPerSEN = WithinPercentLimits(bicCriteria.PercentageSENMin - (bicCriteria.PercentageSENMin * percentageMargin / 100));
                bmCriteria.MaxPerSEN = WithinPercentLimits(bicCriteria.PercentageSENMax + (bicCriteria.PercentageSENMax * percentageMargin / 100));
            }

            if (bicCriteria.UREnabled)
            {
                bmCriteria.UrbanRural = new[] { bicCriteria.UrbanRural };
            }

            return(bmCriteria);
        }
示例#5
0
        public async Task <ComparisonResult> GenerateBenchmarkListWithBestInClassComparisonAsync(EstablishmentType estType,
                                                                                                 BenchmarkCriteria benchmarkCriteria, BestInClassCriteria bicCriteria,
                                                                                                 FinancialDataModel defaultSchoolFinancialDataModel)
        {
            //STEP 1: Straight search with prefilled criteria
            var benchmarkSchools = await _financialDataService.SearchSchoolsByCriteriaAsync(benchmarkCriteria, estType, true);

            if (benchmarkSchools.Count > CriteriaSearchConfig.BIC_TARGET_POOL_COUNT) //Original query returns more than required. Clip from top by per people expenditure proximity.
            {
                benchmarkSchools = benchmarkSchools.OrderBy(b => Math.Abs(b.PerPupilTotalExpenditure.GetValueOrDefault() - defaultSchoolFinancialDataModel.PerPupilTotalExpenditure.GetValueOrDefault()))
                                   .Take(CriteriaSearchConfig.BIC_TARGET_POOL_COUNT).ToList();
            }

            //STEP 2: Original query returns less than required. Expand criteria values gradually and try this max 10 times
            var tryCount = 0;

            while (benchmarkSchools.Count < CriteriaSearchConfig.BIC_TARGET_POOL_COUNT)
            {
                if (++tryCount > CriteriaSearchConfig.MAX_BIC_TRY_LIMIT) //Max query try reached. Return whatever is found.
                {
                    break;
                }

                benchmarkCriteria = _benchmarkCriteriaBuilderService.BuildFromBicComparisonCriteria(defaultSchoolFinancialDataModel, bicCriteria, tryCount);

                benchmarkSchools = await _financialDataService.SearchSchoolsByCriteriaAsync(benchmarkCriteria, estType, true);

                if (benchmarkSchools.Count > CriteriaSearchConfig.BIC_TARGET_POOL_COUNT) //Number jumping to more than ideal. Clip from top by per people expenditure proximity.
                {
                    benchmarkSchools = benchmarkSchools.OrderBy(b => Math.Abs(b.PerPupilTotalExpenditure.GetValueOrDefault() - defaultSchoolFinancialDataModel.PerPupilTotalExpenditure.GetValueOrDefault()))
                                       .Take(CriteriaSearchConfig.BIC_TARGET_POOL_COUNT).ToList();
                    break;
                }
            }

            //STEP 3: Further reduce pool of 50 (or less) to target 15 by highest progress measure
            if (benchmarkSchools.Count > ComparisonListLimit.BIC)
            {
                benchmarkSchools = benchmarkSchools
                                   .OrderByDescending(b => b.OverallPhase == "Secondary" || b.OverallPhase == "All-through" ? b.Progress8Measure : b.Ks2Progress)
                                   .Take(ComparisonListLimit.BIC)
                                   .ToList();
            }

            return(new ComparisonResult()
            {
                BenchmarkSchools = benchmarkSchools,
                BenchmarkCriteria = benchmarkCriteria
            });
        }