2024-11-19 14:24:26 +00:00
|
|
|
|
using data.Repository;
|
|
|
|
|
using domain.UseCase;
|
|
|
|
|
|
|
|
|
|
namespace ui
|
|
|
|
|
{
|
|
|
|
|
// Основное меню консольного пользовательского интерфейса.
|
|
|
|
|
public class MainMenuUI
|
|
|
|
|
{
|
|
|
|
|
private readonly UserConsole _userConsole; // Консольный интерфейс для работы с пользователями.
|
|
|
|
|
private readonly GroupConsole _groupConsole; // Консольный интерфейс для работы с группами.
|
|
|
|
|
private readonly PresenceConsole _presenceConsole; // Консольный интерфейс для работы с посещаемостью.
|
|
|
|
|
|
|
|
|
|
// Конструктор для инициализации зависимостей.
|
|
|
|
|
public MainMenuUI(UserUseCase userUseCase, GroupUseCase groupUseCase, UseCaseGeneratePresence presenceUseCase, IPresenceRepository presenceRepository)
|
|
|
|
|
{
|
|
|
|
|
// Инициализация всех интерфейсов с соответствующими UseCase и репозиториями.
|
|
|
|
|
_userConsole = new UserConsole(userUseCase);
|
|
|
|
|
_groupConsole = new GroupConsole(groupUseCase);
|
|
|
|
|
_presenceConsole = new PresenceConsole(presenceUseCase, presenceRepository);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Основной метод для отображения меню и обработки ввода пользователя.
|
|
|
|
|
public void DisplayMenu()
|
|
|
|
|
{
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
// Отображение доступных команд в консоль.
|
|
|
|
|
Console.WriteLine("\n=== Главное меню ===");
|
|
|
|
|
Console.WriteLine("1. Все пользователи");
|
|
|
|
|
Console.WriteLine("2. Найти пользователя");
|
|
|
|
|
Console.WriteLine("3. Обновить данные пользователя");
|
|
|
|
|
Console.WriteLine("4. Удалить пользователя");
|
|
|
|
|
Console.WriteLine("5. Список всех групп");
|
|
|
|
|
Console.WriteLine("6. Найти группу");
|
|
|
|
|
Console.WriteLine("7. Создать группу");
|
|
|
|
|
Console.WriteLine("8. Изменить название группы");
|
|
|
|
|
Console.WriteLine("9. Удалить группу");
|
|
|
|
|
Console.WriteLine("10. Сгенерировать посещаемость на день");
|
|
|
|
|
Console.WriteLine("11. Сгенерировать посещаемость на неделю");
|
|
|
|
|
Console.WriteLine("12. Показать посещаемость группы");
|
|
|
|
|
Console.WriteLine("13. Посещаемость группы за день");
|
|
|
|
|
Console.WriteLine("14. Отметить отсутствующего пользователя");
|
|
|
|
|
Console.WriteLine("15. Экспорт посещаемости в Excel");
|
|
|
|
|
Console.WriteLine("0. Выход");
|
|
|
|
|
Console.Write("Выберите команду: ");
|
|
|
|
|
|
|
|
|
|
// Считывание команды пользователя.
|
|
|
|
|
string command = Console.ReadLine();
|
|
|
|
|
Console.WriteLine();
|
|
|
|
|
|
|
|
|
|
// Обработка команд через switch-case.
|
|
|
|
|
switch (command)
|
|
|
|
|
{
|
2024-11-19 18:29:07 +00:00
|
|
|
|
case "1": _userConsole.AllUsers(); break;// Показать всех пользователей.
|
2024-11-19 14:24:26 +00:00
|
|
|
|
|
2024-11-19 18:29:07 +00:00
|
|
|
|
case "2": ExecuteGuidCommand("Введите Guid пользователя для поиска: ", _userConsole.FindUserByGuid); break;
|
2024-11-19 14:24:26 +00:00
|
|
|
|
|
2024-11-19 18:29:07 +00:00
|
|
|
|
case "3": ExecuteGuidCommand("Введите Guid пользователя для обновления: ", _userConsole.UpdateUserByGuid); break;
|
2024-11-19 14:24:26 +00:00
|
|
|
|
|
2024-11-19 18:29:07 +00:00
|
|
|
|
case "4": ExecuteGuidCommand("Введите Guid пользователя для удаления: ", _userConsole.RemoveUserByGuid); break;
|
2024-11-19 14:24:26 +00:00
|
|
|
|
|
2024-11-19 18:29:07 +00:00
|
|
|
|
case "5": _groupConsole.DisplayAllGroups(); break; // Показать все группы.
|
2024-11-19 14:24:26 +00:00
|
|
|
|
|
2024-11-19 18:29:07 +00:00
|
|
|
|
case "6": ExecuteIntCommand("Введите ID группы для поиска: ", _groupConsole.FindGroupById); break;
|
2024-11-19 14:24:26 +00:00
|
|
|
|
|
|
|
|
|
case "7":
|
|
|
|
|
Console.Write("Введите название новой группы: ");
|
|
|
|
|
_groupConsole.AddGroup(Console.ReadLine()); // Создать новую группу.
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "8":
|
|
|
|
|
ExecuteIntCommand("Введите ID группы для изменения: ", id =>
|
|
|
|
|
{
|
|
|
|
|
Console.Write("Введите новое название группы: ");
|
|
|
|
|
_groupConsole.UpdateGroupName(id, Console.ReadLine());
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "9":
|
|
|
|
|
ExecuteIntCommand("Введите ID группы для удаления: ", id => _groupConsole.RemoveGroup(id.ToString()));
|
|
|
|
|
break;
|
|
|
|
|
|
2024-11-19 18:29:07 +00:00
|
|
|
|
case "10": GenerateAttendance("день"); break;// Генерация посещаемости на день.
|
2024-11-19 14:24:26 +00:00
|
|
|
|
|
2024-11-19 18:29:07 +00:00
|
|
|
|
case "11": GenerateAttendance("неделю"); break; // Генерация посещаемости на неделю.
|
2024-11-19 14:24:26 +00:00
|
|
|
|
|
|
|
|
|
case "12":
|
|
|
|
|
Console.Write("Введите дату (гггг-мм-дд): ");
|
|
|
|
|
DateTime date = DateTime.Parse(Console.ReadLine());
|
|
|
|
|
ExecuteIntCommand("Введите ID группы: ", id => _presenceConsole.DisplayPresence(date, id));
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "13":
|
|
|
|
|
ExecuteIntCommand("Введите ID группы: ", _presenceConsole.DisplayAllPresenceByGroup);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "14":
|
|
|
|
|
Console.Write("Введите Guid пользователя: ");
|
|
|
|
|
Guid userGuid = Guid.Parse(Console.ReadLine());
|
|
|
|
|
GenerateAbsence(userGuid); // Отметить пользователя как отсутствующего.
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "15":
|
|
|
|
|
_presenceConsole.ExportAttendanceToExcel(); // Экспорт посещаемости в Excel.
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "0":
|
|
|
|
|
return; // Завершение программы.
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
Console.WriteLine("Команда не распознана."); // Сообщение об ошибке.
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Метод для обработки команд с параметром Guid.
|
|
|
|
|
private void ExecuteGuidCommand(string prompt, Action<Guid> action)
|
|
|
|
|
{
|
|
|
|
|
Console.Write(prompt);
|
|
|
|
|
if (Guid.TryParse(Console.ReadLine(), out Guid guid))
|
|
|
|
|
{
|
|
|
|
|
action(guid);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Неверный формат Guid.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Метод для обработки команд с параметром int.
|
|
|
|
|
private void ExecuteIntCommand(string prompt, Action<int> action)
|
|
|
|
|
{
|
|
|
|
|
Console.Write(prompt);
|
|
|
|
|
if (int.TryParse(Console.ReadLine(), out int value))
|
|
|
|
|
{
|
|
|
|
|
action(value);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Неверный формат числа.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Генерация посещаемости на день или неделю.
|
|
|
|
|
private void GenerateAttendance(string period)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
Console.Write("Введите номер первого занятия: ");
|
|
|
|
|
int firstLesson = int.Parse(Console.ReadLine());
|
|
|
|
|
Console.Write("Введите номер последнего занятия: ");
|
|
|
|
|
int lastLesson = int.Parse(Console.ReadLine());
|
|
|
|
|
|
|
|
|
|
ExecuteIntCommand("Введите ID группы: ", id =>
|
|
|
|
|
{
|
|
|
|
|
if (period == "день")
|
|
|
|
|
{
|
|
|
|
|
_presenceConsole.GeneratePresenceForDay(DateTime.Now, id, firstLesson, lastLesson);
|
|
|
|
|
Console.WriteLine("Посещаемость на день сгенерирована.");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_presenceConsole.GeneratePresenceForWeek(DateTime.Now, id, firstLesson, lastLesson);
|
|
|
|
|
Console.WriteLine("Посещаемость на неделю сгенерирована.");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Ошибка ввода данных.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Отметка пользователя как отсутствующего.
|
|
|
|
|
private void GenerateAbsence(Guid userGuid)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
Console.Write("Введите номер первого занятия: ");
|
|
|
|
|
int firstLesson = int.Parse(Console.ReadLine());
|
|
|
|
|
Console.Write("Введите номер последнего занятия: ");
|
|
|
|
|
int lastLesson = int.Parse(Console.ReadLine());
|
|
|
|
|
|
|
|
|
|
ExecuteIntCommand("Введите ID группы: ", id =>
|
|
|
|
|
{
|
|
|
|
|
_presenceConsole.MarkUserAsAbsent(DateTime.Now, id, userGuid, firstLesson, lastLesson);
|
|
|
|
|
Console.WriteLine("Пользователь отмечен как отсутствующий.");
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Ошибка ввода данных.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|