From adf0fa582c65cd8dc0f9a74cafaa44bb476370cb Mon Sep 17 00:00:00 2001 From: "ns.potapov" Date: Sun, 24 Mar 2024 16:20:22 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BE=D1=82=D1=87=D0=B5=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/ReportLogic.cs | 120 ++++++++++++++++++ .../BusinessLogicsContracts/IReportLogic.cs | 4 +- .../SearchModels/OrderSearchModel.cs | 2 + 3 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 SecuritySystem/SecuritySystemBusinessLogic/BusinessLogics/ReportLogic.cs diff --git a/SecuritySystem/SecuritySystemBusinessLogic/BusinessLogics/ReportLogic.cs b/SecuritySystem/SecuritySystemBusinessLogic/BusinessLogics/ReportLogic.cs new file mode 100644 index 0000000..68b65ec --- /dev/null +++ b/SecuritySystem/SecuritySystemBusinessLogic/BusinessLogics/ReportLogic.cs @@ -0,0 +1,120 @@ +using SecuritySystemBusinessLogic.OfficePackage.HelperModels; +using SecuritySystemBusinessLogic.OfficePackage; +using SecuritySystemContracts.BindingModels; +using SecuritySystemContracts.BusinessLogicsContracts; +using SecuritySystemContracts.SearchModels; +using SecuritySystemContracts.StoragesContracts; +using SecuritySystemContracts.ViewModels; + +namespace SecuritySystemBusinessLogic.BusinessLogics +{ + public class ReportLogic : IReportLogic + { + private readonly IComponentStorage _componentStorage; + private readonly ISecureStorage _secureStorage; + private readonly IOrderStorage _orderStorage; + private readonly AbstractSaveToExcel _saveToExcel; + private readonly AbstractSaveToWord _saveToWord; + private readonly AbstractSaveToPdf _saveToPdf; + public ReportLogic(ISecureStorage secureStorage, IComponentStorage componentStorage, IOrderStorage orderStorage, AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf) + { + _secureStorage = secureStorage; + _componentStorage = componentStorage; + _orderStorage = orderStorage; + _saveToExcel = saveToExcel; + _saveToWord = saveToWord; + _saveToPdf = saveToPdf; + } + /// + /// Получение списка компонент с указанием, в каких изделиях используются + /// + /// + public List GetSecureComponent() + { + var components = _componentStorage.GetFullList(); + var secures = _secureStorage.GetFullList(); + var list = new List(); + foreach (var component in components) + { + var record = new ReportSecureComponentViewModel + { + ComponentName = component.ComponentName, + Secures = new List>(), + TotalCount = 0 + }; + foreach (var secure in secures) + { + if (secure.SecureComponents.ContainsKey(component.Id)) + { + record.Secures.Add(new Tuple(secure.SecureName, secure.SecureComponents[component.Id].Item2)); + record.TotalCount += secure.SecureComponents[component.Id].Item2; + } + } + list.Add(record); + } + return list; + } + /// + /// Получение списка заказов за определенный период + /// + /// + /// + public List GetOrders(ReportBindingModel model) + { + return _orderStorage.GetFilteredList(new OrderSearchModel + { + DateFrom = model.DateFrom, + DateTo = model.DateTo + }) + .Select(x => new ReportOrdersViewModel + { + Id = x.Id, + DateCreate = x.DateCreate, + SecureName = x.SecureName, + Sum = x.Sum + }) + .ToList(); + } + /// + /// Сохранение компонент в файл-Word + /// + /// + public void SaveComponentsToWordFile(ReportBindingModel model) + { + _saveToWord.CreateDoc(new WordInfo + { + FileName = model.FileName, + Title = "Список компонент", + Components = _componentStorage.GetFullList() + }); + } + /// + /// Сохранение компонент с указаеним продуктов в файл-Excel + /// + /// + public void SaveSecureComponentToExcelFile(ReportBindingModel model) + { + _saveToExcel.CreateReport(new ExcelInfo + { + FileName = model.FileName, + Title = "Список компонент", + SecureComponents = GetSecureComponent() + }); + } + /// + /// Сохранение заказов в файл-Pdf + /// + /// + public void SaveOrdersToPdfFile(ReportBindingModel model) + { + _saveToPdf.CreateDoc(new PdfInfo + { + FileName = model.FileName, + Title = "Список заказов", + DateFrom = model.DateFrom!.Value, + DateTo = model.DateTo!.Value, + Orders = GetOrders(model) + }); + } + } +} diff --git a/SecuritySystem/SecuritySystemContracts/BusinessLogicsContracts/IReportLogic.cs b/SecuritySystem/SecuritySystemContracts/BusinessLogicsContracts/IReportLogic.cs index 0338603..4413448 100644 --- a/SecuritySystem/SecuritySystemContracts/BusinessLogicsContracts/IReportLogic.cs +++ b/SecuritySystem/SecuritySystemContracts/BusinessLogicsContracts/IReportLogic.cs @@ -9,7 +9,7 @@ namespace SecuritySystemContracts.BusinessLogicsContracts /// Получение списка компонент с указанием, в каких изделиях используются /// /// - List GetProductComponent(); + List GetSecureComponent(); /// /// Получение списка заказов за определенный период /// @@ -25,7 +25,7 @@ namespace SecuritySystemContracts.BusinessLogicsContracts /// Сохранение компонент с указаеним продуктов в файл-Excel /// /// - void SaveProductComponentToExcelFile(ReportBindingModel model); + void SaveSecureComponentToExcelFile(ReportBindingModel model); /// /// Сохранение заказов в файл-Pdf /// diff --git a/SecuritySystem/SecuritySystemContracts/SearchModels/OrderSearchModel.cs b/SecuritySystem/SecuritySystemContracts/SearchModels/OrderSearchModel.cs index 500fb59..d9747e7 100644 --- a/SecuritySystem/SecuritySystemContracts/SearchModels/OrderSearchModel.cs +++ b/SecuritySystem/SecuritySystemContracts/SearchModels/OrderSearchModel.cs @@ -3,5 +3,7 @@ public class OrderSearchModel { public int? Id { get; set; } + public DateTime? DateFrom { get; set; } + public DateTime? DateTo { get; set; } } }