public static StudentDateAttendanceViewData Create(StudentDateAttendance attendance, IList <AttendanceReason> reasons) { return(new StudentDateAttendanceViewData { Date = attendance.Date, Student = StudentViewData.Create(attendance.Student), DailyAttendance = StudentDailyAttendanceViewData.Create(attendance.DailyAttendance, reasons), PeriodAttendances = StudentPeriodAttendanceViewData.Create(attendance.StudentPeriodAttendances, reasons), CheckInCheckOuts = CheckInCheckOutViewData.Create(attendance.CheckInCheckOuts) }); }
public IList <StudentDateAttendance> GetStudentAttendancesByDateRange(int studentId, DateTime startDate, DateTime endDate) { var syId = ServiceLocator.SchoolYearService.GetCurrentSchoolYear().Id; var student = ServiceLocator.StudentService.GetById(studentId, syId); var classes = ServiceLocator.ClassService.GetStudentClasses(syId, studentId); var res = new List <StudentDateAttendance>(); var currentData = startDate.Date; var schedulesItems = ServiceLocator.ClassPeriodService.GetSchedule(null, studentId, null, startDate, endDate); var periods = ServiceLocator.PeriodService.GetPeriods(syId); while (currentData < endDate) { var item = new StudentDateAttendance { Date = currentData, Student = student, StudentPeriodAttendances = new List <StudentPeriodAttendance>() }; foreach (var clazz in classes) { var classId = clazz.Id; var classAttendnace = ServiceLocator.AttendanceService.GetClassAttendance(currentData, classId); var currentSchedules = schedulesItems.Where(x => x.ClassId == clazz.Id && x.Day == currentData).ToList(); var period = periods.FirstOrDefault(p => currentSchedules.Any(y => y.PeriodId == p.Id)); var studentClassAttendance = classAttendnace.StudentAttendances.FirstOrDefault(x => x.StudentId == studentId); if (studentClassAttendance != null && period != null) { item.StudentPeriodAttendances.Add(new StudentPeriodAttendance { Level = studentClassAttendance.Level, AbsentPreviousDay = studentClassAttendance.AbsentPreviousDay, AttendanceReasonId = studentClassAttendance.AttendanceReasonId, Category = studentClassAttendance.Category, Class = clazz, ClassId = studentClassAttendance.ClassId, Student = student, Date = currentData, StudentId = studentId, Period = period }); } } currentData = currentData.AddDays(1); res.Add(item); } return(res); }
public IList <StudentDateAttendance> GetStudentAttendancesByDateRange(int studentId, DateTime startDate, DateTime endDate) { var sy = ServiceLocator.SchoolYearService.GetCurrentSchoolYear(); var student = ServiceLocator.StudentService.GetById(studentId, sy.Id); var periods = ServiceLocator.PeriodService.GetPeriods(sy.Id); var classes = ServiceLocator.ClassService.GetStudentClasses(sy.Id, studentId); var stiAttendanceDetails = ConnectorLocator.StudentConnector.GetStudentAttendanceDetailDashboard(studentId, sy.Id, startDate, endDate); var res = new List <StudentDateAttendance>(); var currentDate = startDate; while (currentDate <= endDate) { var dailyAtt = stiAttendanceDetails.DailyAbsences.FirstOrDefault(x => x.Date.Date == currentDate.Date && x.StudentId == studentId); var periodAttendances = stiAttendanceDetails.PeriodAbsences .Where(x => x.Date.Date == currentDate.Date && x.StudentId == studentId) .Where(x => classes.Any(y => x.SectionId == y.Id)) // We need to filter attendances by student classes! Very important. .ToList(); var checkIncheckOuts = stiAttendanceDetails.CheckInCheckOuts.Where(x => x.Date == currentDate.Date && x.StudentId == studentId).ToList(); var item = new StudentDateAttendance { Date = currentDate.Date, Student = student }; if (dailyAtt != null) { item.DailyAttendance = new StudentDailyAttendance { StudentId = dailyAtt.StudentId, AttendanceReasonId = dailyAtt.AbsenceReasonId, Category = dailyAtt.AbsenceCategory, Date = dailyAtt.Date, Level = dailyAtt.AbsenceLevel, }; } item.CheckInCheckOuts = checkIncheckOuts.Select(checkIncheckOut => new CheckInCheckOut { AttendanceReasonId = checkIncheckOut.AbsenceReasonId, Category = checkIncheckOut.AbsenceCategory, Note = checkIncheckOut.Note, Time = checkIncheckOut.Time, PeriodId = checkIncheckOut.TimeSlotId, IsCheckIn = checkIncheckOut.Action == "I" }).ToList(); item.StudentPeriodAttendances = periodAttendances.Select(x => new StudentPeriodAttendance { Student = student, AttendanceReasonId = x.AbsenceReasonId, Category = x.AbsenceCategory, ClassId = x.SectionId, Date = x.Date, Level = x.AbsenceLevel, StudentId = studentId, Period = periods.FirstOrDefault(period => period.Id == x.TimeSlotId), Class = classes.FirstOrDefault(c => c.Id == x.SectionId) }).ToList(); res.Add(item); currentDate = currentDate.AddDays(1); } return(res); }