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, date); 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(groupId, date); if (presences == null || presences.Count == 0) { Console.WriteLine("Нет данных о посещаемости на выбранную дату."); return; } Console.WriteLine($"\n Посещаемость на {date:dd.MM.yyyy} "); Console.WriteLine("-----------------------------------------------------"); // Сохраняем номер занятия для сравнения int previousLessonNumber = -1; foreach (var presence in presences) { // Проверяем, изменился ли номер занятия if (previousLessonNumber != presence.LessonNumber) { Console.WriteLine("-----------------------------------------------------"); Console.WriteLine($" Занятие: {presence.LessonNumber} "); Console.WriteLine("-----------------------------------------------------"); previousLessonNumber = presence.LessonNumber; } // Форматируем статус присутствия string status = presence.IsAttedance ? "Присутствует" : "Отсутствует"; Console.WriteLine($"Пользователь (ID: {presence.UserGuid}) - Статус: {status}"); } Console.WriteLine("-----------------------------------------------------"); } catch (Exception ex) { Console.WriteLine($"Ошибка при отображении посещаемости: {ex.Message}"); } } public void MarkUserAbsent(DateTime date, int groupId, Guid userGuid, int firstLesson, int lastLesson) { _presenceUseCase.MarkUserAbsentForLessons(userGuid, groupId, firstLesson, lastLesson, date); } public void DisplayAllPresenceByGroup(int groupId) { try { var presences = _presenceUseCase.GetAllPresenceByGroup(groupId); if (presences == null || !presences.Any()) { Console.WriteLine($"Нет данных о посещаемости для группы с ID: {groupId}."); return; } // Группируем записи посещаемости по дате var groupedPresences = presences.GroupBy(p => p.Date); foreach (var group in groupedPresences) { Console.WriteLine("==================================================="); Console.WriteLine($" Дата: {group.Key:dd.MM.yyyy} "); Console.WriteLine("==================================================="); // Сохраняем номер занятия для сравнения int previousLessonNumber = -1; foreach (var presence in group) { // Проверяем, изменился ли номер занятия if (previousLessonNumber != presence.LessonNumber) { Console.WriteLine("---------------------------------------------------"); Console.WriteLine($" Занятие: {presence.LessonNumber} "); Console.WriteLine("---------------------------------------------------"); previousLessonNumber = presence.LessonNumber; } // Форматируем статус присутствия string status = presence.IsAttedance ? "✅ Присутствует" : "❌ Отсутствует"; Console.WriteLine($"Пользователь (ID: {presence.UserGuid}) - Статус: {status}"); } Console.WriteLine("---------------------------------------------------"); } } catch (Exception ex) { Console.WriteLine($"Ошибка при отображении посещаемости: {ex.Message}"); } } } }