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();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|