private Assessment FillNotTakenassessment(string title, List <string> assessmentIdentifiers, string shortDescription)
        {
            var assessment = new Assessment {
                Title            = title,
                ShortDescription = shortDescription,
                MaxRawScore      = 0,
                SubSections      = FillNotTakenSubsections(assessmentIdentifiers, new List <AssessmentSubSection>())
            };

            return(assessment);
        }
        public async Task <StudentAssessment> GetStudentAssessmentsAsync(int studentUsi)
        {
            var model = new StudentAssessment();

            foreach (var assessmentParam in _customParametersProvider.GetParameters().assessments)
            {
                var assessment = await GetStudentAssessmentAsync(studentUsi, assessmentParam.assessmentReportingMethodTypeDescriptor, assessmentParam.title, assessmentParam.assessmentIdentifiers, assessmentParam.shortDescription);

                if (assessment != null)
                {
                    assessment.SubSections = FillNotTakenSubsections(assessmentParam.assessmentIdentifiers, assessment.SubSections);
                }
                else // Add default empty ones
                {
                    // Student hasnt taken assessment
                    assessment = FillNotTakenassessment(assessmentParam.title, assessmentParam.assessmentIdentifiers, assessmentParam.shortDescription);
                }
                assessment.ExternalLink = assessmentParam.externalLink;
                model.Assessments.Add(assessment);
            }

            var customparams = _customParametersProvider.GetParameters();

            model.AssessmentIndicators = new List <Assessment>();
            model.StarAssessments      = new List <Assessment>();
            model.AccessAssessments    = new List <Assessment>();

            foreach (var assessment in customparams.arcAssessments)
            {
                if (assessment.assessmentReportingMethodTypeDescriptor == "ARC Power Goal Abbreviation")
                {
                    var performanceLevel = await _studentRepository.GetStudentAssesmentPerformanceLevel(studentUsi, assessment.assessmentReportingMethodTypeDescriptor, assessment.title);

                    if (performanceLevel == null)
                    {
                        performanceLevel        = new Assessment();
                        performanceLevel.Title  = assessment.title;
                        performanceLevel.Result = "-";
                        performanceLevel.PerformanceLevelMet      = "Not Yet Taken";
                        performanceLevel.ReportingMethodCodeValue = assessment.assessmentReportingMethodTypeDescriptor;
                    }
                    else
                    {
                        performanceLevel.Result = performanceLevel.PerformanceLevelMet;
                    }
                    model.ArcAssessments.Add(performanceLevel);
                }
                else
                {
                    var newAssessment = await _studentRepository.GetStudentAssesmentScore(studentUsi, assessment.assessmentReportingMethodTypeDescriptor, assessment.title);

                    var objectivesAssessments = await _studentRepository.GetStudentObjectiveAssessments(studentUsi);

                    if (newAssessment == null)
                    {
                        newAssessment        = new Assessment();
                        newAssessment.Title  = assessment.title;
                        newAssessment.Result = "-";
                        newAssessment.PerformanceLevelMet      = "Not Yet Taken";
                        newAssessment.ReportingMethodCodeValue = assessment.assessmentReportingMethodTypeDescriptor;
                    }
                    else
                    {
                        newAssessment.ObjectiveAssessments = objectivesAssessments.Where(x => x.AssessmentIdentifier == newAssessment.Identifier).ToList();
                    }
                    model.ArcAssessments.Add(newAssessment);
                }
            }

            foreach (var assessment in customparams.assessmentIndicators)
            {
                var newAssessment = new Assessment();
                if (assessment.getPerformanceLevel)
                {
                    newAssessment = await _studentRepository.GetStudentAssesmentPerformanceLevel(studentUsi, assessment.assessmentReportingMethodTypeDescriptor, assessment.title);
                }
                else
                {
                    newAssessment = await _studentRepository.GetStudentAssesmentScore(studentUsi, assessment.assessmentReportingMethodTypeDescriptor, assessment.title);
                }

                if (newAssessment == null)
                {
                    newAssessment        = new Assessment();
                    newAssessment.Title  = assessment.title;
                    newAssessment.Result = "0";
                    newAssessment.PerformanceLevelMet      = "Not Yet Taken";
                    newAssessment.ReportingMethodCodeValue = assessment.assessmentReportingMethodTypeDescriptor;
                    newAssessment.Interpretation           = "";
                }
                else if (assessment.getPerformanceLevel)
                {
                    newAssessment.Interpretation = InterpretAssessmentPerformanceLevel(newAssessment.PerformanceLevelMet);
                }
                else
                {
                    newAssessment.Interpretation = "";
                }

                model.AssessmentIndicators.Add(newAssessment);
            }

            foreach (var assessment in customparams.starAssessments)
            {
                var newAssessment = await _studentRepository.GetStudentAssesmentScore(studentUsi, assessment.assessmentReportingMethodTypeDescriptor, assessment.title);

                var performanceLevel = await _studentRepository.GetStudentAssesmentPerformanceLevel(studentUsi, assessment.assessmentReportingMethodTypeDescriptor, assessment.title);

                if (newAssessment == null)
                {
                    newAssessment        = new Assessment();
                    newAssessment.Title  = assessment.title;
                    newAssessment.Result = "0";
                    newAssessment.PerformanceLevelMet      = "Not Yet Taken";
                    newAssessment.ReportingMethodCodeValue = assessment.assessmentReportingMethodTypeDescriptor;
                    newAssessment.Interpretation           = "";
                }
                if (performanceLevel != null)
                {
                    newAssessment.Interpretation      = InterpretAssessmentPerformanceLevel(performanceLevel.PerformanceLevelMet);
                    newAssessment.PerformanceLevelMet = performanceLevel.PerformanceLevelMet;
                }



                model.StarAssessments.Add(newAssessment);
            }

            foreach (var assessment in customparams.accessAssessments)
            {
                var assessments = await _studentRepository.GetACCESSStudentAssesmentScore(studentUsi, assessment.assessmentReportingMethodTypeDescriptor, assessment.title);

                var objectivesAssessments = await _studentRepository.GetStudentObjectiveAssessments(studentUsi);

                var proficiencyAssessments = await _studentRepository.GetACCESSStudentAssesmentScore(studentUsi, assessment.assessmentReportingMethodTypeDescriptorProficiency, assessment.title);

                //if (assessments.Count == proficiencyAssessments.Count)
                //    foreach (var a in assessments)
                //        a.ProficiencyLevel = proficiencyAssessments[assessments.FindIndex(x => x.Title == a.Title && x.ReportingMethodCodeValue == a.ReportingMethodCodeValue && x.Version == a.Version)].Result;

                foreach (var item in assessments)
                {
                    item.ObjectiveAssessments = objectivesAssessments.Where(x => x.AssessmentIdentifier == item.Identifier).ToList();
                }

                model.AccessAssessments.AddRange(assessments);
            }

            return(model);
        }