private void CalculateSupervisor(Broker brk, BrokerCommissionModal masterData)
        {
            // Calculate the total of all subordinates
            foreach (string key in brk.HashSubordinate.Keys)
            {
                Broker subBrk = (Broker)brk.HashSubordinate[key];

                brk.PaymentResult.SubtotalNetRevenue += subBrk.PaymentResult.NetRevenue;
                brk.PaymentResult.SubtotalInheritedNetRevenue += subBrk.PaymentResult.InheritedNetRevenue;
                brk.PaymentResult.SubtotalPrivateNetRevenue += subBrk.PaymentResult.PrivateNetRevenue;

                brk.PaymentResult.SubtotalTradingValue += subBrk.PaymentResult.TradingValue;
                brk.PaymentResult.SubtotalInheritedTradingValue += subBrk.PaymentResult.InheritedTradingValue;
                brk.PaymentResult.SubtotalPrivateTradingValue += subBrk.PaymentResult.PrivateTradingValue;
            }

            // Find the Commission Rates
            // Find the Commission Rate for ClientType = 1 --> Client from HSC
            CommissionRate rate4OldClient = masterData.FindCommissionRate(brk.SUPCommissionCode,
                ClientType.CLIENTTYPE_ID_FROMHSC, brk.PaymentResult.SubtotalNetRevenue);

            // Find the Commission Rate for ClientType = 2 --> Client found by broker
            CommissionRate rate4NewClient = masterData.FindCommissionRate(brk.SUPCommissionCode,
                    ClientType.CLIENTTYPE_ID_BYBROKER, brk.PaymentResult.SubtotalNetRevenue);

            if (rate4NewClient == null)
            {
                _logger.Error("CalculateSupervisor - rate4NewClient not found. BrokerID=" + brk.Id);
                rate4NewClient = new CommissionRate(ClientType.CLIENTTYPE_ID_BYBROKER, Constants.BROKERTYPE_SUP);
            }

            if (rate4OldClient == null)
            {
                _logger.Error("CalculateSupervisor - rate4OldClient not found. BrokerID=" + brk.Id);
                rate4OldClient = new CommissionRate(ClientType.CLIENTTYPE_ID_FROMHSC, Constants.BROKERTYPE_SUP);
            }

            Decimal a = (brk.PaymentResult.SubtotalInheritedNetRevenue * (decimal)rate4OldClient.Commissionrate); // A
            Decimal b = (brk.PaymentResult.SubtotalPrivateNetRevenue * (decimal)rate4NewClient.Commissionrate); // B1 or B2 depends on the matched rate
            brk.PaymentResult.SupervisorPayment = a + b;
            brk.PaymentResult.Payment += brk.PaymentResult.SupervisorPayment;
            //_logger.Debug("CalculateSupervisor - LEAVE");
        }
        private void CalculateManager(Broker brk, BrokerCommissionModal masterData)
        {
            //_logger.Debug("CalculateManager - ENTER");
            if ((brk.Office == null) || (brk.Office.Id == null) || (brk.Office.Branch == null)) return;

            decimal revenue = 0;
            decimal value = 0;
            decimal value4FindingRate = 0;
            if (brk.Office.IsBranch(Office.BRANCH_ID_HN))
            {
                revenue = brk.Office.Branch.Result.NetRevenue;
                value = brk.Office.Branch.Result.TradingValue;
                value4FindingRate = value;
            }
            else if (brk.Office.IsBranch(Office.BRANCH_ID_HCM))
            {
                revenue = brk.Office.Result.NetRevenue;
                value = brk.Office.Result.TradingValue;
                value4FindingRate = (value - 1000000000000); // 1K Bil
                if (value4FindingRate < 0) value4FindingRate = 0;
            }

            CommissionRate rate4Manager = masterData.FindCommissionRate(brk.MANCommissionCode,
                ClientType.CLIENTTYPE_ID_FROMHSC, value4FindingRate);

            if (rate4Manager == null)
            {
                _logger.Error("CalculateManager - rate4OldClient not found. BrokerID=" + brk.Id);
                rate4Manager = new CommissionRate(ClientType.CLIENTTYPE_ID_FROMHSC, Constants.BROKERTYPE_MAN);
            }

            brk.PaymentResult.ManagementBonusRate = rate4Manager.Commissionrate;
            brk.PaymentResult.SupervisorPayment = (revenue * (decimal)rate4Manager.Commissionrate);
            if (brk.AdjustRate != null)
            {
                brk.PaymentResult.SupervisorPayment = (brk.PaymentResult.SupervisorPayment * ((decimal)brk.AdjustRate.AdjustRate));
            }

            brk.PaymentResult.Payment += brk.PaymentResult.SupervisorPayment;

            //_logger.Debug("CalculateManager - LEAVE");
        }
        public List<CommissionRate> GetAllCommissionRate()
        {
            List<CommissionRate> retData = new List<CommissionRate>();
            string query = @"SELECT [ID], [ClientTypeID], [Code], [LowerLimit], [UpperLimit], 
                                [CommissionRate]  
                            FROM [CommissionRate] 
                            ORDER BY [Code], [ClientTypeID], [LowerLimit]";
            DataSet dataSet = DataAccess.ExecuteQuery(query);

            if ((dataSet != null) && (dataSet.Tables.Count > 0) && (dataSet.Tables[0].Rows.Count > 0))
            {
                for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++)
                {
                    // ClientType 
                    CommissionRate rate = new CommissionRate();

                    rate.ClientTypeId = Int32.Parse(dataSet.Tables[0].Rows[i][1].ToString());
                    rate.Code = dataSet.Tables[0].Rows[i][2].ToString();
                    if (dataSet.Tables[0].Rows[i][3] != DBNull.Value)
                    {
                        rate.LowerLimit = (long)dataSet.Tables[0].Rows[i][3];
                    }

                    if (dataSet.Tables[0].Rows[i][4] != DBNull.Value)
                    {
                        rate.UpperLimit = (long)dataSet.Tables[0].Rows[i][4];
                    }

                    if (dataSet.Tables[0].Rows[i][5] != DBNull.Value)
                    {
                        rate.Commissionrate = (double)dataSet.Tables[0].Rows[i][5];
                    }

                    retData.Add(rate);
                }
            }

            return retData;
        }