diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/ReportLogic.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/ReportLogic.cs
new file mode 100644
index 0000000..c3b0950
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/ReportLogic.cs
@@ -0,0 +1,129 @@
+using FurnitureAssemblyBusinessLogic.OfficePackage;
+using FurnitureAssemblyBusinessLogic.OfficePackage.HelperModels;
+using FurnitureAssemblyContracts.BindingModels;
+using FurnitureAssemblyContracts.BusinessLogicsContarcts;
+using FurnitureAssemblyContracts.SearchModels;
+using FurnitureAssemblyContracts.StoragesContracts;
+using FurnitureAssemblyContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyBusinessLogic
+{
+ public class ReportLogic : IReportLogic
+ {
+ private readonly IComponentStorage _componentStorage;
+ private readonly IFurnitureStorage _productStorage;
+ private readonly IOrderStorage _orderStorage;
+ private readonly AbstractSaveToExcel _saveToExcel;
+ private readonly AbstractSaveToWord _saveToWord;
+ private readonly AbstractSaveToPdf _saveToPdf;
+ public ReportLogic(IFurnitureStorage 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 GetFurnitureComponent()
+ {
+ var components = _componentStorage.GetFullList();
+ var products = _productStorage.GetFullList();
+ var list = new List();
+ foreach (var component in components)
+ {
+ var record = new ReportFurnitureComponentViewModel
+ {
+ ComponentName = component.ComponentName,
+ Furnitures = new List>(),
+ TotalCount = 0
+ };
+ foreach (var product in products)
+ {
+ if (product.FurnitureComponents.ContainsKey(component.Id))
+ {
+ record.Furnitures.Add(new Tuple(product.FurnitureName, product.FurnitureComponents[component.Id].Item2));
+ record.TotalCount += product.FurnitureComponents[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,
+ FurnitureName = x.FurnitureName,
+ Sum = x.Sum
+ })
+ .ToList();
+ }
+ ///
+ /// Сохранение компонент в файл-Word
+ ///
+ ///
+ public void SaveComponentsToWordFile(ReportBindingModel model)
+ {
+ _saveToWord.CreateDoc(new WordInfo
+ {
+ FileName = model.FileName,
+ Title = "Список компонент",
+ Components = _componentStorage.GetFullList()
+ });
+ }
+ ///
+ /// Сохранение компонент с указаеним продуктов в файл-Excel
+ ///
+ ///
+ public void SaveFurnitureComponentToExcelFile(ReportBindingModel model)
+ {
+ _saveToExcel.CreateReport(new ExcelInfo
+ {
+ FileName = model.FileName,
+ Title = "Список компонент",
+ FurnitureComponents = GetFurnitureComponent()
+ });
+ }
+ ///
+ /// Сохранение заказов в файл-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)
+ });
+ }
+ }
+}