165 lines
7.2 KiB
C#
165 lines
7.2 KiB
C#
|
using Demo.domain.Models;
|
|||
|
using Demo.Domain.UseCase;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
|
|||
|
namespace Demo.UI
|
|||
|
{
|
|||
|
public class PresenceConsole
|
|||
|
{
|
|||
|
private readonly UseCaseGeneratePresence _presenceUseCase;
|
|||
|
private readonly GroupAttendanceService _groupAttendanceService; // Добавляем GroupAttendanceService
|
|||
|
|
|||
|
public PresenceConsole(UseCaseGeneratePresence presenceUseCase, GroupAttendanceService groupAttendanceService)
|
|||
|
{
|
|||
|
_presenceUseCase = presenceUseCase;
|
|||
|
_groupAttendanceService = groupAttendanceService; // Инициализируем GroupAttendanceService
|
|||
|
}
|
|||
|
|
|||
|
// Метод для генерации посещаемости на день
|
|||
|
public void GeneratePresenceForDay(DateTime date, int groupId, int firstLesson, int lastLesson)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
_presenceUseCase.GeneratePresenceDaily(firstLesson, lastLesson, groupId, date);
|
|||
|
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
|
|||
|
{
|
|||
|
List<PresenceLocalEntity> presences = _presenceUseCase.GetPresenceByDateAndGroup(groupId, date);
|
|||
|
|
|||
|
if (presences == null || presences.Count == 0)
|
|||
|
{
|
|||
|
Console.WriteLine("Нет данных о посещаемости на выбранную дату.");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
Console.WriteLine($"\n Посещаемость на {date:dd.MM.yyyy} ");
|
|||
|
Console.WriteLine("-----------------------------------------------------");
|
|||
|
|
|||
|
// Сохраняем номер занятия для сравнения
|
|||
|
int previousLessonNumber = -1;
|
|||
|
|
|||
|
foreach (var presence in presences)
|
|||
|
{
|
|||
|
// Проверяем, изменился ли номер занятия
|
|||
|
if (previousLessonNumber != presence.LessonNumber)
|
|||
|
{
|
|||
|
Console.WriteLine("-----------------------------------------------------");
|
|||
|
Console.WriteLine($" Занятие: {presence.LessonNumber} ");
|
|||
|
Console.WriteLine("-----------------------------------------------------");
|
|||
|
previousLessonNumber = presence.LessonNumber;
|
|||
|
}
|
|||
|
|
|||
|
// Форматируем статус присутствия
|
|||
|
string status = presence.IsAttedance ? "Присутствует" : "Отсутствует";
|
|||
|
Console.WriteLine($"Пользователь (ID: {presence.UserGuid}) - Статус: {status}");
|
|||
|
}
|
|||
|
|
|||
|
Console.WriteLine("-----------------------------------------------------");
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Console.WriteLine($"Ошибка при отображении посещаемости: {ex.Message}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
public void MarkUserAbsent(DateTime date, int groupId, Guid userGuid, int firstLesson, int lastLesson)
|
|||
|
{
|
|||
|
_presenceUseCase.MarkUserAbsentForLessons(userGuid, groupId, firstLesson, lastLesson, date);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
public void DisplayAllPresenceByGroup(int groupId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var presences = _presenceUseCase.GetAllPresenceByGroup(groupId);
|
|||
|
|
|||
|
if (presences == null || !presences.Any())
|
|||
|
{
|
|||
|
Console.WriteLine($"Нет данных о посещаемости для группы с ID: {groupId}.");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
// Группируем записи посещаемости по дате
|
|||
|
var groupedPresences = presences.GroupBy(p => p.Date);
|
|||
|
|
|||
|
foreach (var group in groupedPresences)
|
|||
|
{
|
|||
|
Console.WriteLine("===================================================");
|
|||
|
Console.WriteLine($" Дата: {group.Key:dd.MM.yyyy} ");
|
|||
|
Console.WriteLine("===================================================");
|
|||
|
|
|||
|
// Сохраняем номер занятия для сравнения
|
|||
|
int previousLessonNumber = -1;
|
|||
|
|
|||
|
foreach (var presence in group)
|
|||
|
{
|
|||
|
// Проверяем, изменился ли номер занятия
|
|||
|
if (previousLessonNumber != presence.LessonNumber)
|
|||
|
{
|
|||
|
Console.WriteLine("---------------------------------------------------");
|
|||
|
Console.WriteLine($" Занятие: {presence.LessonNumber} ");
|
|||
|
Console.WriteLine("---------------------------------------------------");
|
|||
|
previousLessonNumber = presence.LessonNumber;
|
|||
|
}
|
|||
|
|
|||
|
// Форматируем статус присутствия
|
|||
|
string status = presence.IsAttedance ? "✅ Присутствует" : "❌ Отсутствует";
|
|||
|
Console.WriteLine($"Пользователь (ID: {presence.UserGuid}) - Статус: {status}");
|
|||
|
}
|
|||
|
|
|||
|
Console.WriteLine("---------------------------------------------------");
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Console.WriteLine($"Ошибка при отображении посещаемости: {ex.Message}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void DisplayGroupAttendanceInfo(int groupId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
_groupAttendanceService.DisplayGroupAttendanceInfo(groupId);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Console.WriteLine($"Ошибка при отображении информации о посещаемости: {ex.Message}");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|