using PolyclinicBusinessLogic.OfficePackage.AbstractImplementerReports; using PolyclinicBusinessLogic.OfficePackage.HelperModels; using PolyclinicBusinessLogic.OfficePackage.HelperModels.Excel; using PolyclinicBusinessLogic.OfficePackage.HelperModels.PDF; using PolyclinicBusinessLogic.OfficePackage.HelperModels.Word; using PolyclinicContracts.BindingModels; using PolyclinicContracts.BusinessLogicsContracts; using PolyclinicContracts.SearchModels; using PolyclinicContracts.StoragesContracts; using PolyclinicContracts.ViewModels; using PolyclinicDataModels.Models; namespace PolyclinicBusinessLogic.BusinessLogics { public class ImplementerReportLogic : IImplementerReportLogic { private readonly IDiagnoseStorage _diagnoseStorage; private readonly IMedicamentStorage _medicamentStorage; private readonly ICourseStorage _courseStorage; private readonly ISymptomStorage _symptomStorage; private readonly AbstractReportMedicamentsByDiagnosesSaveToExcel _saveToExcel; private readonly AbstractReportMedicamentsByDiagnosesSaveToWord _saveToWord; private readonly AbstractReportDiagnosesByPeriodSaveToPdf _saveToPdf; public ImplementerReportLogic( IDiagnoseStorage diagnoseStorage, IMedicamentStorage medicamentStorage, ICourseStorage courseStorage, ISymptomStorage symptomStorage, AbstractReportMedicamentsByDiagnosesSaveToWord saveToWord, AbstractReportDiagnosesByPeriodSaveToPdf saveToPdf, AbstractReportMedicamentsByDiagnosesSaveToExcel saveToExcel) { _diagnoseStorage = diagnoseStorage; _medicamentStorage = medicamentStorage; _courseStorage = courseStorage; _symptomStorage = symptomStorage; _saveToWord = saveToWord; _saveToPdf = saveToPdf; _saveToExcel = saveToExcel; } public ReportDiagnosesByPeriodViewModel GetReportDiagnosesByPeriod(DateTime? dateStart, DateTime? dateEnd) { var diagnoses = _diagnoseStorage.GetFilteredList(new DiagnoseSearchModel { From = dateStart, To = dateEnd }); var courses = _courseStorage.GetFullList(); var symptomes = _symptomStorage.GetFullList(); var report = new ReportDiagnosesByPeriodViewModel(); foreach (var diagnose in diagnoses) { var diagnoseCourses = courses.Where(x => x.CourseDiagnoses.ContainsKey(diagnose.Id)).ToList(); var diagnoseSymptomes = symptomes.Where(x => x.SymptomDiagnoses.ContainsKey(diagnose.Id)).ToList(); if (diagnoseCourses.Count > 0 && diagnoseSymptomes.Count > 0) { report.DiagnosesData.Add((diagnose, diagnoseSymptomes, diagnoseCourses)); } } report.DateStart = dateStart; report.DateEnd = dateEnd; return report; } public List GetReportMedicamentsByDiagnoses(int[] diagnosesIds) { List diagnoseViewModels = diagnosesIds.Select(x => _diagnoseStorage.GetElement(new DiagnoseSearchModel { Id = x })).ToList(); var symptomes = _symptomStorage.GetFullList(); var medicaments = _medicamentStorage.GetFullList(); List report = new(); foreach (var diagnose in diagnoseViewModels) { var diagnoseSymptomes = symptomes .Where(x => x.SymptomDiagnoses.ContainsKey(diagnose.Id)) .ToList(); var diagnoseMedicaments = new List(); foreach (var symptom in diagnoseSymptomes) { diagnoseMedicaments.AddRange(medicaments.Where(x => x.SymptomId == symptom.Id)); } report.Add(new ReportMedicamentsByDiagnoseViewModel { Diagnose = diagnose, Medicaments = diagnoseMedicaments.DistinctBy(x => x.Name).ToList() }); } return report; } public void SaveReportDiagnosesByPeriodToPdfFile(ReportBindingModel reportInfo, ReportDiagnosesByPeriodViewModel reportModel) { _saveToPdf.CreateDoc(new PdfDiagnosesByPeriodInfo { Title = "Отчет по болезням за период с расшифровкой по симптомам и курсам", DateFrom = reportModel.DateStart, DateTo = reportModel.DateEnd, FileName = reportInfo.FileName, Report = reportModel }); } public void SaveReportMedicamentsByDiagnosesToExcelFile(ReportBindingModel reportInfo, List reportModel) { _saveToExcel.CreateReport(new ReportMedicamentsByDiagnosesInfo { FileName = reportInfo.FileName, Title = "Лекарства по болезням", ReportModel = reportModel }); } public void SaveReportMedicamentsByDiagnosesToWordFile(ReportBindingModel reportInfo, List reportModel) { _saveToWord.CreateDoc(new ReportMedicamentsByDiagnosesInfo { FileName = reportInfo.FileName, Title = "Лекарства по болезням", ReportModel = reportModel }); } } }