From 9151fe816c8389be7b87f3c7be90674556c2e241 Mon Sep 17 00:00:00 2001 From: malimova Date: Fri, 12 Apr 2024 00:00:13 +0400 Subject: [PATCH] ordersearchmodel, reportlogic --- .../ConfectioneryBusinessLogic/ReportLogic.cs | 126 ++++++++++++++++++ .../SearchModels/OrderSearchModel.cs | 2 + 2 files changed, 128 insertions(+) create mode 100644 Confectionery/ConfectioneryBusinessLogic/ReportLogic.cs diff --git a/Confectionery/ConfectioneryBusinessLogic/ReportLogic.cs b/Confectionery/ConfectioneryBusinessLogic/ReportLogic.cs new file mode 100644 index 0000000..a818b48 --- /dev/null +++ b/Confectionery/ConfectioneryBusinessLogic/ReportLogic.cs @@ -0,0 +1,126 @@ +using ConfectioneryBusinessLogic.OfficePackage; +using ConfectioneryBusinessLogic.OfficePackage.HelperModels; +using ConfectioneryContracts.BindingModels; +using ConfectioneryContracts.BusinessLogicsContracts; +using ConfectioneryContracts.SearchModels; +using ConfectioneryContracts.StoragesContracts; +using ConfectioneryContracts.ViewModels; + +namespace ConfectioneryBusinessLogic +{ + internal class ReportLogic : IReportLogic + { + private readonly IComponentStorage _componentStorage; + private readonly IPastryStorage _productStorage; + private readonly IOrderStorage _orderStorage; + private readonly AbstractSaveToExcel _saveToExcel; + private readonly AbstractSaveToWord _saveToWord; + private readonly AbstractSaveToPdf _saveToPdf; + public ReportLogic(IPastryStorage productStorage, IComponentStorage + componentStorage, IOrderStorage orderStorage, + AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, + AbstractSaveToPdf saveToPdf) + { + _productStorage = productStorage; + _componentStorage = componentStorage; + _orderStorage = orderStorage; + _saveToExcel = saveToExcel; + _saveToWord = saveToWord; + _saveToPdf = saveToPdf; + } + /// + /// Получение списка компонент с указанием, в каких изделиях используются + /// + /// + public List GetPastryComponent() + { + var components = _componentStorage.GetFullList(); + var products = _productStorage.GetFullList(); + var list = new List(); + foreach (var component in components) + { + var record = new ReportPastryComponentViewModel + { + ComponentName = component.ComponentName, + Pastrys = new List>(), + TotalCount = 0 + }; + foreach (var product in products) + { + if (product.PastryComponents.ContainsKey(component.Id)) + { + record.Pastrys.Add(new Tuple(product.PastryName, product.PastryComponents[component.Id].Item2)); + record.TotalCount += + product.PastryComponents[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, + PastryName = x.PastryName, + Sum = x.Sum + }) + .ToList(); + } + /// + /// Сохранение компонент в файл-Word + /// + /// + public void SaveComponentsToWordFile(ReportBindingModel model) + { + _saveToWord.CreateDoc(new WordInfo + { + FileName = model.FileName, + Title = "Список компонент", + Components = _componentStorage.GetFullList() + }); + } + /// + /// Сохранение компонент с указаеним продуктов в файл-Excel + /// + /// + public void SavePastryComponentToExcelFile(ReportBindingModel model) + { + _saveToExcel.CreateReport(new ExcelInfo + { + FileName = model.FileName, + Title = "Список компонент", + PastryComponents = GetPastryComponent() + }); + } + /// + /// Сохранение заказов в файл-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/Confectionery/ConfectioneryContracts/SearchModels/OrderSearchModel.cs b/Confectionery/ConfectioneryContracts/SearchModels/OrderSearchModel.cs index 9393fab..9c4821b 100644 --- a/Confectionery/ConfectioneryContracts/SearchModels/OrderSearchModel.cs +++ b/Confectionery/ConfectioneryContracts/SearchModels/OrderSearchModel.cs @@ -9,5 +9,7 @@ namespace ConfectioneryContracts.SearchModels public class OrderSearchModel { public int? Id { get; set; } + public DateTime? DateFrom { get; set; } + public DateTime? DateTo { get; set; } } }