Exemplo n.º 1
0
        private IEnumerable <GenevaSmaNewAssetsDataModel> BuildNewAssetsData()
        {
            const LkuRateType.RateType             rateType       = LkuRateType.RateType.NewAssets;
            const LkuCommissionType.CommissionType commissionType = LkuCommissionType.CommissionType.SMA;
            RegionalDirectorRateInfoDataModel      rdRateInfo;

            try
            {
                var naItems = new List <GenevaSmaNewAssetsDataModel>();

                foreach (GenevaSmaAssetsDataModel item in _genevaSales)
                {
                    bool calcCommission      = ((item.Amount > 0) && (item.TranDesc == "NewCash" || item.TranDesc == "NewAsset"));
                    bool isStartBeforePeriod = ((item.PortStartDate < item.TradeDate) &&
                                                (item.PortStartDate > new DateTime(1900, 1, 1)));

                    var rateInfo = GetRateInfo(item.InternalMarketingPerson, item.Strategy);
                    var theRate  = rateInfo?.NewAssetRate ?? 0.0m;

                    var na = new GenevaSmaNewAssetsDataModel()
                    {
                        InternalMarketingPerson = item.InternalMarketingPerson,
                        Portfolio           = item.Portfolio,
                        PortShortName       = item.PortShortName,
                        ConsultantFirm      = item.ConsultantFirm,
                        ConsultantName      = FindAumItemByPortfolioCode(item.Portfolio.Trim()).ConsultantName,
                        Strategy            = item.Strategy,
                        PortStartDate       = item.PortStartDate,
                        TradeDate           = item.TradeDate,
                        TranType            = item.TranType,
                        InvCode             = item.InvCode,
                        Quantity            = item.Quantity,
                        Price               = item.Price,
                        Amount              = item.Amount,
                        AmountRemoved       = null,
                        CommissionAmount    = calcCommission ? (item.Amount * theRate) : 0.0m,
                        CommissionRate      = theRate,
                        SalesTeam           = item.SalesTeam,
                        IsStartBeforePeriod = isStartBeforePeriod ? "TRUE" : "FALSE"
                    };
                    naItems.Add(na);
                }
                return(naItems.OrderBy(c => c.InternalMarketingPerson).ThenBy(c => c.ConsultantFirm).ThenBy(c => c.Portfolio));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
Exemplo n.º 2
0
        private IEnumerable <GenevaSmaNewAssetsDataModel> BuildNewAssetsData()
        {
            const LkuRateType.RateType             rateType       = LkuRateType.RateType.NewAssets;
            const LkuCommissionType.CommissionType commissionType = LkuCommissionType.CommissionType.SMA;
            var naItems = new List <GenevaSmaNewAssetsDataModel>();

            foreach (GenevaSmaAssetsDataModel item in NewAssetsItems)
            {
                RegionalDirectorRateInfoDataModel rdRateInfo = RegionalDirectorRateInfo(item.InternalMarketingPerson, (int)rateType, (int)commissionType);

                if (rdRateInfo != null)
                {
                    rdRateInfo.Rate = item.InternalMarketingPerson.IndexOf(',') > 0
                                          ? rdRateInfo.Rate / 2
                                          : rdRateInfo.Rate;

                    bool calcCommission      = ((item.Amount > 0) && (item.TranDesc == "NewCash" || item.TranDesc == "NewAsset"));
                    bool isStartBeforePeriod = ((item.PortStartDate < item.TradeDate) &&
                                                (item.PortStartDate > new DateTime(1900, 1, 1)));


                    var na = new GenevaSmaNewAssetsDataModel()
                    {
                        InternalMarketingPerson = item.InternalMarketingPerson,
                        Portfolio                     = item.Portfolio,
                        PortShortName                 = item.PortShortName,
                        PortStartDate                 = item.PortStartDate,
                        TradeDate                     = item.TradeDate,
                        TranType                      = item.TranType,
                        Strategy                      = item.Strategy,
                        ConsultantFirm                = item.ConsultantFirm,
                        ConsultantName                = FindAumItemByPortfolioCode(item.Portfolio).ConsultantName,
                        Ticker                        = item.InvCode,
                        Security                      = item.Security,
                        Quantity                      = item.Quantity,
                        Price                         = item.Price,
                        CommissionRate                = rdRateInfo.Rate,
                        CommissionAmount              = calcCommission ? (item.Amount * rdRateInfo.Rate) : 0.0m,
                        IsStartBeforePeriod           = isStartBeforePeriod ? "TRUE" : "FALSE",
                        SumTradeAmountByDate          = null,
                        SumTradeAmountByPortfolioCode = null,
                        IsValid                       = calcCommission ? "TRUE" : "FALSE"
                    };
                    naItems.Add(na);
                }
            }
            return(naItems);
        }
Exemplo n.º 3
0
        private IEnumerable <GenevaSmaOngoingDetailDataModel> BuildOngoingDetail()
        {
            const LkuRateType.RateType             rateType       = LkuRateType.RateType.Ongoing;
            const LkuCommissionType.CommissionType commissionType = LkuCommissionType.CommissionType.SMA;

            IEnumerable <GenevaSmaFlowsDataModel> flowItems = BuildFlowsDetail();
            var ogItems = new List <GenevaSmaOngoingDetailDataModel>();

            foreach (GenevaSmaAumDataModel item in AumItems)
            {
                RegionalDirectorRateInfoDataModel rdRateInfo = RegionalDirectorRateInfo(item.RM, (int)rateType, (int)commissionType);

                if (rdRateInfo != null)
                {
                    rdRateInfo.Rate = item.RM.IndexOf(',') > 0
                                          ? rdRateInfo.Rate / 2
                                          : rdRateInfo.Rate;

                    var flow      = FindFlowAmount(item.PortfolioCode);
                    var flowValue = flow.Inflows == null ? 0.0m : flow.Inflows;

                    var og = new GenevaSmaOngoingDetailDataModel()
                    {
                        SmaOngoing     = item.Id,
                        Portfolio      = item.PortfolioCode,
                        PortShortName  = item.PortfolioName,
                        RM             = item.RM,
                        ConsultantFirm = item.ConsultantFirm,
                        ConsultantName = item.ConsultantName,
                        Strategy       = item.Goal,
                        PortStartDate  = item.Inception,
                        AUM            = item.Total,
                        InFlows        = flowValue,
                        SeasonedValue  = item.Total - flowValue,
                        AnnualRate     = rdRateInfo.Rate / 4,
                        Rate           = rdRateInfo.Rate,
                        Commission     = (item.Total - flowValue) * (rdRateInfo.Rate / 4)
                    };

                    ogItems.Add(og);
                }
            }

            return(ogItems);
        }
Exemplo n.º 4
0
        IEnumerable <GenevaNewAssetsSummaryDataModel> BuildNewAssetsSummaryData(IEnumerable <GenevaSmaNewAssetsDataModel> naDetail)
        {
            const LkuRateType.RateType             rateType       = LkuRateType.RateType.NewAssets;
            const LkuCommissionType.CommissionType commissionType = LkuCommissionType.CommissionType.SMA;
            var naSumm = new List <GenevaNewAssetsSummaryDataModel>();

            var naSummWorking = naDetail
                                .GroupBy(g => new
            {
                g.InternalMarketingPerson,
                g.IsValid,
                g.ConsultantFirm,
                g.ConsultantName
            })
                                .Select(group => new
            {
                RD               = group.Key.InternalMarketingPerson,
                IsGood           = group.Key.IsValid,
                Firm             = group.Key.ConsultantFirm,
                Name             = group.Key.ConsultantName,
                Amount           = group.Sum(c => c.SumTradeAmountByDate),
                Rate             = group.Min(c => c.CommissionRate),
                CommissionAmount = group.Sum(c => c.SumTradeAmountByDate) * group.Min(c => c.CommissionRate)
            });

            foreach (var item in naSummWorking)
            {
                var summary = new GenevaNewAssetsSummaryDataModel()
                {
                    RegionalDirectorKey = item.RD,
                    IsTransfer          = item.IsGood,
                    ConsultantFirm      = item.Firm,
                    ConsultantName      = item.Name,
                    PayableAmount       = item.Amount ?? 0.0m,
                    Rate       = item.Rate,
                    Commission = item.CommissionAmount ?? 0.0m
                };

                naSumm.Add(summary);
            }

            return(naSumm);
        }
Exemplo n.º 5
0
        private IEnumerable <UmaMerrillNewAssetsDetailDataModel> BuildNewAssetsDetail()
        {
            const LkuRateType.RateType             rateType       = LkuRateType.RateType.NewAssets;
            const LkuCommissionType.CommissionType commissionType = LkuCommissionType.CommissionType.UMA;
            var naItems = new List <UmaMerrillNewAssetsDetailDataModel>();

            foreach (UmaMerrillDataModel item in _merrillData)
            {
                if (item.AsOfDate >= _startDate && item.AsOfDate <= _endDate)
                {
                    RegionalDirectorRateInfoDataModel rdRateInfo =
                        RegionalDirectorRateInfo(item.RegionalDirector, (int)rateType, (int)commissionType);
                    if (rdRateInfo != null)
                    {
                        rdRateInfo.Rate = item.RegionalDirector.IndexOf(',') > 0
                                              ? rdRateInfo.Rate / 2
                                              : rdRateInfo.Rate;

                        var na = new UmaMerrillNewAssetsDetailDataModel()
                        {
                            UniqueId           = item.UniqueID,
                            Inception          = item.StrategyEnrollmentDate,
                            Office             = item.Office,
                            OfficeState        = item.OfficeStateCode,
                            RC                 = item.RegionalDirector,
                            MarketValue        = item.TotalAssets,
                            Rate               = rdRateInfo.Rate,
                            Commission         = item.TotalAssets * rdRateInfo.Rate,
                            IsNewAsset         = "TRUE",
                            AristotleStartDate = item.StrategyEnrollmentDate,
                            IsGrayStone        = null,
                            IsXfer             = null
                        };
                        naItems.Add(na);
                    }
                }
            }

            return(naItems);
        }
Exemplo n.º 6
0
        private IEnumerable <GenevaSmaOngoingDetailDataModel> BuildOngoingDetail()
        {
            const LkuRateType.RateType             rateType       = LkuRateType.RateType.Ongoing;
            const LkuCommissionType.CommissionType commissionType = LkuCommissionType.CommissionType.SMA;

            var ogItems = new List <GenevaSmaOngoingDetailDataModel>();

            foreach (GenevaSmaAumDataModel item in _aumItems.Where(o => o.Inception < _startDate))
            {
                var flow      = FindFlowAmount(item.PortfolioCode);
                var flowValue = flow?.FlowAmount ?? 0.0m;

                var rateInfo = GetRateInfo(item.IntMktPerson, item.Goal);
                var theRate  = rateInfo?.OngoingRate ?? 0.0m;

                var og = new GenevaSmaOngoingDetailDataModel()
                {
                    RegionalDirector = item.IntMktPerson,
                    IntMktPerson     = item.IntMktPerson,
                    Portfolio        = item.PortfolioCode,
                    PortShortName    = item.PortfolioName,
                    Inception        = item.Inception,
                    Goal             = item.Goal,
                    ConsultantFirm   = item.ConsultantFirm,
                    ConsultantName   = item.ConsultantName,
                    ReportEndDate    = _endDate,
                    Total            = item.Total,
                    InFlows          = flowValue,
                    SeasonedValue    = item.Total - flowValue,
                    Commission       = (item.Total - flowValue) * (theRate / 4),
                    Rate             = theRate / 4,
                    AnnualRate       = theRate
                };

                ogItems.Add(og);
            }

            return(ogItems);
        }
Exemplo n.º 7
0
        private IEnumerable <UmaMerrillNewAssetsSummaryDataModel> BuildNewAssetsSummary(IEnumerable <UmaMerrillNewAssetsDetailDataModel> naDetail)
        {
            const LkuRateType.RateType             rateType       = LkuRateType.RateType.NewAssets;
            const LkuCommissionType.CommissionType commissionType = LkuCommissionType.CommissionType.UMA;
            var naSumm = new List <UmaMerrillNewAssetsSummaryDataModel>();

            var naSummWorking = _newAssetsDetail
                                .GroupBy(g => new
            {
                g.RC,
                g.Office,
                g.FAName
            })
                                .Select(group => new
            {
                RegionalDirectorKey              = group.Key.RC,
                OfficeStateCoe                   = group.Key.
                                          Office = group.Key.Office,
            });

            return(naSumm);
        }
        private IEnumerable <BroadridgeFlowsSummaryDataModel> BuildPseudoFlowSummary()
        {
            const LkuRateType.RateType             rateType       = LkuRateType.RateType.Ongoing;
            const LkuCommissionType.CommissionType commissionType = LkuCommissionType.CommissionType.UMA;

            var pfSumm = new List <BroadridgeFlowsSummaryDataModel>();

            var pfSummWorking = pfDetail
                                .GroupBy(c => new
            {
                c.Territory,
                c.TheSystem,
                c.SystemOfficeAddress,
                c.SystemOfficeState,
                c.ProductName,
                c.SystemFAName
            })
                                .Select(group => new
            {
                Territory           = group.Key.Territory,
                TheSystem           = group.Key.TheSystem,
                SystemOfficeAddress = group.Key.SystemOfficeAddress,
                OfficeState         = group.Key.SystemOfficeState,
                ProductName         = group.Key.ProductName,
                SystemFAName        = group.Key.SystemFAName,
                Flows      = group.Sum(c => c.SumFlows),
                Rate       = group.Min(c => c.Rate),
                Commission = group.Sum(c => c.SumFlows) * group.Min(c => c.Rate),
            });

            foreach (var item in pfSummWorking)
            {
                var summary = new BroadridgeFlowsSummaryDataModel()
                {
                    Territory           = item.Territory,
                    TheSystem           = item.TheSystem,
                    SystemOfficeAddress = item.SystemOfficeAddress,
                    OfficeState         = item.OfficeState,
                    SystemFAName        = item.SystemFAName,
                    Flows      = item.Flows > 0 ? item.Flows : 0.0m,
                    Rate       = item.Rate,
                    Commission = item.Flows > 0 ? (item.Flows * item.Rate) : 0.0m
                };

                if (item.Flows > 0)
                {
                    pfSumm.Add(summary);
                }
            }

            // Total Lines
            var pfSummTotals = pfSumm
                               .GroupBy(g => new
            {
                g.Territory,
                g.TheSystem
            })
                               .Select(grp => new
            {
                RM         = grp.Key.Territory,
                System     = $"{grp.Key.TheSystem} - Total",
                InFlows    = grp.Sum(group => group.Flows),
                Rate       = grp.Min(group => group.Rate),
                Commission = grp.Sum(group => group.Commission)
            });

            foreach (var item in pfSummTotals)
            {
                var summary = new BroadridgeFlowsSummaryDataModel()
                {
                    Territory           = item.RM,
                    TheSystem           = item.System,
                    SystemOfficeAddress = string.Empty,
                    OfficeState         = string.Empty,
                    ProductName         = string.Empty,
                    SystemFAName        = string.Empty,
                    Flows      = item.InFlows > 0 ? item.InFlows : 0.0m,
                    Commission = item.InFlows > 0 ? item.Commission : 0.0m,
                    Rate       = item.Rate
                };

                summary.Rate = summary.Flows > 0.0m ? item.Commission / summary.Flows : 0.0m;
                pfSumm.Add(summary);
            }

            return(pfSumm.OrderBy(c => c.Territory).ThenBy(c => c.TheSystem));
        }
        private IEnumerable <BroadridgeOgSummaryDataModel> BuildOngoingSummary()
        {
            const LkuRateType.RateType             rateType       = LkuRateType.RateType.Ongoing;
            const LkuCommissionType.CommissionType commissionType = LkuCommissionType.CommissionType.UMA;
            var ogSumm = new List <BroadridgeOgSummaryDataModel>();

            var ogSummWorking = ogDetail
                                .GroupBy(c => new
            {
                c.Territory,
                c.TheSystem,
                c.SystemOfficeAddress,
                c.SystemOfficeState,
                c.PersonFirstName,
                c.PersonLastName
            })
                                .Select(group => new
            {
                RM                     = group.Key.Territory,
                TheSystem              = group.Key.TheSystem,
                SystemOfficeAddress    = group.Key.SystemOfficeAddress,
                SystemOfficeState      = group.Key.SystemOfficeAddress,
                SystemFAName           = $"{group.Key.PersonFirstName} {group.Key.PersonLastName}",
                SystemQuarterEndAssets = group.Sum(c => c.SystemQuarterEndAssets),
                Flows                  = group.Sum(c => c.SumFlows),
                PayableAmout           = group.Sum(c => c.PayableAmount),
                Commission             = group.Sum(c => c.Commission),
                QuarterlyRate          = group.Min(c => c.QuarterlyRate),
                AnnualRate             = group.Min(c => c.AnnualRate),
            });

            foreach (var item in ogSummWorking)
            {
                var summary = new BroadridgeOgSummaryDataModel()
                {
                    RM                     = item.RM,
                    TheSystem              = item.TheSystem,
                    SystemOfficeAddress    = string.Empty,
                    State                  = string.Empty,
                    SystemFAName           = item.SystemFAName,
                    SystemQuarterEndAssets = item.SystemQuarterEndAssets,
                    Flows                  = item.Flows,
                    PayableAmount          = item.PayableAmout,
                    QuarterlyRate          = item.QuarterlyRate,
                    AnnualRate             = item.AnnualRate,
                    Commission             = item.Commission
                };

                ogSumm.Add(summary);
            }

            // Total Lines
            var ogSummTotals = ogSumm
                               .GroupBy(g => new
            {
                g.RM, g.TheSystem
            })
                               .Select(grp => new
            {
                RM                     = grp.Key.RM,
                TheSystem              = grp.Key.TheSystem,
                SystemOfficeAddress    = "Totals",
                SystemQuarterEndAssets = grp.Min(group => group.SystemQuarterEndAssets),
                Flows                  = grp.Sum(group => group.Flows),
                PaymentAmount          = grp.Sum(group => group.PayableAmount),
                Commission             = grp.Sum(group => group.Commission),
                QuarterlyRate          = grp.Min(group => group.QuarterlyRate),
                AnnualRate             = grp.Min(group => group.AnnualRate)
            });

            foreach (var item in ogSummTotals)
            {
                var summary = new BroadridgeOgSummaryDataModel()
                {
                    RM                     = item.RM,
                    TheSystem              = item.TheSystem,
                    SystemOfficeAddress    = string.Empty,
                    State                  = string.Empty,
                    SystemQuarterEndAssets = item.SystemQuarterEndAssets,
                    Flows                  = item.Flows,
                    PayableAmount          = item.PaymentAmount,
                    Commission             = item.Commission,
                    QuarterlyRate          = item.QuarterlyRate,
                    AnnualRate             = item.AnnualRate
                };

                ogSumm.Add(summary);
            }

            return(ogSumm.OrderBy(c => c.RM).ThenBy(c => c.TheSystem));
        }
        private IEnumerable <BroadridgeOgDetailDataModel> BuildUmaOngoingDetail()
        {
            const LkuRateType.RateType             rateType       = LkuRateType.RateType.Ongoing;
            const LkuCommissionType.CommissionType commissionType = LkuCommissionType.CommissionType.UMA;

            var ogItems = new List <BroadridgeOgDetailDataModel>();

            foreach (var asset in _broadridgeNewAssets)
            {
                var territory = asset.Territory == "" ? "House" : asset.Territory;
                var rd        = _regionalDirector.FirstOrDefault(r => r.LastName == territory);
                if (rd != null)
                {
                    var rateInfo = GetRateInfo(rd.RegionalDirectorKey, asset.ProductName, false);
                    var theRate  = rateInfo?.OngoingRate ?? 0.0m;

                    var og = new BroadridgeOgDetailDataModel()
                    {
                        TheSystem     = asset.TheSystem,
                        FirmName      = asset.FirmName,
                        FirmId        = asset.FirmId,
                        FirmCRDNumber = asset.FirmCRDNumber,
                        HoldingId     = asset.HoldingId,
                        HoldingExternalAccountNumber = asset.HoldingExternalAccountNumber,
                        HoldingName                 = asset.HoldingName,
                        HoldingStartDate            = asset.HoldingStartdate,
                        HoldingCreateDate           = asset.HoldingCreatedate,
                        MostRecentMonthAssetBalance = asset.MostRecentMonthAssetBalance,
                        Month1AgoAssetBalance       = asset.Month1AgoAssetBalance,
                        Month2AgoAssetBalance       = asset.Month2AgoAssetBalance,
                        Month3AgoAssetBalance       = asset.Month3AgoAssetBalance,
                        Month4AgoAssetBalance       = asset.Month4AgoAssetBalance,
                        Month5AgoAssetBalance       = asset.Month5AgoAssetBalance,
                        Month6AgoAssetBalance       = asset.Month6AgoAssetBalance,
                        Month7AgoAssetBalance       = asset.Month7AgoAssetBalance,
                        Month8AgoAssetBalance       = asset.Month8AgoAssetBalance,
                        Month9AgoAssetBalance       = asset.Month9AgoAssetBalance,
                        Month10AgoAssetBalance      = asset.Month10AgoAssetBalance,
                        Month11AgoAssetBalance      = asset.Month11AgoAssetBalance,
                        Month12AgoAssetBalance      = asset.Month11AgoAssetBalance,
                        SumFlows               = GetFlowAmount(asset.HoldingId),
                        PayableAmount          = asset.MostRecentMonthAssetBalance - GetFlowAmount(asset.HoldingId),
                        Commission             = (asset.MostRecentMonthAssetBalance - GetFlowAmount(asset.HoldingId)) * (theRate / 4),
                        QuarterlyRate          = theRate / 4,
                        AnnualRate             = theRate,
                        IsSeasoned             = asset.HoldingCreatedate < GetDateDiffMonths(GetFirstOfMonth(_endDate), -3),
                        ProductName            = asset.ProductName,
                        ProductType            = asset.ProductType,
                        Channel                = asset.Channel,
                        Region                 = asset.Region,
                        Territory              = asset.Territory,
                        SalesCredit            = asset.Territory,
                        IsSame                 = true,
                        PersonCRDNumber        = asset.PersonCRDNumber,
                        PersonFirstName        = asset.PersonFirstName,
                        PersonLastName         = asset.PersonLastName,
                        PersonId               = asset.PersonId,
                        OfficeAddressLine1     = asset.OfficeAddressLine1,
                        OfficeAddressLine2     = asset.OfficeAddressLine2,
                        OfficeCity             = asset.OfficeCity,
                        OfficeRegionRefCode    = asset.OfficeRegionRefCode,
                        OfficePostalCode       = asset.OfficePostalCode,
                        PersonBrokerTeamFlag   = asset.PersonBrokerTeamFlag,
                        HoldingAddressLine1    = asset.HoldingAddressLine1,
                        SystemFAName           = "?",
                        SystemOfficeAddress    = "?",
                        SystemOfficeState      = asset.OfficeRegionRefCode,
                        SystemQuarterEndAssets = asset.MostRecentMonthAssetBalance,
                        AssetCheck             = 0.0m,
                        SystemRDCredit         = asset.Territory,
                        AccountTANumber        = asset.HoldingExternalAccountNumber,
                        ExternalAccountNumber  = asset.HoldingExternalAccountNumber,
                        IsAccountSame          = true,
                        AccountId              = asset.HoldingId
                    };
                    ogItems.Add(og);
                }
            }

            return(ogItems.OrderBy(c => c.Territory).ThenBy(c => c.TheSystem));
        }
        private IEnumerable <BroadridgeNewAssetsSummaryDataModel> BuildNewAssetsSummary()
        {
            const LkuRateType.RateType             rateType       = LkuRateType.RateType.NewAssets;
            const LkuCommissionType.CommissionType commissionType = LkuCommissionType.CommissionType.UMA;
            var naSumm = new List <BroadridgeNewAssetsSummaryDataModel>();

            var naSummWorking = naDetail
                                .GroupBy(c => new
            {
                c.Territory,
                c.TheSystem,
                c.OfficeAddressLine1,
                c.SystemOfficeState,
                c.ProductName,
                c.SystemFAName
            })
                                .Select(group => new
            {
                Territory     = group.Key.Territory,
                System        = group.Key.TheSystem,
                OfficeAddress = group.Key.OfficeAddressLine1,
                OfficeState   = group.Key.SystemOfficeState,
                ProductName   = group.Key.ProductName,
                FAName        = group.Key.SystemFAName,
                NewAssetValue = group.Sum(c => c.NewAssetValue),
                Commission    = group.Sum(c => c.Commission),
                Rate          = group.Min(c => c.Rate)
            });


            foreach (var item in naSummWorking)
            {
                var summary = new BroadridgeNewAssetsSummaryDataModel()
                {
                    TheSystem     = item.System,
                    Territory     = item.Territory,
                    OfficeAddress = item.OfficeAddress,
                    OfficeState   = item.OfficeState,
                    ProductName   = item.ProductName,
                    FAName        = item.FAName,
                    NewAssetValue = item.NewAssetValue,
                    Commission    = item.Commission,
                    Rate          = item.Rate
                };
                naSumm.Add(summary);
            }

            // Total Lines
            var naSummTotals = naSumm
                               .GroupBy(g => new
            {
                g.TheSystem,
                g.Territory
            })
                               .Select(group => new
            {
                System              = group.Key.TheSystem,
                Territory           = group.Key.Territory,
                FirmName            = "-----",
                OfficeRegionRefCode = "-----",
                MarketValue         = group.Sum(c => c.NewAssetValue),
                Rate       = group.Min(c => c.Rate),
                Commission = group.Sum(c => c.Commission)
            });

            foreach (var item in naSummTotals)
            {
                var summary = new BroadridgeNewAssetsSummaryDataModel()
                {
                    TheSystem     = item.System,
                    Territory     = item.Territory,
                    ProductName   = "z--Totals",
                    NewAssetValue = item.MarketValue,
                    Rate          = item.Rate,
                    Commission    = item.Commission
                };
                naSumm.Add(summary);
            }

            return(naSumm.OrderBy(c => c.TheSystem).ThenBy(c => c.Territory).ThenBy(c => c.ProductName));
        }
        private IEnumerable <BroadridgeFlows> BuildPseudoFlowDetail()
        {
            const LkuRateType.RateType             rateType       = LkuRateType.RateType.Ongoing;
            const LkuCommissionType.CommissionType commissionType = LkuCommissionType.CommissionType.UMA;

            var pfItems = new List <BroadridgeFlows>();

            foreach (var asset in _broadridgeNewAssets)
            {
                RegionalDirectorRateInfoDataModel rdRateInfo = RegionalDirectorRateInfo(asset.Territory, (int)rateType, (int)commissionType);
                if (rdRateInfo != null)
                {
                    rdRateInfo.Rate = asset.Territory.IndexOf(',') > 0
                        ? rdRateInfo.Rate / 2
                        : rdRateInfo.Rate;

                    var rd       = _regionalDirector.FirstOrDefault(r => r.LastName == asset.Territory);
                    var rateInfo = GetRateInfo(rd == null ? "House" : rd.RegionalDirectorKey, asset.ProductName, false);
                    var theRate  = rateInfo?.NewAssetRate ?? 0.0m;

                    var fa = GetFlowAmount(asset);

                    var pf = new BroadridgeFlows()
                    {
                        TheSystem     = asset.TheSystem,
                        FirmName      = asset.FirmName,
                        FirmId        = asset.FirmId,
                        FirmCRDNumber = asset.FirmCRDNumber,
                        Portfolio     = asset.HoldingId,
                        HoldingExternalAccountNumber = asset.HoldingExternalAccountNumber,
                        HoldingName           = asset.HoldingName,
                        HoldingStartDate      = asset.HoldingStartdate,
                        HoldingCreateDate     = asset.HoldingCreatedate,
                        Month3AgoAssetBalance = asset.Month3AgoAssetBalance,
                        Month2AgoAssetBalance = asset.Month2AgoAssetBalance,
                        Period1Delta          = asset.Month2AgoAssetBalance - asset.Month3AgoAssetBalance,
                        Period1Threshold      = asset.Month3AgoAssetBalance * 0.1m,
                        Period1PercentChange  = GetPercentDiff(asset.Month2AgoAssetBalance, asset.Month3AgoAssetBalance),
                        Period1Commission     = GetPercentDiff(asset.Month2AgoAssetBalance, asset.Month3AgoAssetBalance) > 0.1m ?
                                                (asset.Month2AgoAssetBalance - asset.Month3AgoAssetBalance) * theRate :
                                                0.0m,
                        Month1AgoAssetBalance = asset.Month1AgoAssetBalance,

                        Period2Delta         = asset.Month1AgoAssetBalance - asset.Month2AgoAssetBalance,
                        Period2Threshold     = asset.Month2AgoAssetBalance * 0.1m,
                        Period2PercentChange = GetPercentDiff(asset.Month1AgoAssetBalance, asset.Month2AgoAssetBalance),
                        Period2Commission    = GetPercentDiff(asset.Month1AgoAssetBalance, asset.Month2AgoAssetBalance) > 0.1m ?
                                               (asset.Month1AgoAssetBalance - asset.Month2AgoAssetBalance) * theRate :
                                               0.0m,

                        MostRecentMonthAssetBalance = asset.MostRecentMonthAssetBalance,
                        Period3Delta         = asset.MostRecentMonthAssetBalance - asset.Month1AgoAssetBalance,
                        Period3Threshold     = asset.Month1AgoAssetBalance * 0.1m,
                        Period3PercentChange = GetPercentDiff(asset.MostRecentMonthAssetBalance, asset.Month1AgoAssetBalance),
                        Period3Commission    = GetPercentDiff(asset.MostRecentMonthAssetBalance, asset.Month1AgoAssetBalance) > 0.1m ?
                                               (asset.MostRecentMonthAssetBalance - asset.Month1AgoAssetBalance) * theRate :
                                               0.0m,
                        Rate = theRate,

                        ProductName          = asset.ProductName,
                        ProductType          = asset.ProductType,
                        Channel              = asset.Channel,
                        Region               = asset.Channel,
                        Territory            = asset.Territory,
                        SalesCredit          = asset.Territory,
                        PersonCRDNumber      = asset.PersonCRDNumber,
                        PersonFirstName      = asset.PersonFirstName,
                        PersonLastName       = asset.PersonLastName,
                        PersonId             = asset.PersonId,
                        OfficeAddressLine1   = asset.OfficeAddressLine1,
                        OfficeAddressLine2   = asset.OfficeAddressLine2,
                        OfficeCity           = asset.OfficeCity,
                        OfficeRegionRefCode  = asset.OfficeRegionRefCode,
                        OfficePostalCode     = asset.OfficePostalCode,
                        PersonBrokerTeamFlag = asset.PersonBrokerTeamFlag,

                        Month4AgoAssetBalance  = asset.Month4AgoAssetBalance,
                        Month5AgoAssetBalance  = asset.Month5AgoAssetBalance,
                        Month6AgoAssetBalance  = asset.Month6AgoAssetBalance,
                        Month7AgoAssetBalance  = asset.Month7AgoAssetBalance,
                        Month8AgoAssetBalance  = asset.Month8AgoAssetBalance,
                        Month9AgoAssetBalance  = asset.Month9AgoAssetBalance,
                        Month10AgoAssetBalance = asset.Month10AgoAssetBalance,
                        Month11AgoAssetBalance = asset.Month11AgoAssetBalance,
                        Month12AgoAssetBalance = asset.Month11AgoAssetBalance,

                        HoldingAddressLine1   = asset.HoldingAddressLine1,
                        SystemFAName          = $"{asset.PersonFirstName} {asset.PersonLastName}",
                        SystemOfficeAddress   = asset.FirmName,
                        SystemOfficeState     = asset.OfficeRegionRefCode,
                        SystemQEAssets        = asset.MostRecentMonthAssetBalance,
                        AssetCheck            = 0.0m,
                        SystemRDCredit        = asset.Territory,
                        AccountTANumber       = asset.HoldingExternalAccountNumber,
                        ExternalAccountNumber = asset.HoldingExternalAccountNumber,
                        IsWhat    = true,
                        AccountId = asset.HoldingId
                    };

                    pf.Period1Flow = pf.Period1PercentChange >= 0.1m;
                    pf.Period2Flow = pf.Period2PercentChange >= 0.1m;
                    pf.Period3Flow = pf.Period3PercentChange >= 0.1m;
                    pf.HasFlow     = (pf.Period1Flow || pf.Period2Flow || pf.Period3Flow) && pf.Month3AgoAssetBalance > 0.0m;

                    pf.SumFlows = 0.0m; //pf.Period1Flow + pf.Period2Flow + pf.Period3Flow;
                    pf.SumFlows = pf.Period1Flow ? pf.Period1Delta : 0.0m;
                    pf.SumFlows = pf.Period2Flow ? pf.SumFlows + pf.Period2Delta : 0.0m;
                    pf.SumFlows = pf.Period3Flow ? pf.SumFlows + pf.Period3Delta : 0.0m;
                    pf.SumFlows = pf.Month3AgoAssetBalance > 0.0m ? pf.SumFlows : 0.0m;


                    pf.SumCommission = 0.0m;
                    pf.SumCommission = pf.Period1Commission + pf.Period2Commission + pf.Period3Commission;

                    pf.IsSame = pf.Territory == pf.SalesCredit;
                    pfItems.Add(pf);
                }
            }

            return(pfItems);
        }
Exemplo n.º 13
0
        private IEnumerable <GenevaSmaOngoingSummaryDataModel> BuildOngoingSummary()
        {
            const LkuRateType.RateType             rateType       = LkuRateType.RateType.Ongoing;
            const LkuCommissionType.CommissionType commissionType = LkuCommissionType.CommissionType.SMA;
            var naSumm = new List <GenevaSmaOngoingSummaryDataModel>();

            IEnumerable <GenevaSmaOngoingDetailDataModel> details = BuildOngoingDetail();
            var naSummWorking = details
                                .GroupBy(g => new
            {
                g.RegionalDirector,
                g.ConsultantFirm,
                g.ConsultantName,
                g.Goal
            })
                                .Select(group => new
            {
                RD               = group.Key.RegionalDirector,
                Firm             = group.Key.ConsultantFirm,
                Name             = group.Key.ConsultantName,
                Goal             = group.Key.Goal,
                Total            = group.Sum(c => c.Total),
                Inflows          = group.Sum(c => c.InFlows),
                SeasonedValue    = group.Sum(c => c.SeasonedValue),
                Rate             = group.Min(c => c.Rate),
                CommissionAmount = group.Sum(c => c.SeasonedValue) * group.Min(c => c.Rate)
            });

            foreach (var item in naSummWorking)
            {
                var summary = new GenevaSmaOngoingSummaryDataModel()
                {
                    RowLabels      = item.RD,
                    ConsultantFirm = item.Firm,
                    ConsultantName = item.Name,
                    Goal           = item.Goal,
                    Total          = item.Total,
                    Inflows        = item.Inflows,
                    SeasonedValue  = item.SeasonedValue,
                    Commission     = item.CommissionAmount,
                    Rate           = item.Rate,
                    AnnualRate     = item.Rate * 4
                };
                naSumm.Add(summary);
            }

            //Totals lines
            var naSummTotals = naSumm
                               .GroupBy(g => new
            {
                g.RowLabels
            })
                               .Select(group => new
            {
                RD             = @group.Key.RowLabels,
                ConsultantFirm = "-----",
                ConsultantName = "-----",
                Goal           = "-----",
                Total          = @group.Sum(c => c.Total),
                InFlows        = @group.Sum(c => c.Inflows),
                SeasonedValue  = @group.Sum(c => c.SeasonedValue),
                Rate           = @group.Max(c => c.Rate),
                Commission     = @group.Sum(c => c.SeasonedValue) * group.Max(c => c.Rate)
            });

            naSumm.AddRange(naSummTotals.Select(sa => new GenevaSmaOngoingSummaryDataModel()
            {
                RowLabels      = sa.RD,
                ConsultantFirm = "z--Totals",
                ConsultantName = "-----",
                Goal           = "-----",
                Total          = sa.Total,
                Inflows        = sa.InFlows,
                SeasonedValue  = sa.SeasonedValue,
                Commission     = sa.Commission
            }));

            return(naSumm.OrderBy(c => c.RowLabels).ThenBy(c => c.ConsultantFirm));
        }
Exemplo n.º 14
0
        IEnumerable <GenevaNewAssetsSummaryDataModel> BuildNewAssetsSummaryData(IEnumerable <GenevaSmaNewAssetsDataModel> naDetail)
        {
            const LkuRateType.RateType             rateType       = LkuRateType.RateType.NewAssets;
            const LkuCommissionType.CommissionType commissionType = LkuCommissionType.CommissionType.SMA;
            var naSumm = new List <GenevaNewAssetsSummaryDataModel>();

            var naSummWorking = naDetail
                                .GroupBy(g => new
            {
                g.InternalMarketingPerson,
                g.ConsultantFirm,
                g.ConsultantName,
                g.Strategy
            })
                                .Select(group => new
            {
                RD               = group.Key.InternalMarketingPerson,
                Firm             = group.Key.ConsultantFirm,
                Name             = group.Key.ConsultantName,
                Strategy         = group.Key.Strategy,
                Quantity         = group.Sum(c => c.Quantity),
                Amount           = group.Sum(c => c.Amount),
                Rate             = group.Min(c => c.CommissionRate),
                CommissionAmount = group.Sum(c => c.Amount) * group.Min(c => c.CommissionRate)
            });

            foreach (var item in naSummWorking)
            {
                var summary = new GenevaNewAssetsSummaryDataModel()
                {
                    RowLabels        = item.RD,
                    ConsultantFirm   = item.Firm,
                    ConsultantName   = item.Name,
                    Strategy         = item.Strategy,
                    Amount           = item.Amount,
                    CommissionRate   = item.Rate,
                    CommissionAmount = item.CommissionAmount
                };

                naSumm.Add(summary);
            }

            //Totals lines
            var naSummTotals = naSumm
                               .GroupBy(g => new
            {
                g.RowLabels
            })
                               .Select(group => new
            {
                RD               = group.Key.RowLabels,
                IsGood           = "-----",
                Firm             = "-----",
                Name             = "-----",
                Strategy         = "-----",
                Amount           = group.Sum(c => c.Amount),
                Rate             = group.Min(c => c.CommissionRate),
                CommissionAmount = group.Sum(c => c.CommissionAmount)
            });

            foreach (var sa in naSummTotals)
            {
                var summary = new GenevaNewAssetsSummaryDataModel()
                {
                    RowLabels        = sa.RD,
                    ConsultantFirm   = "z--Totals",
                    Amount           = sa.Amount,
                    Strategy         = "",
                    CommissionRate   = sa.Rate,
                    CommissionAmount = sa.CommissionAmount,
                };

                naSumm.Add(summary);
            }

            return(naSumm.OrderBy(c => c.RowLabels).ThenBy(c => c.ConsultantFirm));
        }
Exemplo n.º 15
0
        private IEnumerable <BroadridgeOtherNewAssetsDataModel> BuildUmaNewAssetsDetail()
        {
            const LkuRateType.RateType             rateType       = LkuRateType.RateType.NewAssets;
            const LkuCommissionType.CommissionType commissionType = LkuCommissionType.CommissionType.UMA;
            var naItems = new List <BroadridgeOtherNewAssetsDataModel>();

            var newTypes = new List <NewAssetTradeType>();
            var n        = new NewAssetTradeType("Purchase");

            newTypes.Add(n);

            n = new NewAssetTradeType("Transfer In");
            newTypes.Add(n);

            var _sales = _broadridgeSales.Where(c => newTypes.Select(r => r.TradeType).Contains(c.TransactionCodeOverrideDescription));

            foreach (var item in _sales)
            {
                if (item.Territory != null)
                {
                    RegionalDirectorRateInfoDataModel rdRateInfo = RegionalDirectorRateInfo(item.Territory, (int)rateType, (int)commissionType);


                    if (rdRateInfo != null)
                    {
                        rdRateInfo.Rate = item.Territory.IndexOf(',') > 0
                            ? rdRateInfo.Rate / 2
                            : rdRateInfo.Rate;
                    }

                    var rd       = _regionalDirector.FirstOrDefault(r => r.LastName == item.Territory);
                    var rateInfo = GetRateInfo(rd == null ? "House" : rd.RegionalDirectorKey, item.ProductName, false);
                    var theRate  = rateInfo?.NewAssetRate ?? 0.0m;

                    var na = new BroadridgeOtherNewAssetsDataModel()
                    {
                        TradeId = item.TradeId,
                        TransactionCodeOverrideDescription = item.TransactionCodeOverrideDescription,
                        TradeDate                    = item.TradeDate,
                        SettledDate                  = item.SettledDate,
                        SuperSheetDate               = item.SuperSheetDate,
                        TradeAmount                  = item.TradeAmount,
                        Commission                   = item.TradeAmount * theRate,
                        Rate                         = theRate,
                        System                       = item.System,
                        DealerNum                    = item.DealerNum,
                        DealerBranchCode             = item.DealerBranchBranchCode,
                        RepCode                      = item.RepCode,
                        FirmId                       = item.FirmId,
                        FirmName                     = item.FirmName,
                        OfficeAddressLine1           = item.OfficeAddressLine1,
                        OfficeCity                   = item.OfficeCity,
                        OfficeRegionRefCode          = item.OfficeRegionRefCode,
                        PersonFirstName              = item.PersonFirstName,
                        PersonLastName               = item.PersonLastName,
                        LineOfBusiness               = item.LineOfBusiness,
                        Channel                      = item.Channel,
                        Region                       = item.Region,
                        Territory                    = item.Territory,
                        ProductNasdaqSymbol          = item.ProductNasdaqSymbol,
                        ProductName                  = item.ProductName,
                        AccountTANumber              = item.AccountTANumber,
                        AccountId                    = item.RepCode,
                        ExternalAccountNumber        = item.FirmId,
                        HoldingId                    = item.HoldingId,
                        HoldingName                  = item.HoldingName,
                        HoldingExternalAccountNumber = item.HoldingExternalAccountNumber
                    };

                    naItems.Add(na);
                }
            }

            var y = 0;

            return(naItems.OrderBy(c => c.System).ThenBy(c => c.Territory)
                   .ThenBy(c => c.FirmName));
        }