221 lines
9.8 KiB
C#
221 lines
9.8 KiB
C#
using System;
|
||
using System.Globalization;
|
||
using Demo.Domain.UseCase;
|
||
using Demo.Data.Repository;
|
||
using Demo.Data.LocalData.Entity;
|
||
using Demo.Data.Exceptions;
|
||
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;
|
||
|
||
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.TryParseExact(startDateInput, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, 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);
|
||
// Добавляем проверку на null
|
||
if (group == null)
|
||
{
|
||
Console.WriteLine($"Группа с ID {groupId} не найдена.");
|
||
Console.WriteLine("Нажмите любую клавишу для продолжения...");
|
||
Console.ReadKey();
|
||
return;
|
||
}
|
||
|
||
var presences = _presenceRepository.GetPresencesByGroupAndDate(groupId, date);
|
||
Console.WriteLine($"Посещаемость группы {group.Name} на {date.ToShortDateString()}:");
|
||
foreach (var presence in presences)
|
||
{
|
||
Console.WriteLine($"Пользователь ID: {presence.UserId} | Занятие №: {presence.LessonNumber} | Присутствует: {presence.WasPresent}");
|
||
}
|
||
}
|
||
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,
|
||
LessonNumber = classNum,
|
||
WasPresent = 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.LessonNumber} | " +
|
||
$"Присутствует: {(presence.WasPresent ? "Да" : "Нет")} | " +
|
||
$"Студент ID: {presence.UserId}");
|
||
}
|
||
}
|
||
catch (GroupNotFoundException ex)
|
||
{
|
||
Console.WriteLine($"Ошибка: {ex.Message}");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
Console.WriteLine("Неверный формат ID группы.");
|
||
}
|
||
|
||
Console.WriteLine("\nНажмите любую клавишу для продолжения...");
|
||
Console.ReadKey();
|
||
}
|
||
}
|
||
} |