private async Task <GradingPeriodFinalGradeViewData> GetGradingPeriodFinalGrade(int classId, GradingPeriod gradingPeriod, int?averageId)
        {
            if (!Context.SchoolLocalId.HasValue)
            {
                throw new UnassignedUserException();
            }
            var finalGrade = await SchoolLocator.GradingStatisticService.GetFinalGrade(classId, gradingPeriod);

            var average = finalGrade.Averages.FirstOrDefault(x => !averageId.HasValue || x.AverageId == averageId);

            return(GradingPeriodFinalGradeViewData.Create(finalGrade, average, Context.Claims));
        }
        public async Task <ActionResult> FinalGrade(int classId)
        {
            var gradingPeriods       = SchoolLocator.GradingPeriodService.GetGradingPeriodsDetailsByClassId(classId);
            var currentGradingPeriod = CurrentGradingPeriodFromList(gradingPeriods, Context.NowSchoolYearTime.Date);
            GradingPeriodFinalGradeViewData gradingPeriodFinalGrade = null;

            if (currentGradingPeriod != null)
            {
                gradingPeriodFinalGrade = await GetGradingPeriodFinalGrade(classId, currentGradingPeriod, null);
            }
            return(Json(FinalGradesViewData.Create(gradingPeriods, gradingPeriodFinalGrade)));
        }