Улучшайзинги 1

This commit is contained in:
rakhaliullov 2024-12-09 18:47:42 +04:00
parent 8ff8fd8444
commit f64f34aadd
29 changed files with 203 additions and 68 deletions

View File

@ -1,12 +1,19 @@
using ProjectShedule.Entities.Enums;
using System.ComponentModel;
namespace ProjectShedule.Entities;
public class Classroom
{
public int Id { get;private set; }
[DisplayName ("Вместимость")]
public int Size { get; private set; }
[DisplayName("Номер аудитории")]
public string Name { get; private set; } = String.Empty;
[DisplayName("Тип аудитории")]
public ClassType ClassType { get; private set; }
public static Classroom CreateClassroom(int id, int size, string name, ClassType classtype)

View File

@ -1,8 +1,12 @@
namespace ProjectShedule.Entities;
using System.ComponentModel;
namespace ProjectShedule.Entities;
public class Curriculum
{
public int Id { get; private set; }
[DisplayName("Направление")]
public string Direction { get; private set; } = string.Empty;
public static Curriculum CreateCurriculum(int id, string direction)
{

View File

@ -1,13 +1,30 @@
using ProjectShedule.Entities.Enums;
using System.ComponentModel;
namespace ProjectShedule.Entities;
public class CurriculumSubject
{
public int Id { get; set; }
[DisplayName("Дата составления")]
public DateTime Date { get; private set; }
[Browsable(false)]
public int CurriculumId { get; private set; }
[DisplayName("Направление")]
public string CurriculumName { get; private set; } = string.Empty;
[DisplayName("Предметы")]
public string Subject => SubjectSubject != null ?
string.Join(", ",SubjectSubject.Select(x => $"{x.SubjectName} {x.LessonsCount}")) :
string.Empty;
[Browsable(false)]
public IEnumerable<SubjectSubject> SubjectSubject { get; private set; } = [];
[DisplayName("Курс")]
public Course Course { get; private set; }
public static CurriculumSubject CreateCurriculumSubject(int id, DateTime date, int curriculumId, Course course, IEnumerable<SubjectSubject> subjectSubjects)
@ -21,15 +38,11 @@ public class CurriculumSubject
SubjectSubject = subjectSubjects
};
}
public static CurriculumSubject CreateCurriculumSubject(TempCurriculumSubject tempCurriculumSubject, IEnumerable<SubjectSubject> subjectSubject)
public void SetSubjectSubject(IEnumerable<SubjectSubject> subjectSubject)
{
return new CurriculumSubject
if (subjectSubject != null && subjectSubject.Any())
{
Id = tempCurriculumSubject.Id,
Date = tempCurriculumSubject.Date,
CurriculumId = tempCurriculumSubject.CurriculumId,
Course = tempCurriculumSubject.Course,
SubjectSubject = subjectSubject
};
SubjectSubject = subjectSubject;
}
}
}

View File

@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectShedule.Entities.Enums;
namespace ProjectShedule.Entities.Enums;
public enum ClassType
{

View File

@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectShedule.Entities.Enums;
namespace ProjectShedule.Entities.Enums;
public enum Course
{

View File

@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectShedule.Entities.Enums;
namespace ProjectShedule.Entities.Enums;
[Flags]
public enum PairNumber

View File

@ -1,18 +1,48 @@
using ProjectShedule.Entities.Enums;
using System.ComponentModel;
using ProjectShedule.Entities.Enums;
namespace ProjectShedule.Entities;
public class Shedule
{
public int Id { get; private set; }
[DisplayName("Дата")]
public DateTime Date { get; private set; }
[DisplayName("Номера пар")]
public PairNumber PairNumber { get; private set; }
[DisplayName("Количество пар")]
public int PairCount { get; private set; }
[Browsable(false)]
public int StudentsGroupId { get; private set; }
[Browsable(false)]
public int TeacherId { get; private set; }
[Browsable(false)]
public int SubjectId { get; private set; }
[Browsable(false)]
public int ClassroomId { get; private set; }
[DisplayName("Грппа студентов")]
public string StudentsGroupName { get; private set; } = string.Empty;
[DisplayName("Преподаватель")]
public string TeacherName { get; private set; } = string.Empty;
[DisplayName("Предмет")]
public string SubjectName { get; private set; } = string.Empty;
[DisplayName("Аудитория")]
public string ClassroomName { get; private set; } = string.Empty;
public static Shedule CreateOperation(int id, DateTime date, PairNumber pairNumber, int pairCount
, int studentsGroupId, int teacherId, int subjectId, int classroomId)

View File

@ -1,14 +1,27 @@
using ProjectShedule.Entities.Enums;
using System.ComponentModel;
namespace ProjectShedule.Entities;
public class StudentsGroup
{
public int Id { get; private set; }
[DisplayName("Количество студентов")]
public int StudentsCount { get; private set; }
[DisplayName("Номер группы")]
public string GroupNumber { get; private set; } = String.Empty;
[DisplayName("Курс")]
public Course Course { get; private set; }
[Browsable(false)]
public int CurriculumId { get; private set; }
[DisplayName("Направление")]
public string CurriculumName { get; private set; } = string.Empty;
public static StudentsGroup CreateGroup(int id, int studentsCount, string groupNumber, Course course, int curriculumId)
{
return new StudentsGroup

View File

@ -1,8 +1,12 @@
namespace ProjectShedule.Entities;
using System.ComponentModel;
namespace ProjectShedule.Entities;
public class Subject
{
public int Id { get; private set; }
[DisplayName("Название предмета")]
public string Name { get; private set; } = String.Empty;
public static Subject CreateSubject(int id, string name)
{

View File

@ -1,12 +1,18 @@

using System.ComponentModel;
namespace ProjectShedule.Entities;
public class SubjectSubject
{
public int Id { get; private set; }
public int SubjectId { get; private set; }
public int LessonsCount { get; private set; }
public string SubjectName { get; private set; } = string.Empty;
public static SubjectSubject CreateOperation(int id, int subjectId, int lessonsCount)
{
return new SubjectSubject

View File

@ -1,10 +1,18 @@
namespace ProjectShedule.Entities;
using System.ComponentModel;
namespace ProjectShedule.Entities;
public class Teacher
{
public int Id { get; private set; }
[DisplayName("Имя")]
public string FirstName { get; private set; } = string.Empty;
[DisplayName("Фамилия")]
public string LastName { get; private set; } = string.Empty;
public string FullName => $"{FirstName} {LastName}";
public static Teacher CreateTeacher(int id, string firstName, string lastName)
{
return new Teacher

View File

@ -1,13 +0,0 @@
using ProjectShedule.Entities.Enums;
namespace ProjectShedule.Entities;
public class TempCurriculumSubject
{
public int Id { get; private set; }
public DateTime Date { get; private set; }
public int CurriculumId { get; private set; }
public int SubjectId { get; private set; }
public int LessonsCount { get; private set; }
public Course Course { get; private set; }
}

View File

@ -87,9 +87,9 @@
dataGridView.AllowUserToDeleteRows = false;
dataGridView.AllowUserToResizeColumns = false;
dataGridView.AllowUserToResizeRows = false;
dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Dock = DockStyle.Fill;
dataGridView.Location = new Point(0, 0);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";

View File

@ -79,7 +79,11 @@ namespace ProjectShedule.Forms
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridView.DataSource = _classroomRepository.ReadClassroom();
private void LoadList()
{
dataGridView.DataSource = _classroomRepository.ReadClassroom();
dataGridView.Columns["Id"].Visible = false;
}
private bool TryGetIdentifierFromSelectedRow(out int id)
{

View File

@ -74,6 +74,7 @@
dataGridView.AllowUserToDeleteRows = false;
dataGridView.AllowUserToResizeColumns = false;
dataGridView.AllowUserToResizeRows = false;
dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Location = new Point(0, 0);

View File

@ -40,7 +40,12 @@ namespace ProjectShedule.Forms
MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridView.DataSource = _curriculumSubjectRepository.ReadCurriculumSubject();
private void LoadList()
{
dataGridView.DataSource = _curriculumSubjectRepository.ReadCurriculumSubject();
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["Date"].DefaultCellStyle.Format = "dd MMMM yyyy";
}
private void buttonDel_Click(object sender, EventArgs e)
{

View File

@ -87,6 +87,7 @@
dataGridView.AllowUserToDeleteRows = false;
dataGridView.AllowUserToResizeColumns = false;
dataGridView.AllowUserToResizeRows = false;
dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Location = new Point(0, 0);

View File

@ -80,7 +80,12 @@ namespace ProjectShedule.Forms
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridView.DataSource = _curriculumRepository.ReadCurriculum();
private void LoadList()
{
dataGridView.DataSource = _curriculumRepository.ReadCurriculum();
dataGridView.Columns["Id"].Visible = false;
}
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;

View File

@ -87,6 +87,7 @@
dataGridView.AllowUserToDeleteRows = false;
dataGridView.AllowUserToResizeColumns = false;
dataGridView.AllowUserToResizeRows = false;
dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Location = new Point(0, 0);
@ -96,7 +97,7 @@
dataGridView.RowHeadersVisible = false;
dataGridView.RowHeadersWidth = 51;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(626, 354);
dataGridView.Size = new Size(627, 354);
dataGridView.TabIndex = 5;
//
// FormGroups

View File

@ -79,7 +79,11 @@ namespace ProjectShedule.Forms
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridView.DataSource = _groupRepository.ReadGroup();
private void LoadList()
{
dataGridView.DataSource = _groupRepository.ReadGroup();
dataGridView.Columns["Id"].Visible = false;
}
private bool TryGetIdentifierFromSelectedRow(out int id)
{

View File

@ -23,7 +23,7 @@ namespace ProjectShedule.Forms
comboBoxGroup.ValueMember = "Id";
comboBoxTeacher.DataSource = teacherRepository.ReadTeacher();
comboBoxTeacher.DisplayMember = "LastName";
comboBoxTeacher.DisplayMember = "FullName";
comboBoxTeacher.ValueMember = "Id";
comboBoxSubject.DataSource = subjectRepository.ReadSubject();

View File

@ -42,7 +42,12 @@ namespace ProjectShedule.Forms
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridView.DataSource = _sheduleRepository.ReadShedule();
private void LoadList()
{
dataGridView.DataSource = _sheduleRepository.ReadShedule();
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["Date"].DefaultCellStyle.Format = "dd MMMM yyyy";
}
private void buttonDel_Click(object sender, EventArgs e)
{

View File

@ -87,9 +87,10 @@
dataGridView.AllowUserToDeleteRows = false;
dataGridView.AllowUserToResizeColumns = false;
dataGridView.AllowUserToResizeRows = false;
dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Location = new Point(0, 0);
dataGridView.Location = new Point(3, 12);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;

View File

@ -79,7 +79,12 @@ namespace ProjectShedule.Forms
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridView.DataSource = _subjectRepository.ReadSubject();
private void LoadList()
{
dataGridView.DataSource = _subjectRepository.ReadSubject();
dataGridView.Columns["Id"].Visible = false;
}
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;

View File

@ -87,9 +87,9 @@
dataGridView.AllowUserToDeleteRows = false;
dataGridView.AllowUserToResizeColumns = false;
dataGridView.AllowUserToResizeRows = false;
dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Dock = DockStyle.Fill;
dataGridView.Location = new Point(0, 0);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
@ -97,7 +97,7 @@
dataGridView.RowHeadersVisible = false;
dataGridView.RowHeadersWidth = 51;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(800, 353);
dataGridView.Size = new Size(625, 353);
dataGridView.TabIndex = 3;
//
// FormTeachers

View File

@ -79,7 +79,13 @@ namespace ProjectShedule.Forms
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridView.DataSource = _teacherRepository.ReadTeacher();
private void LoadList()
{
dataGridView.DataSource = _teacherRepository.ReadTeacher();
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["FullName"].Visible = false;
}
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;

View File

@ -81,19 +81,46 @@ public class CurriculumSubjectRepository : ICurriculumSubjectRepository
throw;
}
}
public IEnumerable<CurriculumSubject> ReadCurriculumSubject(DateTime? dateForm = null, DateTime? dateTo = null, int? subjectId = null)
public IEnumerable<CurriculumSubject> ReadCurriculumSubject(DateTime? dateFrom = null, DateTime? dateTo = null, int? subjectId = null)
{
_logger.LogInformation("Получение всех объектов");
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = @"SELECT cs.*, ss.SubjectId, ss.LessonsCount FROM CurriculumSubject cs
INNER JOIN SubjectSubject ss on ss.CurriculumSubjectId = cs.Id";
var curriculumSubjects = connection.Query<TempCurriculumSubject>(querySelect);
var querySelect = $@"SELECT
cs.*,
c.Direction as CurriculumName,
ss.SubjectId,
ss.LessonsCount,
s.Name as SubjectName
FROM CurriculumSubject cs
LEFT JOIN Curriculum c on c.Id = cs.CurriculumId
INNER JOIN SubjectSubject ss on ss.CurriculumSubjectId = cs.Id
LEFT JOIN Subject s on s.Id = ss.SubjectId";
// {builder.Build()}";
var subjectsDict = new Dictionary<int, List<SubjectSubject>>();
var curriculumSubjects = connection.Query<CurriculumSubject, SubjectSubject, CurriculumSubject>(querySelect,
(subject, curriculumSubject) =>
{
if (!subjectsDict.TryGetValue(subject.Id, out var cs))
{
cs = [];
subjectsDict.Add(subject.Id, cs);
}
cs.Add(curriculumSubject);
return subject;
}, splitOn: "SubjectId", param: new { dateFrom, dateTo, subjectId });
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(curriculumSubjects));
return curriculumSubjects.GroupBy(x => x.Id, y => y, (key, value) => CurriculumSubject.CreateCurriculumSubject(value.First(),
value.Select(z => SubjectSubject.CreateOperation(0, z.SubjectId, z.LessonsCount)))).ToList();
return subjectsDict.Select(x =>
{
var ss = curriculumSubjects.First(y => y.Id == x.Key);
ss.SetSubjectSubject(x.Value);
return ss;
}).ToArray();
}
catch (Exception ex)
{

View File

@ -61,7 +61,12 @@ public class GroupRepository : IGroupRepository
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM StudentsGroup";
var querySelect = @"SELECT
sg.*,
cn.Direction as CurriculumName
FROM StudentsGroup sg
LEFT JOIN Curriculum cn on cn.Id = sg.CurriculumId
";
var groups = connection.Query<StudentsGroup>(querySelect);
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(groups));

View File

@ -59,7 +59,18 @@ public class SheduleRepository : ISheduleRepository
try
{
using var connection = new NpgsqlConnection(_connectionString.ConnectionString);
var querySelect = "SELECT * FROM Shedule";
var querySelect = @"SELECT
sh.*,
s.GroupNumber as StudentsGroupName,
CONCAT(t.LastName, ' ', t.FirstName) as TeacherName,
su.Name as SubjectName,
c.Name as ClassroomName
FROM Shedule sh
LEFT JOIN StudentsGroup s on s.Id = sh.StudentsGroupId
LEFT JOIN Teacher t on t.Id = sh.TeacherId
LEFT JOIN Subject su on su.Id = sh.SubjectId
LEFT JOIN Classroom c on c.Id = sh.ClassroomId
";
var shedule = connection.Query<Shedule>(querySelect);
_logger.LogDebug("Полученные объекты: {json}",
JsonConvert.SerializeObject(shedule));