public void LoadComparisonData(AllDistrictComparisonsDto response) { BudgetsService.Prime(); foreach (var districtContainer in response.DistrictFiscalYearMetrics) { //for each fiscal year foreach (var fyMetric in districtContainer.MetricsByFiscalYear) { var budget = BudgetsService.Find(districtContainer.District.DistrictId, fyMetric.Key); var previousBudget = BudgetsService.FindPreviousYear(budget); //we need current and previous to calculate any increases... if (budget == null || previousBudget == null) { Logger.LogDebug($"Skipping for district {districtContainer.District.Name}. Budget Null?:{budget == null}. Previous Budget Null?:({previousBudget == null}"); continue; } var fyEnrollment = EnrollmentService.Find(districtContainer.District.DistrictId, budget.FiscalYearId); //add the metric fyMetric.Value.Metrics.Add(ComparisonType.Enrollment, fyEnrollment.Enrollment); } } }
public void LoadComparisonData(AllDistrictComparisonsDto response) { BudgetsService.Prime(); foreach (var districtContainer in response.DistrictFiscalYearMetrics) { //for each fiscal year foreach (var fyMetric in districtContainer.MetricsByFiscalYear) { var budget = BudgetsService.Find(districtContainer.District.DistrictId, fyMetric.Key); var previousBudget = BudgetsService.FindPreviousYear(budget); //we need current and previous to calculate any increases... if (budget == null || previousBudget == null) { continue; } if (!budget.Millage.HasValue || !previousBudget.Millage.HasValue) { continue; } var millageChange = budget.Millage - previousBudget.Millage; var taxRateIncrease = millageChange / previousBudget.Millage; //add the metric fyMetric.Value.Metrics.Add(ComparisonType.TaxRateIncrease, taxRateIncrease); } } }
public void LoadComparisonData(AllDistrictComparisonsDto response) { BudgetsService.Prime(); var enrollments = EnrollmentsService.GetAll().ToDictionary(x => x.DistrictId); foreach (var districtContainer in response.DistrictFiscalYearMetrics) { //for each fiscal year foreach (var fyMetric in districtContainer.MetricsByFiscalYear) { //only proceed if we have a budget var budget = BudgetsService.Find(districtContainer.District.DistrictId, fyMetric.Key); if (budget == null || budget.Assessed.HasValue == false) { continue; } //add assessment fyMetric.Value.Metrics.Add(ComparisonType.Assessed, budget.Assessed); //if we have enrollment, calculate assessment per student if (enrollments.TryGetValue(districtContainer.District.DistrictId, out var enrollment)) { var assessedPerStudent = budget.Assessed.Value / enrollment.Enrollment; fyMetric.Value.Metrics.Add(ComparisonType.AssessedPerStudent, assessedPerStudent); } //we can't do comparisons to previous w/out a previous budget var previousBudget = BudgetsService.FindPreviousYear(budget); if (previousBudget == null || previousBudget.Assessed.HasValue == false) { continue; } var assessedChanged = budget.Assessed - previousBudget.Assessed; var assessedNewRevenue = (assessedChanged * budget.Millage) / 1000; //add the metric fyMetric.Value.Metrics.Add(ComparisonType.AssessedIncrease, assessedChanged); fyMetric.Value.Metrics.Add(ComparisonType.AssessedNewRevenue, assessedNewRevenue); if (enrollment == null) { continue; } var assessedNewRevenuePerStudent = assessedNewRevenue / enrollment.Enrollment; fyMetric.Value.Metrics.Add(ComparisonType.AssessedNewRevenuePerStudent, assessedNewRevenuePerStudent); } } }
public void LoadComparisonData(AllDistrictComparisonsDto response) { var expendituresByDistrict = BudgetExpendituresService.GetAll().ToDictionary(x => x.DistrictId); var enrollmentsByDistrict = EnrollmentsService.GetAll().ToDictionary(x => x.DistrictId); BudgetsService.Prime(); foreach (var districtContainer in response.DistrictFiscalYearMetrics) { //if we don't have expenditures for this district... pass if (!expendituresByDistrict.ContainsKey(districtContainer.District.DistrictId)) { continue; } //if we don't have enrollment data for this district... pass if (!enrollmentsByDistrict.ContainsKey(districtContainer.District.DistrictId)) { continue; } //get expenditures for this district var districtExpenditures = expendituresByDistrict[districtContainer.District.DistrictId]; var fiscalYearExpenditures = districtExpenditures.FiscalYearAmounts.ToDictionary(x => x.FiscalYearId); //for each fiscal year foreach (var fyMetric in districtContainer.MetricsByFiscalYear) { //if we don't have expenditures for this year... pass if (!fiscalYearExpenditures.ContainsKey(fyMetric.Key)) { continue; } //calculate the expenditure per student based on average enrollment... var fyExpenditures = (decimal)fiscalYearExpenditures[fyMetric.Key].Total; var enrollment = (decimal)enrollmentsByDistrict[districtContainer.District.DistrictId].Enrollment; var costPerStudent = fyExpenditures / enrollment; //add the metric fyMetric.Value.Metrics.Add(ComparisonType.TotalCost, fyExpenditures); fyMetric.Value.Metrics.Add(ComparisonType.TotalCostPerStudent, costPerStudent); //now make comparisons to previous year var budget = BudgetsService.Find(districtContainer.District.DistrictId, fyMetric.Key); var previousBudget = BudgetsService.FindPreviousYear(budget); //only make comparison if we have data if (previousBudget == null) { continue; } if (!fiscalYearExpenditures.ContainsKey(previousBudget.FiscalYearId)) { continue; } var previousYearExpenditures = (decimal)fiscalYearExpenditures[previousBudget.FiscalYearId].Total; var costIncrease = fyExpenditures - previousYearExpenditures; var costPerStudentIncrease = costIncrease / enrollment; fyMetric.Value.Metrics.Add(ComparisonType.TotalCostIncrease, costIncrease); fyMetric.Value.Metrics.Add(ComparisonType.TotalCostIncreasePerStudent, costPerStudentIncrease); } } }
public void LoadComparisonData(AllDistrictComparisonsDto response) { BudgetsService.Prime(); var enrollmentByDistrict = EnrollmentsService.GetAll().ToDictionary(x => x.DistrictId); var chichesterEnrollment = enrollmentByDistrict[ChichesterDistrictId]?.Enrollment; var chichesterContainer = response.DistrictFiscalYearMetrics.FirstOrDefault(x => x.District.DistrictId == ChichesterDistrictId); if (chichesterEnrollment == null || chichesterContainer == null) { return; } foreach (var districtContainer in response.DistrictFiscalYearMetrics) { //for each fiscal year foreach (var fyMetric in districtContainer.MetricsByFiscalYear) { var budget = BudgetsService.Find(districtContainer.District.DistrictId, fyMetric.Key); if (budget == null) { continue; } var costPerStudent = (decimal?)fyMetric.Value.Metrics[ComparisonType.TotalCostPerStudent]; if (!costPerStudent.HasValue) { return; } var chichesterMetrics = chichesterContainer.MetricsByFiscalYear[fyMetric.Key]; var chichesterCostPerStudent = (decimal?)chichesterMetrics.Metrics[ComparisonType.TotalCostPerStudent]; Logger.LogDebug($"Chichester {ComparisonType.TotalCostPerStudent}:{chichesterCostPerStudent}, {ComparisonType.Enrollment}:{chichesterEnrollment}"); //what is the difference in this districts cost-per-student than chichester? var difference = Math.Abs(costPerStudent.Value - chichesterCostPerStudent.Value); //if chichester costs-per-student were the same as this district, how much would we save? var chichesterExcessSpending = difference * chichesterEnrollment; fyMetric.Value.Metrics.Add(ComparisonType.CostPerStudentComparedToChichester, difference); var data = new { Value = chichesterExcessSpending, //include all the intermediary values for proof calculationValues = new { ChichesterCostPerStudent = chichesterCostPerStudent, DistrictCostPerStudent = costPerStudent.Value, DifferenceCostPerStudent = difference, ChichesterEnrollment = chichesterEnrollment, } }; fyMetric.Value.Metrics.Add(ComparisonType.ExcessChichesterSpending, data); } } }
public void LoadComparisonData(AllDistrictComparisonsDto response) { var revenueByDistrict = BudgetRevenuesService.GetAll().ToDictionary(x => x.DistrictId); var enrollmentsByDistrict = EnrollmentsService.GetAll().ToDictionary(x => x.DistrictId); BudgetsService.Prime(); foreach (var districtContainer in response.DistrictFiscalYearMetrics) { //if we don't have revenues for this district... pass if (!revenueByDistrict.ContainsKey(districtContainer.District.DistrictId)) { continue; } //if we don't have enrollment data for this district... pass if (!enrollmentsByDistrict.ContainsKey(districtContainer.District.DistrictId)) { continue; } //get revenues for this district var districtRevenues = revenueByDistrict[districtContainer.District.DistrictId]; var fiscalYearRevenues = districtRevenues.FiscalYearAmounts.ToDictionary(x => x.FiscalYearId); var levelAmounts = districtRevenues.Sources.ToDictionary(x => x.LevelId); //for each fiscal year foreach (var fyMetric in districtContainer.MetricsByFiscalYear) { //if we don't have revenue for this year... pass if (!fiscalYearRevenues.ContainsKey(fyMetric.Key)) { continue; } //calculate the revenue per student based on average enrollment... var fyRevenue = (decimal)fiscalYearRevenues[fyMetric.Key].Total; var enrollment = enrollmentsByDistrict[districtContainer.District.DistrictId]; var revenuePerStudent = fyRevenue / enrollment.Enrollment; //add the metric fyMetric.Value.Metrics.Add(ComparisonType.TotalRevenue, fyRevenue); fyMetric.Value.Metrics.Add(ComparisonType.TotalRevenuePerStudent, revenuePerStudent); //try to get state revenues if (levelAmounts.TryGetValue("S", out var stateRevenues)) { var currentYearStateRevenue = stateRevenues.FiscalYearAmounts.FirstOrDefault(x => x.FiscalYearId == fyMetric.Key); if (currentYearStateRevenue != null) { var fyStateRevenue = currentYearStateRevenue.Total; fyMetric.Value.Metrics.Add(ComparisonType.StateRevenue, fyStateRevenue); var stateRevenuePerStudent = currentYearStateRevenue.Total / enrollment.Enrollment; fyMetric.Value.Metrics.Add(ComparisonType.StateRevenuePerStudent, stateRevenuePerStudent); fyMetric.Value.Metrics.Add(ComparisonType.StateRevenuePercent, fyStateRevenue / fyRevenue); } } //now make comparisons to previous year var budget = BudgetsService.Find(districtContainer.District.DistrictId, fyMetric.Key); var previousBudget = BudgetsService.FindPreviousYear(budget); //only make comparison if we have data if (previousBudget == null) { continue; } if (!fiscalYearRevenues.ContainsKey(previousBudget.FiscalYearId)) { continue; } var previousYearsRevenue = (decimal)fiscalYearRevenues[previousBudget.FiscalYearId].Total; var revenueIncrease = fyRevenue - previousYearsRevenue; var revenuePerStudentIncrease = revenueIncrease / enrollment.Enrollment; fyMetric.Value.Metrics.Add(ComparisonType.RevenueIncrease, revenueIncrease); fyMetric.Value.Metrics.Add(ComparisonType.RevenueIncreasePerStudent, revenuePerStudentIncrease); } } }