/// <summary>
        /// To Calculate Sum of weights depending upon the value of MarketCapitalInUSD for Portfolio
        /// </summary>
        /// <param name="marketCapiltalizationData"></param>
        /// <param name="prtRangeForUndefinedMktCap"></param>
        /// <param name="prtRangeForMicroMktCap"></param>
        /// <param name="prtRangeForSmallMktCap"></param>
        /// <param name="prtRangeForMediumMktCap"></param>
        /// <param name="prtRangeForLargeMktCap"></param>
        /// <param name="prtRangeForMegaMktCap"></param>
        /// <returns>_portfolioSumRange</returns>
        public static List <MarketCapitalizationData> CalculateSumPortfolioRanges(List <MarketCapitalizationData> marketCapiltalizationData)
        {
            List <MarketCapitalizationData> portfolioSumRange = new List <MarketCapitalizationData>();
            List <MarketCapitalizationData> mktCapRanges      = new List <MarketCapitalizationData>();
            MarketCapitalizationData        mktCapData        = new MarketCapitalizationData();

            //Calculate total Market Value(DirtyValue_PC) for portfolio
            decimal mktCapTotalDirtyValue = Convert.ToDecimal(marketCapiltalizationData.Sum(a => a.PortfolioDirtyValuePC));

            //Getting the lower and upper limit's values for all the Ranges.
            //These values are same for Portfolio and Benchmark. Hence, We are taking these values from Portfolio list not from Benchmark

            mktCapRanges              = GetRangeLimit();
            mktCapData.LargeRange     = mktCapRanges[0].LargeRange;
            mktCapData.MediumRange    = mktCapRanges[0].MediumRange;
            mktCapData.SmallRange     = mktCapRanges[0].SmallRange;
            mktCapData.MicroRange     = mktCapRanges[0].MicroRange;
            mktCapData.UndefinedRange = mktCapRanges[0].UndefinedRange;
            portfolioSumRange.Add(mktCapData);

            //Calcualting sum for different ranges
            foreach (MarketCapitalizationData mktCap in marketCapiltalizationData)
            {
                ////if (!string.IsNullOrEmpty(mktCap.Portfolio_ID))
                ////{
                if (mktCap.MarketCapitalInUSD > mktCapRanges[0].LargeRange)
                {
                    portfolioSumRange[0].PortfolioSumMegaRange = portfolioSumRange[0].PortfolioSumMegaRange + (Convert.ToDecimal(mktCap.PortfolioDirtyValuePC / mktCapTotalDirtyValue) * 100);
                }

                else if (mktCap.MarketCapitalInUSD >= mktCapRanges[0].MediumRange && mktCap.MarketCapitalInUSD <= mktCapRanges[0].LargeRange)
                {
                    portfolioSumRange[0].PortfolioSumLargeRange = portfolioSumRange[0].PortfolioSumLargeRange + (Convert.ToDecimal(mktCap.PortfolioDirtyValuePC / mktCapTotalDirtyValue) * 100);
                }

                else if (mktCap.MarketCapitalInUSD >= mktCapRanges[0].SmallRange && mktCap.MarketCapitalInUSD < mktCapRanges[0].MediumRange)
                {
                    portfolioSumRange[0].PortfolioSumMediumRange = portfolioSumRange[0].PortfolioSumMediumRange + (Convert.ToDecimal(mktCap.PortfolioDirtyValuePC / mktCapTotalDirtyValue) * 100);
                }

                else if (mktCap.MarketCapitalInUSD >= mktCapRanges[0].MicroRange && mktCap.MarketCapitalInUSD < mktCapRanges[0].SmallRange)
                {
                    portfolioSumRange[0].PortfolioSumSmallRange = portfolioSumRange[0].PortfolioSumSmallRange + (Convert.ToDecimal(mktCap.PortfolioDirtyValuePC / mktCapTotalDirtyValue) * 100);
                }

                else if (mktCap.MarketCapitalInUSD > mktCapRanges[0].UndefinedRange && mktCap.MarketCapitalInUSD < mktCapRanges[0].MicroRange)
                {
                    portfolioSumRange[0].PortfolioSumMicroRange = portfolioSumRange[0].PortfolioSumMicroRange + (Convert.ToDecimal(mktCap.PortfolioDirtyValuePC / mktCapTotalDirtyValue) * 100);
                }

                else if (mktCap.MarketCapitalInUSD == mktCapRanges[0].UndefinedRange || mktCap.MarketCapitalInUSD == null)
                {
                    portfolioSumRange[0].PortfolioSumUndefinedRange = portfolioSumRange[0].PortfolioSumUndefinedRange + (Convert.ToDecimal(mktCap.PortfolioDirtyValuePC / mktCapTotalDirtyValue) * 100);
                }
                //}
            }
            return(portfolioSumRange);
        }
        /// <summary>
        /// Get limit values for all ranges from web.config
        /// </summary>
        /// <returns>_rangeLimit</returns>
        public static List <MarketCapitalizationData> GetRangeLimit()
        {
            List <MarketCapitalizationData> _rangeLimit = new List <MarketCapitalizationData>();
            MarketCapitalizationData        _mktCapData = new MarketCapitalizationData();

            string[] _undefRanges = ConfigurationManager.AppSettings[GreenfieldConstants.UNDEFINED_RANGE].Split(',');

            //Check if range value is null or blank then consider it as UndefinedRange
            if (_undefRanges.Contains(ConfigurationManager.AppSettings[GreenfieldConstants.NULL_VAL]) || _undefRanges.Contains(ConfigurationManager.AppSettings[GreenfieldConstants.BLANK_VAL]) || _undefRanges.Contains(ConfigurationManager.AppSettings[GreenfieldConstants.DECIMAL_DEF_VAL]))
            {
                _mktCapData.UndefinedRange = 0;// Convert.ToDecimal(GreenfieldConstants.DECIMAL_DEF_VAL);
            }
            _mktCapData.LargeRange  = Convert.ToDecimal(ConfigurationManager.AppSettings[GreenfieldConstants.LARGE_RANGE]);
            _mktCapData.MediumRange = Convert.ToDecimal(ConfigurationManager.AppSettings[GreenfieldConstants.MEDIUM_RANGE]);
            _mktCapData.SmallRange  = Convert.ToDecimal(ConfigurationManager.AppSettings[GreenfieldConstants.SMALL_RANGE]);
            _mktCapData.MicroRange  = Convert.ToDecimal(ConfigurationManager.AppSettings[GreenfieldConstants.MICRO_RANGE]);

            _rangeLimit.Add(_mktCapData);
            return(_rangeLimit);
        }
        /// <summary>
        ///  To Calculate Sum of weights depending upon the value of MarketCapitalInUSD for Benchmark
        /// </summary>
        /// <param name="marketCapiltalizationData"></param>
        /// <returns>_benchmarkSumRange</returns>
        public static List <MarketCapitalizationData> CalculateSumBenchmarkRanges(List <MarketCapitalizationData> marketCapiltalizationData, String filterType, String filterValue, bool isExCashSecurity)
        {
            List <MarketCapitalizationData> benchmarkSumRange = new List <MarketCapitalizationData>();
            List <MarketCapitalizationData> mktCapRanges      = new List <MarketCapitalizationData>();
            MarketCapitalizationData        mktCap            = new MarketCapitalizationData();
            decimal mktCapTotalBenchmarkWt = 0;

            //Calculate total Market Value(DirtyValue_PC) for portfolio
            if ((filterType == null || filterType == "Show Everything") && isExCashSecurity != true)
            {
                mktCapTotalBenchmarkWt = Convert.ToDecimal(marketCapiltalizationData.Sum(a => a.BenchmarkWeight));
            }

            //Getting the lower and upper limit's values for all the Ranges

            mktCapRanges = GetRangeLimit();

            mktCap.LargeRange     = mktCapRanges[0].LargeRange;
            mktCap.MediumRange    = mktCapRanges[0].MediumRange;
            mktCap.SmallRange     = mktCapRanges[0].SmallRange;
            mktCap.MicroRange     = mktCapRanges[0].MicroRange;
            mktCap.UndefinedRange = mktCapRanges[0].UndefinedRange;
            benchmarkSumRange.Add(mktCap);


            //Calcualting sum for different ranges
            foreach (MarketCapitalizationData mktCapData in marketCapiltalizationData)
            {
                //if (!string.IsNullOrEmpty(mktCap.Benchmark_ID))
                //{
                if (mktCapData.MarketCapitalInUSD > mktCapRanges[0].LargeRange)
                {
                    if ((filterType == null || filterType == "Show Everything") && isExCashSecurity != true)
                    {
                        benchmarkSumRange[0].BenchmarkSumMegaRange = benchmarkSumRange[0].BenchmarkSumMegaRange + ((Convert.ToDecimal(mktCapData.BenchmarkWeight) / mktCapTotalBenchmarkWt) * 100);
                    }
                    else
                    {
                        benchmarkSumRange[0].BenchmarkSumMegaRange = benchmarkSumRange[0].BenchmarkSumMegaRange + (Convert.ToDecimal(mktCapData.BenchmarkWeight) * 100);
                    }
                }
                else if (mktCapData.MarketCapitalInUSD >= mktCapRanges[0].MediumRange && mktCapData.MarketCapitalInUSD <= mktCapRanges[0].LargeRange)
                {
                    if ((filterType == null || filterType == "Show Everything") && isExCashSecurity != true)
                    {
                        benchmarkSumRange[0].BenchmarkSumLargeRange = benchmarkSumRange[0].BenchmarkSumLargeRange + ((Convert.ToDecimal(mktCapData.BenchmarkWeight) / mktCapTotalBenchmarkWt) * 100);
                    }
                    else
                    {
                        benchmarkSumRange[0].BenchmarkSumLargeRange = benchmarkSumRange[0].BenchmarkSumLargeRange + (Convert.ToDecimal(mktCapData.BenchmarkWeight) * 100);
                    }
                }
                else if (mktCapData.MarketCapitalInUSD >= mktCapRanges[0].SmallRange && mktCapData.MarketCapitalInUSD < mktCapRanges[0].MediumRange)
                {
                    if ((filterType == null || filterType == "Show Everything") && isExCashSecurity != true)
                    {
                        benchmarkSumRange[0].BenchmarkSumMediumRange = benchmarkSumRange[0].BenchmarkSumMediumRange + ((Convert.ToDecimal(mktCapData.BenchmarkWeight) / mktCapTotalBenchmarkWt) * 100);
                    }
                    else
                    {
                        benchmarkSumRange[0].BenchmarkSumMediumRange = benchmarkSumRange[0].BenchmarkSumMediumRange + (Convert.ToDecimal(mktCapData.BenchmarkWeight) * 100);// / mktCapTotalBenchmarkWt);
                    }
                }
                else if (mktCapData.MarketCapitalInUSD >= mktCapRanges[0].MicroRange && mktCapData.MarketCapitalInUSD < mktCapRanges[0].SmallRange)
                {
                    if ((filterType == null || filterType == "Show Everything") && isExCashSecurity != true)
                    {
                        benchmarkSumRange[0].BenchmarkSumSmallRange = benchmarkSumRange[0].BenchmarkSumSmallRange + ((Convert.ToDecimal(mktCapData.BenchmarkWeight) / mktCapTotalBenchmarkWt) * 100);
                    }
                    else
                    {
                        benchmarkSumRange[0].BenchmarkSumSmallRange = benchmarkSumRange[0].BenchmarkSumSmallRange + (Convert.ToDecimal(mktCapData.BenchmarkWeight) * 100);// mktCapTotalBenchmarkWt);
                    }
                }
                else if (mktCapData.MarketCapitalInUSD > mktCapRanges[0].UndefinedRange && mktCapData.MarketCapitalInUSD < mktCapRanges[0].MicroRange)
                {
                    if ((filterType == null || filterType == "Show Everything") && isExCashSecurity != true)
                    {
                        benchmarkSumRange[0].BenchmarkSumMicroRange = benchmarkSumRange[0].BenchmarkSumMicroRange + ((Convert.ToDecimal(mktCapData.BenchmarkWeight) / mktCapTotalBenchmarkWt) * 100);
                    }
                    else
                    {
                        benchmarkSumRange[0].BenchmarkSumMicroRange = benchmarkSumRange[0].BenchmarkSumMicroRange + (Convert.ToDecimal(mktCapData.BenchmarkWeight) * 100);  // / mktCapTotalBenchmarkWt);
                    }
                }
                else if (mktCapData.MarketCapitalInUSD == mktCapRanges[0].UndefinedRange || mktCap.MarketCapitalInUSD == null)
                {
                    if ((filterType == null || filterType == "Show Everything") && isExCashSecurity != true)
                    {
                        benchmarkSumRange[0].BenchmarkSumUndefinedRange = benchmarkSumRange[0].BenchmarkSumUndefinedRange + ((Convert.ToDecimal(mktCapData.BenchmarkWeight) / mktCapTotalBenchmarkWt) * 100);
                    }
                    else
                    {
                        benchmarkSumRange[0].BenchmarkSumUndefinedRange = benchmarkSumRange[0].BenchmarkSumUndefinedRange + (Convert.ToDecimal(mktCapData.BenchmarkWeight) * 100);// / mktCapTotalBenchmarkWt);
                    }
                }
            }
            return(benchmarkSumRange);
        }