Пример #1
0
        protected override IDictionary <string, StudentAssessmentDim> GetStudentAssessments(string schoolKey)
        {
            IDictionary <string, StudentAssessmentDim> studentAssessmentsDictionary;

            string cacheKey = "StudentSchoolAssessments" + schoolKey + "MetricId:" + GetMetricId();

            if (_memoryCache.TryGetValue(cacheKey, out studentAssessmentsDictionary))
            {
                return(studentAssessmentsDictionary);
            }
            studentAssessmentsDictionary = new Dictionary <string, StudentAssessmentDim>();

            var schoolDays = StudentDataRepository.GetSchoolCalendarDays(schoolKey).Select(calendarDay => calendarDay.Date).ToList();

            var schoolMinMaxDateDim = _context.SchoolMinMaxDateDims.Where(s => s.SchoolKey.Equals(schoolKey.ToString())).FirstOrDefault();

            if (schoolMinMaxDateDim == null)
            {
                return(studentAssessmentsDictionary);
            }

            var studentAssessmentsDbRecords = GetStudentAssessmentsDbRecords(schoolKey);

            foreach (var studentAssessmentDbRecord in studentAssessmentsDbRecords)
            {
                if (studentAssessmentDbRecord.Value.Assessments.Any())
                {
                    StudentAssessmentDim studentAssessment = new StudentAssessmentDim {
                        AssessmentCorrectItems = 0, AssessmentTotalItems = 0
                    };
                    foreach (var assessmentDim in studentAssessmentDbRecord.Value.Assessments)
                    {
                        if (assessmentDim.AdministrationDate > schoolMinMaxDateDim.MaxDate)
                        {
                            continue;
                        }

                        if (!schoolDays.Contains(assessmentDim.AdministrationDate))
                        {
                            continue;
                        }

                        if (!(AcademicSubjects.Contains(assessmentDim.AcademicSubject) && AssessmentCategories.Contains(assessmentDim.AssessmentCategory)))
                        {
                            continue;
                        }

                        if (!studentAssessmentDbRecord.Value.ScoreResults.Any())
                        {
                            continue;
                        }
                        if (!studentAssessmentDbRecord.Value.AssessmentItems.Any())
                        {
                            continue;
                        }
                        var assessmentItems = studentAssessmentDbRecord.Value.AssessmentItems.Where(sr => sr.StudentAssessmentIdentifier.Equals(assessmentDim.StudentAssessmentIdentifier, StringComparison.Ordinal) &&
                                                                                                    sr.AssessmentIdentifier.Equals(assessmentDim.AssessmentIdentifier, StringComparison.Ordinal) &&
                                                                                                    sr.Namespace.Equals(assessmentDim.Namespace, StringComparison.Ordinal))
                                              .ToList();
                        if (!assessmentItems.Any())
                        {
                            continue;
                        }

                        studentAssessment.AssessmentTotalItems   += assessmentItems.Count();
                        studentAssessment.AssessmentCorrectItems += assessmentItems.Where(ai => AssessmentItemResults.Contains(ai.AssessmentItemResult)).Count();
                    }

                    studentAssessmentsDictionary[studentAssessmentDbRecord.Key] = studentAssessment;
                }
            }

            var cacheEntryOptions = new MemoryCacheEntryOptions()
                                    .SetSize(200)//Size amount
                                    .SetPriority(CacheItemPriority.High)
                                    .SetSlidingExpiration(TimeSpan.FromMinutes(15))
                                    .SetAbsoluteExpiration(TimeSpan.FromMinutes(60));

            _memoryCache.Set(cacheKey, studentAssessmentsDictionary, cacheEntryOptions);

            return(studentAssessmentsDictionary);
        }
Пример #2
0
        protected override IDictionary <string, StudentAssessmentDim> GetStudentAssessments(string schoolKey)
        {
            IDictionary <string, StudentAssessmentDim> studentAssessmentsDictionary;

            string cacheKey = "StudentSchoolAssessments" + schoolKey + " MetricId:" + GetMetricId();

            if (_memoryCache.TryGetValue(cacheKey, out studentAssessmentsDictionary))
            {
                return(studentAssessmentsDictionary);
            }
            studentAssessmentsDictionary = new Dictionary <string, StudentAssessmentDim>();

            var schoolMinMaxDateDim = _context.SchoolMinMaxDateDims.Where(s => s.SchoolKey.Equals(schoolKey.ToString())).FirstOrDefault();

            if (schoolMinMaxDateDim == null)
            {
                return(studentAssessmentsDictionary);
            }

            var studentAssessmentsDbRecords = GetStudentAssessmentsDbRecords(schoolKey);

            foreach (var studentAssessmentDbRecord in studentAssessmentsDbRecords)
            {
                if (studentAssessmentDbRecord.Value.Assessments.Any())
                {
                    List <StudentAssessmentDim> studentAssessmentDims = new List <StudentAssessmentDim>();
                    foreach (var assessmentDim in studentAssessmentDbRecord.Value.Assessments)
                    {
                        if (assessmentDim.AdministrationDate > schoolMinMaxDateDim.MaxDate)
                        {
                            continue;
                        }

                        if (!(AcademicSubjects.Contains(assessmentDim.AcademicSubject) && AssessmentCategories.Contains(assessmentDim.AssessmentCategory)))
                        {
                            continue;
                        }

                        if (!studentAssessmentDbRecord.Value.ScoreResults.Any())
                        {
                            continue;
                        }
                        var scoreResults = studentAssessmentDbRecord.Value.ScoreResults.Where(sr => sr.StudentAssessmentIdentifier.Equals(assessmentDim.StudentAssessmentIdentifier, StringComparison.Ordinal) &&
                                                                                              sr.AssessmentIdentifier.Equals(assessmentDim.AssessmentIdentifier, StringComparison.Ordinal) &&
                                                                                              sr.Namespace.Equals(assessmentDim.Namespace, StringComparison.Ordinal) &&
                                                                                              sr.ReportingMethod.Equals(AssessmentReportingMethodType, StringComparison.Ordinal))
                                           .ToList();
                        if (!scoreResults.Any())
                        {
                            continue;
                        }

                        assessmentDim.ScoreResults = scoreResults;
                        studentAssessmentDims.Add(assessmentDim);
                    }
                    if (studentAssessmentDims.Any())
                    {
                        var mostRecentAssessment = studentAssessmentDims.Where(assessment => string.IsNullOrEmpty(assessment.ReasonNotTested))
                                                   .OrderByDescending(assessment => assessment.AdministrationDate).FirstOrDefault();
                        if (mostRecentAssessment != null)
                        {
                            studentAssessmentsDictionary[mostRecentAssessment.StudentKey] = mostRecentAssessment;
                        }
                    }
                    else
                    {
                        studentAssessmentsDictionary[studentAssessmentDbRecord.Key] = null;
                    }
                }
            }

            var cacheEntryOptions = new MemoryCacheEntryOptions()
                                    .SetSize(200)//Size amount
                                    .SetPriority(CacheItemPriority.High)
                                    .SetSlidingExpiration(TimeSpan.FromMinutes(15))
                                    .SetAbsoluteExpiration(TimeSpan.FromMinutes(60));

            _memoryCache.Set(cacheKey, studentAssessmentsDictionary, cacheEntryOptions);

            return(studentAssessmentsDictionary);
        }
Пример #3
0
        protected IDictionary <string, SortedList <GradingPeriodDim, StudentCourseGradingPeriodCalculation> > GetStudentGradingPeriods(string schoolKey)
        {
            IDictionary <string, SortedList <GradingPeriodDim, StudentCourseGradingPeriodCalculation> > studentGradingPeriodsDictionary;

            string cacheKey = "StudentSchoolAssessments" + schoolKey + "MetricId:" + GetMetricId();

            if (_memoryCache.TryGetValue(cacheKey, out studentGradingPeriodsDictionary))
            {
                return(studentGradingPeriodsDictionary);
            }
            studentGradingPeriodsDictionary = new Dictionary <string, SortedList <GradingPeriodDim, StudentCourseGradingPeriodCalculation> >();

            var schoolMinMaxDateDim = _context.SchoolMinMaxDateDims.Where(s => s.SchoolKey.Equals(schoolKey)).FirstOrDefault();

            if (schoolMinMaxDateDim == null || !schoolMinMaxDateDim.MaxDate.HasValue)
            {
                return(studentGradingPeriodsDictionary);
            }

            DateTime currentSchoolDay = schoolMinMaxDateDim.MaxDate.Value;
            List <GradingPeriodDim> gradingPeriodDims = StudentDataRepository.GetSchoolGradingPeriods(schoolKey);

            if (!gradingPeriodDims.Any())
            {
                return(studentGradingPeriodsDictionary);
            }

            IDictionary <string, List <StudentSectionDim> > studentSectionAssociationsDictionary = StudentDataRepository.GetStudentSectionAssociationsDictionary(schoolKey);
            IDictionary <string, List <StudentSchoolDim> >  studentSchoolAssociationsDictionary  = StudentDataRepository.GetStudentSchoolAssociationsDictionary(schoolKey);
            IDictionary <string, List <StudentGradeDim> >   studentGradeDbRecords = GetStudentGradeDbRecords(schoolKey);
            IDictionary <string, List <StudentGrade> >      studentGrades         = new Dictionary <string, List <StudentGrade> >();

            foreach (var studentGradeDbRecord in studentGradeDbRecords)
            {
                if (!studentGradeDbRecord.Value.Any())
                {
                    continue;
                }

                SortedList <GradingPeriodDim, StudentCourseGradingPeriodCalculation> studentCourseGradingPeriodCalculations = new SortedList <GradingPeriodDim, StudentCourseGradingPeriodCalculation>(new GradingPeriodComparer());
                foreach (var gradingPeriod in gradingPeriodDims)
                {
                    if (!gradingPeriod.ShouldBeIgnored(currentSchoolDay))
                    {
                        studentCourseGradingPeriodCalculations.Add(gradingPeriod, new StudentCourseGradingPeriodCalculation(CourseGradeGranularMetric, gradingPeriod, studentGradeDbRecord.Key));
                    }
                }

                StudentGrade studentGrade = new StudentGrade {
                    StudentKey = studentGradeDbRecord.Key
                };
                StudentGradeDim previousStudentGrade = null;
                foreach (var _studentGradeDbRecord in studentGradeDbRecord.Value)
                {
                    studentGrade.GradingPeriod = gradingPeriodDims.Where(sgp => _studentGradeDbRecord.GradingPeriodDescription.Equals(sgp.GradingPeriodDescription) &&
                                                                         _studentGradeDbRecord.GradingPeriodBeginDate.Equals(sgp.BeginDate))
                                                 .FirstOrDefault();
                    if (studentGrade.GradingPeriod == null)
                    {
                        continue;
                    }

                    if (studentSectionAssociationsDictionary.ContainsKey(studentGrade.StudentKey))
                    {
                        var studentSectionAssociations = studentSectionAssociationsDictionary[studentGrade.StudentKey];
                        studentGrade.StudentSection = studentSectionAssociations.Where(ssa => ssa.SectionIdentifier.Equals(_studentGradeDbRecord.SectionIdentifier) &&
                                                                                       ssa.LocalCourseCode.Equals(_studentGradeDbRecord.LocalCourseCode) &&
                                                                                       ssa.SessionName.Equals(_studentGradeDbRecord.SessionName) &&
                                                                                       ssa.SchoolYear.Equals(_studentGradeDbRecord.SchoolYear.ToString()) &&
                                                                                       ssa.SchoolKey.Equals(_studentGradeDbRecord.SchoolKey))
                                                      .FirstOrDefault();
                        if (studentGrade.StudentSection == null || !studentGrade.StudentSection.OverlapsWith(studentGrade.GradingPeriod))
                        {
                            continue;
                        }
                    }

                    if (previousStudentGrade != null &&
                        SectionComparer.Instance.Equals(previousStudentGrade, _studentGradeDbRecord) &&
                        previousStudentGrade.GradingPeriodBeginDate.Equals(_studentGradeDbRecord.GradingPeriodBeginDate) &&
                        !previousStudentGrade.GradeType.Equals(_studentGradeDbRecord.GradeType) &&
                        previousStudentGrade.SchoolYear == _studentGradeDbRecord.SchoolYear &&
                        previousStudentGrade.GradingPeriodSequence == _studentGradeDbRecord.GradingPeriodSequence)
                    {
                        continue;
                    }
                    previousStudentGrade = _studentGradeDbRecord;

                    if (studentGrade.GradingPeriod.BeginDate > currentSchoolDay)
                    {
                        continue;
                    }

                    var studentSchoolAssociation = studentSchoolAssociationsDictionary[studentGrade.StudentKey].FirstOrDefault(ssa => ssa.OverlapsWith(studentGrade.GradingPeriod));
                    if (studentSchoolAssociation == null)
                    {
                        continue;
                    }

                    var gradingScales = GradingScaleRepository.GetGradingScales(studentSchoolAssociation.LocalEducationAgencyKey.ToString());
                    if (!gradingScales.Any())
                    {
                        continue;
                    }

                    var gradingScale = gradingScales.Where(gradingScale => gradingScale.GradingScaleGradeLevelDims.Any() &&
                                                           gradingScale.GradingScaleGradeLevelDims.Exists(gradingScaleGradeLevelDim => gradingScaleGradeLevelDim.GradeLevelDescription.Equals(studentSchoolAssociation.GradeLevel)))
                                       .FirstOrDefault();
                    if (gradingScale == null)
                    {
                        continue;
                    }

                    var gradeScaleGradeRank = GradingScaleRepository.GetGradingScaleGrade(gradingScale, _studentGradeDbRecord);
                    if (gradeScaleGradeRank == null)
                    {
                        continue;
                    }

                    studentGrade.GradeRank                = gradeScaleGradeRank.Rank;
                    studentGrade.GradingScale             = gradingScale;
                    studentGrade.StudentSchoolAssociation = studentSchoolAssociation;

                    if (!AcademicSubjects.Contains(studentGrade.StudentSection.Subject))
                    {
                        continue;
                    }

                    if (!currentSchoolDay.IsInRange(studentGrade.StudentSchoolAssociation) &&
                        !studentGrade.GradingScale.GradingScaleMetricThresholdDims.ContainsKey(_metricInfo.Id))
                    {
                        continue;
                    }

                    if (!studentGrade.GradingScale.GradingScaleMetricThresholdDims.ContainsKey(CourseGradeContainerMetric.Id))
                    {
                        continue;
                    }
                    studentGrade.GradingScaleMetricThreshold = studentGrade.GradingScale.GradingScaleMetricThresholdDims[CourseGradeContainerMetric.Id];

                    if (studentGrade.GradingPeriod.ShouldBeIgnored(currentSchoolDay))
                    {
                        continue;
                    }

                    var index = studentCourseGradingPeriodCalculations.IndexOfKey(studentGrade.GradingPeriod);
                    if (index < 0)
                    {
                        continue;
                    }

                    var gradingPeriodData         = studentCourseGradingPeriodCalculations.Values[index];
                    var previousGradingPeriodData = (index == 0) ? null : studentCourseGradingPeriodCalculations.Values[index - 1];

                    var studentGradeContainer = gradingPeriodData.AddStudentGrade(studentGrade);

                    var failing = IsFailing(studentGrade, studentGrade.GradingScaleMetricThreshold);
                    if (failing)
                    {
                        gradingPeriodData.NumberOfGradesAtOrBelowThreshold++;
                    }
                    var metricStateType = CourseGradeGranularMetric.GetMetricStateTypeForStudentCourseGrades(gradingPeriodData.NumberOfGradesAtOrBelowThreshold);
                    gradingPeriodData.MetricStateType = metricStateType;

                    CalculateMetricComponentTrend(studentGradeContainer, previousGradingPeriodData);

                    if (index == studentCourseGradingPeriodCalculations.Count - 1)
                    {
                        gradingPeriodData.LastCompletedGradingPeriod = true;
                    }
                }

                studentGradingPeriodsDictionary[studentGradeDbRecord.Key] = studentCourseGradingPeriodCalculations;
            }

            var cacheEntryOptions = new MemoryCacheEntryOptions()
                                    .SetSize(200)//Size amount
                                    .SetPriority(CacheItemPriority.High)
                                    .SetSlidingExpiration(TimeSpan.FromMinutes(15))
                                    .SetAbsoluteExpiration(TimeSpan.FromMinutes(60));

            _memoryCache.Set(cacheKey, studentGradingPeriodsDictionary, cacheEntryOptions);

            return(studentGradingPeriodsDictionary);
        }