presence/Demo/UI/MainMenu.cs
2024-11-14 10:53:42 +03:00

297 lines
15 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Demo.domain.Models;
using Demo.Domain.UseCase;
using System;
using System.Globalization;
namespace Demo.UI
{
public class MainMenuUI
{
private readonly UserConsoleUI _userConsoleUI;
private readonly GroupConsoleUI _groupConsoleUI;
private readonly PresenceConsole _presenceConsoleUI;
public MainMenuUI(UserUseCase userUseCase, GroupUseCase groupUseCase, UseCaseGeneratePresence presenceUseCase)
{
_userConsoleUI = new UserConsoleUI(userUseCase);
_groupConsoleUI = new GroupConsoleUI(groupUseCase);
_presenceConsoleUI = new PresenceConsole(presenceUseCase);
}
public void DisplayMenu()
{
while (true)
{
Console.WriteLine("\n=-= Главное меню =-=\n");
// Меню команд
Console.WriteLine("=-= Команды с Пользователями =-=");
Console.WriteLine("1. Вывести всех пользователей");
Console.WriteLine("2. Удалить пользователя по id");
Console.WriteLine("3. Обновить пользователя по id");
Console.WriteLine("4. Найти пользователя по id");
Console.WriteLine();
Console.WriteLine("=-= Команды с Группами =-=");
Console.WriteLine("5. Вывести все группы");
Console.WriteLine("6. Добавить группу");
Console.WriteLine("7. Изменить название группы");
Console.WriteLine("8. Поиск группы по ID");
Console.WriteLine();
Console.WriteLine("=-= Команды Presence =-=");
Console.WriteLine("9. Сгенерировать посещаемость на день");
Console.WriteLine("10. Сгенерировать посещаемость на неделю");
Console.WriteLine("11. Показать посещаемость");
Console.WriteLine("12. Отметить пользователя как отсутствующего");
Console.WriteLine("13. Вывести всю посещаемость группы");
Console.WriteLine("14. Вывести общую информацию об посещаемости по группе");
Console.WriteLine("15. Вывести отчёт в Excel");
Console.WriteLine();
Console.WriteLine("0. Выход");
Console.Write("\nВаш выбор: ");
string comand = Console.ReadLine();
Console.WriteLine();
switch (comand)
{
case "1":
_userConsoleUI.DisplayAllUsers();
break;
case "2":
Console.Write("Введите ID пользователя для удаления: ");
if (int.TryParse(Console.ReadLine(), out int userId))
{
_userConsoleUI.RemoveUserById(userId);
}
else
{
Console.WriteLine("Неверный формат ID. Введите целое число.");
}
break;
case "3":
Console.Write("Введите ID пользователя для обновления: ");
if (int.TryParse(Console.ReadLine(), out int updateUserId))
{
_userConsoleUI.UpdateUserById(updateUserId);
}
else
{
Console.WriteLine("Неверный формат ID. Введите целое число.");
}
break;
case "4":
Console.Write("Введите ID пользователя для поиска: ");
if (int.TryParse(Console.ReadLine(), out int findUserId))
{
_userConsoleUI.FindUserById(findUserId);
}
else
{
Console.WriteLine("Неверный формат ID. Введите целое число.");
}
break;
case "5":
_groupConsoleUI.DisplayAllGroups();
break;
case "6":
Console.Write("Введите название новой группы: ");
string newGroupName = Console.ReadLine();
_groupConsoleUI.AddGroup(newGroupName);
break;
case "7":
Console.Write("Введите ID группы для изменения: ");
if (int.TryParse(Console.ReadLine(), out int groupId))
{
Console.Write("Введите новое название группы: ");
string newName = Console.ReadLine();
_groupConsoleUI.UpdateGroupName(groupId, newName);
}
else
{
Console.WriteLine("Неверный формат ID группы. Введите целое число.");
}
break;
case "8":
Console.Write("Введите ID группы для поиска : ");
if (int.TryParse(Console.ReadLine(), out int IdGroup))
{
_groupConsoleUI.FindGroupById(IdGroup);
}
else
{
Console.WriteLine("Неверный формат ID группы. Введите целое число.");
}
break;
case "9":
Console.Write("Введите номер первого занятия: ");
if (int.TryParse(Console.ReadLine(), out int firstLesson))
{
Console.Write("Введите номер последнего занятия: ");
if (int.TryParse(Console.ReadLine(), out int lastLesson))
{
Console.Write("Введите ID группы: ");
if (int.TryParse(Console.ReadLine(), out int groupIdForPresence))
{
_presenceConsoleUI.GeneratePresenceForDay(DateTime.Now, groupIdForPresence, firstLesson, lastLesson);
}
else
{
Console.WriteLine("Неверный формат ID группы. Введите целое число.");
}
}
else
{
Console.WriteLine("Неверный формат номера занятия. Введите целое число.");
}
}
else
{
Console.WriteLine("Неверный формат номера занятия. Введите целое число.");
}
break;
case "10":
Console.Write("Введите номер первого занятия: ");
if (int.TryParse(Console.ReadLine(), out int firstLessonForWeek))
{
Console.Write("Введите номер последнего занятия: ");
if (int.TryParse(Console.ReadLine(), out int lastLessonForWeek))
{
Console.Write("Введите ID группы: ");
if (int.TryParse(Console.ReadLine(), out int groupIdForWeekPresence))
{
_presenceConsoleUI.GeneratePresenceForWeek(DateTime.Now, groupIdForWeekPresence, firstLessonForWeek, lastLessonForWeek);
}
else
{
Console.WriteLine("Неверный формат ID группы. Введите целое число.");
}
}
else
{
Console.WriteLine("Неверный формат номера занятия. Введите целое число.");
}
}
else
{
Console.WriteLine("Неверный формат номера занятия. Введите целое число.");
}
break;
case "11":
Console.Write("Введите дату (гггг-мм-дд): ");
if (DateTime.TryParse(Console.ReadLine(), out DateTime date))
{
Console.Write("Введите ID группы: ");
if (int.TryParse(Console.ReadLine(), out int groupForPresenceView))
{
_presenceConsoleUI.DisplayPresence(date, groupForPresenceView);
}
else
{
Console.WriteLine("Неверный формат ID группы. Введите целое число.");
}
}
else
{
Console.WriteLine("Неверный формат даты. Введите дату в формате гггг-мм-дд.");
}
break;
case "12":
Console.Write("Введите ID пользователя: ");
if (int.TryParse(Console.ReadLine(), out userId))
{
Console.Write("Введите номер первого занятия: ");
if (int.TryParse(Console.ReadLine(), out int firstAbsLesson))
{
Console.Write("Введите номер последнего занятия: ");
if (int.TryParse(Console.ReadLine(), out int lastAbsLesson))
{
Console.Write("Введите ID группы: ");
if (int.TryParse(Console.ReadLine(), out int absGroupId))
{
Console.Write("Введите дату (дд.мм.гггг): ");
string dateInput = Console.ReadLine();
if (DateTime.TryParseExact(dateInput, "d.M.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime absenceDate))
{
_presenceConsoleUI.MarkUserAbsent(absenceDate, absGroupId, userId, firstAbsLesson, lastAbsLesson);
}
else
{
Console.WriteLine("Неверный формат даты. Пожалуйста, используйте формат дд.мм.гггг.");
}
}
else
{
Console.WriteLine("Неверный формат ID группы. Введите целое число.");
}
}
else
{
Console.WriteLine("Неверный формат номера последнего занятия. Введите целое число.");
}
}
else
{
Console.WriteLine("Неверный формат номера первого занятия. Введите целое число.");
}
}
else
{
Console.WriteLine("Неверный формат ID пользователя. Введите целое число.");
}
break;
case "13":
Console.Write("Введите ID группы: ");
if (int.TryParse(Console.ReadLine(), out int groupIdForAllPresence))
{
_presenceConsoleUI.DisplayAllPresenceByGroup(groupIdForAllPresence);
}
else
{
Console.WriteLine("Неверный формат ID группы. Введите целое число.");
}
break;
case "14":
Console.Write("Введите ID группы: ");
if (int.TryParse(Console.ReadLine(), out int groupIdForGeneralPresence))
{
_presenceConsoleUI.DisplayGeneralPresence(groupIdForGeneralPresence);
}
else
{
Console.WriteLine("Неверный формат ID группы. Введите целое число.");
}
break;
case "15":
_presenceConsoleUI.ExportAttendanceToExcel();
Console.WriteLine("Отчёт в Excel успешно создан.");
break;
case "0":
Console.WriteLine("Завершение работы.");
return;
default:
Console.WriteLine("Неизвестная команда. Пожалуйста, введите номер команды из списка.");
break;
}
}
}
}
}