using Demo.Data.RemoteData.RemoteDataBase.DAO; using Demo.domain.Models; using Demo.Domain.UseCase; using System; using System.Collections.Generic; namespace Demo.UI { public class PresenceConsole { private readonly UseCaseGeneratePresence _presenceUseCase; public PresenceConsole(UseCaseGeneratePresence presenceUseCase) { _presenceUseCase = presenceUseCase; } // Метод для генерации посещаемости на день public void GeneratePresenceForDay(DateTime date, int groupId, int firstLesson, int lastLesson) { try { _presenceUseCase.GeneratePresenceDaily(firstLesson, lastLesson, groupId); Console.WriteLine("Посещаемость на день успешно сгенерирована."); } catch (Exception ex) { Console.WriteLine($"Ошибка при генерации посещаемости: {ex.Message}"); } } // Метод для генерации посещаемости на неделю public void GeneratePresenceForWeek(DateTime date, int groupId, int firstLesson, int lastLesson) { try { _presenceUseCase.GenerateWeeklyPresence(firstLesson, lastLesson, groupId, date); Console.WriteLine("Посещаемость на неделю успешно сгенерирована."); } catch (Exception ex) { Console.WriteLine($"Ошибка при генерации посещаемости: {ex.Message}"); } } // Метод для отображения посещаемости на конкретную дату и группу public void DisplayPresence(DateTime date, int groupId) { try { List presences = _presenceUseCase.GetPresenceByDateAndGroup(date, groupId); if (presences == null || presences.Count == 0) { Console.WriteLine("Посещаемость на выбранную дату отсутствует."); return; } // Сортируем присутствия по номеру занятия и ID пользователя var sortedPresences = presences.OrderBy(p => p.LessonNumber) .ThenBy(p => p.UserId); Console.WriteLine($"\nПосещаемость на {date.ToShortDateString()} для группы с ID {groupId}:"); Console.WriteLine("---------------------------------------------"); int previousLessonNumber = -1; // Инициализация для сравнения foreach (var presence in sortedPresences) { if (previousLessonNumber != presence.LessonNumber) { Console.WriteLine("---------------------------------------------"); previousLessonNumber = presence.LessonNumber; } string status = presence.IsAttedance ? "Присутствует" : "Отсутствует"; Console.WriteLine($"Пользователь ID: {presence.UserId}, Занятие {presence.LessonNumber}: {status}"); } Console.WriteLine("---------------------------------------------"); } catch (Exception ex) { Console.WriteLine($"Ошибка при выводе посещаемости: {ex.Message}"); } } public void MarkUserAbsent(DateTime date, int groupId, int userId, int firstLesson, int lastLesson) { _presenceUseCase.MarkUserAbsentForLessons(userId, groupId, firstLesson, lastLesson, date); } public void DisplayGeneralPresence(int groupId) { _presenceUseCase.GetGeneralPresence(groupId); } public void DisplayAllPresenceByGroup(int groupId) { try { // Получаем все посещения для группы var presences = _presenceUseCase.GetAllPresenceByGroup(groupId); if (presences == null || presences.Count == 0) { Console.WriteLine($"Посещаемость для группы с ID {groupId} отсутствует."); return; } // Группируем по дате var groupedPresences = presences.GroupBy(p => p.Date); foreach (var group in groupedPresences) { Console.WriteLine("==================================================="); Console.WriteLine($"Дата: {group.Key.ToString("dd.MM.yyyy")}"); Console.WriteLine("==================================================="); // Группируем по занятию var groupedByLesson = group.GroupBy(p => p.LessonNumber); foreach (var lessonGroup in groupedByLesson) { Console.WriteLine($"Занятие {lessonGroup.Key}:"); // Создаем HashSet для уникальных пользователей var userIds = new HashSet(); foreach (var presence in lessonGroup) { // Проверяем, добавляется ли пользователь в HashSet if (userIds.Add(presence.UserId)) { string status = presence.IsAttedance ? "Присутствует" : "Отсутствует"; Console.WriteLine($"Пользователь ID: {presence.UserId}, Статус: {status}"); } } Console.WriteLine("---------------------------------------------------"); } } } catch (Exception ex) { Console.WriteLine($"Ошибка при выводе посещаемости: {ex.Message}"); } } } }