diff --git a/.gitignore b/.gitignore index 2977950..c38f84d 100644 --- a/.gitignore +++ b/.gitignore @@ -407,3 +407,6 @@ FodyWeavers.xsd /docBuses1.docx /excel1.xlsx /pdf1.pdf +*.xlsx +*.docx +*.pdf diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/TempStartingShiftEmployee.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/TempStartingShiftEmployee.cs deleted file mode 100644 index 36ba12b..0000000 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Entities/TempStartingShiftEmployee.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace ProjectPassengerTransportation.Entities; - -public class TempStartingShiftEmployee -{ - public int Starting_shift_id { get; private set; } - - public int Employee_id { get; private set; } - - public int Route_list_id { get; private set; } - - public int Bus_id { get; private set; } - - public DateTime Date { get; private set; } - - public int Work_time { get; private set; } -} diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBuses.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBuses.cs index cdd40cb..f910e4e 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBuses.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormBuses.cs @@ -83,7 +83,12 @@ namespace ProjectPassengerTransportation.Forms } } - private void LoadList() => dataGridViewData.DataSource = _busRepository.ReadBuses(); + private void LoadList() + { + dataGridViewData.DataSource = _busRepository.ReadBuses(); + dataGridViewData.Columns["Id"].Visible = false; + dataGridViewData.Columns["Model_and_plate"].Visible = false; + } private bool TryGetIdentifierFromSelectedRow(out int id) { diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployees.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployees.cs index f7fcb92..c6c5fee 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployees.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormEmployees.cs @@ -83,7 +83,12 @@ namespace ProjectPassengerTransportation.Forms } } - private void LoadList() => dataGridViewData.DataSource = _employeeRepository.ReadEmployees(); + private void LoadList() + { + dataGridViewData.DataSource = _employeeRepository.ReadEmployees(); + dataGridViewData.Columns["Id"].Visible = false; + dataGridViewData.Columns["Full_name"].Visible = false; + } private bool TryGetIdentifierFromSelectedRow(out int id) { diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToServices.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToServices.cs index 95a02e3..5968b6b 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToServices.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormGoToServices.cs @@ -63,7 +63,13 @@ public partial class FormGoToServices : Form } } - private void LoadList() => dataGridViewData.DataSource = _goToServiceRepository.ReadServices(); + private void LoadList() + { + dataGridViewData.DataSource = _goToServiceRepository.ReadServices(); + dataGridViewData.Columns["Id"].Visible = false; + dataGridViewData.Columns["Date"].DefaultCellStyle.Format = "dd.MM.yyyy"; + + } private bool TryGetIdentifierFromSelectedRow(out int id) { diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteLists.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteLists.cs index e9a3e80..24bfb19 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteLists.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormRouteLists.cs @@ -83,7 +83,12 @@ namespace ProjectPassengerTransportation.Forms } } - private void LoadList() => dataGridViewData.DataSource = _routeListRepository.ReadRouteLists(); + private void LoadList() + { + dataGridViewData.DataSource = _routeListRepository.ReadRouteLists(); + dataGridViewData.Columns["Id"].Visible = false; + dataGridViewData.Columns["Route_time"].Visible = false; + } private bool TryGetIdentifierFromSelectedRow(out int id) { diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShifts.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShifts.cs index 9e27d9f..81cc399 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShifts.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Forms/FormStartingShifts.cs @@ -40,5 +40,10 @@ public partial class FormStartingShifts : Form } } - private void LoadList() => dataGridViewData.DataSource = _startingShiftRepository.ReadShifts(); + private void LoadList() + { + dataGridViewData.DataSource = _startingShiftRepository.ReadShifts(); + dataGridViewData.Columns["Id"].Visible = false; + dataGridViewData.Columns["Date"].DefaultCellStyle.Format = "dd MMMM yyyy hh:mm"; + } } diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Reports/ChartReport.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Reports/ChartReport.cs index 597bd58..8da4f38 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Reports/ChartReport.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Reports/ChartReport.cs @@ -21,7 +21,7 @@ public class ChartReport { new PdfBuilder(filePath) .AddHeader("Тех обслуживание") - .AddPieChart("Количество неисправных элементов", GetData(dateTime)) + .AddPieChart($"Количество неисправных элементов на {dateTime:dd MMMM yyyy}", GetData(dateTime)) .Build(); return true; @@ -36,9 +36,9 @@ public class ChartReport private List<(string Caption, double Value)> GetData(DateTime dateTime) { return _goToServiceRepository - .ReadServices() + .ReadServices(dateFrom: dateTime.Date, dateTo: dateTime.Date.AddDays(1)) .Where(x => x.Date.Date == dateTime.Date) - .GroupBy(x => x.Bus_id, (key, group) => new { + .GroupBy(x => x.Bus_name, (key, group) => new { Id = key, Elements = group.Sum(x => (double)x.Broken_elements) }) diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Reports/TableReport.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Reports/TableReport.cs index 458b474..0503bae 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Reports/TableReport.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Reports/TableReport.cs @@ -28,7 +28,7 @@ public class TableReport { new ExcelBuilder(filePath) .AddHeader("Сводка по работникам и автобусам", 0, 5) - .AddParagraph("за период", 0) + .AddParagraph($"за период c {startDate:dd.MM.yyyy} по {endDate: dd.MM.yyyy}", 0) .AddTable([10, 10, 10, 15, 15], GetData(employeeId, busId, startDate, endDate)) .Build(); return true; @@ -43,11 +43,11 @@ public class TableReport private List GetData(int employeeId, int busId, DateTime startDate, DateTime endDate) { var data = _startingShiftRepository - .ReadShifts() + .ReadShifts(dateFrom: startDate, dateTo: endDate, employeeId: employeeId, busId: busId) .Where(x => x.Date >= startDate && x.Date <= endDate && x.Starting_shift_employees.Any(y => y.Employee_id == employeeId)) .Select(x => new { EmployeeId = (int?)employeeId, - BusId = (int?)null, + BusId = (string?)null, x.Date, WorkHours = x.Starting_shift_employees.FirstOrDefault(y => y.Employee_id == employeeId)?.Work_time, Price = (int?)null @@ -57,21 +57,22 @@ public class TableReport .Where(x => x.Date >= startDate && x.Date <= endDate && x.Bus_id == busId) .Select(x => new { EmployeeId = (int?)null, - BusId = (int?)busId, + BusId = (string?)x.Bus_name, x.Date, WorkHours = (int?)null, Price = (int?)x.Price })) .OrderBy(x => x.Date); + return new List() { item } .Union(data .Select(x => new string[] { - x.EmployeeId.ToString() ?? string.Empty, - x.BusId.ToString() ?? string.Empty, - x.Date.ToString(), - x.WorkHours?.ToString() ?? string.Empty, - x.Price?.ToString() ?? string.Empty})) - .Union([["Всего", "", "", data.Sum(x => x.WorkHours ?? 0).ToString(), data.Sum(x => x.Price ?? 0).ToString()]]) + x.EmployeeId.ToString() ?? string.Empty, + x.BusId ?? string.Empty, + x.Date.ToString("dd.MM.yyyy"), + x.WorkHours?.ToString("N0") ?? string.Empty, + x.Price?.ToString("N0") ?? string.Empty})) + .Union([["Всего", "", "", data.Sum(x => x.WorkHours ?? 0).ToString("N0"), data.Sum(x => x.Price ?? 0).ToString("N0")]]) .ToList(); } } diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/GoToServiceRepository.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/GoToServiceRepository.cs index 7564d5e..1c0f199 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/GoToServiceRepository.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/GoToServiceRepository.cs @@ -60,19 +60,38 @@ WHERE id=@id"; } public IEnumerable ReadServices(DateTime? dateFrom = null, DateTime? dateTo = null, - BrokenElements BrokenElements = BrokenElements.None, int? price = null, int? busId = null) + BrokenElements broken_elements = BrokenElements.None, int? price = null, int? bus_id = null) { _logger.LogInformation("Получение всех объектов"); try { + var builder = new QueryBuilder(); + if (dateFrom.HasValue) + { + builder.AddCondition("gts.date >= @dateFrom"); + } + if (dateTo.HasValue) + { + builder.AddCondition("gts.date <= @dateTo"); + } + if (price.HasValue) + { + builder.AddCondition("gts.price = @price"); + } + if (bus_id.HasValue) + { + builder.AddCondition("gts.bus_id = @bus_id"); + } + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - var querySelect = @" + 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); +LEFT JOIN bus b on b.id = gts.bus_id +{builder.Build()}"; + var services = connection.Query(querySelect, new { dateFrom, dateTo, broken_elements, price, bus_id }); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(services)); return services; } diff --git a/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/QueryBuilder.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/QueryBuilder.cs new file mode 100644 index 0000000..e02f00a --- /dev/null +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/QueryBuilder.cs @@ -0,0 +1,34 @@ +using System.Text; + +namespace ProjectPassengerTransportation.Repositories.Implementations; + +public 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/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/StartingShiftRepository.cs b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/StartingShiftRepository.cs index f0dc94c..957c02f 100644 --- a/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/StartingShiftRepository.cs +++ b/ProjectPassengerTransportation/ProjectPassengerTransportation/Repositories/Implementations/StartingShiftRepository.cs @@ -50,24 +50,50 @@ VALUES (@Starting_shift_id, @Employee_id, @Work_time)"; } public IEnumerable ReadShifts(DateTime? dateFrom = null, DateTime? dateTo = null, - int? routeListId = null, int? employeeId = null, int? busId = null) + int? route_list_id = null, int? employee_id = null, int? bus_id = null) { _logger.LogInformation("Получение всех объектов"); try { + var builder = new QueryBuilder(); + if (dateFrom.HasValue) + { + builder.AddCondition("ss.date >= @dateFrom"); + } + if (dateTo.HasValue) + { + builder.AddCondition("ss.date <= @dateTo"); + } + if (route_list_id.HasValue) + { + builder.AddCondition("ss.route_list_id = @route_list_id"); + } + if (bus_id.HasValue) + { + builder.AddCondition("ss.bus_id = @bus_id"); + } + if (employee_id.HasValue) + { + builder.AddCondition("sse.employee_id = @employee_id"); + } + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - var querySelect = @" + var querySelect = @$" SELECT -sse.starting_shift_id, +ss.id, ss.date, CONCAT(rl.route_start, '-', rl.route_finish) as Route_list_name, CONCAT(b.model, ' ', b.licence_plate) as Bus_name, +CONCAT(e.first_name, ' ', e.last_name) as Employee_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"; +INNER JOIN starting_shift_employee sse ON sse.starting_shift_id = ss.id +LEFT JOIN employee e on e.id = sse.employee_id +{builder.Build()}"; + var startingShiftDict = new Dictionary>(); var startingShifts = connection.Query(querySelect, (startingShift, startingShifts) => @@ -79,7 +105,7 @@ INNER JOIN starting_shift_employee sse ON sse.starting_shift_id = ss.id"; } sse.Add(startingShifts); return startingShift; - }, splitOn: "Employee_id", param: new { dateFrom, dateTo, routeListId, employeeId, busId }); + }, splitOn: "Employee_name", param: new { dateFrom, dateTo, route_list_id, employee_id, bus_id }); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(startingShifts));