presence/Demo/UI/PresenceConsole.cs

149 lines
6.4 KiB
C#
Raw Normal View History

2024-10-28 12:03:51 +00:00
using Demo.Data.RemoteData.RemoteDataBase.DAO;
using Demo.domain.Models;
2024-10-23 09:44:48 +00:00
using Demo.Domain.UseCase;
using System;
using System.Collections.Generic;
namespace Demo.UI
{
public class PresenceConsole
{
private readonly UseCaseGeneratePresence _presenceUseCase;
public PresenceConsole(UseCaseGeneratePresence presenceUseCase)
{
_presenceUseCase = presenceUseCase;
}
// Метод для генерации посещаемости на день
public void GeneratePresenceForDay(DateTime date, int groupId, int firstLesson, int lastLesson)
{
try
{
2024-11-01 09:42:31 +00:00
_presenceUseCase.GeneratePresenceDaily(firstLesson, lastLesson, groupId);
2024-10-23 09:44:48 +00:00
Console.WriteLine("Посещаемость на день успешно сгенерирована.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка при генерации посещаемости: {ex.Message}");
}
}
// Метод для генерации посещаемости на неделю
public void GeneratePresenceForWeek(DateTime date, int groupId, int firstLesson, int lastLesson)
{
try
{
_presenceUseCase.GenerateWeeklyPresence(firstLesson, lastLesson, groupId, date);
Console.WriteLine("Посещаемость на неделю успешно сгенерирована.");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка при генерации посещаемости: {ex.Message}");
}
}
// Метод для отображения посещаемости на конкретную дату и группу
public void DisplayPresence(DateTime date, int groupId)
{
try
{
2024-10-28 12:03:51 +00:00
List<PresenceDao> presences = _presenceUseCase.GetPresenceByDateAndGroup(date, groupId);
2024-10-23 09:44:48 +00:00
if (presences == null || presences.Count == 0)
{
Console.WriteLine("Посещаемость на выбранную дату отсутствует.");
return;
}
2024-11-01 09:42:31 +00:00
// Сортируем присутствия по номеру занятия и ID пользователя
var sortedPresences = presences.OrderBy(p => p.LessonNumber)
.ThenBy(p => p.UserId);
2024-10-23 09:44:48 +00:00
Console.WriteLine($"\nПосещаемость на {date.ToShortDateString()} для группы с ID {groupId}:");
Console.WriteLine("---------------------------------------------");
2024-11-01 09:42:31 +00:00
int previousLessonNumber = -1; // Инициализация для сравнения
foreach (var presence in sortedPresences)
2024-10-23 09:44:48 +00:00
{
2024-11-01 09:42:31 +00:00
if (previousLessonNumber != presence.LessonNumber)
2024-10-23 09:44:48 +00:00
{
Console.WriteLine("---------------------------------------------");
2024-11-01 09:42:31 +00:00
previousLessonNumber = presence.LessonNumber;
2024-10-23 09:44:48 +00:00
}
string status = presence.IsAttedance ? "Присутствует" : "Отсутствует";
Console.WriteLine($"Пользователь ID: {presence.UserId}, Занятие {presence.LessonNumber}: {status}");
}
Console.WriteLine("---------------------------------------------");
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка при выводе посещаемости: {ex.Message}");
}
2024-11-01 09:42:31 +00:00
2024-10-23 09:44:48 +00:00
}
public void MarkUserAbsent(DateTime date, int groupId, int userId, int firstLesson, int lastLesson)
{
_presenceUseCase.MarkUserAbsentForLessons(userId, groupId, firstLesson, lastLesson, date);
}
2024-10-24 08:39:55 +00:00
public void DisplayAllPresenceByGroup(int groupId)
{
try
{
2024-11-01 09:42:31 +00:00
// Получаем все посещения для группы
var presences = _presenceUseCase.GetAllPresenceByGroup(groupId);
if (presences == null || presences.Count == 0)
{
Console.WriteLine($"Посещаемость для группы с ID {groupId} отсутствует.");
return;
}
// Группируем по дате
var groupedPresences = presences.GroupBy(p => p.Date);
2024-10-24 08:39:55 +00:00
foreach (var group in groupedPresences)
{
Console.WriteLine("===================================================");
2024-10-24 11:46:11 +00:00
Console.WriteLine($"Дата: {group.Key.ToString("dd.MM.yyyy")}");
2024-10-24 08:39:55 +00:00
Console.WriteLine("===================================================");
2024-11-01 09:42:31 +00:00
// Группируем по занятию
var groupedByLesson = group.GroupBy(p => p.LessonNumber);
foreach (var lessonGroup in groupedByLesson)
2024-10-24 08:39:55 +00:00
{
2024-11-01 09:42:31 +00:00
Console.WriteLine($"Занятие {lessonGroup.Key}:");
// Создаем HashSet для уникальных пользователей
var userIds = new HashSet<int>();
foreach (var presence in lessonGroup)
2024-10-24 08:39:55 +00:00
{
2024-11-01 09:42:31 +00:00
// Проверяем, добавляется ли пользователь в HashSet
if (userIds.Add(presence.UserId))
{
string status = presence.IsAttedance ? "Присутствует" : "Отсутствует";
Console.WriteLine($"Пользователь ID: {presence.UserId}, Статус: {status}");
}
2024-10-24 08:39:55 +00:00
}
2024-11-01 09:42:31 +00:00
Console.WriteLine("---------------------------------------------------");
}
2024-10-24 08:39:55 +00:00
}
}
catch (Exception ex)
{
Console.WriteLine($"Ошибка при выводе посещаемости: {ex.Message}");
}
}
2024-10-23 09:44:48 +00:00
}
}