188 lines
8.3 KiB
C#
188 lines
8.3 KiB
C#
|
using Demo.Data.Exceptions;
|
|||
|
using Demo.Data.RemoteData.RemoteDataBase.DAO;
|
|||
|
using Demo.domain.Models;
|
|||
|
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 ExportAttendanceToExcel()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
_presenceUseCase.ExportAttendanceToExcel();
|
|||
|
Console.WriteLine("Данные посещаемости успешно экспортированы в Excel.");
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Console.WriteLine($"Ошибка при экспорте посещаемости: {ex.Message}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// Метод для генерации посещаемости на день
|
|||
|
public void GeneratePresenceForDay(DateTime date, int groupId, int firstLesson, int lastLesson)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
_presenceUseCase.GeneratePresenceDaily(firstLesson, lastLesson, groupId);
|
|||
|
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<PresenceDao> presences = _presenceUseCase.GetPresenceByDateAndGroup(date, groupId);
|
|||
|
|
|||
|
if (presences == null || presences.Count == 0)
|
|||
|
{
|
|||
|
Console.WriteLine("Посещаемость на выбранную дату отсутствует.");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
// Сортируем присутствия по номеру занятия и ID пользователя
|
|||
|
var sortedPresences = presences.OrderBy(p => p.LessonNumber)
|
|||
|
.ThenBy(p => p.UserId);
|
|||
|
|
|||
|
Console.WriteLine($"\nПосещаемость на {date.ToShortDateString()} для группы с ID {groupId}:");
|
|||
|
Console.WriteLine("---------------------------------------------");
|
|||
|
|
|||
|
int previousLessonNumber = -1; // Инициализация для сравнения
|
|||
|
foreach (var presence in sortedPresences)
|
|||
|
{
|
|||
|
if (previousLessonNumber != presence.LessonNumber)
|
|||
|
{
|
|||
|
Console.WriteLine("---------------------------------------------");
|
|||
|
previousLessonNumber = presence.LessonNumber;
|
|||
|
}
|
|||
|
string status = presence.IsAttedance ? "Присутствует" : "Отсутствует";
|
|||
|
Console.WriteLine($"Пользователь ID: {presence.UserId}, Занятие {presence.LessonNumber}: {status}");
|
|||
|
}
|
|||
|
Console.WriteLine("---------------------------------------------");
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Console.WriteLine($"Ошибка при выводе посещаемости: {ex.Message}");
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public void MarkUserAbsent(DateTime date, int groupId, int userId, int firstLesson, int lastLesson)
|
|||
|
{
|
|||
|
bool check = _presenceUseCase.MarkUserAbsentForLessons(userId, groupId, firstLesson, lastLesson, date);
|
|||
|
if (check)
|
|||
|
{
|
|||
|
Console.WriteLine("Пользователь отмечен как осутсвующий");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Console.WriteLine($"Посещаемость для пользователя ID: {userId} на дату {date.ToShortDateString()}" +
|
|||
|
$" с {firstLesson} по {lastLesson} уроки не найдена.");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void DisplayGeneralPresence(int groupId)
|
|||
|
{
|
|||
|
var statistics = _presenceUseCase.GetGeneralPresence(groupId);
|
|||
|
Console.WriteLine($"Человек в группе: {statistics.UserCount}, " +
|
|||
|
$"Количество проведённых занятий: {statistics.TotalLessons}, " +
|
|||
|
$"Общий процент посещаемости группы: {statistics.AttendancePercentage}%");
|
|||
|
|
|||
|
foreach (var user in statistics.UserAttendanceDetails)
|
|||
|
{
|
|||
|
Console.ForegroundColor = user.AttendanceRate < 40 ? ConsoleColor.Red : ConsoleColor.White;
|
|||
|
Console.WriteLine($"ID Пользователя: {user.UserId}, Посетил: {user.Attended}, " +
|
|||
|
$"Пропустил: {user.Missed}, Процент посещаемости: {user.AttendanceRate}%");
|
|||
|
}
|
|||
|
Console.ForegroundColor = ConsoleColor.White;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
public void DisplayAllPresenceByGroup(int groupId)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
// Получаем все посещения для группы
|
|||
|
var presences = _presenceUseCase.GetAllPresenceByGroup(groupId);
|
|||
|
|
|||
|
if (presences == null || presences.Count == 0)
|
|||
|
{
|
|||
|
Console.WriteLine($"Посещаемость для группы с ID {groupId} отсутствует.");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
// Группируем по дате
|
|||
|
var groupedPresences = presences.GroupBy(p => p.Date);
|
|||
|
|
|||
|
foreach (var group in groupedPresences)
|
|||
|
{
|
|||
|
Console.WriteLine("===================================================");
|
|||
|
Console.WriteLine($"Дата: {group.Key.ToString("dd.MM.yyyy")}");
|
|||
|
Console.WriteLine("===================================================");
|
|||
|
|
|||
|
// Группируем по занятию
|
|||
|
var groupedByLesson = group.GroupBy(p => p.LessonNumber);
|
|||
|
|
|||
|
foreach (var lessonGroup in groupedByLesson)
|
|||
|
{
|
|||
|
Console.WriteLine($"Занятие {lessonGroup.Key}:");
|
|||
|
|
|||
|
// Создаем HashSet для уникальных пользователей
|
|||
|
var userIds = new HashSet<int>();
|
|||
|
|
|||
|
foreach (var presence in lessonGroup)
|
|||
|
{
|
|||
|
// Проверяем, добавляется ли пользователь в HashSet
|
|||
|
if (userIds.Add(presence.UserId))
|
|||
|
{
|
|||
|
string status = presence.IsAttedance ? "Присутствует" : "Отсутствует";
|
|||
|
Console.WriteLine($"Пользователь ID: {presence.UserId}, Статус: {status}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
Console.WriteLine("---------------------------------------------------");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Console.WriteLine($"Ошибка при выводе посещаемости: {ex.Message}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}
|