Exemple #1
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);
        }
Exemple #2
0
        public override IDictionary <string, List <StudentMetric> > GetAllStudentMetricsForSchool(string schoolKey)
        {
            string cacheKey = "schoolKey:" + schoolKey + " MetricId:" + GetMetricId();

            IDictionary <string, List <StudentMetric> > returnMap;

            if (_memoryCache.TryGetValue(cacheKey, out returnMap))
            {
                return(returnMap);
            }
            returnMap = new Dictionary <string, List <StudentMetric> >();

            var studentGradingPeriods = GetStudentGradingPeriods(schoolKey);

            foreach (var studentGradingPeriod in studentGradingPeriods)
            {
                var studentKey = studentGradingPeriod.Key;
                var studentCourseGradingPeriodCalculations = studentGradingPeriod.Value;

                var metricState = string.Empty;
                var value       = string.Empty;
                int?trend       = null;
                var flag        = false;

                if (studentCourseGradingPeriodCalculations.Any())
                {
                    var maxGradingPeriodData = studentCourseGradingPeriodCalculations.Values[studentCourseGradingPeriodCalculations.Count - 1];
                    if (maxGradingPeriodData.StudentGrades.Any())
                    {
                        var previousGradingPeriodData = (studentCourseGradingPeriodCalculations.Count < 2) ? null : studentCourseGradingPeriodCalculations.Values[studentCourseGradingPeriodCalculations.Count - 2];
                        if (previousGradingPeriodData != null && previousGradingPeriodData.StudentGrades.Any())
                        {
                            CourseGradeGranularMetric.GetTrendByStudentGrades(
                                maxGradingPeriodData.NumberOfGradesAtOrBelowThreshold,
                                previousGradingPeriodData.NumberOfGradesAtOrBelowThreshold,
                                maxGradingPeriodData.StudentGrades.Count(),
                                previousGradingPeriodData.StudentGrades.Count(), out trend, out flag);
                        }

                        var metricStateType = CourseGradeGranularMetric.GetMetricStateTypeForStudentCourseGrades(maxGradingPeriodData.NumberOfGradesAtOrBelowThreshold);
                        metricState = MetricUtility.GetMetricState(metricStateType.Value);
                        value       = string.Concat(maxGradingPeriodData.NumberOfGradesAtOrBelowThreshold, '/', maxGradingPeriodData.StudentGrades.Count());
                    }
                }

                if (!returnMap.ContainsKey(studentKey))
                {
                    returnMap[studentKey] = new List <StudentMetric>();
                }
                returnMap[studentKey].Add(new StudentMetric
                {
                    Id             = _metricInfo.Id,
                    Name           = _metricInfo.DisplayName,
                    Value          = value,
                    ValueTypeName  = "System.String",
                    State          = metricState,
                    TrendDirection = trend,
                });
            }
            _memoryCache.Set(cacheKey, returnMap, _cacheEntryOptions);
            return(returnMap);
        }