slarny4/Demo1/UI/PresenceConsole.cs

221 lines
9.8 KiB
C#
Raw Permalink Normal View History

2024-10-24 08:50:32 +00:00
using System;
2024-10-28 12:42:04 +00:00
using System.Globalization;
using Demo.Domain.UseCase;
using Demo.Data.Repository;
using Demo.Data.LocalData.Entity;
using Demo.Data.Exceptions;
2024-10-24 08:50:32 +00:00
using AttendanceApp.Domain.Models;
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;
2024-10-28 12:42:04 +00:00
if (int.TryParse(firstClassInput, out int firstClassNum)
&& int.TryParse(lastClassInput, out int lastClassNum)
&& int.TryParse(groupIdInput, out int groupId))
2024-10-24 08:50:32 +00:00
{
try
{
_generatePresenceUseCase.GenerateDailyPresence(firstClassNum, lastClassNum, groupId, currentDate);
Console.WriteLine("Посещаемость успешно сгенерирована на текущий день.");
}
catch (GroupNotFoundException ex)
{
Console.WriteLine(ex.Message);
}
}
else
{
Console.WriteLine("Неверный формат ввода.");
}
2024-10-28 12:42:04 +00:00
2024-10-24 08:50:32 +00:00
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();
2024-10-28 12:42:04 +00:00
if (int.TryParse(firstClassInput, out int firstClassNum)
&& int.TryParse(lastClassInput, out int lastClassNum)
&& int.TryParse(groupIdInput, out int groupId)
&& DateTime.TryParseExact(startDateInput, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime startDate))
2024-10-24 08:50:32 +00:00
{
try
{
_generatePresenceUseCase.GenerateWeeklyPresence(firstClassNum, lastClassNum, groupId, startDate);
Console.WriteLine("Посещаемость успешно сгенерирована на неделю.");
}
catch (GroupNotFoundException ex)
{
Console.WriteLine(ex.Message);
}
}
else
{
Console.WriteLine("Неверный формат ввода.");
}
2024-10-28 12:42:04 +00:00
2024-10-24 08:50:32 +00:00
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();
2024-10-28 12:42:04 +00:00
if (int.TryParse(groupIdInput, out int groupId) && DateTime.TryParse(dateInput, out DateTime date))
2024-10-24 08:50:32 +00:00
{
try
{
var group = _groupRepository.GetGroupById(groupId);
2024-10-28 12:42:04 +00:00
// Добавляем проверку на null
if (group == null)
{
Console.WriteLine($"Группа с ID {groupId} не найдена.");
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
return;
}
var presences = _presenceRepository.GetPresencesByGroupAndDate(groupId, date);
2024-10-24 08:50:32 +00:00
Console.WriteLine($"Посещаемость группы {group.Name} на {date.ToShortDateString()}:");
foreach (var presence in presences)
{
2024-10-28 12:42:04 +00:00
Console.WriteLine($"Пользователь ID: {presence.UserId} | Занятие №: {presence.LessonNumber} | Присутствует: {presence.WasPresent}");
2024-10-24 08:50:32 +00:00
}
}
catch (GroupNotFoundException ex)
{
Console.WriteLine(ex.Message);
}
}
else
{
Console.WriteLine("Неверный формат ввода.");
}
2024-10-28 12:42:04 +00:00
2024-10-24 08:50:32 +00:00
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();
2024-10-28 12:42:04 +00:00
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))
2024-10-24 08:50:32 +00:00
{
try
{
var currentDate = DateTime.Now.Date;
for (int classNum = startClass; classNum <= endClass; classNum++)
{
var presence = new Presence
{
ClassDate = currentDate,
2024-10-28 12:42:04 +00:00
LessonNumber = classNum,
WasPresent = false,
2024-10-24 08:50:32 +00:00
UserId = userId
};
_presenceRepository.UpdatePresence(presence);
}
Console.WriteLine("Пользователь успешно отмечен как отсутствующий на указанных занятиях.");
}
catch (RepositoryException ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат ввода.");
}
2024-10-28 12:42:04 +00:00
2024-10-24 08:50:32 +00:00
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);
2024-10-28 12:42:04 +00:00
Console.WriteLine($"Посещаемость группы {group.Name}:");
2024-10-24 08:50:32 +00:00
foreach (var presence in presences)
{
Console.WriteLine($"Дата: {presence.ClassDate.ToShortDateString()} | " +
2024-10-28 12:42:04 +00:00
$"Занятие №{presence.LessonNumber} | " +
$"Присутствует: {(presence.WasPresent ? "Да" : "Нет")} | " +
$"Студент ID: {presence.UserId}");
2024-10-24 08:50:32 +00:00
}
}
catch (GroupNotFoundException ex)
{
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
else
{
Console.WriteLine("Неверный формат ID группы.");
}
Console.WriteLine("\nНажмите любую клавишу для продолжения...");
Console.ReadKey();
}
}
}