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