using Contracts.BusinessLogicsContracts; using Contracts.ViewModels; using Contracts.BindingModels; using Contracts.StoragesContracts; using Contracts.SearchModels; using BusinessLogic.OfficePackage; using BusinessLogic.MailWorker; using Org.BouncyCastle.Bcpg; namespace ImplementerApp { public class ImplementerData { private readonly ILogger _logger; private readonly IImplementerLogic _implementerLogic; private readonly IDetailLogic _detailLogic; private readonly IProductionLogic _productionLogic; private readonly IProductLogic _productLogic; private readonly IMachineLogic _machineLogic; private readonly IWorkshopLogic _workshopLogic; private readonly IImplementerReportLogic _reportLogic; private readonly AbstractSaveToExcelImplementer _excel; private readonly AbstractSaveToWordImplementer _word; private readonly AbstractSaveToPdfImplementer _pdf; private readonly AbstractMailWorker _mail; public ImplementerData(ILogger logger, IImplementerLogic implementerLogic, IDetailLogic detailLogic, IProductionLogic productionLogic, IProductLogic productLogic, IMachineLogic machineLogic, IWorkshopLogic workshopLogic, IImplementerReportLogic reportLogic, AbstractSaveToExcelImplementer excel, AbstractSaveToWordImplementer word, AbstractMailWorker mail, AbstractSaveToPdfImplementer pdf) { _logger = logger; _implementerLogic = implementerLogic; _detailLogic = detailLogic; _productionLogic = productionLogic; _productLogic = productLogic; _machineLogic = machineLogic; _workshopLogic = workshopLogic; _reportLogic = reportLogic; _excel = excel; _word = word; _mail = mail; _pdf = pdf; } public ImplementerViewModel? Login(string login, string password) { return _implementerLogic.ReadElement(new() { Login = login, Password = password }); } public bool Register(ImplementerBindingModel model) { return _implementerLogic.Create(model); } public bool UpdateUser(ImplementerBindingModel model) { return _implementerLogic.Update(model); } public bool CheckLogin(string login) { return _implementerLogic.ReadElement(new() { Login = login }) == null; } public List? GetDetails(int userId) { return _detailLogic.ReadList(new DetailSearchModel() { UserId = userId }); } public bool DeleteDetail(int detailId) { return _detailLogic.Delete(new() { Id = detailId }); } public bool CreateDetail(DetailBindingModel model) { return _detailLogic.Create(model); } public bool UpdateDetail(DetailBindingModel model) { return _detailLogic.Update(model); } public DetailViewModel? GetDetail(int id) { return _detailLogic.ReadElement(new() { Id= id }); } public bool CheckDetailName(string name) { return _detailLogic.ReadElement(new() { Name = name }) == null; } public List? GetProducts(int userId) { return _productLogic.ReadList(new ProductSearchModel() { UserId = userId }); } public ProductViewModel? GetProduct(int id) { return _productLogic.ReadElement(new() { Id = id }); } public bool UpdateProduct(ProductBindingModel model) { return _productLogic.Update(model); } public bool DeleteProduct(int productId) { return _productLogic.Delete(new() { Id = productId }); } public bool CreateProduct(ProductBindingModel model) { return _productLogic.Create(model); } public bool CheckProductName(string name) { return _productLogic.ReadElement(new() { Name = name }) == null; } public List? GetProductions(int userId) { return _productionLogic.ReadList(new() { UserId = userId }); } public ProductionViewModel? GetProduction(int id) { return _productionLogic.ReadElement(new() { Id = id }); } public bool CreateProduction(ProductionBindingModel model) { return _productionLogic.Create(model); } public bool UpdateProduction(ProductionBindingModel model) { return _productionLogic.Update(model); } public bool DeleteProduction(int productionId) { return _productionLogic.Delete(new() { Id = productionId}); } public bool CheckProductionName(string name) { return _productionLogic.ReadElement(new() { Name = name }) == null; } public List? GetMachines() { return _machineLogic.ReadList(null); } public List? GetTimeReport(DateTime? startDate, DateTime? endDate, int UserId) { return _reportLogic.GetDetailTimeReport(startDate!.Value, endDate!.Value, UserId); } public List? GetWorkshopReports(List details) { return _reportLogic.GetDetailWorkshopReport(details); } public void SaveReportExcel(List details, MemoryStream stream) { var reports = GetWorkshopReports(details); if (reports == null) return; int maxsize = 0; foreach (var report in reports) { maxsize = Math.Max(maxsize, report.WorkShops.Count); } _excel.CreateReport(new() { detailWorkshops = reports, Title = "Отчет Деталь - цех", memoryStream = stream, maxleng = maxsize }); } public void SaveReportWord(List details, MemoryStream stream) { var reports = GetWorkshopReports(details); if (reports == null) return; _word.CreateDoc(new() { memoryStream = stream, Title = "Отчет Деталь - цех", Workshops = reports }); } public void SendMailReport(DateTime? startDate, DateTime? endDate, int UserId, MemoryStream stream) { var reports = GetTimeReport(startDate, endDate, UserId); if (reports == null) return; _pdf.CreateDoc(new() { DateFrom = startDate!.Value, DateTo = endDate!.Value, FileName = stream, Reports = reports, Title = "Отчет" }); byte[] report = stream.GetBuffer(); _mail.MailSendAsync(new() { MailAddress = UserImplementer.user!.Email, Subject = "Отчет", FileName = "PdfReport.pdf", Pdf = report}); } public List? GetProductChart(int UserId) { return _reportLogic.GetDetailProductChart(UserId); } public List? GetProductionChart(int UserId) { return _reportLogic.GetDetailProductionChart(UserId); } } }