public List<Exam> GetGroupActiveExams(ScheduleRepository _sRepo, int groupId, bool limitToExactGroup = true) { List<int> discIds; if (limitToExactGroup) { discIds = _sRepo .GetFiltredDisciplines(d => d.StudentGroup.StudentGroupId == groupId && (d.Attestation == 2 || d.Attestation == 3)) .Select(d => d.DisciplineId) .Distinct() .ToList(); } else { var studentIds = _sRepo.GetFiltredStudentsInGroups(sig => sig.StudentGroup.StudentGroupId == groupId) .ToList() .Select(stig => stig.Student.StudentId); var groupsListIds = _sRepo.GetFiltredStudentsInGroups(sig => studentIds.Contains(sig.Student.StudentId)) .ToList() .Select(stig => stig.StudentGroup.StudentGroupId); discIds = _sRepo .GetFiltredDisciplines(d => groupsListIds.Contains(d.StudentGroup.StudentGroupId) && (d.Attestation == 2 || d.Attestation == 3)) .Select(d => d.DisciplineId) .Distinct() .ToList(); } return GetFiltredExams(e => discIds.Contains(e.DisciplineId) && e.IsActive) .OrderBy(e => e.ConsultationDateTime) .ToList(); }
public Dictionary<DateTime, Dictionary<int, List<SessionEvent>>> GetFacultyExams(ScheduleRepository _sRepo, List<int> groups) { // Дата - (id группы + список строк) var result = new Dictionary<DateTime, Dictionary<int, List<SessionEvent>>>(); for (int i = 0; i < groups.Count; i++) { var groupExams = GetGroupActiveExams(_sRepo, groups[i], false); foreach (var exam in groupExams) { var examGroups = new List<int>(); var discipline = _sRepo.GetDiscipline(exam.DisciplineId); string fio = ""; var tfd = _sRepo.GetFirstFiltredTeacherForDiscipline(tefd => tefd.Discipline.DisciplineId == discipline.DisciplineId); if (tfd != null) { fio = tfd.Teacher.FIO; } if (!groups.Contains(discipline.StudentGroup.StudentGroupId)) { var studentIds = _sRepo.GetFiltredStudentsInGroups(sig => sig.StudentGroup.StudentGroupId == discipline.StudentGroup.StudentGroupId) .ToList() .Select(stig => stig.Student.StudentId); var groupsListIds = _sRepo.GetFiltredStudentsInGroups(sig => studentIds.Contains(sig.Student.StudentId)) .ToList() .Select(stig => stig.StudentGroup.StudentGroupId); foreach (var group in groups) { if (groupsListIds.Contains(group)) { examGroups.Add(group); } } } if (examGroups.Count == 0) { examGroups.Add(discipline.StudentGroup.StudentGroupId); } if (exam.ConsultationDateTime != Constants.Constants.DefaultEmptyDateForEvent) { if (!result.ContainsKey(exam.ConsultationDateTime.Date)) { result.Add(exam.ConsultationDateTime.Date, new Dictionary<int, List<SessionEvent>>()); foreach (var groupId in examGroups) { result[exam.ConsultationDateTime.Date].Add(groupId, new List<SessionEvent>()); } } foreach (var groupId in examGroups) { if (!result[exam.ConsultationDateTime.Date].ContainsKey(groupId)) { result[exam.ConsultationDateTime.Date].Add(groupId, new List<SessionEvent>()); } } var consAud = _sRepo.GetAuditorium(exam.ConsultationAuditoriumId); string consAudName = ""; if (consAud != null) { consAudName = consAud.Name; } foreach (var groupId in examGroups) { if (groupId == groups[i]) { result[exam.ConsultationDateTime.Date][groupId].Add(new SessionEvent() { IsExam = false, DisciplineName = discipline.Name, TeacherFIO = fio, Time = exam.ConsultationDateTime, Auditorium = consAudName }); } } } if (exam.ExamDateTime != Constants.Constants.DefaultEmptyDateForEvent) { if (!result.ContainsKey(exam.ExamDateTime.Date)) { result.Add(exam.ExamDateTime.Date, new Dictionary<int, List<SessionEvent>>()); foreach (var groupId in examGroups) { result[exam.ExamDateTime.Date].Add(groupId, new List<SessionEvent>()); } } foreach (var groupId in examGroups) { if (!result[exam.ExamDateTime.Date].ContainsKey(groupId)) { result[exam.ExamDateTime.Date].Add(groupId, new List<SessionEvent>()); } } var examAud = _sRepo.GetAuditorium(exam.ExamAuditoriumId); string examAudName = ""; if (examAud != null) { examAudName = examAud.Name; } foreach (var groupId in examGroups) { if (groupId == groups[i]) { result[exam.ExamDateTime.Date][groupId].Add(new SessionEvent() { IsExam = true, DisciplineName = discipline.Name, TeacherFIO = fio, Time = exam.ExamDateTime, Auditorium = examAudName }); } } } } } return result; }