From c73e54da8ebe26763ca6641f1713a70133063cb5 Mon Sep 17 00:00:00 2001 From: "ns.potapov" Date: Thu, 2 May 2024 02:08:08 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BD=D0=B5=D0=BE=D0=B1=D1=85=D0=BE=D0=B4=D0=B8?= =?UTF-8?q?=D0=BC=D1=8B=D0=B5=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=82=D1=87=D0=B5=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=BE=D1=82=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8F,=20=D0=BE=D1=81=D1=82=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=D1=81=D1=8C=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D1=82=D1=8C=20=D0=B5=D1=89=D0=B5=20=D0=BE=D0=B4?= =?UTF-8?q?=D0=BD=D1=83=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8E=20?= =?UTF-8?q?=D0=B2=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B5=20=D0=BE=D1=82?= =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/ImplementerReportLogic.cs | 84 +++++++++++++++++++ .../IImplementerReportLogic.cs | 14 ++++ .../SearchModels/DiagnoseSearchModel.cs | 4 +- ...iagnoseWithCoursesAndSymptomesViewModel.cs | 13 +++ .../ReportMedicamentsByDiagnoseViewModel.cs | 12 +++ 5 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 Polyclinic/PolyclinicBusinessLogic/BusinessLogics/ImplementerReportLogic.cs create mode 100644 Polyclinic/PolyclinicContracts/BusinessLogicsContracts/IImplementerReportLogic.cs create mode 100644 Polyclinic/PolyclinicContracts/ViewModels/ReportDiagnoseWithCoursesAndSymptomesViewModel.cs create mode 100644 Polyclinic/PolyclinicContracts/ViewModels/ReportMedicamentsByDiagnoseViewModel.cs diff --git a/Polyclinic/PolyclinicBusinessLogic/BusinessLogics/ImplementerReportLogic.cs b/Polyclinic/PolyclinicBusinessLogic/BusinessLogics/ImplementerReportLogic.cs new file mode 100644 index 0000000..8f2c76c --- /dev/null +++ b/Polyclinic/PolyclinicBusinessLogic/BusinessLogics/ImplementerReportLogic.cs @@ -0,0 +1,84 @@ +using PolyclinicContracts.BindingModels; +using PolyclinicContracts.BusinessLogicsContracts; +using PolyclinicContracts.SearchModels; +using PolyclinicContracts.StoragesContracts; +using PolyclinicContracts.ViewModels; + +namespace PolyclinicBusinessLogic.BusinessLogics +{ + public class ImplementerReportLogic : IImplementerReportLogic + { + private readonly IDiagnoseStorage _diagnoseStorage; + private readonly IMedicamentStorage _medicamentStorage; + private readonly ICourseStorage _courseStorage; + private readonly ISymptomStorage _symptomStorage; + + public ImplementerReportLogic(IDiagnoseStorage diagnoseStorage, IMedicamentStorage medicamentStorage, ICourseStorage courseStorage, ISymptomStorage symptomStorage) + { + _diagnoseStorage = diagnoseStorage; + _medicamentStorage = medicamentStorage; + _courseStorage = courseStorage; + _symptomStorage = symptomStorage; + } + + public List GetDiagnoses() + { + throw new NotImplementedException(); + } + + public List GetMedicamentsByDiagnoses(ReportBindingModel model) + { + var diagnoses = _diagnoseStorage + .GetFilteredList(new DiagnoseSearchModel + { + From = model.DateFrom, + To = model.DateTo + }); + + var symptomes = _symptomStorage + .GetFullList(); + + var medicaments = _medicamentStorage.GetFullList(); + + List result = new(); + + foreach (var diagnose in diagnoses) + { + 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)); + } + diagnoseMedicaments.Distinct(); + var diagnoseReportModel = new ReportMedicamentsByDiagnoseViewModel { + DiagnoseId = diagnose.Id, + DiagnoseName = diagnose.Name, + DiagnoseComment = diagnose.Comment, + DiagnoseDateStart = diagnose.DateStartDiagnose, + DiagnoseDateStop = diagnose.DateStopDiagnose, + Medicaments = diagnoseMedicaments.Select(x => x.Name).ToList() + }; + result.Add(diagnoseReportModel); + } + return result; + } + + public void SaveOrdersToPdfFile(ReportBindingModel model) + { + throw new NotImplementedException(); + } + + public void SaveSecureComponentToExcelFile(ReportBindingModel model) + { + throw new NotImplementedException(); + } + + public void SaveSecuresToWordFile(ReportBindingModel model) + { + throw new NotImplementedException(); + } + } +} diff --git a/Polyclinic/PolyclinicContracts/BusinessLogicsContracts/IImplementerReportLogic.cs b/Polyclinic/PolyclinicContracts/BusinessLogicsContracts/IImplementerReportLogic.cs new file mode 100644 index 0000000..c046a8a --- /dev/null +++ b/Polyclinic/PolyclinicContracts/BusinessLogicsContracts/IImplementerReportLogic.cs @@ -0,0 +1,14 @@ +using PolyclinicContracts.BindingModels; +using PolyclinicContracts.ViewModels; + +namespace PolyclinicContracts.BusinessLogicsContracts +{ + public interface IImplementerReportLogic + { + List GetDiagnoses(); + List GetMedicamentsByDiagnoses(ReportBindingModel model); + void SaveSecuresToWordFile(ReportBindingModel model); + void SaveSecureComponentToExcelFile(ReportBindingModel model); + void SaveOrdersToPdfFile(ReportBindingModel model); + } +} diff --git a/Polyclinic/PolyclinicContracts/SearchModels/DiagnoseSearchModel.cs b/Polyclinic/PolyclinicContracts/SearchModels/DiagnoseSearchModel.cs index 1ccfb4c..7921c20 100644 --- a/Polyclinic/PolyclinicContracts/SearchModels/DiagnoseSearchModel.cs +++ b/Polyclinic/PolyclinicContracts/SearchModels/DiagnoseSearchModel.cs @@ -5,7 +5,7 @@ public int? Id { get; set; } public string? Name { get; set; } public int? UserId { get; set; } - public DateTime? From { get; } - public DateTime? To { get; } + public DateTime? From { get; set; } + public DateTime? To { get; set; } } } diff --git a/Polyclinic/PolyclinicContracts/ViewModels/ReportDiagnoseWithCoursesAndSymptomesViewModel.cs b/Polyclinic/PolyclinicContracts/ViewModels/ReportDiagnoseWithCoursesAndSymptomesViewModel.cs new file mode 100644 index 0000000..df52d06 --- /dev/null +++ b/Polyclinic/PolyclinicContracts/ViewModels/ReportDiagnoseWithCoursesAndSymptomesViewModel.cs @@ -0,0 +1,13 @@ +namespace PolyclinicContracts.ViewModels +{ + public class ReportDiagnoseWithCoursesAndSymptomesViewModel + { + public int DiagnoseId { get; set; } + public string DiagnoseName { get; set; } = string.Empty; + public string DiagnoseComment { get; set; } = string.Empty; + public DateTime DiagnoseDateStart { get; set; } + public DateTime? DiagnoseDateStop { get; set; } = null; + public List Symptomes { get; set; } = new(); + public List<(int DaysCount, int PillsPerDay)> Courses = new(); + } +} diff --git a/Polyclinic/PolyclinicContracts/ViewModels/ReportMedicamentsByDiagnoseViewModel.cs b/Polyclinic/PolyclinicContracts/ViewModels/ReportMedicamentsByDiagnoseViewModel.cs new file mode 100644 index 0000000..e9b3bf6 --- /dev/null +++ b/Polyclinic/PolyclinicContracts/ViewModels/ReportMedicamentsByDiagnoseViewModel.cs @@ -0,0 +1,12 @@ +namespace PolyclinicContracts.ViewModels +{ + public class ReportMedicamentsByDiagnoseViewModel + { + public int DiagnoseId { get; set; } + public string DiagnoseName { get; set; } = string.Empty; + public string DiagnoseComment { get; set; } = string.Empty; + public DateTime DiagnoseDateStart { get; set; } + public DateTime? DiagnoseDateStop { get; set; } = null; + public List Medicaments = new(); + } +}