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); }
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); }
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); }