From 46cb767fb00181e87d987ea5ae7f8fe49773ea89 Mon Sep 17 00:00:00 2001 From: cyxaruk Date: Sat, 21 Dec 2024 17:48:48 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B0=D0=BB=D0=BE=D1=81?= =?UTF-8?q?=D1=8C=20=D0=B2=D0=BD=D0=B5=D1=81=D1=82=D0=B8=20=D0=BD=D0=B5?= =?UTF-8?q?=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entities/Bus.cs | 7 +++- .../Entities/BusCheck.cs | 10 ++++++ .../Entities/Employee.cs | 5 +++ .../Entities/RouteList.cs | 5 +++ .../Entities/StartingShift.cs | 29 +++++++++++----- .../Entities/StartingShift_Employee.cs | 2 ++ .../Forms/FormBusCheck.cs | 2 +- .../Forms/FormBusChecks.cs | 7 +++- .../Forms/FormStartingShift.cs | 7 ++-- .../Forms/FormStartingShifts.cs | 9 +++-- .../Implementations/BusCheckRepository.cs | 6 +++- .../StartingShiftRepository.cs | 33 +++++++++++++++++-- 12 files changed, 101 insertions(+), 21 deletions(-) diff --git a/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/Bus.cs b/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/Bus.cs index 011447d..982228e 100644 --- a/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/Bus.cs +++ b/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/Bus.cs @@ -1,6 +1,8 @@ -using ProjectPeopleTransportation.Entities.Enums; +using DocumentFormat.OpenXml.EMMA; +using ProjectPeopleTransportation.Entities.Enums; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -11,10 +13,13 @@ public class Bus { public int ID { get; private set; } + [DisplayName("Модель автобуса")] public string Bus_Name { get; private set; } = string.Empty; + [DisplayName("Госномер")] public string Licence_Plate { get; private set; } = string.Empty; + public string Model_and_plate => $"{Bus_Name} {Licence_Plate}"; public static Bus CreateEntity(int id, string busName, string licensePlate) { return new Bus diff --git a/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/BusCheck.cs b/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/BusCheck.cs index 8594ff3..3ba9272 100644 --- a/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/BusCheck.cs +++ b/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/BusCheck.cs @@ -1,4 +1,5 @@ using ProjectPeopleTransportation.Entities.Enums; +using System.ComponentModel; namespace ProjectPeopleTransportation.Entities; @@ -6,12 +7,21 @@ public class BusCheck { public int ID { get; private set; } + [Browsable(false)] public int Bus_ID { get; private set; } + [DisplayName("Автобус")] + public string Bus_Name { get; private set; } = string.Empty; + + + [DisplayName("Стоимость")] public int Price { get; private set; } + [DisplayName("Дата проверки автобуса")] public DateTime Date { get; private set; } + + [DisplayName("Тип элемента")] public BusElementType Bus_Element_Type { get; private set; } public static BusCheck CreateOperation(int id, int busID, int price, BusElementType busElementType) diff --git a/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/Employee.cs b/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/Employee.cs index cbb2edc..6e7e79f 100644 --- a/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/Employee.cs +++ b/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/Employee.cs @@ -1,4 +1,5 @@ using ProjectPeopleTransportation.Entities.Enums; +using System.ComponentModel; namespace ProjectPeopleTransportation.Entities; @@ -6,11 +7,15 @@ public class Employee { public int ID { get; private set; } + [DisplayName("Имя")] public string First_Name { get; private set; } = string.Empty; + [DisplayName("Фамилия")] public string Last_Name { get; private set; } = string.Empty; + public string Full_name => $"{Last_Name} {First_Name}"; + [DisplayName("Должность")] public EmployeePost Post { get; private set; } public static Employee CreateEntity(int id, string first, string last, EmployeePost employeePost) diff --git a/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/RouteList.cs b/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/RouteList.cs index 717d60c..e7466ab 100644 --- a/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/RouteList.cs +++ b/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/RouteList.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -13,10 +14,14 @@ public class RouteList { public int Id { get; private set; } + [DisplayName("Название маршрута")] public string Route_Name { get; private set; } = string.Empty; + [DisplayName("Описание маршрута")] public string Route_Description { get; private set; } = string.Empty; + public string Route_desc_name => $"{Route_Name}-{Route_Description}"; + public static RouteList CreateEntity(int id, string name, string description) { return new RouteList diff --git a/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/StartingShift.cs b/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/StartingShift.cs index 0fc27e4..c7f3933 100644 --- a/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/StartingShift.cs +++ b/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/StartingShift.cs @@ -1,6 +1,7 @@ using ProjectPeopleTransportation.Entities.Enums; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -12,12 +13,27 @@ public class StartingShift { public int ID { get; private set; } + [Browsable(false)] public int Route_List_ID { get; private set; } + [DisplayName("Маршрутный лист")] + public string Route_List_Name { get; private set; } = string.Empty; + + [Browsable(false)] public int Bus_ID { get; private set; } + [DisplayName("Автобус")] + public string Bus_Name { get; private set; } = string.Empty; + + + [DisplayName("Дата смены")] public DateTime Starting_Shift_Date { get; private set; } + [DisplayName("Работники")] + public string Employee => StartingShiftEmployees != null ? + string.Join(", ", StartingShiftEmployees.Select(x => $"{x.Employee_name} {x.Shift_Duration}")) : string.Empty; + + [Browsable(false)] public IEnumerable StartingShiftEmployees { get; private set; } = []; public static StartingShift CreateOperation(int id, int routeListID, int busID, IEnumerable startingShiftEmployees) @@ -32,16 +48,11 @@ public class StartingShift }; } - public static StartingShift CreateOperation(TempStartingShift_Employee tempStartingShiftEmployee, - IEnumerable startingShiftEmployee) + public void SetStartingShiftEmployee(IEnumerable startingShiftEmployee) { - return new StartingShift + if (startingShiftEmployee != null && startingShiftEmployee.Any()) { - ID = tempStartingShiftEmployee.Starting_shift_ID, - Starting_Shift_Date = tempStartingShiftEmployee.Starting_Shift_Date, - Route_List_ID = tempStartingShiftEmployee.Route_List_ID, - Bus_ID = tempStartingShiftEmployee.Bus_ID, - StartingShiftEmployees = startingShiftEmployee - }; + StartingShiftEmployees = startingShiftEmployee; + } } } \ No newline at end of file diff --git a/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/StartingShift_Employee.cs b/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/StartingShift_Employee.cs index 832eb38..f3ebfdd 100644 --- a/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/StartingShift_Employee.cs +++ b/ProjectPeopleTransportation/ProjectPeopleTransportation/Entities/StartingShift_Employee.cs @@ -6,6 +6,8 @@ public class StartingShift_Employee public int Employee_ID { get; private set; } + public string Employee_name { get; private set; } = string.Empty; + public int Shift_Duration { get; private set; } public static StartingShift_Employee CreateElement(int id, int employeeID, int shiftDuration) diff --git a/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormBusCheck.cs b/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormBusCheck.cs index 3b7e65b..0354e62 100644 --- a/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormBusCheck.cs +++ b/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormBusCheck.cs @@ -26,7 +26,7 @@ namespace ProjectPeopleTransportation.Forms throw new ArgumentNullException(nameof(busCheckRepository)); comboBoxBus.DataSource = busRepository.ReadBuses(); - comboBoxBus.DisplayMember = "BusName"; + comboBoxBus.DisplayMember = "Model_and_plate"; comboBoxBus.ValueMember = "Id"; foreach (var elem in Enum.GetValues(typeof(BusElementType))) diff --git a/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormBusChecks.cs b/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormBusChecks.cs index 67a0bb1..d4e37b7 100644 --- a/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormBusChecks.cs +++ b/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormBusChecks.cs @@ -71,7 +71,12 @@ namespace ProjectPeopleTransportation.Forms } } - private void LoadList() => dataGridViewCheck.DataSource = _busCheckRepository.ReadBusCheck(); + private void LoadList() + { + dataGridViewCheck.DataSource = _busCheckRepository.ReadBusCheck(); + dataGridViewCheck.Columns["ID"].Visible = false; + dataGridViewCheck.Columns["Date"].DefaultCellStyle.Format = "dd.MM.yyyy"; + } private bool TryGetIdentifierFromSelectedRow(out int id) { diff --git a/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormStartingShift.cs b/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormStartingShift.cs index 638c003..0a85281 100644 --- a/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormStartingShift.cs +++ b/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormStartingShift.cs @@ -16,11 +16,11 @@ namespace ProjectPeopleTransportation.Forms throw new ArgumentNullException(nameof(startingShiftRepository)); ColumnEmployees.DataSource = employeeRepository.ReadEmployees(); - ColumnEmployees.DisplayMember = "First_Name"; + ColumnEmployees.DisplayMember = "Full_name"; ColumnEmployees.ValueMember = "Id"; comboBoxBus.DataSource = busRepository.ReadBuses(); - comboBoxBus.DisplayMember = "Bus_Name"; + comboBoxBus.DisplayMember = "Model_and_plate"; comboBoxBus.ValueMember = "Id"; comboBoxRoute.DataSource = routeListRepository.ReadRouteLists(); @@ -69,7 +69,8 @@ namespace ProjectPeopleTransportation.Forms Convert.ToInt32(row.Cells["ColumnEmployees"].Value), Convert.ToInt32(row.Cells["ColumnShiftDuration"].Value))); } - return list; + return list.GroupBy(x => x.Employee_ID, x => x.Shift_Duration, (employeeId, shiftduration) => + StartingShift_Employee.CreateElement(0, employeeId, shiftduration.Sum())).ToList(); } } } \ No newline at end of file diff --git a/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormStartingShifts.cs b/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormStartingShifts.cs index 9761723..e6df01f 100644 --- a/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormStartingShifts.cs +++ b/ProjectPeopleTransportation/ProjectPeopleTransportation/Forms/FormStartingShifts.cs @@ -50,6 +50,11 @@ namespace ProjectPeopleTransportation.Forms } } - private void LoadList() => dataGridViewData.DataSource = _startingShiftRepository.ReadStartingShifts(); - } + private void LoadList() + { + dataGridViewData.DataSource = _startingShiftRepository.ReadStartingShifts(); + dataGridViewData.Columns["ID"].Visible = false; + dataGridViewData.Columns["Starting_Shift_Date"].DefaultCellStyle.Format = "dd MMMM yyyy hh:mm"; + } +} } diff --git a/ProjectPeopleTransportation/ProjectPeopleTransportation/Repositories/Implementations/BusCheckRepository.cs b/ProjectPeopleTransportation/ProjectPeopleTransportation/Repositories/Implementations/BusCheckRepository.cs index 3c5985e..a9ab1ff 100644 --- a/ProjectPeopleTransportation/ProjectPeopleTransportation/Repositories/Implementations/BusCheckRepository.cs +++ b/ProjectPeopleTransportation/ProjectPeopleTransportation/Repositories/Implementations/BusCheckRepository.cs @@ -64,7 +64,11 @@ WHERE id=@id"; try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - var querySelect = @"SELECT * FROM bus_check"; + var querySelect = @"SELECT +gts.*, +b.licence_plate as Bus_name +FROM bus_check gts +LEFT JOIN bus b on b.id = gts.bus_id"; var services = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(services)); return services; diff --git a/ProjectPeopleTransportation/ProjectPeopleTransportation/Repositories/Implementations/StartingShiftRepository.cs b/ProjectPeopleTransportation/ProjectPeopleTransportation/Repositories/Implementations/StartingShiftRepository.cs index c50d429..abdbc88 100644 --- a/ProjectPeopleTransportation/ProjectPeopleTransportation/Repositories/Implementations/StartingShiftRepository.cs +++ b/ProjectPeopleTransportation/ProjectPeopleTransportation/Repositories/Implementations/StartingShiftRepository.cs @@ -56,10 +56,37 @@ VALUES (@Starting_shift_id, @Employee_id, @Shift_Duration)"; try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - var querySelect = @"SELECT * FROM starting_shift"; - var startingShifts = connection.Query(querySelect); + var querySelect = @"SELECT +sse.starting_shift_id, +ss.starting_shift_date, +CONCAT(rl.route_name, '-', rl.route_description) as Route_Name, +CONCAT(b.bus_name, ' ', b.licence_plate) as Bus_name, +sse.employee_id, +sse.shift_duration +FROM starting_shift ss +LEFT JOIN route_list rl on rl.id = ss.route_list_id +LEFT JOIN bus b on b.id = ss.bus_id +INNER JOIN starting_shift_employee sse ON sse.starting_shift_id = ss.id"; + var startingShiftDict = new Dictionary>(); + + var startingShifts = connection.Query(querySelect, (startingShift, startingShifts) => + { + if (!startingShiftDict.TryGetValue(startingShift.ID, out var sse)) + { + sse = []; + startingShiftDict.Add(startingShift.ID, sse); + } + sse.Add(startingShifts); + return startingShift; + }, splitOn: "Employee_id", param: new { routelistId, employeeId, dateForm, dateTo, busId }); + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(startingShifts)); - return startingShifts; + return startingShiftDict.Select(x => + { + var ss = startingShifts.First(y => y.ID == x.Key); + ss.SetStartingShiftEmployee(x.Value); + return ss; + }).ToArray(); } catch (Exception ex) {