slarny4/Demo1/UI/PresenceConsole.cs

207 lines
9.2 KiB
C#
Raw Normal View History

2024-10-24 08:50:32 +00:00
using System;
using AttendanceApp.Domain.UseCases;
using AttendanceApp.Data.Repository;
using AttendanceApp.Domain.Models;
using AttendanceApp.Data.Exceptions;
namespace AttendanceApp.UI
{
public class PresenceConsole
{
private readonly UseCaseGeneratePresence _generatePresenceUseCase;
private readonly IPresenceRepository _presenceRepository;
private readonly IGroupRepository _groupRepository;
public PresenceConsole(UseCaseGeneratePresence generatePresenceUseCase, IPresenceRepository presenceRepository, IGroupRepository groupRepository)
{
_generatePresenceUseCase = generatePresenceUseCase;
_presenceRepository = presenceRepository;
_groupRepository = groupRepository;
}
public void GenerateDailyPresence()
{
Console.Clear();
Console.WriteLine("=== Генерация посещаемости на текущий день ===");
Console.Write("Введите номер первого занятия: ");
var firstClassInput = Console.ReadLine();
Console.Write("Введите номер последнего занятия: ");
var lastClassInput = Console.ReadLine();
Console.Write("Введите ID группы: ");
var groupIdInput = Console.ReadLine();
var currentDate = DateTime.Now.Date;
if (int.TryParse(firstClassInput, out int firstClassNum) &&
int.TryParse(lastClassInput, out int lastClassNum) &&
int.TryParse(groupIdInput, out int groupId))
{
try
{
_generatePresenceUseCase.GenerateDailyPresence(firstClassNum, lastClassNum, groupId, currentDate);
Console.WriteLine("Посещаемость успешно сгенерирована на текущий день.");
}
catch (GroupNotFoundException ex)
{
Console.WriteLine(ex.Message);
}
}
else
{
Console.WriteLine("Неверный формат ввода.");
}
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
public void GenerateWeeklyPresence()
{
Console.Clear();
Console.WriteLine("=== Генерация посещаемости на неделю ===");
Console.Write("Введите номер первого занятия: ");
var firstClassInput = Console.ReadLine();
Console.Write("Введите номер последнего занятия: ");
var lastClassInput = Console.ReadLine();
Console.Write("Введите ID группы: ");
var groupIdInput = Console.ReadLine();
Console.Write("Введите стартовую дату (yyyy-MM-dd): ");
var startDateInput = Console.ReadLine();
if (int.TryParse(firstClassInput, out int firstClassNum) &&
int.TryParse(lastClassInput, out int lastClassNum) &&
int.TryParse(groupIdInput, out int groupId) &&
DateTime.TryParse(startDateInput, out DateTime startDate))
{
try
{
_generatePresenceUseCase.GenerateWeeklyPresence(firstClassNum, lastClassNum, groupId, startDate);
Console.WriteLine("Посещаемость успешно сгенерирована на неделю.");
}
catch (GroupNotFoundException ex)
{
Console.WriteLine(ex.Message);
}
}
else
{
Console.WriteLine("Неверный формат ввода.");
}
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
public void ShowPresenceByGroupAndDate()
{
Console.Clear();
Console.WriteLine("=== Показать посещаемость по группе и дате ===");
Console.Write("Введите ID группы: ");
var groupIdInput = Console.ReadLine();
Console.Write("Введите дату (yyyy-MM-dd): ");
var dateInput = Console.ReadLine();
if (int.TryParse(groupIdInput, out int groupId) &&
DateTime.TryParse(dateInput, out DateTime date))
{
try
{
var group = _groupRepository.GetGroupById(groupId);
var presences = _presenceRepository.GetPresenceByGroupAndDate(groupId, date);
Console.WriteLine($"Посещаемость группы {group.Name} на {date.ToShortDateString()}:");
foreach (var presence in presences)
{
Console.WriteLine($"Пользователь ID: {presence.UserId} | Занятие №: {presence.ClassNumber} | Присутствует: {presence.IsPresent}");
}
}
catch (GroupNotFoundException ex)
{
Console.WriteLine(ex.Message);
}
}
else
{
Console.WriteLine("Неверный формат ввода.");
}
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
public void MarkUserAbsent()
{
Console.Clear();
Console.WriteLine("=== Отметить пользователя как отсутствующего ===");
Console.Write("Введите ID пользователя (GUID): ");
var userIdInput = Console.ReadLine();
Console.Write("Введите диапазон занятий (через запятую, например: 1,3): ");
var classRangeInput = Console.ReadLine();
if (Guid.TryParse(userIdInput, out Guid userId) &&
classRangeInput.Contains(",") &&
int.TryParse(classRangeInput.Split(',')[0], out int startClass) &&
int.TryParse(classRangeInput.Split(',')[1], out int endClass))
{
try
{
var currentDate = DateTime.Now.Date;
for (int classNum = startClass; classNum <= endClass; classNum++)
{
var presence = new Presence
{
ClassDate = currentDate,
ClassNumber = classNum,
IsPresent = false,
UserId = userId
};
_presenceRepository.UpdatePresence(presence);
}
Console.WriteLine("Пользователь успешно отмечен как отсутствующий на указанных занятиях.");
}
catch (RepositoryException ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат ввода.");
}
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
public void ShowPresenceByGroup()
{
Console.Clear();
Console.WriteLine("=== Показать посещаемость по группе ===");
Console.Write("Введите ID группы: ");
var groupIdInput = Console.ReadLine();
if (int.TryParse(groupIdInput, out int groupId))
{
try
{
var group = _groupRepository.GetGroupById(groupId);
var presences = _presenceRepository.GetPresenceByGroup(groupId);
Console.WriteLine($"Посещаемость группы {group.Name}:");
foreach (var presence in presences)
{
Console.WriteLine($"Дата: {presence.ClassDate.ToShortDateString()} | " +
$"Занятие №{presence.ClassNumber} | " +
$"Присутствует: {(presence.IsPresent ? "Да" : "Нет")} | " +
$"Студент ID: {presence.UserId}");
}
}
catch (GroupNotFoundException ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат ID группы.");
}
Console.WriteLine("\nНажмите любую клавишу для продолжения...");
Console.ReadKey();
}
}
}