From f8ebb5c74bc132a5c1e125ae99df5d39b167b743 Mon Sep 17 00:00:00 2001 From: RomaEredavkin <145482422+RomaEredavkin@users.noreply.github.com> Date: Thu, 26 Dec 2024 18:35:28 +0400 Subject: [PATCH] =?UTF-8?q?4=20=D0=BB=D0=B0=D0=B1=D0=B0=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entities/Bus.cs | 10 ++- .../Entities/Rout.cs | 8 ++- .../Entities/RoutSheet.cs | 29 +++++--- .../Entities/RoutSheetBus.cs | 3 +- .../Entities/Staff.cs | 12 ++-- .../Entities/To.cs | 13 +++- .../Forms/FormBuses.cs | 7 +- .../Forms/FormRoutSheet.cs | 6 +- .../Forms/FormRoutSheetes.cs | 9 ++- .../Forms/FormRoutes.cs | 8 ++- .../Forms/FormStaffes.cs | 8 ++- .../Forms/FormTO.cs | 2 +- .../Forms/FormTOes.cs | 8 ++- .../Reports/ChartReport.cs | 9 ++- .../Reports/TableReport.cs | 16 ++--- .../Implementations/QueryBuilder.cs | 39 +++++++++++ .../Implementations/RoutSheetRepository.cs | 68 +++++++++++++++++-- .../Implementations/ToRepository.cs | 38 +++++++++-- 18 files changed, 234 insertions(+), 59 deletions(-) create mode 100644 PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Repositories/Implementations/QueryBuilder.cs diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/Bus.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/Bus.cs index c9d4d87..8854b9f 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/Bus.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/Bus.cs @@ -1,6 +1,7 @@ using PIbd_24_EredavkinRA_BusBusiness.Entities.Enums; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,11 +9,16 @@ using System.Threading.Tasks; namespace PIbd_24_EredavkinRA_BusBusiness.Entities; public class Bus -{ +{ public int Id { get; private set; } - public ModelType ModelType { get; private set; } + [DisplayName("Модель автобуса")] + public ModelType ModelType { get; private set; } + [DisplayName("Номерной знак")] public string N_Z { get; private set; } = string.Empty; + [DisplayName("Вместимость автобуса")] + public int Capacity { get; private set; } + [DisplayName("Пробег")] public double Bus_mileage { get; private set; } public static Bus CreateEntity(int id, ModelType modeltype, string n_z, double bus_mileage, int capacity) diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/Rout.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/Rout.cs index ff12dd4..ec7a7a8 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/Rout.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/Rout.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,10 +10,13 @@ namespace PIbd_24_EredavkinRA_BusBusiness.Entities; public class Rout { public int Id { get; private set; } + [DisplayName("Начальная остановка")] public string StartStop { get; private set; } = string.Empty; - public string EndStop { get; private set; } = string.Empty; - + [DisplayName("Конечная остановка")] + public string EndStop { get; private set; } = string.Empty; + [DisplayName("Номер Маршрута")] public int NumberRout { get; private set; } + public string FullRout => $"{NumberRout} {StartStop} {EndStop}"; public static Rout CreateEntity(int id, string startstop, string endstop, int numberrout) { return new Rout diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/RoutSheet.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/RoutSheet.cs index e9fe613..c8365c5 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/RoutSheet.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/RoutSheet.cs @@ -1,6 +1,7 @@ using DocumentFormat.OpenXml.Bibliography; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -10,12 +11,23 @@ namespace PIbd_24_EredavkinRA_BusBusiness.Entities; public class RoutSheet { public int Id { get; private set; } + [Browsable(false)] public int DriverId { get; private set; } + [Browsable(false)] public int ConductorId { get; private set; } + [Browsable(false)] public int RoutId { get; private set; } - + [DisplayName("Водитель")] + public string EmployeeNameDriver { get; private set; } = string.Empty; + [DisplayName("Кондуктор")] + public string EmployeeNameConductor { get; private set; } = string.Empty; + [DisplayName("Маршрут")] + public string RoutName { get; private set; } = string.Empty; + [DisplayName("Автобусы")] + public string Bus => RoutSheetBus != null ? string.Join(", ", RoutSheetBus.Select(x => $"{x.BusName}")) : string.Empty; + [Browsable(false)] public IEnumerable RoutSheetBus { get; private set; } = []; - + [DisplayName("Дата Выезда")] public DateTime BusDate { get; private set; } public static RoutSheet CreatOpeartion(int id, int driverid, int conductorid, int routid, DateTime busDate, IEnumerable RoutSheetBus) { @@ -30,17 +42,12 @@ public class RoutSheet }; } - public static RoutSheet CreatOpeartion(TempRoutSheetBus tempRoutSheetBus, IEnumerable RoutSheetBus) + public void SetRoutSheetBus(IEnumerable routSheetBus) { - return new RoutSheet + if (routSheetBus != null && routSheetBus.Any()) { - Id = tempRoutSheetBus.Id, - DriverId = tempRoutSheetBus.DriverId, - ConductorId = tempRoutSheetBus.ConductorId, - RoutId = tempRoutSheetBus.RoutId, - RoutSheetBus = RoutSheetBus, - BusDate = tempRoutSheetBus.BusDate - }; + RoutSheetBus = routSheetBus; + } } diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/RoutSheetBus.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/RoutSheetBus.cs index fbb88db..aefbd92 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/RoutSheetBus.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/RoutSheetBus.cs @@ -9,8 +9,9 @@ namespace PIbd_24_EredavkinRA_BusBusiness.Entities; public class RoutSheetBus { public int Id { get; private set; } - public int BusID { get; private set; } + public int BusID { get; private set; } + public string BusName { get; set; } = string.Empty; public static RoutSheetBus CreateElement(int id, int busid) diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/Staff.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/Staff.cs index 3b39291..8972e13 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/Staff.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/Staff.cs @@ -1,18 +1,22 @@ using PIbd_24_EredavkinRA_BusBusiness.Entities.Enums; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; -namespace PIbd_24_EredavkinRA_BusBusiness.Entities; +namespace PIbd_24_EredavkinRA_BusBusiness.Entities; public class Staff -{ +{ public int Id { get; private set; } + [DisplayName("Имя")] public string FirstName { get; private set; } = string.Empty; - public string LastName { get; private set; } = string.Empty; - + [DisplayName("Фамилия")] + public string LastName { get; private set; } = string.Empty; + public string FullName => $"{LastName} {FirstName}"; + [DisplayName("Должность")] public EmployeePost EmployeePost { get; private set; } public static Staff CreatEntity(int id, string first, string last, EmployeePost employeePost) { diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/To.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/To.cs index 7ebadad..f771d14 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/To.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Entities/To.cs @@ -2,6 +2,7 @@ using PIbd_24_EredavkinRA_BusBusiness.Entities.Enums; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -11,11 +12,19 @@ namespace PIbd_24_EredavkinRA_BusBusiness.Entities; public class To { public int Id { get; private set; } - public int BusID { get; private set; } + [Browsable(false)] + public int BusID { get; private set; } + [Browsable(false)] public int StaffID { get; private set; } + [DisplayName("Автобус")] + public string BusName { get; set; } = string.Empty; + [DisplayName("Механик")] + public string StaffName { get; set; } = string.Empty; + [DisplayName("Описание")] public string Discription { get; private set; } = string.Empty; - + [DisplayName("Стоимость Ремонта")] public double Cost { get; private set; } + [DisplayName("Дата дня")] public DateTime DateTo { get; private set; } public static To CreatOperation(int id, string discription, double cost, DateTime dateTo, int busid, int staffid) diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormBuses.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormBuses.cs index ffb8d95..fd84790 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormBuses.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormBuses.cs @@ -99,7 +99,12 @@ public partial class FormBuses : Form } - private void LoadList() => dataGridViewData.DataSource = _busRepository.ReadBus(); + private void LoadList() + { + dataGridViewData.DataSource = _busRepository.ReadBus(); + dataGridViewData.Columns["Id"].Visible = false; + } + private bool TryGetIdentifierFromSelectedRow(out int id) { id = 0; diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormRoutSheet.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormRoutSheet.cs index 4c0651f..b312a43 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormRoutSheet.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormRoutSheet.cs @@ -13,15 +13,15 @@ public partial class FormRoutSheet : Form _routSheetRepository = routSheetRepository ?? throw new ArgumentNullException(nameof(routSheetRepository)); comboBoxDriver.DataSource = staffRepositories.ReadStaff(); - comboBoxDriver.DisplayMember = "LastName"; + comboBoxDriver.DisplayMember = "FullName"; comboBoxDriver.ValueMember = "Id"; comboBoxConductor.DataSource = staffRepositories.ReadStaff(); - comboBoxConductor.DisplayMember = "LastName"; + comboBoxConductor.DisplayMember = "FullName"; comboBoxConductor.ValueMember = "Id"; comboBoxRout.DataSource = routRepositories.ReadRout(); - comboBoxRout.DisplayMember = "NumberRout"; + comboBoxRout.DisplayMember = "FullRout"; comboBoxRout.ValueMember = "Id"; ColumnBus.DataSource = busRepository.ReadBus(); diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormRoutSheetes.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormRoutSheetes.cs index a931d75..7da507b 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormRoutSheetes.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormRoutSheetes.cs @@ -47,7 +47,10 @@ public partial class FormRoutSheetes : Form } } - private void LoadList() => dataGridViewData.DataSource = _routSheetRepository.ReadRoutSheet(); - - + private void LoadList() + { + dataGridViewData.DataSource = _routSheetRepository.ReadRoutSheet(); + dataGridViewData.Columns["Id"].Visible = false; + dataGridViewData.Columns["BusDate"].DefaultCellStyle.Format = "dd MMMM yyyy"; + } } diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormRoutes.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormRoutes.cs index 831706f..66d6758 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormRoutes.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormRoutes.cs @@ -99,7 +99,13 @@ public partial class FormRoutes : Form } - private void LoadList() => dataGridViewData.DataSource = _routRepository.ReadRout(); + private void LoadList() + { + dataGridViewData.DataSource = _routRepository.ReadRout(); + dataGridViewData.Columns["Id"].Visible = false; + dataGridViewData.Columns["FullRout"].Visible = false; + } + private bool TryGetIdentifierFromSelectedRow(out int id) { id = 0; diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormStaffes.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormStaffes.cs index a966f36..e4a0e02 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormStaffes.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormStaffes.cs @@ -89,7 +89,13 @@ namespace PIbd_24_EredavkinRA_BusBusiness.Forms } - private void LoadList() => dataGridViewData.DataSource = _staffRepository.ReadStaff(); + private void LoadList() + { + dataGridViewData.DataSource = _staffRepository.ReadStaff(); + dataGridViewData.Columns["Id"].Visible = false; + dataGridViewData.Columns["FullName"].Visible = false; + } + private bool TryGetIdentifierFromSelectedRow(out int id) { id = 0; diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormTO.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormTO.cs index e2a56a0..c5ffde3 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormTO.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormTO.cs @@ -15,7 +15,7 @@ public partial class FormTO : Form _toRepository = toRepository ?? throw new ArgumentNullException(nameof(toRepository)); comboBoxStaff.DataSource = staffRepositories.ReadStaff(); - comboBoxStaff.DisplayMember = "LastName"; + comboBoxStaff.DisplayMember = "FullName"; comboBoxStaff.ValueMember = "Id"; comboBoxBus.DataSource = busRepository.ReadBus(); diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormTOes.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormTOes.cs index b3dd1d6..a50127a 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormTOes.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Forms/FormTOes.cs @@ -81,7 +81,13 @@ public partial class FormTOes : Form } - private void LoadList() => dataGridViewData.DataSource = _toRepository.ReadTo(); + private void LoadList() + { + dataGridViewData.DataSource = _toRepository.ReadTo(); + dataGridViewData.Columns["Id"].Visible = false; + dataGridViewData.Columns["DateTo"].DefaultCellStyle.Format = "dd.MM.yyyy"; + } + private bool TryGetIdentifierFromSelectedRow(out int id) { id = 0; diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Reports/ChartReport.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Reports/ChartReport.cs index 7d68980..ab517d4 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Reports/ChartReport.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Reports/ChartReport.cs @@ -27,7 +27,7 @@ internal class ChartReport try { new PdfBuilder(filePath) - .AddHeader("Количество Обслуживаний Автобуса за день") + .AddHeader($"Количество Обслуживаний Автобусов на {dateTime:dd MMMM yyyy}") .AddPieChart("Автобусы", GetData(dateTime)) .Build(); @@ -43,10 +43,9 @@ internal class ChartReport private List<(string Caption, double Value)> GetData(DateTime dateTime) { return _toRepository - .ReadTo() - .Where(x => x.DateTo.Date == dateTime.Date) - .GroupBy(x => x.BusID, (key, cost) => new { Id = key, Count = cost.Count() }) - .Select(x => (x.Id.ToString(), (double)x.Count)) + .ReadTo(dateForm: dateTime.Date, dateTo: dateTime.Date.AddDays(1)) + .GroupBy(x => x.BusName, (key, cost) => new { BusName = key, Count = cost.Count() }) + .Select(x => (x.BusName, (double)x.Count)) .ToList(); } } diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Reports/TableReport.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Reports/TableReport.cs index f5dcebb..8d76a35 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Reports/TableReport.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Reports/TableReport.cs @@ -42,7 +42,7 @@ internal class TableReport { new ExcelBuilder(filePath) .AddHeader("Общая сводка за Автобусами", 0, 3) - .AddParagraph("за период", 0) + .AddParagraph($"за период c {startDate:dd.MM.yyyy} по {endDate:dd.MM.yyyy}", 0) .AddTable([15, 10, 10], GetData(busId, startDate, endDate)) .Build(); @@ -58,20 +58,18 @@ internal class TableReport public List GetData(int busId, DateTime startDate, DateTime endDate) { var data = _routsheetRepository - .ReadRoutSheet() - .Where(x => x.BusDate >= startDate && x.BusDate <= endDate && x.RoutSheetBus.Any(y => y.BusID == busId)) + .ReadRoutSheet(dateForm: startDate, dateTo: endDate, busid: busId) .Select(x => new { Date = x.BusDate, - Rout = (int?)x.RoutId, + Rout = x.RoutName ?? string.Empty, Cost = (decimal?)null }) .Union( _toRepository - .ReadTo() - .Where(x => x.DateTo >= startDate && x.DateTo <= endDate && x.BusID == busId) + .ReadTo(dateForm: startDate, dateTo: endDate, busid: busId) .Select(x => new { Date = x.DateTo, - Rout = (int?)null, + Rout = string.Empty, Cost = (decimal?)x.Cost })) .OrderBy(x => x.Date); @@ -82,9 +80,9 @@ internal class TableReport { x.Date.ToString("dd.MM.yyyy"), x.Rout?.ToString() ?? string.Empty, - x.Cost?.ToString() ?? string.Empty + x.Cost?.ToString("N0") ?? string.Empty })) - .Union(new[] { new string[] { "Всего", "", data.Sum(x => x.Cost ?? 0).ToString() } }) + .Union(new[] { new string[] { "Всего", "", data.Sum(x => x.Cost ?? 0).ToString("N0") } }) .ToList(); diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Repositories/Implementations/QueryBuilder.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Repositories/Implementations/QueryBuilder.cs new file mode 100644 index 0000000..6ea8e4f --- /dev/null +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Repositories/Implementations/QueryBuilder.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PIbd_24_EredavkinRA_BusBusiness.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}"; + } +} \ No newline at end of file diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Repositories/Implementations/RoutSheetRepository.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Repositories/Implementations/RoutSheetRepository.cs index 2e366cb..ebda140 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Repositories/Implementations/RoutSheetRepository.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Repositories/Implementations/RoutSheetRepository.cs @@ -58,12 +58,70 @@ public class RoutSheetRepository : IRoutSheetRepository _logger.LogInformation("Получение всех объектов"); try { + var builder = new QueryBuilder(); + if (dateForm.HasValue) + { + builder.AddCondition("cs.BusDate >= @dateForm"); + } + if (dateBus.HasValue) + { + builder.AddCondition("cs.BusDate <= @dateBus"); + } + if (driverid.HasValue) + { + builder.AddCondition("cs.DriverId = @driverid"); + } + if (conductorid.HasValue) + { + builder.AddCondition("cs.ConductorId = @conductorid"); + } + if (busid.HasValue) + { + builder.AddCondition("rsh.BusId = @busid"); + } + if (routId.HasValue) + { + builder.AddCondition("cs.RoutId = @routid"); + } + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - var querySelect = @"SELECT cs.*, dcs.BusId FROM RoutSheet cs - INNER JOIN RoutSheetBus dcs ON dcs.RoutSheetId = cs.Id"; - var routsheet = connection.Query(querySelect); - _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(routsheet)); - return routsheet.GroupBy(x => x.Id, y => y, (key, value) => RoutSheet.CreatOpeartion(value.First(), value.Select(z => RoutSheetBus.CreateElement(0, z.BusId)))).ToList(); + var querySelect = $@" + SELECT + cs.*, + CONCAT(s.FirstName, ' ', s.LastName) AS EmployeeNameDriver, + CONCAT(c.FirstName, ' ', c.LastName) AS EmployeeNameConductor, + CONCAT(ro.NumberRout, ' ', ro.StartStop, ' ', ro.EndStop) AS RoutName, + rsh.BusId, + b.N_Z AS BusName + FROM RoutSheet cs + LEFT JOIN Staff s ON s.Id = cs.DriverId + LEFT JOIN Staff c ON c.Id = cs.ConductorId + LEFT JOIN Rout ro ON ro.Id = cs.RoutId + INNER JOIN RoutSheetBus rsh ON rsh.RoutSheetId = cs.Id + LEFT JOIN Bus b ON b.Id = rsh.BusId + {builder.Build()}"; + var supplementDict = new Dictionary>(); + + var curriculumSupplements = connection.Query(querySelect, + (supplement, curriculumSupplements) => + { + if (!supplementDict.TryGetValue(supplement.Id, out var rsh)) + { + rsh = []; + supplementDict.Add(supplement.Id, rsh); + } + + rsh.Add(curriculumSupplements); + return supplement; + }, splitOn: "BusId", param: new { dateForm, dateBus, routId, busid, driverid, conductorid }); + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(curriculumSupplements)); + + return supplementDict.Select(x => + { + var cs = curriculumSupplements.First(y => y.Id == x.Key); + cs.SetRoutSheetBus(x.Value); + return cs; + }).ToArray(); } catch (Exception ex) { diff --git a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Repositories/Implementations/ToRepository.cs b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Repositories/Implementations/ToRepository.cs index e94bded..2ea6bcd 100644 --- a/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Repositories/Implementations/ToRepository.cs +++ b/PIbd-24_EredavkinRA_BusBusiness/PIbd-24_EredavkinRA_BusBusiness/Repositories/Implementations/ToRepository.cs @@ -3,11 +3,7 @@ using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Npgsql; using PIbd_24_EredavkinRA_BusBusiness.Entities; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; + namespace PIbd_24_EredavkinRA_BusBusiness.Repositories.Implementations; @@ -65,9 +61,37 @@ public class ToRepository : IToRepository _logger.LogInformation("Получение всех объектов"); try { + var builder = new QueryBuilder(); + if (dateForm.HasValue) + { + builder.AddCondition("cs.DateTo >= @dateForm"); + } + if (dateTo.HasValue) + { + builder.AddCondition("cs.DateTo <= @dateTo"); + } + if (staffid.HasValue) + { + builder.AddCondition("cs.StaffId = @staffid"); + } + if (busid.HasValue) + { + builder.AddCondition("cs.BusId = @busid"); + } + + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - var querySelect = "SELECT * FROM TOs"; - var compilingSchedules = connection.Query(querySelect); + var querySelect = $@" + SELECT + cs.*, + CONCAT(s.FirstName, ' ', s.LastName) AS StaffName, + b.N_Z AS BusName + FROM TOs cs + LEFT JOIN Bus b ON b.Id = cs.BusId + LEFT JOIN Staff s ON s.Id = cs.StaffId + {builder.Build()}"; + + var compilingSchedules = connection.Query(querySelect, new { dateForm, dateTo, busid, staffid}); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(compilingSchedules)); return compilingSchedules; }