private IList <GetPmsSummaryReportResponse.KpiData> SetPillarAndTotalScoreColor(IList <GetPmsSummaryReportResponse.KpiData> kpiDatas, PmsSummaryScoringIndicator pillarScoringIndicators, PmsSummaryScoringIndicator totalScoreScoringIndicators) { IDictionary <string, double?[]> totalPillar = new Dictionary <string, double?[]>(); var groupedPillars = kpiDatas.GroupBy(x => x.Pillar); foreach (var groupedPillar in groupedPillars) { double?totalScore = null; var notNullPillar = groupedPillar.Where(x => x.Score.HasValue).ToList(); if (notNullPillar.Count > 0) { totalScore = 0; } foreach (var item in notNullPillar) { if (item.Score.HasValue) { totalScore += item.Score.Value; } } totalPillar.Add(groupedPillar.Key, new double?[] { totalScore, groupedPillar.First().PillarWeight }); } double?allTotalScore = null; if (totalPillar.Count > 0) { allTotalScore = 0; } foreach (var tp in totalPillar) { if (tp.Value[0].HasValue && tp.Value[1].HasValue) { allTotalScore += tp.Value[0] / 100 * tp.Value[1]; } var kpiWithPillars = kpiDatas.Where(x => x.Pillar == tp.Key).ToList(); foreach (var kpiWithPillar in kpiWithPillars) { kpiWithPillar.PillarColor = GetScoreColor(tp.Value[0], pillarScoringIndicators.ScoreIndicators); } } return(kpiDatas.Select(x => { x.TotalScoreColor = GetScoreColor(allTotalScore, totalScoreScoringIndicators.ScoreIndicators); return x; }).ToList()); }
private IList<GetPmsSummaryReportResponse.KpiData> SetPillarAndTotalScoreColor(IList<GetPmsSummaryReportResponse.KpiData> kpiDatas, PmsSummaryScoringIndicator pillarScoringIndicators, PmsSummaryScoringIndicator totalScoreScoringIndicators) { IDictionary<string, double?[]> totalPillar = new Dictionary<string, double?[]>(); var groupedPillars = kpiDatas.GroupBy(x => x.Pillar); foreach (var groupedPillar in groupedPillars) { double? totalScore = null; var notNullPillar = groupedPillar.Where(x => x.Score.HasValue).ToList(); if (notNullPillar.Count > 0) totalScore = 0; foreach (var item in notNullPillar) { if (item.Score.HasValue) { totalScore += item.Score.Value; } } totalPillar.Add(groupedPillar.Key, new double?[] { totalScore, groupedPillar.First().PillarWeight }); } double? allTotalScore = null; if (totalPillar.Count > 0) allTotalScore = 0; foreach (var tp in totalPillar) { if (tp.Value[0].HasValue && tp.Value[1].HasValue) { allTotalScore += tp.Value[0] / 100 * tp.Value[1]; } var kpiWithPillars = kpiDatas.Where(x => x.Pillar == tp.Key).ToList(); foreach (var kpiWithPillar in kpiWithPillars) { kpiWithPillar.PillarColor = GetScoreColor(tp.Value[0], pillarScoringIndicators.ScoreIndicators); } } return kpiDatas.Select(x => { x.TotalScoreColor = GetScoreColor(allTotalScore, totalScoreScoringIndicators.ScoreIndicators); return x; }).ToList(); }