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; } } }