CourseWork_CompShop/ComputerShopProvider/ComputerShopBusinessLogic/BusinessLogics/ReportLogic.cs

182 lines
6.5 KiB
C#
Raw Permalink Normal View History

2023-05-18 22:18:40 +04:00
using ComputerShopBusinessLogic.OfficePackage;
using ComputerShopBusinessLogic.OfficePackage.HelperModels;
using ComputerShopContracts.BindingModels;
2023-05-17 14:20:02 +04:00
using ComputerShopContracts.BusinessLogicContracts;
2023-05-18 22:18:40 +04:00
using ComputerShopContracts.StorageContracts;
2023-05-17 14:20:02 +04:00
using ComputerShopContracts.ViewModels;
2023-05-18 22:18:40 +04:00
using ComputerShopContracts.SearchModels;
2023-05-17 14:20:02 +04:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
2023-05-24 18:51:13 +04:00
using ComputerShopDataModels.Enums;
2023-05-17 14:20:02 +04:00
namespace ComputerShopBusinessLogic.BusinessLogics
{
2023-05-18 22:18:40 +04:00
public class ReportLogic : IReportLogic
{
private readonly IComponentStorage _componentStorage;
private readonly ISupplyStorage _supplyStorage;
private readonly IAssemblyStorage _assemblyStorage;
private readonly IEquipmentReceivingStorage _receivingStorage;
2023-05-24 21:14:10 +04:00
private readonly IPurchaseStorage _purchaseStorage;
2023-05-18 22:18:40 +04:00
private readonly AbstractSaveToExcel _saveToExcel;
private readonly AbstractSaveToWord _saveToWord;
private readonly AbstractSaveToPdf _saveToPdf;
2023-05-24 21:14:10 +04:00
public ReportLogic(IComponentStorage componentStorage, IAssemblyStorage assemblyStorage, IEquipmentReceivingStorage receivingStorage, ISupplyStorage supplyStorage, IPurchaseStorage purchaseStorage, AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf)
2023-05-18 22:18:40 +04:00
{
_componentStorage = componentStorage;
_assemblyStorage = assemblyStorage;
_receivingStorage = receivingStorage;
_supplyStorage = supplyStorage;
2023-05-24 21:14:10 +04:00
_purchaseStorage = purchaseStorage;
2023-05-18 22:18:40 +04:00
_saveToExcel = saveToExcel;
_saveToWord = saveToWord;
_saveToPdf = saveToPdf;
}
public List<ReportComponentReceivingViewModel> GetComponentReceivings(List<int> ids)
{
var result = new List<ReportComponentReceivingViewModel>();
2023-05-24 18:51:13 +04:00
var supplies1 = _supplyStorage.GetFullList();
var recs = _receivingStorage.GetFullList();
2023-05-18 22:18:40 +04:00
foreach (int id in ids)
{
var component = _componentStorage.GetElement(new ComponentSearchModel()
{
Id = id,
});
2023-05-19 18:21:13 +04:00
var supplies = _supplyStorage.GetFilteredList(new()
{
ComponentId = id
});
var receivings = new List<EquipmentReceivingViewModel>();
2023-05-24 20:22:06 +04:00
foreach (var supply in supplies)
2023-05-19 18:21:13 +04:00
{
if (supply.ReceivingId.HasValue)
{
var receiving = _receivingStorage.GetElement(new() { Id = supply.ReceivingId.Value });
2023-05-24 18:51:13 +04:00
if (receiving != null && !receivings.Contains(receiving))
2023-05-19 18:21:13 +04:00
{
receivings.Add(receiving);
}
}
}
2023-05-19 18:21:13 +04:00
var receivingnames = new List<string>();
foreach (var receiving in receivings)
{
2023-05-24 18:51:13 +04:00
receivingnames.Add($"Id: {receiving.Id}. Status: {Enum.GetName(typeof(EquipmentReceivingStatus), receiving.Status)}.");
2023-05-19 18:21:13 +04:00
}
2023-05-24 20:22:06 +04:00
if (receivingnames.Count > 0 && component != null)
2023-05-19 18:21:13 +04:00
{
result.Add(new()
{
ComponentName = component.ComponentName,
Receivings = receivingnames
});
}
2023-05-18 22:18:40 +04:00
}
2023-05-24 20:22:06 +04:00
2023-05-18 22:18:40 +04:00
return result;
}
2023-05-24 21:14:10 +04:00
public List<ReportPurchaseSupplyViewModel> GetPurchaseSupply(ReportBindingModel model)
{
var result = new List<ReportPurchaseSupplyViewModel>();
var purchases = _purchaseStorage.GetFilteredList(new()
{
DateFrom = model.DateFrom,
DateTo = model.DateTo
});
foreach(var purchase in purchases)
{
var supplies = _supplyStorage.GetFilteredList(new()
{
ComponentId = purchase.ComponentId
});
foreach( var supply in supplies)
{
result.Add(new()
{
Purchase = purchase,
Supply = supply
});
}
}
return result;
}
2023-05-18 22:18:40 +04:00
public void SaveReceivingComponentsToWordFile(ReportBindingModel model)
{
2023-05-19 19:14:48 +04:00
if (model.Ids != null)
2023-05-24 20:22:06 +04:00
_saveToWord.CreateDoc(new WordInfoProvider
{
FileName = model.FileName,
Title = "Список получений по компонентам",
ComponentReceivings = GetComponentReceivings(model.Ids)
});
2023-05-18 22:18:40 +04:00
}
2023-05-24 19:38:01 +04:00
public void SaveReceivingComponentsToXmlFile(ReportBindingModel model)
2023-05-18 22:18:40 +04:00
{
2023-05-24 19:38:01 +04:00
if (model.Ids != null)
_saveToExcel.CreateReport(new ExcelInfoProvider
{
FileName = model.FileName,
Title = "Список получений по компонентам",
ComponentReceivings = GetComponentReceivings(model.Ids)
});
2023-05-18 22:18:40 +04:00
}
2023-05-24 20:22:06 +04:00
public void SavePurchaseSuppliesToPdfFile(ReportBindingModel model)
{
if (model.DateFrom == null)
{
throw new ArgumentException("Дата начала не задана");
}
if (model.DateTo == null)
{
throw new ArgumentException("Дата окончания не задана");
}
2023-05-24 21:14:10 +04:00
_saveToPdf.CreateDoc(new PdfInfoProvider
{
FileName = model.FileName,
Title = "Связанные закупки и поставки",
SupplyPurchases = GetPurchaseSupply(model),
DateFrom = model.DateFrom,
DateTo = model.DateTo
});
2023-05-24 20:22:06 +04:00
}
2023-05-18 22:18:40 +04:00
public List<ReportPurchaseReceivingViewModel> GetPurchaseReceiving()
{
throw new NotImplementedException();
}
public void SaveOrdersToPdfFile(ReportBindingModel model)
{
throw new NotImplementedException();
}
public void SavePackagesToWordFile(ReportBindingModel model)
{
throw new NotImplementedException();
}
public void SaveProductComponentToExcelFile(ReportBindingModel model)
{
throw new NotImplementedException();
}
}
2023-05-17 14:20:02 +04:00
}