public IList <StudentCustomAlertDetail> GetListByStudentIds(IList <int> studentIds)
        {
            Trace.Assert(Context.SchoolYearId.HasValue);
            if (BaseSecurity.IsStudent(Context))
            {
                return(new List <StudentCustomAlertDetail>());
            }

            return(DoRead(u => new StudentCustomAlertDetailDataAccess(u).GetList(studentIds, Context.SchoolYearId.Value)));
        }
        public async Task <ActionResult> Summary(int schoolPersonId)
        {
            Trace.Assert(Context.PersonId.HasValue);
            Trace.Assert(Context.SchoolYearId.HasValue);

            if (SchoolLocator.Context.PersonId != schoolPersonId &&
                SchoolLocator.Context.Role == CoreRoles.STUDENT_ROLE)
            {
                var student = SchoolLocator.PersonService.GetPerson(schoolPersonId);
                return(Json(ShortPersonViewData.Create(student)));
            }

            var studentHealths = SchoolLocator.StudentService.GetStudentHealthConditions(schoolPersonId);

            var currentSchoolYear = SchoolLocator.SchoolYearService.GetCurrentSchoolYearByStudent(schoolPersonId);

            var healthFormsTask        = SchoolLocator.StudentService.GetStudentHealthForms(schoolPersonId, currentSchoolYear.Id);
            var studentSummaryInfoTask = SchoolLocator.StudentService.GetStudentSummaryInfo(schoolPersonId, currentSchoolYear.Id);
            var customAlerts           = SchoolLocator.StudentCustomAlertDetailService.GetList(schoolPersonId);

            var classes      = SchoolLocator.ClassService.GetStudentClasses(currentSchoolYear.Id, schoolPersonId).ToList();
            var classPersons = SchoolLocator.ClassService.GetClassPersons(schoolPersonId, true);

            classes = classes.Where(x => classPersons.Any(y => y.ClassRef == x.Id)).ToList();
            var schedule = SchoolLocator.ClassPeriodService.GetSchedule(null, schoolPersonId, null,
                                                                        Context.NowSchoolYearTime.Date, Context.NowSchoolYearTime.Date);
            var classIdsSortedBySchedule = schedule.OrderBy(si => si.PeriodOrder).Select(si => si.ClassId).Distinct().ToList();

            var classList = classIdsSortedBySchedule.Where(x => x.HasValue && classes.Any(y => y.Id == x.Value))
                            .Select(sortedClassRef => classes.First(cls => cls.Id == sortedClassRef)).ToList();

            classList.AddRange(classes.Where(cls => !classIdsSortedBySchedule.Contains(cls.Id)));

            Room         currentRoom        = null;
            ClassDetails currentClass       = null;
            var          studentSummaryInfo = await studentSummaryInfoTask;

            if (studentSummaryInfo.CurrentSectionId.HasValue)
            {
                currentClass = classes.FirstOrDefault(x => x.Id == studentSummaryInfo.CurrentSectionId.Value);
                if (currentClass?.RoomRef != null)
                {
                    currentRoom = SchoolLocator.RoomService.GetRoomById(currentClass.RoomRef.Value);
                }
            }
            var res = StudentSummaryViewData.Create(studentSummaryInfo, currentRoom, currentClass, classList, customAlerts, await studentHealths, await healthFormsTask, BaseSecurity.IsStudent(Context));

            return(Json(res));
        }