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