207 lines
9.2 KiB
C#
207 lines
9.2 KiB
C#
|
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();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|