From 2f7dac91e4ac1e69deb8604d1a9830b650499e0c Mon Sep 17 00:00:00 2001 From: Safgerd Date: Sun, 9 Apr 2023 03:37:55 +0400 Subject: [PATCH] Contractor: Reports --- .../EmployeeReportByDateLogic.cs | 8 +- .../BusinessLogic/ReportOrderLogic.cs | 125 ++++++++++++++++++ ...dingModel.cs => ReportDateBindingModel.cs} | 2 +- .../BindingModels/ReportOrderBindingModel.cs | 15 +++ .../IEmployeeReportByDateLogic.cs | 8 +- .../IReportOrderLogic.cs | 19 +++ .../ViewModels/ReportOrderByDateViewModel.cs | 13 ++ .../ViewModels/ReportOrderViewModel.cs | 13 ++ 8 files changed, 194 insertions(+), 9 deletions(-) create mode 100644 ComputerStoreBusinessLogic/BusinessLogic/ReportOrderLogic.cs rename ComputerStoreContracts/BindingModels/{ReportBindingModel.cs => ReportDateBindingModel.cs} (89%) create mode 100644 ComputerStoreContracts/BindingModels/ReportOrderBindingModel.cs create mode 100644 ComputerStoreContracts/BusinessLogicContracts/IReportOrderLogic.cs create mode 100644 ComputerStoreContracts/ViewModels/ReportOrderByDateViewModel.cs create mode 100644 ComputerStoreContracts/ViewModels/ReportOrderViewModel.cs diff --git a/ComputerStoreBusinessLogic/BusinessLogic/EmployeeReportByDateLogic.cs b/ComputerStoreBusinessLogic/BusinessLogic/EmployeeReportByDateLogic.cs index 88339bc..ee2c3c0 100644 --- a/ComputerStoreBusinessLogic/BusinessLogic/EmployeeReportByDateLogic.cs +++ b/ComputerStoreBusinessLogic/BusinessLogic/EmployeeReportByDateLogic.cs @@ -23,7 +23,7 @@ namespace ComputerStoreBusinessLogic.BusinessLogic _productStorage = productStorage; } - public List GetPCs(ReportBindingModel model) + public List GetPCs(ReportDateBindingModel model) { return _pcStorage.GetFilteredList(new PCSearchModel { @@ -38,7 +38,7 @@ namespace ComputerStoreBusinessLogic.BusinessLogic }).ToList(); } - public List GetProducts(ReportBindingModel model) + public List GetProducts(ReportDateBindingModel model) { return _productStorage.GetFilteredList(new ProductSearchModel { @@ -54,12 +54,12 @@ namespace ComputerStoreBusinessLogic.BusinessLogic } - public void SaveProductsToPdfFile(ReportBindingModel model) + public void SaveProductsToPdfFile(ReportDateBindingModel model) { //will be implemented in the future! } - public void SavePCsToPdfFile(ReportBindingModel model) + public void SavePCsToPdfFile(ReportDateBindingModel model) { //will be implemented in the future! } diff --git a/ComputerStoreBusinessLogic/BusinessLogic/ReportOrderLogic.cs b/ComputerStoreBusinessLogic/BusinessLogic/ReportOrderLogic.cs new file mode 100644 index 0000000..cb149a0 --- /dev/null +++ b/ComputerStoreBusinessLogic/BusinessLogic/ReportOrderLogic.cs @@ -0,0 +1,125 @@ +using ComputerStoreContracts.BindingModels; +using ComputerStoreContracts.BusinessLogicContracts; +using ComputerStoreContracts.SearchModels; +using ComputerStoreContracts.StorageContracts; +using ComputerStoreContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ComputerStoreBusinessLogic.BusinessLogic +{ + public class ReportOrderLogic : IReportOrderLogic + { + private readonly IOrderStorage _orderStorage; + private readonly IConsignmentStorage _consignmentStorage; + private readonly IRequestStorage _requestStorage; + private readonly IPCStorage _pcStorage; + + public ReportOrderLogic( + IOrderStorage orderStorage, + IConsignmentStorage consignmentStorage, + IRequestStorage requestStorage, + IPCStorage pcStorage) + { + _orderStorage = orderStorage; + _consignmentStorage = consignmentStorage; + _requestStorage = requestStorage; + _pcStorage = pcStorage; + } + + public ReportOrderViewModel GetPCsByOrders(ReportOrderBindingModel model) + { + var report = new ReportOrderViewModel(); + List orders = new List(); + + foreach (var orderSearch in model.Orders) + { + var element = _orderStorage.GetElement(orderSearch); + if (element == null) + { + throw new Exception("Selected order is not find."); + } + orders.Add(element); + } + + foreach (var order in orders) + { + if (order.OrderRequests == null) { continue; } + report.OrderPCs.Add(order.ID, (new(), new())); + + foreach (var requestRaw in order.OrderRequests) + { + var request = _requestStorage.GetElement(new RequestSearchModel { ID = requestRaw.ID }); + if (request == null) { throw new Exception("Request for report is not find."); } + + var pc = _pcStorage.GetElement(new PCSearchModel { ID = request.PCID }); + if (pc == null) { throw new Exception("PC for report is not find."); } + + report.OrderPCs[order.ID].Item1.Add(request); + report.OrderPCs[order.ID].Item2.Add(pc); + } + } + return report; + } + + public ReportOrderByDateViewModel GetOrdersByDate(ReportDateBindingModel model) + { + var report = new ReportOrderByDateViewModel(); + var orders = _orderStorage.GetFullList(); + foreach (var order in orders) + { + if (order.OrderConsignments == null && order.OrderRequests == null) { continue; } + + if (order.DateCreate >= model.DateFrom && order.DateCreate <= model.DateTo) + { + report.OrderConsignmentsAndRequests.Add(order.ID, (new(), new())); + + if (order.OrderConsignments != null) + { + foreach (var consignmentRaw in order.OrderConsignments) + { + var consignment = _consignmentStorage.GetElement(new ConsignmentSearchModel { ID = consignmentRaw.ID }); + if (consignment == null) + { + throw new Exception("Consignment for create report is not found"); + } + report.OrderConsignmentsAndRequests[order.ID].Item1.Add(consignment); + } + } + + if (order.OrderRequests != null) + { + foreach (var requestRaw in order.OrderRequests) + { + var request = _requestStorage.GetElement(new RequestSearchModel { ID = requestRaw.ID }); + if (request == null) + { + throw new Exception("Request for create report is not found"); + } + report.OrderConsignmentsAndRequests[order.ID].Item2.Add(request); + } + } + } + } + return report; + } + + public void SaveOrdersToExcelFile(ReportOrderBindingModel model) + { + throw new NotImplementedException(); + } + + public void SaveOrdersToPdfFile(ReportDateBindingModel model) + { + throw new NotImplementedException(); + } + + public void SaveOrdersToWordFile(ReportOrderBindingModel model) + { + throw new NotImplementedException(); + } + } +} diff --git a/ComputerStoreContracts/BindingModels/ReportBindingModel.cs b/ComputerStoreContracts/BindingModels/ReportDateBindingModel.cs similarity index 89% rename from ComputerStoreContracts/BindingModels/ReportBindingModel.cs rename to ComputerStoreContracts/BindingModels/ReportDateBindingModel.cs index 3b099b0..50d4b40 100644 --- a/ComputerStoreContracts/BindingModels/ReportBindingModel.cs +++ b/ComputerStoreContracts/BindingModels/ReportDateBindingModel.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace ComputerStoreContracts.BindingModels { - public class ReportBindingModel + public class ReportDateBindingModel { public string FileName { get; set; } = string.Empty; public DateTime? DateFrom { get; set; } diff --git a/ComputerStoreContracts/BindingModels/ReportOrderBindingModel.cs b/ComputerStoreContracts/BindingModels/ReportOrderBindingModel.cs new file mode 100644 index 0000000..f3a89af --- /dev/null +++ b/ComputerStoreContracts/BindingModels/ReportOrderBindingModel.cs @@ -0,0 +1,15 @@ +using ComputerStoreContracts.SearchModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ComputerStoreContracts.BindingModels +{ + public class ReportOrderBindingModel + { + public string FileName { get; set; } = string.Empty; + public List Orders { get; set; } = new(); + } +} diff --git a/ComputerStoreContracts/BusinessLogicContracts/IEmployeeReportByDateLogic.cs b/ComputerStoreContracts/BusinessLogicContracts/IEmployeeReportByDateLogic.cs index 70a1288..2bab877 100644 --- a/ComputerStoreContracts/BusinessLogicContracts/IEmployeeReportByDateLogic.cs +++ b/ComputerStoreContracts/BusinessLogicContracts/IEmployeeReportByDateLogic.cs @@ -10,10 +10,10 @@ namespace ComputerStoreContracts.BusinessLogicContracts { public interface IEmployeeReportByDateLogic { - List GetProducts(ReportBindingModel model); - List GetPCs(ReportBindingModel model); + List GetProducts(ReportDateBindingModel model); + List GetPCs(ReportDateBindingModel model); - void SaveProductsToPdfFile(ReportBindingModel model); - void SavePCsToPdfFile(ReportBindingModel model); + void SaveProductsToPdfFile(ReportDateBindingModel model); + void SavePCsToPdfFile(ReportDateBindingModel model); } } diff --git a/ComputerStoreContracts/BusinessLogicContracts/IReportOrderLogic.cs b/ComputerStoreContracts/BusinessLogicContracts/IReportOrderLogic.cs new file mode 100644 index 0000000..3e515a4 --- /dev/null +++ b/ComputerStoreContracts/BusinessLogicContracts/IReportOrderLogic.cs @@ -0,0 +1,19 @@ +using ComputerStoreContracts.BindingModels; +using ComputerStoreContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ComputerStoreContracts.BusinessLogicContracts +{ + public interface IReportOrderLogic + { + ReportOrderViewModel GetPCsByOrders(ReportOrderBindingModel model); + ReportOrderByDateViewModel GetOrdersByDate(ReportDateBindingModel model); + void SaveOrdersToWordFile(ReportOrderBindingModel model); + void SaveOrdersToExcelFile(ReportOrderBindingModel model); + void SaveOrdersToPdfFile(ReportDateBindingModel model); + } +} diff --git a/ComputerStoreContracts/ViewModels/ReportOrderByDateViewModel.cs b/ComputerStoreContracts/ViewModels/ReportOrderByDateViewModel.cs new file mode 100644 index 0000000..b33b181 --- /dev/null +++ b/ComputerStoreContracts/ViewModels/ReportOrderByDateViewModel.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ComputerStoreContracts.ViewModels +{ + public class ReportOrderByDateViewModel + { + public Dictionary, List)> OrderConsignmentsAndRequests { get; set; } = new(); + } +} diff --git a/ComputerStoreContracts/ViewModels/ReportOrderViewModel.cs b/ComputerStoreContracts/ViewModels/ReportOrderViewModel.cs new file mode 100644 index 0000000..5116aa2 --- /dev/null +++ b/ComputerStoreContracts/ViewModels/ReportOrderViewModel.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ComputerStoreContracts.ViewModels +{ + public class ReportOrderViewModel + { + public Dictionary, List)> OrderPCs { get; set; } = new(); + } +}