//to be completed
        //to be tested
        public List <CalculatedScoreModel> KraScoreADM(int[] AccountId, string Quarter, int Year)
        {
            List <CalculatedScoreModel>[] list  = new List <CalculatedScoreModel> [AccountId.Length];
            List <CalculatedScoreModel>   final = new List <CalculatedScoreModel>();
            int totalsize = 0;

            int[] size = new int[AccountId.Length];

            for (int i = 0; i < AccountId.Length; i++)
            {
                totalsize += Teamsize.GetTeamSize(AccountId[i], Quarter, Year).TeamSize;
                list[i]    = KraScoreWithTeamSize(AccountId[i], Quarter, Year);
                size[i]    = list[i].Count;
            }
            Array.Sort(size);

            for (int j = 0; j < size[0]; j++)
            {
                CalculatedScoreModel ob = new CalculatedScoreModel();

                for (int i = 0; i < list.Length; i++)
                {
                    CalculatedScoreModel[] scoresob = list[i].ToArray();
                    ob.FinalScore   += scoresob[j].FinalScore;
                    ob.ParameterName = scoresob[j].ParameterName;
                    ob.Weightage     = scoresob[j].Weightage;
                }
                ob.FinalScore = ob.FinalScore / totalsize;
                final.Add(ob);
            }
            return(final);
        }
        public List <CalculatedScoreYear> KraScoreADMYearly(int[] AccountId, int Year)
        {
            List <CalculatedScoreYear> Scores = new List <CalculatedScoreYear>();

            if (AccountId != null)
            {
                string[] quarters = AccountParams.GetQuarters(AccountId[0], Year);
                List <AccountParametersModel>[] parameters = new List <AccountParametersModel> [AccountId.Length];  //Gets the parameters for all the accounts
                List <AccountParametersModel>   templist   = new List <AccountParametersModel>();
                for (int i = 0; i < AccountId.Length; i++)
                {
                    parameters[i] = AccountParams.GetParameters(AccountId[i], Year);
                    foreach (var items in parameters[i])
                    {
                        templist.Add(items);
                    }
                }

                var Parameters = templist.GroupBy(a => a.ParameterName).Select(g => g.First()).ToList();
                foreach (var items in Parameters)
                {
                    CalculatedScoreYear Ob = new CalculatedScoreYear();
                    Ob.ParameterName = items.ParameterName;
                    Ob.Score         = new float[quarters.Length];
                    Ob.Weightage     = Convert.ToInt32(items.Weightage);
                    for (int i = 0; i < quarters.Length; i++)
                    {
                        List <CalculatedScoreModel> QuarterScore = KraScoreADM(AccountId, quarters[i], Year);
                        if (QuarterScore != null)
                        {
                            CalculatedScoreModel ob = (from bs in QuarterScore where bs.ParameterName == items.ParameterName select bs).FirstOrDefault();
                            if (ob != null)
                            {
                                Ob.Score[i] = ob.FinalScore;
                            }
                            else
                            {
                                Ob.Score[i] = 0;
                            }
                        }
                    }
                    Scores.Add(Ob);
                }
            }
            return(Scores);
        }
        public List <CalculatedScoreYear> AccountKraScoreYearly(int AccountId, int Year)
        {
            List <CalculatedScoreYear> Scores;

            try
            {
                string[] Quarters = AccountParams.GetQuarters(AccountId, Year);
                Scores = new List <CalculatedScoreYear>();
                var Parameters = AccountParams.GetParameters(AccountId, Year);
                foreach (var items in Parameters)
                {
                    CalculatedScoreYear Ob = new CalculatedScoreYear();
                    Ob.ParameterName = items.ParameterName;
                    Ob.Score         = new float[Quarters.Length];
                    Ob.Weightage     = Convert.ToInt32(items.Weightage);
                    for (int i = 0; i < Quarters.Length; i++)
                    {
                        List <CalculatedScoreModel> QuarterScore = CalculateProjectKraScore(AccountId, Quarters[i], Year);
                        if (QuarterScore != null)
                        {
                            CalculatedScoreModel ob = (from bs in QuarterScore where bs.ParameterName == items.ParameterName select bs).FirstOrDefault();
                            if (ob != null)
                            {
                                Ob.Score[i] = ob.FinalScore;
                            }
                            else
                            {
                                Ob.Score[i] = 0;
                            }
                        }
                    }

                    Scores.Add(Ob);
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.InnerException);
                logger.Error(ex.Message);
                logger.Error(ex.Source);
                Scores = null;
            }
            return(Scores);
        }
        public List <CalculatedScoreModel> CalculateProjectKraScore(int AccountId, string Quarter, int Year)
        {
            List <AccountParametersModel> Parameters = AccountParams.GetAccountParameters(AccountId, Quarter, Year);

            List <CalculatedScoreModel> FinalScores = new List <CalculatedScoreModel>();

            try
            {
                foreach (var parameter in Parameters)
                {
                    List <ParamaterBoundsModel> BoundsList = ParamBounds.GetBounds(parameter.AccountParamID);
                    Entities.KraInputScores     Scores     = InputScores.GetScores(parameter.AccountParamID);
                    int Finalscore = 0;

                    foreach (var bounds in BoundsList)
                    {
                        if (bounds.MaxValue > Scores.Score && Scores.Score >= bounds.MinValue)
                        {
                            Finalscore = bounds.Result;
                        }
                        else if (bounds.MaxValue >= Scores.Score && Scores.Score > bounds.MinValue)
                        {
                            Finalscore = bounds.Result;
                        }
                    }
                    CalculatedScoreModel Ob = new CalculatedScoreModel();
                    Ob.FinalScore     = (float)(Finalscore * Convert.ToInt32(parameter.Weightage)) / 100;
                    Ob.AccountParamID = parameter.AccountParamID;
                    Ob.ParameterName  = parameter.ParameterName;
                    Ob.AccountID      = parameter.AccountID;
                    Ob.Weightage      = Convert.ToInt32(parameter.Weightage);
                    FinalScores.Add(Ob);
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.InnerException);
                logger.Error(ex.Message);
                logger.Error(ex.Source);
                FinalScores = null;
            }
            return(FinalScores);
        }