From df766afebdf898bececaf98fdb13ed6d59a55b2b Mon Sep 17 00:00:00 2001 From: Kudyaeva Date: Mon, 9 Dec 2024 10:44:20 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entities/Discipline.cs | 7 +++ .../SessionResults_Kudyaeva/Entities/Group.cs | 10 ++-- .../Entities/Retake.cs | 38 ++++++++++-- .../Entities/Statement.cs | 44 +++++++++++--- .../Entities/StatementStudent.cs | 5 ++ .../Entities/Student.cs | 12 ++++ .../Entities/Teacher.cs | 8 +++ .../Entities/TempStatementStudent.cs | 18 ------ .../Forms/DisciplineListForm.cs | 6 +- .../Forms/GroupsListForm.cs | 6 +- .../Forms/RetakeListForm.cs | 6 +- .../Forms/StatementListForm.cs | 7 ++- .../Forms/StudentsList.cs | 8 ++- .../Forms/TeachersList.cs | 7 ++- .../Reports/ChartReport.cs | 11 ++-- .../Reports/TableReport.cs | 8 +-- .../Repositories/IRetakeRepository.cs | 3 +- .../Repositories/IStatementRepository.cs | 2 +- .../Implementations/QueryBuilder.cs | 33 +++++++++++ .../Implementations/RetakeRepository.cs | 33 ++++++++++- .../Implementations/StatementRepository.cs | 59 +++++++++++++++++-- .../Implementations/StudentRepository.cs | 4 +- 22 files changed, 269 insertions(+), 66 deletions(-) delete mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/TempStatementStudent.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/QueryBuilder.cs diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Discipline.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Discipline.cs index ab16ba8..a101fe4 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Discipline.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Discipline.cs @@ -1,12 +1,19 @@ using SessionResults_Kudyaeva.Entities.Enums; +using System.ComponentModel; namespace SessionResults_Kudyaeva.Entities; public class Discipline { public int ID { get; private set; } + + [DisplayName("Название")] public string Name { get; private set; } = string.Empty; + + [DisplayName("Описание")] public string Description { get; private set; } = string.Empty; + + [DisplayName("На каких курсах")] public Course Courses { get; private set; } public static Discipline Create(int id, string name, string description, Course courses) diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Group.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Group.cs index a8a64d1..c033a3e 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Group.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Group.cs @@ -1,16 +1,16 @@ using SessionResults_Kudyaeva.Entities.Enums; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.ComponentModel; namespace SessionResults_Kudyaeva.Entities; public class Group { public int ID { get; private set; } + + [DisplayName("Название")] public string Name { get; private set; } = string.Empty; + + [DisplayName("Тип")] public GroupType Type { get; private set; } public static Group Create(int id, string name, GroupType type) diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Retake.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Retake.cs index fb14eb0..12403f3 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Retake.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Retake.cs @@ -1,9 +1,5 @@ using SessionResults_Kudyaeva.Entities.Enums; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.ComponentModel; namespace SessionResults_Kudyaeva.Entities; @@ -11,14 +7,46 @@ public class Retake { public int Id { get; private set; } + [Browsable(false)] public int StudentId { get; private set; } + [Browsable(false)] public int TeacherId { get; private set; } + [Browsable(false)] public int DisciplineId { get; private set; } + [Browsable(false)] + public string TeacherSurname { get; private set; } = string.Empty; + + [Browsable(false)] + public string TeacherName { get; private set; } = string.Empty; + + [Browsable(false)] + public string TeacherMiddleName { get; private set; } = string.Empty; + + [Browsable(false)] + public string StudentSurname { get; private set; } = string.Empty; + + [Browsable(false)] + public string StudentName { get; private set; } = string.Empty; + + [Browsable(false)] + public string StudentMiddleName { get; private set; } = string.Empty; + + [DisplayName("Студент")] + public string StudentDisplayName => $"{StudentSurname} {StudentName[0]}. {StudentMiddleName[0]}."; + + [DisplayName("Преподаватель")] + public string TeacherDisplayName => $"{TeacherSurname} {TeacherName[0]}. {TeacherMiddleName[0]}."; + + [DisplayName("Предмет")] + public string DisciplineName { get; private set; } = string.Empty; + + [DisplayName("Оценка")] public Mark Mark { get; private set; } + [DisplayName("Дата перезачета")] public DateTime Date { get; private set; } public static Retake CreateOperation(int id, int studentId, int teacherId, int disciplineId, Mark mark, DateTime date) diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Statement.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Statement.cs index 2a1047b..f67f187 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Statement.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Statement.cs @@ -1,11 +1,41 @@ -namespace SessionResults_Kudyaeva.Entities; +using System.ComponentModel; + +namespace SessionResults_Kudyaeva.Entities; public class Statement { public int Id { get; private set; } + + [Browsable(false)] public int TeacherId { get; private set; } + + [Browsable(false)] public int DisciplineId { get; private set; } + + [Browsable(false)] + public string TeacherSurname { get; private set; } = string.Empty; + + [Browsable(false)] + public string TeacherName { get; private set; } = string.Empty; + + [Browsable(false)] + public string TeacherMiddleName { get; private set; } = string.Empty; + + [DisplayName("Преподаватель")] + public string TeacherDisplayName => $"{TeacherSurname} {TeacherName[0]}. {TeacherMiddleName[0]}."; + + [DisplayName("Предмет")] + public string DisciplineName { get; private set; } = string.Empty; + + [DisplayName("Дата")] public DateTime Date { get; private set; } + + [DisplayName("Оценки")] + public string Fuel => StatementStudents != null ? + string.Join(", ", StatementStudents.Select(x => $"{x.StudentDisplayName} {(int)x.Mark}")) : + string.Empty; + + [Browsable(false)] public IEnumerable StatementStudents { get; private set; } = []; public static Statement CreateOperation(int id, int teacherId, int disciplineId, DateTime date, IEnumerable statementStudents) @@ -20,15 +50,11 @@ public class Statement }; } - public static Statement CreateOperation(TempStatementStudent tempStatementStudent, IEnumerable statementStudents) + public void SetStatementStudents(IEnumerable statementStudents) { - return new Statement + if (statementStudents != null && statementStudents.Any()) { - Id = tempStatementStudent.Id, - TeacherId = tempStatementStudent.TeacherId, - DisciplineId = tempStatementStudent.DisciplineId, - Date = tempStatementStudent.Date, - StatementStudents = statementStudents - }; + StatementStudents = statementStudents; + } } } diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/StatementStudent.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/StatementStudent.cs index 18a00af..8dcab7d 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/StatementStudent.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/StatementStudent.cs @@ -1,6 +1,7 @@ using SessionResults_Kudyaeva.Entities.Enums; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -11,6 +12,10 @@ public class StatementStudent { public int Id { get; private set; } public int StudentId { get; private set; } + public string StudentSurname { get; private set; } = string.Empty; + public string StudentName { get; private set; } = string.Empty; + public string StudentMiddleName { get; private set; } = string.Empty; + public string StudentDisplayName => $"{StudentSurname} {StudentName[0]}. {StudentMiddleName[0]}."; public Mark Mark { get; private set; } public static StatementStudent CreateOperation(int id, int studentId, Mark mark) diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Student.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Student.cs index e65e02c..0b6da96 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Student.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Student.cs @@ -1,6 +1,7 @@ using SessionResults_Kudyaeva.Entities.Enums; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -11,10 +12,21 @@ namespace SessionResults_Kudyaeva.Entities; public class Student { public int ID { get; private set; } + + [DisplayName("Фамилия")] public string Surname { get; private set; } = string.Empty; + + [DisplayName("Имя")] public string Name { get; private set; } = string.Empty; + + [DisplayName("Отчество")] public string MiddleName { get; private set; } = string.Empty; + public int GroupID { get; private set; } + + [DisplayName("Группа")] + public string GroupName { get; private set; } = string.Empty; + public string DisplayName => $"{Surname} {Name[0]}. {MiddleName[0]}."; public static Student Create(int id, string surname, string name, string middleName, int groupID) diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Teacher.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Teacher.cs index 297fd86..8c343bf 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Teacher.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Teacher.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -9,9 +10,16 @@ namespace SessionResults_Kudyaeva.Entities; public class Teacher { public int ID { get; private set; } + + [DisplayName("Фамилия")] public string Surname { get; private set; } = string.Empty; + + [DisplayName("Имя")] public string Name { get; private set; } = string.Empty; + + [DisplayName("Отчество")] public string MiddleName { get; private set; } = string.Empty; + public string DisplayName => $"{Surname} {Name[0]}. {MiddleName[0]}."; public static Teacher Create(int id, string surname, string name, string middleName) diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/TempStatementStudent.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/TempStatementStudent.cs deleted file mode 100644 index 81a5400..0000000 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/TempStatementStudent.cs +++ /dev/null @@ -1,18 +0,0 @@ -using SessionResults_Kudyaeva.Entities.Enums; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace SessionResults_Kudyaeva.Entities; - -public class TempStatementStudent -{ - public int Id { get; private set; } - public int TeacherId { get; private set; } - public int DisciplineId { get; private set; } - public DateTime Date { get; private set; } - public int StudentId { get; private set; } - public Mark Mark { get; private set; } -} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.cs index b06d3cb..30d597f 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.cs @@ -91,7 +91,11 @@ public partial class DisciplineListForm : Form } } - private void LoadList() => dataGridViewDisciplines.DataSource = _disciplineRepository.GetAllDisciplines(); + private void LoadList() + { + dataGridViewDisciplines.DataSource = _disciplineRepository.GetAllDisciplines(); + dataGridViewDisciplines.Columns["Id"].Visible = false; + } private bool TryGetIdentifierFromSelectedRow(out int id) { diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.cs index 467dcab..bd09247 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.cs @@ -93,7 +93,11 @@ public partial class GroupsListForm : Form } } - private void LoadList() => dataGridViewGroups.DataSource = _groupRepository.GetAllGroups(); + private void LoadList() + { + dataGridViewGroups.DataSource = _groupRepository.GetAllGroups(); + dataGridViewGroups.Columns["Id"].Visible = false; + } private bool TryGetIdentifierFromSelectedRow(out int id) { diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/RetakeListForm.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/RetakeListForm.cs index f8765ca..c4dbd08 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/RetakeListForm.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/RetakeListForm.cs @@ -28,7 +28,11 @@ public partial class RetakeListForm : Form } } - private void LoadList() => dataGridViewData.DataSource = _retakeRepository.GetAllRetakes(); + private void LoadList() + { + dataGridViewData.DataSource = _retakeRepository.GetAllRetakes(); + dataGridViewData.Columns["Id"].Visible = false; + } private void RetakeListForm_Load(object sender, EventArgs e) { diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StatementListForm.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StatementListForm.cs index 2d7de76..bb9b9b8 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StatementListForm.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StatementListForm.cs @@ -40,6 +40,9 @@ public partial class StatementListForm : Form } } - private void LoadList() => dataGridViewData.DataSource = _statementRepository.GetAllStatements(); - + private void LoadList() + { + dataGridViewData.DataSource = _statementRepository.GetAllStatements(); + dataGridViewData.Columns["Id"].Visible = false; + } } diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.cs index a31f17f..1c348a5 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.cs @@ -92,7 +92,13 @@ public partial class StudentsList : Form } } - private void LoadList() => dataGridViewStudents.DataSource = _studentRepository.GetAllStudents(); + private void LoadList() + { + dataGridViewStudents.DataSource = _studentRepository.GetAllStudents(); + dataGridViewStudents.Columns["Id"].Visible = false; + dataGridViewStudents.Columns["DisplayName"].Visible = false; + //dataGridViewStudents.Columns["GroupId"].Visible = false; + } private bool TryGetIdentifierFromSelectedRow(out int id) { diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.cs index 6c8688a..9afc194 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.cs @@ -90,7 +90,12 @@ public partial class TeachersList : Form } } - private void LoadList() => dataGridViewTeachers.DataSource = _teacherRepository.GetAllTeachers(); + private void LoadList() + { + dataGridViewTeachers.DataSource = _teacherRepository.GetAllTeachers(); + dataGridViewTeachers.Columns["Id"].Visible = false; + dataGridViewTeachers.Columns["DisplayName"].Visible = false; + } private bool TryGetIdentifierFromSelectedRow(out int id) { diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Reports/ChartReport.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Reports/ChartReport.cs index 68dec3a..30303fe 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Reports/ChartReport.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Reports/ChartReport.cs @@ -20,7 +20,7 @@ internal class ChartReport { new PdfBuilder(filePath) .AddHeader("Выставленные оценки по предметам") - .AddPieChart("Предметы", GetData(dateTime)) + .AddPieChart($"Выставлено оценок за предметы на {dateTime:dd.MM.yyyy}", GetData(dateTime)) .Build(); return true; } @@ -33,13 +33,12 @@ internal class ChartReport private List<(string Caption, double Value)> GetData(DateTime dateTime) { return _statementRepository - .GetAllStatements() - .Where(x => x.Date.Date == dateTime.Date) - .GroupBy(x => x.DisciplineId, (key, group) => new { - Id = key, + .GetAllStatements(dateFrom: dateTime.Date, dateTo:dateTime.Date.AddDays(1)) + .GroupBy(x => x.DisciplineName, (key, group) => new { + DisciplineName = key, Count = group.Sum(statement => statement.StatementStudents.Count()) }) - .Select(x => (x.Id.ToString(), (double)x.Count)) + .Select(x => (x.DisciplineName, (double)x.Count)) .ToList(); } } diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Reports/TableReport.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Reports/TableReport.cs index af1bd5e..dc69429 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Reports/TableReport.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Reports/TableReport.cs @@ -24,7 +24,7 @@ internal class TableReport { new ExcelBuilder(filePath) .AddHeader("Сводка по оценкам студента", 0, 3) - .AddParagraph("за период", 0) + .AddParagraph($"за период {startDate:dd.MM.yyyy} по {endDate:dd.MM.yyyy}", 0) .AddTable([10, 15, 15, 15], GetData(studentId, startDate, endDate)) .Build(); return true; @@ -39,8 +39,7 @@ internal class TableReport private List GetData(int studentId, DateTime startDate, DateTime endDate) { var statements = _statementRepository - .GetAllStatements() - .Where(x => x.Date >= startDate && x.Date <= endDate && x.StatementStudents.Any(y => y.StudentId == studentId)) + .GetAllStatements(startDate, endDate, studentId) .Select(x => new { Discipline = x.DisciplineId.ToString(), x.Date, @@ -49,8 +48,7 @@ internal class TableReport }); var retakes = _retakeRepository - .GetAllRetakes() - .Where(x => x.Date >= startDate && x.Date <= endDate && x.StudentId == studentId) + .GetAllRetakes(startDate, endDate, studentId) .Select(x => new { Discipline = x.DisciplineId.ToString(), x.Date, diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IRetakeRepository.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IRetakeRepository.cs index cf40eab..26fafe7 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IRetakeRepository.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IRetakeRepository.cs @@ -10,5 +10,6 @@ namespace SessionResults_Kudyaeva.Repositories; public interface IRetakeRepository { void CreateRetake(Retake retake); - IEnumerable GetAllRetakes(); + IEnumerable GetAllRetakes(DateTime? dateFrom = null, DateTime? dateTo = null, + int? studentId = null); } diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IStatementRepository.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IStatementRepository.cs index 93d37ad..3a1e651 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IStatementRepository.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IStatementRepository.cs @@ -10,5 +10,5 @@ namespace SessionResults_Kudyaeva.Repositories; public interface IStatementRepository { void CreateStatement(Statement statement); - IEnumerable GetAllStatements(); + IEnumerable GetAllStatements(DateTime? dateFrom = null, DateTime? dateTo = null, int? studentId = null); } diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/QueryBuilder.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/QueryBuilder.cs new file mode 100644 index 0000000..3705f3e --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/QueryBuilder.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SessionResults_Kudyaeva.Repositories.Implementations; + +internal class QueryBuilder +{ + private readonly StringBuilder _builder; + public QueryBuilder() + { + _builder = new(); + } + public QueryBuilder AddCondition(string condition) + { + if (_builder.Length > 0) + { + _builder.Append(" AND "); + } + _builder.Append(condition); + return this; + } + public string Build() + { + if (_builder.Length == 0) + { + return string.Empty; + } + return $"WHERE {_builder}"; + } +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/RetakeRepository.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/RetakeRepository.cs index 9782f20..eaa4b25 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/RetakeRepository.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/RetakeRepository.cs @@ -37,14 +37,41 @@ public class RetakeRepository : IRetakeRepository } } - public IEnumerable GetAllRetakes() + public IEnumerable GetAllRetakes(DateTime? dateFrom = null, DateTime? dateTo = null, + int? studentId = null) { _logger.LogInformation("Получение всех объектов"); try { + var builder = new QueryBuilder(); + if (dateFrom.HasValue) + { + builder.AddCondition("re.Date >= @dateFrom"); + } + if (dateTo.HasValue) + { + builder.AddCondition("re.Date <= @dateTo"); + } + if (studentId.HasValue) + { + builder.AddCondition("re.StudentId = @studentId"); + } using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - var querySelect = "SELECT * FROM Retake"; - var retakes = connection.Query(querySelect); + var querySelect = $@"SELECT + re.*, + tc.Surname as TeacherSurname, + tc.Name as TeacherName, + tc.MiddleName as TeacherMiddleName, + ds.Name as DisciplineName, + stud.Surname as StudentSurname, + stud.Name as StudentName, + stud.MiddleName as StudentMiddleName + FROM Retake re + LEFT JOIN Teacher tc on tc.Id = re.TeacherId + LEFT JOIN Discipline ds on ds.Id = re.DisciplineId + LEFT JOIN Student stud on stud.Id = re.StudentId + {builder.Build()}"; + var retakes = connection.Query(querySelect, new { dateFrom, dateTo, studentId }); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(retakes)); return retakes; diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/StatementRepository.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/StatementRepository.cs index 0e73d72..aa35368 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/StatementRepository.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/StatementRepository.cs @@ -1,8 +1,10 @@ using Dapper; +using DocumentFormat.OpenXml.Spreadsheet; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Npgsql; using SessionResults_Kudyaeva.Entities; +using static System.Runtime.InteropServices.JavaScript.JSType; namespace SessionResults_Kudyaeva.Repositories.Implementations; @@ -54,18 +56,65 @@ public class StatementRepository : IStatementRepository } } - public IEnumerable GetAllStatements() + public IEnumerable GetAllStatements(DateTime? dateFrom = null, DateTime? dateTo = null, + int? studentId = null) { _logger.LogInformation("Получение всех объектов"); try { + var builder = new QueryBuilder(); + if (dateFrom.HasValue) + { + builder.AddCondition("s.Date >= @dateFrom"); + } + if (dateTo.HasValue) + { + builder.AddCondition("s.Date <= @dateTo"); + } + if (studentId.HasValue) + { + builder.AddCondition("ss.StudentId = @studentId"); + } using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - var querySelect = @"SELECT s.*, ss.StudentId, ss.Mark FROM Statement s - INNER JOIN StatementStudent ss on ss.StatementId = s.Id"; - var statements = connection.Query(querySelect); + var querySelect = $@"SELECT + s.*, + tc.Surname as TeacherSurname, + tc.Name as TeacherName, + tc.MiddleName as TeacherMiddleName, + ds.Name as DisciplineName, + ss.StudentId, + ss.Mark, + stud.Surname as StudentSurname, + stud.Name as StudentName, + stud.MiddleName as StudentMiddleName + FROM Statement s + LEFT JOIN Teacher tc on tc.Id = s.TeacherId + LEFT JOIN Discipline ds on ds.Id = s.DisciplineId + INNER JOIN StatementStudent ss on ss.StatementId = s.Id + LEFT JOIN Student stud on stud.Id = ss.StudentId + {builder.Build()}"; + var statementsDict = new Dictionary>(); + + var statements = connection.Query(querySelect, + (statement, statementStudent) => + { + if (!statementsDict.TryGetValue(statement.Id, out var sts)) + { + sts = []; + statementsDict.Add(statement.Id, sts); + } + + sts.Add(statementStudent); + return statement; + }, splitOn: "StudentId", param: new { dateFrom, dateTo, studentId }); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(statements)); - return statements.GroupBy(x => x.Id, y => y, (key, value) => Statement.CreateOperation(value.First(), value.Select(z => StatementStudent.CreateOperation(0, z.StudentId, z.Mark)))).ToList(); + return statementsDict.Select(x => + { + var s = statements.First(y => y.Id == x.Key); + s.SetStatementStudents(x.Value); + return s; + }).ToArray(); } catch (Exception ex) { diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/StudentRepository.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/StudentRepository.cs index 0149b35..b52cedd 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/StudentRepository.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/StudentRepository.cs @@ -62,7 +62,9 @@ public class StudentRepository : IStudentRepository try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - var querySelect = "SELECT * FROM Student"; + var querySelect = @"SELECT st.*, gr.Name as GroupName + FROM Student st + LEFT JOIN ""Group"" gr on gr.id = st.GroupID"; var students = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(students)); -- 2.25.1