private decimal?CalculateAmountPerUnit(SchoolFinancialDataModel dataModel, string fieldName, UnitType unit, decimal total) { var rawAmount = dataModel.GetDecimal(fieldName); var pupilCount = dataModel.PupilCount; var teacherCount = dataModel.TeacherCount; if (rawAmount == null) { return(null); } switch (unit) { case UnitType.AbsoluteMoney: return(rawAmount); case UnitType.PerTeacher: return((teacherCount == 0) ? null : (rawAmount / (decimal)teacherCount)); case UnitType.PerPupil: return((pupilCount == 0) ? null : (rawAmount / (decimal)pupilCount)); case UnitType.PercentageOfTotal: return((total == 0) ? 0 : ((rawAmount / total) * 100)); default: return(rawAmount); } }
private decimal?CalculateWFAmount(SchoolFinancialDataModel schoolData, string fieldName, UnitType unit) { decimal?amount = null; decimal?rawAmount = null; switch (unit) { case UnitType.AbsoluteCount: amount = schoolData.GetDecimal(fieldName); break; case UnitType.NoOfPupilsPerMeasure: rawAmount = schoolData.GetDecimal(fieldName); if (rawAmount == null || rawAmount == 0) { break; } amount = (schoolData.PupilCount == 0) ? null : ((decimal)schoolData.PupilCount / rawAmount); if (amount.HasValue) { amount = decimal.Round(amount.GetValueOrDefault(), 2, MidpointRounding.AwayFromZero); } break; case UnitType.HeadcountPerFTE: string fieldNameBase = fieldName.Contains("FullTimeEquivalent") ? fieldName.Substring(0, fieldName.Length - 18) : fieldName.Substring(0, fieldName.Length - 9); var total = schoolData.GetDecimal(fieldNameBase + "Headcount").GetValueOrDefault(); rawAmount = schoolData.GetDecimal(fieldNameBase + "FullTimeEquivalent"); if (rawAmount == null) { break; } if (total == 0) { amount = 0; } else { amount = (total == 0) ? 0 : (total / rawAmount); amount = decimal.Round(amount.GetValueOrDefault(), 2, MidpointRounding.AwayFromZero); } break; case UnitType.FTERatioToTotalFTE: total = schoolData.GetDecimal("TotalSchoolWorkforceFullTimeEquivalent").GetValueOrDefault(); rawAmount = schoolData.GetDecimal(fieldName); if (rawAmount == null) { break; } if (total == 0) { amount = 0; } else { amount = (total == 0) ? 0 : (rawAmount / total) * 100; amount = decimal.Round(amount.GetValueOrDefault(), 2, MidpointRounding.AwayFromZero); } break; } return(amount); }