diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Bus.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Bus.cs index ce1e3f1..14068ae 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Bus.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Bus.cs @@ -1,4 +1,5 @@ using ProjectPassengerTransportation.Entities.Enums; +using System.ComponentModel; namespace ProjectPassengerTransportation.Entities; @@ -6,10 +7,14 @@ public class Bus { public int Id { get; private set; } + [DisplayName("Госномер")] public string Licence_plate { get; private set; } = string.Empty; + [DisplayName("Модель автобуса")] public string Model { get; private set; } = string.Empty; + public string Model_and_plate => $"{Model} {Licence_plate}"; + public static Bus CreateEntity(int id, string licencePlate, string model) { return new Bus diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Employee.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Employee.cs index 204e90c..bf91d28 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Employee.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/Employee.cs @@ -1,4 +1,6 @@ -using ProjectPassengerTransportation.Entities.Enums; +using DocumentFormat.OpenXml.Wordprocessing; +using ProjectPassengerTransportation.Entities.Enums; +using System.ComponentModel; namespace ProjectPassengerTransportation.Entities; @@ -6,10 +8,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 post) diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/GoToService.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/GoToService.cs index 048b1c1..58965d8 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/GoToService.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/GoToService.cs @@ -1,4 +1,5 @@ using ProjectPassengerTransportation.Entities.Enums; +using System.ComponentModel; namespace ProjectPassengerTransportation.Entities; @@ -6,13 +7,20 @@ public class GoToService { public int Id { get; private set; } - public DateTime Date { get; private set; } + [Browsable(false)] + public int Bus_id { get; private set; } + [DisplayName("Автобус")] + public string Bus_name { get; private set; } = string.Empty; + + [DisplayName("Сломанные элементы")] public BrokenElements Broken_elements { get; private set; } + [DisplayName("Стоимость")] public int Price { get; private set; } - public int Bus_id { get; private set; } + [DisplayName("Дата тех обслуживания")] + public DateTime Date { get; private set; } public static GoToService CreateOperation(int id, BrokenElements brokenElements, int price, int busId) { diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/RouteList.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/RouteList.cs index 8980798..3378ae9 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/RouteList.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/RouteList.cs @@ -1,13 +1,19 @@ -namespace ProjectPassengerTransportation.Entities; +using System.ComponentModel; + +namespace ProjectPassengerTransportation.Entities; public class RouteList { public int Id { get; private set; } + [DisplayName("Начало маршрута")] public TimeSpan Route_start { get; private set; } + [DisplayName("Конец маршрута")] public TimeSpan Route_finish { get; private set; } + public string Route_time => $"{Route_start}-{Route_finish}"; + public static RouteList CreateEntity(int id, TimeSpan start, TimeSpan finish) { return new RouteList diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/StartingShift.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/StartingShift.cs index 2c48190..e55befc 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/StartingShift.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/StartingShift.cs @@ -1,15 +1,31 @@ -namespace ProjectPassengerTransportation.Entities; +using System.ComponentModel; + +namespace ProjectPassengerTransportation.Entities; public class StartingShift { public int Id { get; private set; } - public DateTime Date { get; private set; } - + [Browsable(false)] public int Route_list_id { get; private set; } - + + [Browsable(false)] public int Bus_id { get; private set; } + [DisplayName("Маршрутный лист")] + public string Route_list_name { get; private set; } = string.Empty; + + [DisplayName("Автобус")] + public string Bus_name { get; private set; } = string.Empty; + + [DisplayName("Дата смены")] + public DateTime Date { get; private set; } + + [DisplayName("Работники")] + public string Employee => Starting_shift_employees != null ? + string.Join(", ", Starting_shift_employees.Select(x => $"{x.Employee_name} {x.Work_time}")) : string.Empty; + + [Browsable(false)] public IEnumerable Starting_shift_employees { get; private set; } = []; public static StartingShift CreateOperation(int id, int routeListId, int busId, @@ -25,16 +41,11 @@ public class StartingShift }; } - public static StartingShift CreateOperation(TempStartingShiftEmployee tempStartingShiftEmployee, - IEnumerable startingShiftEmployee) + public void SetStartingShiftEmployee(IEnumerable startingShiftEmployee) { - return new StartingShift + if (startingShiftEmployee != null && startingShiftEmployee.Any()) { - Id = tempStartingShiftEmployee.Starting_shift_id, - Date = tempStartingShiftEmployee.Date, - Route_list_id = tempStartingShiftEmployee.Route_list_id, - Bus_id = tempStartingShiftEmployee.Bus_id, - Starting_shift_employees = startingShiftEmployee - }; + Starting_shift_employees = startingShiftEmployee; + } } } diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/StartingShiftEmployee.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/StartingShiftEmployee.cs index ce5668b..9438d0a 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/StartingShiftEmployee.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/StartingShiftEmployee.cs @@ -1,11 +1,15 @@ -namespace ProjectPassengerTransportation.Entities; +using System.ComponentModel; + +namespace ProjectPassengerTransportation.Entities; public class StartingShiftEmployee { public int Starting_shift_id { get; private set; } - + public int Employee_id { get; private set; } + public string Employee_name { get; private set; } = string.Empty; + public int Work_time { get; private set; } public static StartingShiftEmployee CreateElement(int startingShiftId, int employeeId, int workTime) diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToService.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToService.cs index e5aa738..00f7539 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToService.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToService.cs @@ -13,7 +13,7 @@ namespace ProjectPassengerTransportation.Forms InitializeComponent(); _goToServiceRepository = goToServiceRepository ?? throw new ArgumentNullException(nameof(goToServiceRepository)); comboBoxBus.DataSource = busRepository.ReadBuses(); - comboBoxBus.DisplayMember = "Licence_plate"; + comboBoxBus.DisplayMember = "Model_and_plate"; comboBoxBus.ValueMember = "Id"; foreach (var elem in Enum.GetValues(typeof(BrokenElements))) { diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShift.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShift.cs index 38852d7..2a3b882 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShift.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShift.cs @@ -17,10 +17,10 @@ namespace ProjectPassengerTransportation.Forms comboBoxRouteList.DisplayMember = "Id"; comboBoxRouteList.ValueMember = "Id"; comboBoxBus.DataSource = busRepository.ReadBuses(); - comboBoxBus.DisplayMember = "Licence_plate"; + comboBoxBus.DisplayMember = "Model_and_plate"; comboBoxBus.ValueMember = "Id"; ColumnEmployees.DataSource = employeeRepository.ReadEmployees(); - ColumnEmployees.DisplayMember = "First_name"; + ColumnEmployees.DisplayMember = "Full_name"; ColumnEmployees.ValueMember = "Id"; } diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormWorkReport.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormWorkReport.cs index 1b1d583..6697697 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormWorkReport.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormWorkReport.cs @@ -14,10 +14,10 @@ namespace ProjectPassengerTransportation.Forms InitializeComponent(); _container = container ?? throw new ArgumentNullException(nameof(container)); comboBoxEmployee.DataSource = employeeRepository.ReadEmployees(); - comboBoxEmployee.DisplayMember = "First_name"; + comboBoxEmployee.DisplayMember = "Full_name"; comboBoxEmployee.ValueMember = "Id"; comboBoxBus.DataSource = busRepository.ReadBuses(); - comboBoxBus.DisplayMember = "Licence_plate"; + comboBoxBus.DisplayMember = "Model_and_plate"; comboBoxBus.ValueMember = "Id"; } diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/GoToServiceRepository.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/GoToServiceRepository.cs index b4903f2..7564d5e 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/GoToServiceRepository.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/GoToServiceRepository.cs @@ -66,7 +66,12 @@ WHERE id=@id"; try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - var querySelect = @"SELECT * FROM go_to_service"; + var querySelect = @" +SELECT +gts.*, +b.licence_plate as Bus_name +FROM go_to_service 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/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/StartingShiftRepository.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/StartingShiftRepository.cs index fce1e82..f0dc94c 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/StartingShiftRepository.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/StartingShiftRepository.cs @@ -57,13 +57,38 @@ VALUES (@Starting_shift_id, @Employee_id, @Work_time)"; { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); var querySelect = @" -SELECT sse.starting_shift_id, ss.date, ss.route_list_id, ss.bus_id, sse.employee_id, sse.work_time FROM starting_shift ss +SELECT +sse.starting_shift_id, +ss.date, +CONCAT(rl.route_start, '-', rl.route_finish) as Route_list_name, +CONCAT(b.model, ' ', b.licence_plate) as Bus_name, +sse.employee_id, +sse.work_time +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 startingShifts = connection.Query(querySelect); + 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 { dateFrom, dateTo, routeListId, employeeId, busId }); + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(startingShifts)); - return startingShifts.GroupBy(x => x.Starting_shift_id, y => y, - (key, value) => StartingShift.CreateOperation(value.First(), - value.Select(z => StartingShiftEmployee.CreateElement(0, z.Employee_id, z.Work_time)))).ToList(); + + return startingShiftDict.Select(x => + { + var ss = startingShifts.First(y => y.Id == x.Key); + ss.SetStartingShiftEmployee(x.Value); + return ss; + }).ToArray(); } catch (Exception ex) {