private IEnumerable <TopLevelSummaryDataModel> BuildTopLevelSummary(IEnumerable <GenevaNewAssetsSummaryDataModel> naSummary, IEnumerable <GenevaSmaOngoingDetailDataModel> ogDetail) { var nasumm = naSummary .Where(f => f.ConsultantFirm == "z--Totals") .GroupBy(g => new { g.RowLabels, g.ConsultantFirm }) .Select(group => new { RD = group.Key.RowLabels, Amount = group.Sum(c => c.Amount), Rate = 0.0m, CommissionAmount = group.Sum(c => c.CommissionAmount), }).Distinct(); var topLevelSum = nasumm.Select(item => new TopLevelSummaryDataModel() { RegionalDirector = item.RD, Heading = "New Assets", Amount = item.Amount, Commission = item.CommissionAmount, AverageRate = 0.0m }).ToList().Distinct(); var ogsumm = ogDetail .GroupBy(k => new { k.RegionalDirector //, k.ConsultantFirm }) .Select(group => new { RD = group.Key.RegionalDirector, Amount = group.Sum(c => c.SeasonedValue), Rate = 0.0, CommissionAmount = group.Sum(c => c.SeasonedValue) * group.Average(c => c.Rate) }).Distinct(); var topLevelSummaryDataModels = topLevelSum.ToList(); topLevelSum = ogsumm.Select(item => new TopLevelSummaryDataModel() { RegionalDirector = item.RD, Heading = "Ongoing", Amount = item.Amount, Commission = item.CommissionAmount, AverageRate = 0.0m }); topLevelSummaryDataModels.AddRange(topLevelSum); var rdList = topLevelSummaryDataModels.Select(c => c.RegionalDirector).Distinct().ToList(); foreach (var rd in rdList) { var tls = new TopLevelSummaryDataModel() { RegionalDirector = rd, Heading = "Totals", Amount = topLevelSummaryDataModels.Where(a => a.RegionalDirector == rd).Sum(a => a.Amount), Commission = topLevelSummaryDataModels.Where(a => a.RegionalDirector == rd).Sum(a => a.Commission), }; tls.AverageRate = tls.Amount != 0 ? tls.Commission / tls.Amount : 0.0m; topLevelSummaryDataModels.Add(tls); } return(topLevelSummaryDataModels.OrderBy(c => c.RegionalDirector).ThenBy(c => c.Heading)); }
private IEnumerable <TopLevelSummaryDataModel> BuildFinalSummary(IEnumerable <BroadridgeNewAssetsSummaryDataModel> naDetail, IEnumerable <BroadridgeOgSummaryDataModel> ogDetail) { var nasumm = naSummary .Where(f => f.ProductName == "z--Totals") .GroupBy(g => new { g.Territory }) .Select(group => new { RD = group.Key.Territory, Amount = group.Sum(c => c.NewAssetValue), Rate = 0.0m, CommissionAmount = group.Sum(c => c.Commission) }); var topLevelSum = nasumm.Select(item => new TopLevelSummaryDataModel() { RegionalDirector = item.RD, Heading = "New Assets", Amount = item.Amount, Commission = item.CommissionAmount, AverageRate = item.Rate }).ToList(); var ogsumm = ogDetail .GroupBy(k => new { k.RM }) .Select(group => new { RD = group.Key.RM, Amount = group.Sum(c => c.PayableAmount), Rate = 0.0m, CommissionAmount = group.Sum(c => c.PayableAmount) * group.Average(c => c.AnnualRate) }); topLevelSum.AddRange(ogsumm.Select(item => new TopLevelSummaryDataModel() { RegionalDirector = item.RD, Heading = "Ongoing", Amount = item.Amount, Commission = item.CommissionAmount, AverageRate = item.Rate })); var rdList = topLevelSum.Select(c => c.RegionalDirector).Distinct().ToList(); foreach (var rd in rdList) { var tls = new TopLevelSummaryDataModel() { RegionalDirector = rd, Heading = "Totals", Amount = topLevelSum.Where(a => a.RegionalDirector == rd).Sum(a => a.Amount), Commission = topLevelSum.Where(a => a.RegionalDirector == rd).Sum(a => a.Commission), }; tls.AverageRate = 0.0m; topLevelSum.Add(tls); } return(topLevelSum.OrderBy(c => c.RegionalDirector).ThenBy(c => c.Heading)); }