a
This commit is contained in:
parent
e03b4f94d3
commit
4e0d93ee84
@ -17,10 +17,10 @@ public class TableReport
|
||||
private readonly ISubjectRepository _subjectRepository;
|
||||
private readonly ITeacherRepository _teacherRepository;
|
||||
private readonly ILogger<TableReport> _logger;
|
||||
internal static readonly string[] item = ["Преподаватель", "Дата", "Предмет", "Оценка"];
|
||||
internal static readonly string[] item = { "Преподаватель", "Дата", "Предмет", "Оценка" };
|
||||
|
||||
public TableReport(IStatementRepository statementRepository,IOrderRepository orderRepository,
|
||||
ISubjectRepository subjectRepository,ILogger<TableReport> logger, ITeacherRepository teacherRepository)
|
||||
public TableReport(IStatementRepository statementRepository, IOrderRepository orderRepository,
|
||||
ISubjectRepository subjectRepository, ILogger<TableReport> logger, ITeacherRepository teacherRepository)
|
||||
{
|
||||
_teacherRepository = teacherRepository ?? throw new ArgumentNullException(nameof(teacherRepository));
|
||||
_statementRepository = statementRepository ?? throw new ArgumentNullException(nameof(statementRepository));
|
||||
@ -34,9 +34,9 @@ public class TableReport
|
||||
try
|
||||
{
|
||||
new ExcelBuilder(filePath)
|
||||
.AddHeader("Сводка по успеваемости ", 0,4)
|
||||
.AddHeader("Сводка по успеваемости ", 0, 4)
|
||||
.AddParagraph("за период", 0)
|
||||
.AddTable([15,15,15,15], GetData(studentId,startDate, endDate))
|
||||
.AddTable(new[] { 24, 20, 20, 20 }, GetData(studentId, startDate, endDate))
|
||||
.Build();
|
||||
return true;
|
||||
}
|
||||
@ -49,42 +49,41 @@ public class TableReport
|
||||
|
||||
private List<string[]> GetData(int studentId, DateTime startDate, DateTime endDate)
|
||||
{
|
||||
var subjects = _subjectRepository
|
||||
.ReadSubject()
|
||||
.ToDictionary(s => s.Id, s => s.Name);
|
||||
var teacher = _teacherRepository
|
||||
.ReadTeachers()
|
||||
.ToDictionary(p => p.Id, p => $"{p.Name}");
|
||||
// Получаем оценки за диапазон дат для указанного студента
|
||||
var markss= _statementRepository
|
||||
.ReadStatement()
|
||||
.Where(g => g.Date >= startDate && g.Date <= endDate
|
||||
&& g.Mark.Any(sg => sg.StudentId == studentId))
|
||||
.Select(g => new
|
||||
{Date = g.Date, Subject = subjects.TryGetValue(g.SubjectId, out var subject) ? subject : "Неизвестный предмет",
|
||||
var subjects = _subjectRepository.ReadSubject().ToDictionary(s => s.Id, s => s.Name);
|
||||
var teachers = _teacherRepository.ReadTeachers().ToDictionary(p => p.Id, p => p.Name);
|
||||
|
||||
Value = long.TryParse(g.Mark.First(sg => sg.StudentId == studentId).Value, out var gradeValue) ? gradeValue : 0,
|
||||
Teacher = teacher.TryGetValue(g.TeacherId, out var prof) ? prof : "Неизвестный преподаватель"
|
||||
})
|
||||
var marks = _statementRepository.ReadStatement()
|
||||
.Where(g => g.Date >= startDate && g.Date <= endDate)
|
||||
.SelectMany(g => g.Mark.Where(m => m.StudentId == studentId).Select(m => new
|
||||
{
|
||||
Date = g.Date,
|
||||
Subject = subjects.TryGetValue(g.SubjectId, out var subject) ? subject : "Неизвестный предмет",
|
||||
Value = long.TryParse(m.Value, out var gradeValue) ? gradeValue : 0,
|
||||
Teacher = teachers.TryGetValue(g.TeacherId, out var teacherName) ? teacherName : "Неизвестный преподаватель"
|
||||
}))
|
||||
.ToList();
|
||||
|
||||
|
||||
var averageGrade = markss.Any() ? markss.Average(g => g.Value) : 0;
|
||||
// Формируем заголовки и строки для таблицы
|
||||
return new List<string[]> { item }
|
||||
.Union(markss.Select(g => new string[]
|
||||
if (!marks.Any())
|
||||
{
|
||||
g.Date.ToString("dd.MM.yyyy"),
|
||||
g.Subject,
|
||||
g.Value.ToString(),
|
||||
g.Teacher
|
||||
}))
|
||||
_logger.LogWarning("Нет оценок за указанный период для студента с ID: {StudentId}", studentId);
|
||||
return new List<string[]> { item }; // Возвращение только заголовков в случае отсутствия оценок
|
||||
}
|
||||
|
||||
var averageGrade = marks.Average(g => g.Value);
|
||||
var data = marks.Select(g => new string[]
|
||||
{
|
||||
g.Teacher, // Преподаватель
|
||||
g.Date.ToString("dd.MM.yyyy"), // Дата
|
||||
g.Subject, // Предмет
|
||||
g.Value.ToString() // Оценка
|
||||
}).ToList();
|
||||
|
||||
// Объединяем заголовок и данные
|
||||
return new List<string[]> { item }
|
||||
.Union(data)
|
||||
.Union(new[]
|
||||
{
|
||||
new string[]
|
||||
{
|
||||
"Средний балл", averageGrade.ToString("0.00"), ""
|
||||
}
|
||||
new string[] { "Средний балл", averageGrade.ToString("0.00"), "", "" }
|
||||
})
|
||||
.ToList();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user