using ElectronicsShopBusinessLogic.OfficePackage; using ElectronicsShopBusinessLogic.OfficePackage.HelperModels; using ElectronicsShopContracts.BindingModels; using ElectronicsShopContracts.BusinessLogicContracts; using ElectronicsShopContracts.SearchModels; using ElectronicsShopContracts.StorageContracts; using ElectronicsShopContracts.ViewModels; namespace ElectronicsShopBusinessLogic.BusinessLogic { public class ReportClientLogic : IReportClientLogic { private readonly IPaymeantStorage _paymeantstorage; private readonly IProductStorage _productstorage; private readonly IOrderStorage _orderStorage; private readonly AbstractSaveToExcelClient _saveToExcel; private readonly AbstractSaveToWordClient _saveToWord; public ReportClientLogic(AbstractSaveToExcelClient abstractSaveToExcelClient, AbstractSaveToWordClient abstractSaveToWordClient, IPaymeantStorage paymeantStorage, IProductStorage productStorage, IOrderStorage orderStorage) { _saveToExcel = abstractSaveToExcelClient; _saveToWord= abstractSaveToWordClient; _paymeantstorage = paymeantStorage; _productstorage = productStorage; _orderStorage = orderStorage; } // получение списка оплат за период public List GetPaymeants(ReportBindingModel model) { return _paymeantstorage.GetFillteredList(new PaymeantSearchModel { DateFrom = model.DateFrom, DateTo = model.DateTo }).Select(x => new ReportPaymeantsViewModel { ID = x.ID, DatePaymeant = x.DatePaymeant, OrderID = x.OrderID, ClientID = x.ClientID, SumPayment = x.SumPayment, PayOption = x.PayOption, }).ToList(); } // Получение списка товаров с указанием, в какие оплаты товар входит public List GetPaymeantProducts(int _clientID) { var products = _productstorage.GetFullList(); var paymeants = _paymeantstorage.GetFillteredList(new PaymeantSearchModel { ClientID = _clientID }); var list = new List(); foreach (var paymeant in paymeants) { var record = new ReportPaymeantProductsViewModel { PaymeantID = paymeant.ID, Products = new(), TotalCount = 0 }; var order = _orderStorage.GetElement(new OrderSearchModel { ID = paymeant.OrderID }); if (order == null) { continue; } foreach (var product in products) { if (order.ProductList.ContainsKey(product.ID)) { record.Products.Add(new(product.ProductName, order.ProductList[product.ID].Item2)); record.TotalCount += order.ProductList[product.ID].Item2; } } list.Add(record); } return list; } public void SavePaymeantToExcelFile(ReportBindingModel model, int _clientID) { _saveToExcel.CreateReport(new ExcelInfoClient { FileName = model.FileName, Title = "Список оплат", PaymeantProducts = GetPaymeantProducts(_clientID) }); } public void SavePaymeantToWordFile(ReportBindingModel model) { _saveToWord.CreateDoc(new WordInfoClient { //FileName = model.ProductName, Title = "Список оплат", ListPaymeant = _paymeantstorage.GetFullList(), }) ; } } }