CourseWorkElectronicsShop/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/ReportClientLogic.cs

132 lines
5.6 KiB
C#
Raw Normal View History

2024-07-09 19:40:24 +04:00
using DocumentFormat.OpenXml.Packaging;
using ElectronicsShopBusinessLogic.OfficePackage;
2024-06-01 02:22:36 +04:00
using ElectronicsShopBusinessLogic.OfficePackage.HelperModels;
using ElectronicsShopContracts.BindingModels;
using ElectronicsShopContracts.BusinessLogicContracts;
using ElectronicsShopContracts.SearchModels;
using ElectronicsShopContracts.StorageContracts;
using ElectronicsShopContracts.ViewModels;
2024-07-23 20:29:10 +04:00
using MigraDoc.DocumentObjectModel;
using PdfSharp.Pdf;
using System.Collections.Generic;
2024-06-01 02:22:36 +04:00
namespace ElectronicsShopBusinessLogic.BusinessLogic
{
public class ReportClientLogic : IReportClientLogic
{
private readonly IPaymeantStorage _paymeantstorage;
2024-07-02 17:28:23 +04:00
private readonly IProductStorage _productstorage;
private readonly IOrderStorage _orderStorage;
2024-07-23 20:29:10 +04:00
private readonly ICostItemStorage _costItemStorage;
2024-06-01 02:22:36 +04:00
private readonly AbstractSaveToExcelClient _saveToExcel;
private readonly AbstractSaveToWordClient _saveToWord;
2024-07-23 20:29:10 +04:00
private readonly AbstractSaveToPdfClient _saveToPdf;
2024-06-01 02:22:36 +04:00
2024-07-02 17:28:23 +04:00
public ReportClientLogic(AbstractSaveToExcelClient abstractSaveToExcelClient, AbstractSaveToWordClient abstractSaveToWordClient,
2024-07-23 20:29:10 +04:00
IPaymeantStorage paymeantStorage, IProductStorage productStorage, IOrderStorage orderStorage,
AbstractSaveToPdfClient abstractSaveToPdfClient, ICostItemStorage costItemStorage) {
2024-06-01 02:22:36 +04:00
_saveToExcel = abstractSaveToExcelClient;
_saveToWord= abstractSaveToWordClient;
2024-06-01 05:27:52 +04:00
_paymeantstorage = paymeantStorage;
2024-07-02 17:28:23 +04:00
_productstorage = productStorage;
_orderStorage = orderStorage;
2024-07-23 20:29:10 +04:00
_costItemStorage = costItemStorage;
_saveToPdf = abstractSaveToPdfClient;
}
// Получение списка оплаченных товаров за период
public List<ReportProductsViewModel>? GetProducts (ReportBindingModel model) {
var paymeants = _paymeantstorage.GetFillteredList(new PaymeantSearchModel {
DateFrom = model.DateFrom,
DateTo = model.DateTo,
});
List<ReportProductsViewModel>? products = new();
foreach (var paymeant in paymeants) {
2024-07-24 13:02:15 +04:00
foreach (var product in paymeant.PayProductList) {
2024-07-23 20:29:10 +04:00
products.Add(new ReportProductsViewModel {
ID = product.Value.Item1.ID,
ProductName = product.Value.Item1.ProductName,
Price = product.Value.Item1.Price,
2024-07-24 13:02:15 +04:00
CostItemName = _costItemStorage.GetElement(new CostItemSearchModel { ID = product.Value.Item1.CostItemID })?.Name
2024-07-24 09:53:21 +04:00
?? "Отсутствует"
2024-07-23 20:29:10 +04:00
});
}
}
return products;
2024-06-01 02:22:36 +04:00
}
2024-07-02 17:28:23 +04:00
// получение списка оплат за период
2024-07-23 20:29:10 +04:00
public List<ReportPaymeantsViewModel>? GetPaymeants(ReportBindingModel model)
2024-06-01 02:22:36 +04:00
{
2024-06-06 17:21:39 +04:00
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();
2024-06-01 02:22:36 +04:00
}
2024-07-02 17:28:23 +04:00
// Получение списка товаров с указанием, в какие оплаты товар входит
public List<ReportPaymeantProductsViewModel> GetPaymeantProducts(int _clientID) {
var products = _productstorage.GetFullList();
var paymeants = _paymeantstorage.GetFillteredList(new PaymeantSearchModel { ClientID = _clientID });
var list = new List<ReportPaymeantProductsViewModel>();
foreach (var paymeant in paymeants) {
var record = new ReportPaymeantProductsViewModel {
PaymeantID = paymeant.ID,
Products = new(),
TotalCount = 0
};
2024-07-24 13:02:15 +04:00
foreach (var product in paymeant.PayProductList) {
record.Products.Add(new(product.Value.Item1.ProductName, product.Value.Item2));
record.TotalCount += product.Value.Item2;
2024-07-02 17:28:23 +04:00
}
list.Add(record);
}
return list;
}
2024-07-23 20:29:10 +04:00
public byte[]? SavePaymeantToExcelFile(int _clientID)
2024-06-01 02:22:36 +04:00
{
2024-07-09 19:40:24 +04:00
var document = _saveToExcel.CreateReport(new ExcelInfoClient
2024-06-01 02:22:36 +04:00
{
Title = "Список оплат",
2024-07-02 17:28:23 +04:00
PaymeantProducts = GetPaymeantProducts(_clientID)
});
2024-07-09 19:40:24 +04:00
return document;
2024-06-01 02:22:36 +04:00
}
2024-07-23 20:29:10 +04:00
public byte[]? SavePaymeantToWordFile(int _clientID)
2024-06-01 02:22:36 +04:00
{
2024-07-10 18:32:46 +04:00
var document = _saveToWord.CreateDoc(new WordInfoClient {
2024-07-23 20:29:10 +04:00
Title = "Список оплат и товаров",
2024-07-10 18:32:46 +04:00
ListPaymeant = _paymeantstorage.GetFillteredList(new PaymeantSearchModel { ClientID = _clientID }),
});
return document;
2024-06-01 02:22:36 +04:00
}
2024-07-23 20:29:10 +04:00
public PdfDocument SaveProductToPdfFile(ReportBindingModel model) {
var document = _saveToPdf.CreteDoc(new PdfInfoClient {
Title = "Список оплаченных товаров",
FileName = "Report",
DateFrom = model.DateFrom,
DateTo = model.DateTo,
Products = GetProducts(model)
});
return document;
}
2024-07-02 17:28:23 +04:00
}
2024-07-09 19:40:24 +04:00
}