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)
     });
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }