From 684d1c62eb41acc4e3f08ca5f014e77d3f6ab2ff Mon Sep 17 00:00:00 2001 From: MorozovDanil Date: Mon, 23 Dec 2024 23:36:40 +0400 Subject: [PATCH 1/4] =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B0=D0=BB=D1=81=D1=8F?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BA=D0=B0=D0=B7=20=D0=B2=D1=80=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5...=20=D1=87=D0=B5=D1=82=20=D1=82=D0=B0=D0=BC=20=D1=81=20?= =?UTF-8?q?=D0=B4=D0=B0=D1=82=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectRepairCompany/Entities/Detail.cs | 9 +++++++++ .../ProjectRepairCompany/Entities/Master.cs | 7 +++++++ .../ProjectRepairCompany/Entities/Order.cs | 15 +++++++++++++++ .../ProjectRepairCompany/Entities/Storage.cs | 5 +++++ .../Entities/StorageDetail.cs | 13 +++++++++++++ .../ProjectRepairCompany/Forms/FormDetails.cs | 1 + .../ProjectRepairCompany/Forms/FormMasters.cs | 1 + .../ProjectRepairCompany/Forms/FormStorages.cs | 5 ++++- .../Implementations/OrderRepository.cs | 7 +++++-- .../Implementations/StorageDetailRepository.cs | 10 +++++++++- 10 files changed, 69 insertions(+), 4 deletions(-) diff --git a/ProjectRepairCompany/ProjectRepairCompany/Entities/Detail.cs b/ProjectRepairCompany/ProjectRepairCompany/Entities/Detail.cs index 7fd5b9d..8d674e4 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Entities/Detail.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Entities/Detail.cs @@ -1,6 +1,7 @@ using ProjectRepairCompany.Entities.Enums; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -10,9 +11,17 @@ namespace ProjectRepairCompany.Entities; public class Detail { public int Id { get; private set; } + + [DisplayName("Название детали")] public string NameDetail { get; private set; } = string.Empty; + + [DisplayName("Количество деталей")] public int NumberDetail { get; private set; } + + [DisplayName("Стоимость детали")] public double PriceDetail { get; private set; } + + [DisplayName("Свойства детали")] public DetailProperties DetailProperties { get; private set; } public static Detail CreateEntity(int id, string nameDetail, int numberDetail, double priceDetail, DetailProperties detailProperties) diff --git a/ProjectRepairCompany/ProjectRepairCompany/Entities/Master.cs b/ProjectRepairCompany/ProjectRepairCompany/Entities/Master.cs index 3399e0c..def0f52 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Entities/Master.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Entities/Master.cs @@ -1,6 +1,7 @@ using ProjectRepairCompany.Entities.Enums; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -10,8 +11,14 @@ namespace ProjectRepairCompany.Entities; public class Master { public int Id { get; private set; } + + [DisplayName("ФИО работника")] public string MasterName { get; private set; } = string.Empty; + + [DisplayName("Дата начала работы")] public DateTime StartDate { get; private set; } + + [DisplayName("Должность")] public MasterPost MasterPost { get; private set; } public static Master CreateEntity(int id, string masterName, DateTime startDate, MasterPost masterPost) diff --git a/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.cs b/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.cs index f98e896..57994c0 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.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,11 +10,25 @@ namespace ProjectRepairCompany.Entities; public class Order { public int Id { get; private set; } + + [DisplayName("Дата заказа")] public DateTime OrderDate { get; private set; } + + [DisplayName("Дата начала выполнения ремонта")] public DateTime DateCompletion { get; private set; } + + [DisplayName("Дата выполнения заказа")] public DateTime DateIssue { get; private set; } + + [DisplayName("Стоимость заказа")] public int FullPrice { get; private set; } + + [Browsable(false)] public int MasterId { get; private set; } + + [DisplayName("Работник")] + public string MasterName { get; private set; } = string.Empty; + public IEnumerable OrderDetails { get; private set; } = []; public static Order CreateOperation(int id, int fullPrice, int masterId, DateTime dateCompletion, diff --git a/ProjectRepairCompany/ProjectRepairCompany/Entities/Storage.cs b/ProjectRepairCompany/ProjectRepairCompany/Entities/Storage.cs index 0bf4dc7..3aab6bb 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Entities/Storage.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Entities/Storage.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,7 +10,11 @@ namespace ProjectRepairCompany.Entities; public class Storage { public int Id { get; private set; } + + [DisplayName ("Адрес склада")] public string StorageAddress { get; private set; } = string.Empty; + + [DisplayName("Вместимость склада")] public int Capacity { get; private set; } public static Storage CreateEntity(int id, string storageAddress, int capacity) diff --git a/ProjectRepairCompany/ProjectRepairCompany/Entities/StorageDetail.cs b/ProjectRepairCompany/ProjectRepairCompany/Entities/StorageDetail.cs index bbed691..506481e 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Entities/StorageDetail.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Entities/StorageDetail.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,11 +9,23 @@ namespace ProjectRepairCompany.Entities; public class StorageDetail { + [Browsable(false)] public int StorageId { get; private set; } + [Browsable(false)] public int DetailId { get; private set; } + + [DisplayName("Количество деталей")] public int DetailCount { get; private set; } + + [DisplayName("Дата поступления")] public DateTime SupplyDate { get; private set; } // Дата поступления деталей + [DisplayName("Адрес склада")] + public string StorageAddress { get; private set; } = string.Empty; + + [DisplayName("Название детали")] + public string DetailName { get; private set; } = string.Empty; + public static StorageDetail CreateOperation(int storageId, int detailId, int detailCount, DateTime supplyDate) { return new StorageDetail diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormDetails.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormDetails.cs index d2e71a7..27a2375 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormDetails.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormDetails.cs @@ -97,6 +97,7 @@ namespace ProjectRepairCompany.Forms try { dataGridView.DataSource = _detailRepository.ReadDetails(); + dataGridView.Columns["Id"].Visible = false; } catch (Exception ex) { diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormMasters.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormMasters.cs index 8e17f49..03974ec 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormMasters.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormMasters.cs @@ -96,6 +96,7 @@ namespace ProjectRepairCompany.Forms try { dataGridView.DataSource = _masterRepository.ReadMasters(); + dataGridView.Columns["Id"].Visible = false; } catch (Exception ex) { diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorages.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorages.cs index 718c127..726cc5c 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorages.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorages.cs @@ -92,7 +92,10 @@ namespace ProjectRepairCompany.Forms } - private void LoadList() => dataGridView.DataSource = _storageRepository.ReadStorages(); + private void LoadList() { + dataGridView.DataSource = _storageRepository.ReadStorages(); + dataGridView.Columns["Id"].Visible = false; + } private bool TryGetIdentifierFromSelectRow(out int id) { id = 0; diff --git a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs index fbe0cdd..2c9eecf 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs @@ -122,8 +122,11 @@ public class OrderRepository : IOrderRepository connection.Open(); var querySelect = @" -SELECT o.*, od.DetailId, od.DetailCount From ""Order"" o -LEFT JOIN OrderDetail od ON o.Id = od.OrderId"; +SELECT o.*, od.DetailId, od.DetailCount, m.MasterName as ""MasterName"" +FROM ""Order"" o +LEFT JOIN OrderDetail od ON o.Id = od.OrderId +LEFT JOIN Master m ON m.Id = o.MasterId +WHERE (@MasterId IS NULL OR o.MasterId = @MasterId)"; var orders = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(orders)); return orders.GroupBy(x => x.Id, y => y, diff --git a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/StorageDetailRepository.cs b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/StorageDetailRepository.cs index a2ab52c..207ffa1 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/StorageDetailRepository.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/StorageDetailRepository.cs @@ -48,7 +48,15 @@ VALUES (@StorageId, @DetailId, @DetailCount, @SupplyDate)"; try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - var querySelect = "SELECT * FROM StorageDetail"; + var querySelect = @"SELECT + sd.*, + s.StorageAddress as ""StorageAddress"", + d.NameDetail as ""DetailName"" + FROM StorageDetail sd + LEFT JOIN Storage s ON s.Id = sd.StorageId + LEFT JOIN Detail d ON d.Id = sd.DetailId + WHERE (@storageId IS NULL OR sd.StorageId = @storageId) + AND (@detailId IS NULL OR sd.DetailId = @detailId)"; var storageDetails = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(storageDetails)); return storageDetails; -- 2.25.1 From 2503c9f9c0ac23297228a61477297523c8d13d90 Mon Sep 17 00:00:00 2001 From: MorozovDanil Date: Mon, 23 Dec 2024 23:54:00 +0400 Subject: [PATCH 2/4] =?UTF-8?q?=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5?= =?UTF-8?q?=D0=B9=D1=81=20=D1=84=D0=BE=D1=80=D0=BC,=20=D0=BA=D1=80=D0=BE?= =?UTF-8?q?=D0=BC=D0=B5=20=D0=B7=D0=B0=D0=BA=D0=B0=D0=B7=20=D1=82=D0=B0?= =?UTF-8?q?=D0=BC=20=D1=81=20=D0=B4=D0=B0=D1=82=D0=B0=D0=BC=D0=B8=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BF=D0=B0=D1=82=D1=8C=D1=81=D1=8F=20=D0=BD=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProjectRepairCompany/ProjectRepairCompany/Forms/FormMasters.cs | 1 + .../ProjectRepairCompany/Forms/FormStorageDetails.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormMasters.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormMasters.cs index 03974ec..3372fdb 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormMasters.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormMasters.cs @@ -97,6 +97,7 @@ namespace ProjectRepairCompany.Forms { dataGridView.DataSource = _masterRepository.ReadMasters(); dataGridView.Columns["Id"].Visible = false; + dataGridView.Columns["StartDate"].DefaultCellStyle.Format = "dd MMMM yyyy"; } catch (Exception ex) { diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetails.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetails.cs index c777739..a5a23c6 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetails.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormStorageDetails.cs @@ -48,6 +48,7 @@ namespace ProjectRepairCompany.Forms try { dataGridView.DataSource = _storageDetailRepository.ReadStorageDetails(); + dataGridView.Columns["SupplyDate"].DefaultCellStyle.Format = "dd.MM.yyyy hh:mm"; } catch (Exception ex) { -- 2.25.1 From c7d41abb5022cf1e5d16d4135c7e5fb6687c4b35 Mon Sep 17 00:00:00 2001 From: MorozovDanil Date: Tue, 24 Dec 2024 02:39:49 +0400 Subject: [PATCH 3/4] =?UTF-8?q?=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=B0=20?= =?UTF-8?q?=D0=BA=20=D1=81=D0=B4=D0=B0=D1=87=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectRepairCompany/Entities/Master.cs | 5 -- .../ProjectRepairCompany/Entities/Order.cs | 27 ++++--- .../Entities/OrderDetail.cs | 9 +-- .../Entities/TempOrderDetail.cs | 20 ----- .../Forms/FormOrders.Designer.cs | 18 ++--- .../Reports/ChartReport.cs | 13 ++-- .../Reports/TableReport.cs | 48 +++++------- .../Implementations/OrderRepository.cs | 76 +++++++++++++++---- .../Implementations/QueryBuilder.cs | 34 +++++++++ 9 files changed, 146 insertions(+), 104 deletions(-) delete mode 100644 ProjectRepairCompany/ProjectRepairCompany/Entities/TempOrderDetail.cs create mode 100644 ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/QueryBuilder.cs diff --git a/ProjectRepairCompany/ProjectRepairCompany/Entities/Master.cs b/ProjectRepairCompany/ProjectRepairCompany/Entities/Master.cs index def0f52..873e984 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Entities/Master.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Entities/Master.cs @@ -1,10 +1,5 @@ using ProjectRepairCompany.Entities.Enums; -using System; -using System.Collections.Generic; using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace ProjectRepairCompany.Entities; diff --git a/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.cs b/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.cs index 57994c0..981aa5c 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Entities/Order.cs @@ -9,6 +9,7 @@ namespace ProjectRepairCompany.Entities; public class Order { + [DisplayName("Номер заказа")] public int Id { get; private set; } [DisplayName("Дата заказа")] @@ -27,9 +28,15 @@ public class Order public int MasterId { get; private set; } [DisplayName("Работник")] - public string MasterName { get; private set; } = string.Empty; + public string MasterName { get; set; } = string.Empty; - public IEnumerable OrderDetails { get; private set; } = []; + [DisplayName("Детали и кол-во")] + public string OrderAndDetail => OrderDetails != null && OrderDetails.Any() + ? string.Join(", ", OrderDetails.Select(od => $"{od.DetailName}: {od.DetailCount}")) + : "Нет данных"; + + [Browsable(false)] + public IEnumerable OrderDetails { get; set; } = []; public static Order CreateOperation(int id, int fullPrice, int masterId, DateTime dateCompletion, DateTime dateIssue, IEnumerable orderDetails) @@ -45,18 +52,14 @@ public class Order OrderDetails = orderDetails }; } - public static Order CreateOperation(TempOrderDetail tempOrderDetail, IEnumerable orderDetails) + + public void SetOrderDetails(IEnumerable orderDetails) { - return new Order + if (orderDetails != null && orderDetails.Any()) { - Id = tempOrderDetail.Id, - OrderDate = tempOrderDetail.OrderDate, - DateCompletion = tempOrderDetail.DateCompletion, - DateIssue = tempOrderDetail.DateIssue, - FullPrice = tempOrderDetail.FullPrice, - MasterId = tempOrderDetail.MasterId, - OrderDetails = orderDetails - }; + OrderDetails = orderDetails; + } } + } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Entities/OrderDetail.cs b/ProjectRepairCompany/ProjectRepairCompany/Entities/OrderDetail.cs index 00073f2..895b4a6 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Entities/OrderDetail.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Entities/OrderDetail.cs @@ -1,16 +1,11 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ProjectRepairCompany.Entities; +namespace ProjectRepairCompany.Entities; public class OrderDetail { public int OrderId { get; private set; } public int DetailId { get; private set; } public int DetailCount { get; private set; } + public string DetailName { get; private set; } = string.Empty; public static OrderDetail CreateOperation(int orderId, int detailId, int detailCount) { diff --git a/ProjectRepairCompany/ProjectRepairCompany/Entities/TempOrderDetail.cs b/ProjectRepairCompany/ProjectRepairCompany/Entities/TempOrderDetail.cs deleted file mode 100644 index 9854f9e..0000000 --- a/ProjectRepairCompany/ProjectRepairCompany/Entities/TempOrderDetail.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ProjectRepairCompany.Entities; - -public class TempOrderDetail -{ - public int Id { get; private set; } - public DateTime OrderDate { get; private set; } - public DateTime DateCompletion { get; private set; } - public DateTime DateIssue { get; private set; } - public int FullPrice { get; private set; } - public int MasterId { get; private set; } - public int DetailId { get; private set; } - public int DetailCount { get; private set; } - -} diff --git a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs index 51d0fda..7ef0ff7 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Forms/FormOrders.Designer.cs @@ -41,18 +41,18 @@ panel1.Controls.Add(ButtonDel); panel1.Controls.Add(ButtonAdd); panel1.Dock = DockStyle.Right; - panel1.Location = new Point(871, 0); + panel1.Location = new Point(1169, 0); panel1.Name = "panel1"; - panel1.Size = new Size(193, 450); + panel1.Size = new Size(193, 397); panel1.TabIndex = 2; // // ButtonDel // ButtonDel.BackgroundImage = Properties.Resources.Ic_remove_circle_48px_svg; ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; - ButtonDel.Location = new Point(42, 213); + ButtonDel.Location = new Point(42, 188); ButtonDel.Name = "ButtonDel"; - ButtonDel.Size = new Size(117, 83); + ButtonDel.Size = new Size(117, 73); ButtonDel.TabIndex = 1; ButtonDel.UseVisualStyleBackColor = true; ButtonDel.Click += ButtonDel_Click; @@ -61,9 +61,9 @@ // ButtonAdd.BackgroundImage = Properties.Resources._43_436254_plus_green_plus_icon_png; ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; - ButtonAdd.Location = new Point(42, 20); + ButtonAdd.Location = new Point(42, 18); ButtonAdd.Name = "ButtonAdd"; - ButtonAdd.Size = new Size(117, 74); + ButtonAdd.Size = new Size(117, 65); ButtonAdd.TabIndex = 0; ButtonAdd.UseVisualStyleBackColor = true; ButtonAdd.Click += ButtonAdd_Click; @@ -83,14 +83,14 @@ dataGridView.ReadOnly = true; dataGridView.RowHeadersVisible = false; dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - dataGridView.Size = new Size(871, 450); + dataGridView.Size = new Size(1169, 397); dataGridView.TabIndex = 3; // // FormOrders // - AutoScaleDimensions = new SizeF(7F, 17F); + AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(1064, 450); + ClientSize = new Size(1362, 397); Controls.Add(dataGridView); Controls.Add(panel1); Name = "FormOrders"; diff --git a/ProjectRepairCompany/ProjectRepairCompany/Reports/ChartReport.cs b/ProjectRepairCompany/ProjectRepairCompany/Reports/ChartReport.cs index 93c713d..ae482e7 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Reports/ChartReport.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Reports/ChartReport.cs @@ -27,8 +27,8 @@ public class ChartReport { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); new PdfBuilder(filePath) - .AddHeader("Заказы мастера") - .AddPieChart("Выполненные заказы", GetData(dateTime)) + .AddHeader("Заказы выполненные мастерами") + .AddPieChart($"Выполненные заказы за {dateTime:dd MMMM yyyy}", GetData(dateTime)) .Build(); return true; } @@ -41,13 +41,12 @@ public class ChartReport private List<(string Caption, double Value)> GetData(DateTime dateTime) { return _orderRepository - .ReadOrders() - .Where(x => x.DateIssue.Date == dateTime.Date) - .GroupBy(x => x.MasterId, (key, group) => new { - Id = key, + .ReadOrders(dateForm: dateTime.Date, dateTo: dateTime.Date.AddDays(1)) + .GroupBy(x => x.MasterName, (key, group) => new { + MasterName = key, Count = group.Count() }) - .Select(x => (x.Id.ToString(), (double)x.Count)) + .Select(x => (x.MasterName.ToString(), (double)x.Count)) .ToList(); } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Reports/TableReport.cs b/ProjectRepairCompany/ProjectRepairCompany/Reports/TableReport.cs index 39cc9cf..8a2da29 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Reports/TableReport.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Reports/TableReport.cs @@ -44,56 +44,46 @@ internal class TableReport private List GetData(int masterId, string masterName, DateTime startDate, DateTime endDate) { + var orders = _orderRepository - .ReadOrders() - .Where(order => order.MasterId == masterId && order.DateIssue >= startDate && order.DateIssue <= endDate) - .ToList(); + .ReadOrders(startDate, endDate, masterId) + .ToList(); if (!orders.Any()) return new List { Headers }; + var detailsData = orders .Select(order => new { MasterName = masterName, - OrderId = order.Id, OrderDate = order.DateIssue, - Details = string.Join(", ", order.OrderDetails.Select(d => $"ID: {d.DetailId} Кол-во: {d.DetailCount}")), - FullPrice = order.FullPrice - + OrderId = order.Id, + Details = string.Join(", ", order.OrderDetails.Select(d => $"Деталь: {d.DetailName} Кол-во: {d.DetailCount}")), + FullPrice = order.FullPrice }) - .OrderBy(detail => detail.OrderDate) - .ToList(); - + .ToList(); + var result = new List { Headers }; result.AddRange(detailsData.Select(detail => new string[] { - detail.MasterName, - detail.OrderId.ToString(), - detail.OrderDate.ToString("dd.MM.yyyy"), - detail.Details.ToString(), - detail.FullPrice.ToString() + detail.MasterName, + detail.OrderId.ToString(), + detail.OrderDate.ToString("dd.MM.yyyy"), + detail.Details.ToString(), + detail.FullPrice.ToString() })); - result.Add(new string[] { - "Итого", - "", - "", - "", - detailsData.Sum(d => d.FullPrice).ToString() + "Итого", + "", + "", + "", + detailsData.Sum(d => d.FullPrice).ToString() }); return result; - } - - - - - - - } diff --git a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs index 2c9eecf..2f7c317 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/OrderRepository.cs @@ -64,7 +64,6 @@ public class OrderRepository : IOrderRepository } } - public void DeleteOrder(int id) { _logger.LogInformation("Удаление объекта с Id {OrderId}", id); @@ -90,7 +89,6 @@ public class OrderRepository : IOrderRepository } - public Order ReadOrderById(int id) { _logger.LogInformation("Получение всех объектов"); @@ -112,26 +110,74 @@ public class OrderRepository : IOrderRepository } - public IEnumerable ReadOrders(DateTime? dateForm = null, DateTime? dateTo = null, int? masterId = null) { _logger.LogInformation("Получение всех объектов"); try { + var builder = new QueryBuilder(); + + if (masterId.HasValue) + { + builder.AddCondition("o.MasterId = @masterId"); + } + if (dateForm.HasValue) + { + builder.AddCondition("o.DateIssue >= @dateForm"); + } + if (dateTo.HasValue) + { + builder.AddCondition("o.DateIssue <= @dateTo"); + } + + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); connection.Open(); - var querySelect = @" -SELECT o.*, od.DetailId, od.DetailCount, m.MasterName as ""MasterName"" -FROM ""Order"" o -LEFT JOIN OrderDetail od ON o.Id = od.OrderId -LEFT JOIN Master m ON m.Id = o.MasterId -WHERE (@MasterId IS NULL OR o.MasterId = @MasterId)"; - var orders = connection.Query(querySelect); - _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(orders)); - return orders.GroupBy(x => x.Id, y => y, - (key,value) => Order.CreateOperation(value.First(), - value.Select(z => OrderDetail.CreateOperation(0, z.DetailId, z.DetailCount)))).ToList(); + var querySelect = @$" + SELECT + o.Id AS Id, + o.OrderDate, + o.DateCompletion, + o.DateIssue, + o.FullPrice, + o.MasterId, + m.MasterName AS MasterName, + od.DetailId, + od.DetailCount, + d.namedetail AS DetailName + FROM ""Order"" o + LEFT JOIN OrderDetail od ON o.Id = od.OrderId + LEFT JOIN Detail d ON d.Id = od.DetailId + LEFT JOIN Master m ON m.Id = o.MasterId + {builder.Build()} + ORDER BY o.DateIssue"; + + var orderDict = new Dictionary(); + + connection.Query(querySelect, + (order, orderDetail) => + { + if (!orderDict.TryGetValue(order.Id, out var existingOrder)) + { + existingOrder = order; + existingOrder.OrderDetails = new List(); + orderDict.Add(existingOrder.Id, existingOrder); + } + + if (orderDetail != null) + { + ((List)existingOrder.OrderDetails).Add(orderDetail); + } + + return existingOrder; + }, + splitOn: "DetailId", + param: new { dateForm, dateTo, masterId }); + + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(orderDict.Values)); + + return orderDict.Values.ToList(); } catch (Exception ex) { @@ -142,4 +188,4 @@ WHERE (@MasterId IS NULL OR o.MasterId = @MasterId)"; } - + diff --git a/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/QueryBuilder.cs b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/QueryBuilder.cs new file mode 100644 index 0000000..53419f0 --- /dev/null +++ b/ProjectRepairCompany/ProjectRepairCompany/Repositories/Implementations/QueryBuilder.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectRepairCompany.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}"; + } +} -- 2.25.1 From ea5578c18a56c7d043645a052a1c81eaf17a745c Mon Sep 17 00:00:00 2001 From: MorozovDanil Date: Tue, 24 Dec 2024 09:04:42 +0400 Subject: [PATCH 4/4] =?UTF-8?q?=D0=B6=D0=B8=D1=80=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=B8=D1=82=D0=BE=D0=B3=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectRepairCompany/Reports/ExcelBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ProjectRepairCompany/ProjectRepairCompany/Reports/ExcelBuilder.cs b/ProjectRepairCompany/ProjectRepairCompany/Reports/ExcelBuilder.cs index 6209df3..969f8eb 100644 --- a/ProjectRepairCompany/ProjectRepairCompany/Reports/ExcelBuilder.cs +++ b/ProjectRepairCompany/ProjectRepairCompany/Reports/ExcelBuilder.cs @@ -97,7 +97,7 @@ internal class ExcelBuilder for (var j = 0; j < data.Last().Length; ++j) { CreateCell(j, _rowIndex, data.Last()[j], - StyleIndex.SimpleTextWithBorder); + StyleIndex.BoldTextWithBorder); } _rowIndex++; return this; -- 2.25.1