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);
|
||
}
|
||
}
|
||
}
|
||
} |