173 lines
6.2 KiB
C#
173 lines
6.2 KiB
C#
|
using domain.UseCase;
|
|||
|
using System;
|
|||
|
using System.Globalization;
|
|||
|
|
|||
|
namespace ui
|
|||
|
{
|
|||
|
public class PresenceConsoleUI
|
|||
|
{
|
|||
|
private readonly PresenceUseCase _presenceUseCase;
|
|||
|
|
|||
|
public PresenceConsoleUI(PresenceUseCase presenceUseCase)
|
|||
|
{
|
|||
|
_presenceUseCase = presenceUseCase;
|
|||
|
}
|
|||
|
|
|||
|
public void GenerateDailyAttendance(int groupId, int firstLesson, int lastLesson, DateTime date)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
_presenceUseCase.GenerateDailyPresence(
|
|||
|
groupId,
|
|||
|
DateOnly.FromDateTime(date),
|
|||
|
firstLesson,
|
|||
|
lastLesson
|
|||
|
);
|
|||
|
Console.WriteLine($"Посещаемость на {date:dd.MM.yyyy} создана!");
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
ShowError("Ошибка генерации", ex);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void ShowAttendance(DateTime date, int groupId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var records = _presenceUseCase.GetDailyAttendance(
|
|||
|
groupId,
|
|||
|
DateOnly.FromDateTime(date)
|
|||
|
);
|
|||
|
|
|||
|
if (records.Count == 0)
|
|||
|
{
|
|||
|
Console.WriteLine("Данные отсутствуют");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
Console.WriteLine($"\nПосещаемость группы {groupId} на {date:dd.MM.yyyy}");
|
|||
|
Console.WriteLine(new string('-', 40));
|
|||
|
|
|||
|
foreach (var lesson in records.GroupBy(r => r.LessonNumber))
|
|||
|
{
|
|||
|
Console.WriteLine($"Занятие {lesson.Key}:");
|
|||
|
foreach (var student in lesson)
|
|||
|
{
|
|||
|
Console.WriteLine($" Студент {student.UserId}: " +
|
|||
|
$"{(student.IsAttendance ? "Присутствовал" : "Отсутствовал")}");
|
|||
|
}
|
|||
|
Console.WriteLine(new string('-', 40));
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
ShowError("Ошибка получения данных", ex);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void ExportToExcel(int groupId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
_presenceUseCase.ExportToExcel(groupId);
|
|||
|
Console.WriteLine("Экспорт завершен успешно!");
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
ShowError("Ошибка экспорта", ex);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void ShowError(string message, Exception ex)
|
|||
|
{
|
|||
|
Console.ForegroundColor = ConsoleColor.Red;
|
|||
|
Console.WriteLine($"{message}: {ex.Message}");
|
|||
|
Console.ResetColor();
|
|||
|
}
|
|||
|
|
|||
|
public void GenerateWeeklyAttendance(int groupId, int firstLesson, int lastLesson, DateTime startDate)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
_presenceUseCase.GenerateWeeklyPresence(
|
|||
|
groupId,
|
|||
|
DateOnly.FromDateTime(startDate),
|
|||
|
firstLesson,
|
|||
|
lastLesson
|
|||
|
);
|
|||
|
Console.WriteLine("Посещаемость на неделю успешно создана!");
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
ShowError("Ошибка генерации недельной посещаемости", ex);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void MarkAbsence(int userId, int groupId, DateTime date, int firstLesson, int lastLesson)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
_presenceUseCase.MarkAbsence(
|
|||
|
userId,
|
|||
|
groupId,
|
|||
|
DateOnly.FromDateTime(date),
|
|||
|
firstLesson,
|
|||
|
lastLesson
|
|||
|
);
|
|||
|
Console.WriteLine("Отметка об отсутствии сохранена");
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
ShowError("Ошибка отметки отсутствия", ex);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void ShowFullGroupAttendance(int groupId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var records = _presenceUseCase.GetCompleteGroupAttendance(groupId);
|
|||
|
|
|||
|
Console.WriteLine($"\nПолная посещаемость группы {groupId}");
|
|||
|
Console.WriteLine(new string('=', 50));
|
|||
|
|
|||
|
foreach (var dateGroup in records.GroupBy(r => r.Date))
|
|||
|
{
|
|||
|
Console.WriteLine($"Дата: {dateGroup.Key:dd.MM.yyyy}");
|
|||
|
foreach (var lessonGroup in dateGroup.GroupBy(r => r.LessonNumber))
|
|||
|
{
|
|||
|
Console.WriteLine($" Занятие {lessonGroup.Key}:");
|
|||
|
foreach (var record in lessonGroup)
|
|||
|
{
|
|||
|
Console.WriteLine($" Студент {record.UserId}: " +
|
|||
|
$"{(record.IsAttendance ? "Присутствовал" : "Отсутствовал")}");
|
|||
|
}
|
|||
|
Console.WriteLine(new string('-', 30));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
ShowError("Ошибка получения данных", ex);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void DisplayGeneralPresence(int groupId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var stats = _presenceUseCase.GetGeneralPresence(groupId);
|
|||
|
|
|||
|
Console.WriteLine("\nОбщая статистика посещаемости:");
|
|||
|
Console.WriteLine($"Количество студентов: {stats.UserCount}");
|
|||
|
Console.WriteLine($"Всего занятий: {stats.TotalLessons}");
|
|||
|
Console.WriteLine($"Средняя посещаемость: {stats.AttendancePercentage:F1}%");
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
ShowError("Ошибка получения статистики", ex);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|