52 lines
2.0 KiB
C#
52 lines
2.0 KiB
C#
|
using Zurnal.RemaDateBase.DateDao;
|
|||
|
|
|||
|
public class GroupAttendanceService
|
|||
|
{
|
|||
|
public class AttendanceInfo
|
|||
|
{
|
|||
|
public int TotalStudents { get; set; }
|
|||
|
public int TotalLessons { get; set; }
|
|||
|
public double AttendancePercentage { get; set; }
|
|||
|
public List<StudentAttendance> StudentAttendances { get; set; }
|
|||
|
}
|
|||
|
|
|||
|
public class StudentAttendance
|
|||
|
{
|
|||
|
public string FIO { get; set; }
|
|||
|
public int AttendedLessons { get; set; }
|
|||
|
public int MissedLessons { get; set; }
|
|||
|
public double AttendanceRate { get; set; }
|
|||
|
}
|
|||
|
public AttendanceInfo GetGroupAttendanceInfo(GroupDao group, List<PresnceDao> presences)
|
|||
|
{
|
|||
|
var students = group.Users.ToList();
|
|||
|
var totalLessons = presences.Select(p => p.LessonNumber).Distinct().Count();
|
|||
|
var totalStudents = students.Count;
|
|||
|
|
|||
|
var studentAttendances = students.Select(student =>
|
|||
|
{
|
|||
|
var studentPresences = presences.Where(p => p.userDao.Guid == student.Guid).ToList();
|
|||
|
var attendedLessons = studentPresences.Count(p => p.IsAttendensy);
|
|||
|
var missedLessons = totalLessons - attendedLessons;
|
|||
|
var attendanceRate = totalLessons > 0 ? (double)attendedLessons / totalLessons * 100 : 0;
|
|||
|
|
|||
|
return new StudentAttendance
|
|||
|
{
|
|||
|
FIO = student.FIO,
|
|||
|
AttendedLessons = attendedLessons,
|
|||
|
MissedLessons = missedLessons,
|
|||
|
AttendanceRate = attendanceRate
|
|||
|
};
|
|||
|
}).ToList();
|
|||
|
|
|||
|
var attendancePercentage = totalStudents > 0 ? (double)studentAttendances.Sum(s => s.AttendedLessons) / (totalStudents * totalLessons) * 100 : 0;
|
|||
|
|
|||
|
return new AttendanceInfo
|
|||
|
{
|
|||
|
TotalStudents = totalStudents,
|
|||
|
TotalLessons = totalLessons,
|
|||
|
AttendancePercentage = attendancePercentage,
|
|||
|
StudentAttendances = studentAttendances
|
|||
|
};
|
|||
|
}
|
|||
|
}
|