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));
        }