protected string GetRecentDistroIndicator(int adminLevelId, string indicatorName, DiseaseType diseaseType, DateTime start, DateTime end, ref string errors) { // If there is a RecentDistro instance, look for the value there RecentDistro recentDistro = RecentDistro.GetInstance(false /* don't instantiate */); if (recentDistro != null) { string storedVal = recentDistro.GetRecentDistroIndicator(adminLevelId, indicatorName, diseaseType, start, end, ref errors); if (storedVal != null) { return storedVal; } } AdminLevelIndicators levelInds = null; string key = adminLevelId + start.ToShortDateString() + end.ToShortDateString() + diseaseType.ToString(); if (distroDict.ContainsKey(key)) levelInds = distroDict[key]; else { ReportOptions options = new ReportOptions(); DistributionReportGenerator gen = new DistributionReportGenerator(); DiseaseRepository repo = new DiseaseRepository(); DemoRepository demo = new DemoRepository(); var disease = repo.GetDiseaseById((int)diseaseType); DiseaseDistroPc dd = repo.Create(diseaseType); if (diseaseType == DiseaseType.STH) { options.SelectedIndicators.Add(ReportRepository.CreateReportIndicator((int)diseaseType, new KeyValuePair<string, Indicator>(indicatorName, new Indicator { Id = 141, DisplayName = "DDSTHPopulationRequiringPc" }))); options.SelectedIndicators.Add(ReportRepository.CreateReportIndicator((int)diseaseType, new KeyValuePair<string, Indicator>(indicatorName, new Indicator { Id = 142, DisplayName = "DDSTHPsacAtRisk" }))); options.SelectedIndicators.Add(ReportRepository.CreateReportIndicator((int)diseaseType, new KeyValuePair<string, Indicator>(indicatorName, new Indicator { Id = 143, DisplayName = "DDSTHSacAtRisk" }))); options.SelectedIndicators.Add(ReportRepository.CreateReportIndicator((int)diseaseType, new KeyValuePair<string, Indicator>(indicatorName, new Indicator { Id = 140, DisplayName = "DDSTHPopulationAtRisk" }))); } else if (diseaseType == DiseaseType.Lf) { options.SelectedIndicators.Add(ReportRepository.CreateReportIndicator((int)diseaseType, new KeyValuePair<string, Indicator>(indicatorName, new Indicator { Id = 98, DisplayName = "DDLFPopulationAtRisk" }))); options.SelectedIndicators.Add(ReportRepository.CreateReportIndicator((int)diseaseType, new KeyValuePair<string, Indicator>(indicatorName, new Indicator { Id = 99, DisplayName = "DDLFPopulationRequiringPc" }))); } else if (diseaseType == DiseaseType.Oncho) { options.SelectedIndicators.Add(ReportRepository.CreateReportIndicator((int)diseaseType, new KeyValuePair<string, Indicator>(indicatorName, new Indicator { Id = 111, DisplayName = "DDOnchoPopulationAtRisk" }))); options.SelectedIndicators.Add(ReportRepository.CreateReportIndicator((int)diseaseType, new KeyValuePair<string, Indicator>(indicatorName, new Indicator { Id = 112, DisplayName = "DDOnchoPopulationRequiringPc" }))); } else if (diseaseType == DiseaseType.Schisto) { options.SelectedIndicators.Add(ReportRepository.CreateReportIndicator((int)diseaseType, new KeyValuePair<string, Indicator>(indicatorName, new Indicator { Id = 125, DisplayName = "DDSchistoPopulationAtRisk" }))); options.SelectedIndicators.Add(ReportRepository.CreateReportIndicator((int)diseaseType, new KeyValuePair<string, Indicator>(indicatorName, new Indicator { Id = 126, DisplayName = "DDSchistoPopulationRequiringPc" }))); options.SelectedIndicators.Add(ReportRepository.CreateReportIndicator((int)diseaseType, new KeyValuePair<string, Indicator>(indicatorName, new Indicator { Id = 127, DisplayName = "DDSchistoSacAtRisk" }))); } else if (diseaseType == DiseaseType.Trachoma) options.SelectedIndicators.Add(ReportRepository.CreateReportIndicator((int)diseaseType, new KeyValuePair<string, Indicator>(indicatorName, new Indicator { Id = 161, DisplayName = "DDTraPopulationAtRisk" }))); options.StartDate = start; options.EndDate = end; options.MonthYearStarts = start.Month; var adminlevel = demo.GetAdminLevelById(adminLevelId); options.SelectedAdminLevels = new List<AdminLevel> { adminlevel }; options.IsNoAggregation = false; options.IsByLevelAggregation = true; options.IsAllLocations = false; levelInds = gen.GetRecentDiseaseDistribution(options); levelInds.StartDate = start; levelInds.EndDate = end; levelInds.DiseaseName = disease.DisplayName; } if (levelInds.Indicators.ContainsKey(indicatorName) ) { if(!string.IsNullOrEmpty(levelInds.Indicators[indicatorName].Value)) return levelInds.Indicators[indicatorName].Value.ToString(); else return ""; } string error = string.Format(Translations.ReportsNoDdInDateRange, levelInds.Name, start.ToShortDateString(), end.ToShortDateString(), levelInds.DiseaseName) + Environment.NewLine; if (!errors.Contains(error)) errors += error; return Translations.NA; }