From 0dc935797e47f3cb5f32b9a857f8d2bf3d804a10 Mon Sep 17 00:00:00 2001 From: Alenka Date: Thu, 2 May 2024 22:31:43 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A3=20=D0=BC=D0=B5=D0=BD=D1=8F=20=D0=BD?= =?UTF-8?q?=D0=B5=D1=82=20=D1=81=D0=BB=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/ReportLogicPharmacist.cs | 44 ++++++------ .../IReportLogicPharmacist.cs | 6 +- .../SearchModels/ListRecipesSearchModel.cs | 13 ++++ .../SearchModels/MedicineSearchModel.cs | 1 - ...PatientDescriptionProceduresSearchModel.cs | 14 ++++ .../SearchModels/RecipeSearchModel.cs | 3 +- .../StoragesContracts/IProcedureStorage.cs | 1 + .../PatientDrscriptionProceduresViewModel.cs | 16 +++++ .../Implementss/MedicineStorage.cs | 3 +- .../Implementss/ProcedureStorage.cs | 68 ++++++++++++------- 10 files changed, 116 insertions(+), 53 deletions(-) create mode 100644 Hospital/HospitalContracts/SearchModels/ListRecipesSearchModel.cs create mode 100644 Hospital/HospitalContracts/SearchModels/PatientDescriptionProceduresSearchModel.cs create mode 100644 Hospital/HospitalContracts/ViewModels/PatientDrscriptionProceduresViewModel.cs diff --git a/Hospital/HospitalBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs b/Hospital/HospitalBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs index 4389b1b..9276614 100644 --- a/Hospital/HospitalBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs +++ b/Hospital/HospitalBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs @@ -15,74 +15,74 @@ namespace HospitalBusinessLogic.BusinessLogics { public class ReportLogicPharmacist : IReportLogicPharmacist { - private readonly IProcedureStorage _serviceStorage; + private readonly IProcedureStorage _procedureStorage; private readonly IMedicineStorage _medicineStorage; - private readonly IRecipeStorage _animalStorage; private readonly AbstractSaveToExcelPharmacist _saveToExcel; private readonly AbstractSaveToWordPharmacist _saveToWord; - public ReportLogicPharmacist(IProcedureStorage serviceStorage, IMedicineStorage medicineStorage, IRecipeStorage animalStorage, + public ReportLogicPharmacist(IProcedureStorage procedureStorage, IMedicineStorage medicineStorage, AbstractSaveToExcelPharmacist saveToExcel, AbstractSaveToWordPharmacist saveToWord) { - _serviceStorage = serviceStorage; + _procedureStorage = procedureStorage; _medicineStorage = medicineStorage; - _animalStorage = animalStorage; _saveToExcel = saveToExcel; _saveToWord = saveToWord; } - public List GetServiceAnimals(List services) + public List GetProcedureRecipes(List procedures) { + List ans = new(); - foreach (var service in services) + List>>>> response = + _procedureStorage.GetReportInfo(new ListRecipesSearchModel { proceduresIds = procedures }); + + foreach (var procedure in response) { - var medicines = _medicineStorage.GetFilteredList(new MedicineSearchModel { ProcedureId = service }); - Dictionary counter = new(); - foreach (var medicine in medicines) + Dictionary counter = new(); + foreach (var medicine in procedure.Item2) { - var animals = _animalStorage.GetFilteredList(new RecipeSearchModel { MedicineId = medicine.Id }); - foreach (var animal in animals) + foreach (var recipe in medicine.Item2) { - if (!counter.ContainsKey(animal.Id)) - counter.Add(animal.Id, 1); + if (!counter.ContainsKey(recipe.Id)) + counter.Add(recipe.Id, (recipe, 1)); else { - counter[animal.Id]++; + counter[recipe.Id] = (counter[recipe.Id].Item1, counter[recipe.Id].Item2 + 1); } } } List res = new(); foreach (var cnt in counter) { - if (cnt.Value != medicines.Count) + if (cnt.Value.Item2 != procedure.Item2.Count) continue; - res.Add(_animalStorage.GetElement(new RecipeSearchModel { Id = cnt.Key })); + res.Add(cnt.Value.Item1); } ans.Add(new ListRecipesViewModel { - ProcedureName = _serviceStorage.GetElement(new ProcedureSearchModel { Id = service }).Name, + ProcedureName = procedure.Item1.Name, Recipes = res }); } return ans; } - public void SaveAnimalsToExcelFile(ListRecipesBindingModel model) + public void SaveRecipesToExcelFile(ListRecipesBindingModel model) { _saveToExcel.CreateReport(new ExcelInfoPharmacist { FileName = model.FileName, Title = "Список рецептов для процедур", - ProceduresRecipes = GetServiceAnimals(model.Procedures) + ProceduresRecipes = GetProcedureRecipes(model.Procedures) }); } - public void SaveAnimalsToWordFile(ListRecipesBindingModel model) + public void SaveRecipesToWordFile(ListRecipesBindingModel model) { _saveToWord.CreateDoc(new WordInfoPharmacist { FileName = model.FileName, Title = "Список рецептов для процедур", - ProceduresRecipes = GetServiceAnimals(model.Procedures) + ProceduresRecipes = GetProcedureRecipes(model.Procedures) }); } } diff --git a/Hospital/HospitalContracts/BusinessLogicContracts/IReportLogicPharmacist.cs b/Hospital/HospitalContracts/BusinessLogicContracts/IReportLogicPharmacist.cs index 5880ecf..0cb3d49 100644 --- a/Hospital/HospitalContracts/BusinessLogicContracts/IReportLogicPharmacist.cs +++ b/Hospital/HospitalContracts/BusinessLogicContracts/IReportLogicPharmacist.cs @@ -11,8 +11,8 @@ namespace HospitalContracts.BusinessLogicsContracts { public interface IReportLogicPharmacist //В процессе { - List GetServiceAnimals(List services); - void SaveAnimalsToWordFile(ListRecipesBindingModel model); - void SaveAnimalsToExcelFile(ListRecipesBindingModel model); + List GetProcedureRecipes(List services); + void SaveRecipesToWordFile(ListRecipesBindingModel model); + void SaveRecipesToExcelFile(ListRecipesBindingModel model); } } diff --git a/Hospital/HospitalContracts/SearchModels/ListRecipesSearchModel.cs b/Hospital/HospitalContracts/SearchModels/ListRecipesSearchModel.cs new file mode 100644 index 0000000..2cd410e --- /dev/null +++ b/Hospital/HospitalContracts/SearchModels/ListRecipesSearchModel.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalContracts.SearchModels +{ + public class ListRecipesSearchModel + { + public List? proceduresIds { get; set; } + } +} diff --git a/Hospital/HospitalContracts/SearchModels/MedicineSearchModel.cs b/Hospital/HospitalContracts/SearchModels/MedicineSearchModel.cs index 64b88a1..f32f3bd 100644 --- a/Hospital/HospitalContracts/SearchModels/MedicineSearchModel.cs +++ b/Hospital/HospitalContracts/SearchModels/MedicineSearchModel.cs @@ -13,6 +13,5 @@ namespace HospitalContracts.SearchModels public string? CountryOrigin { get; set; } public double? Price { get; set; } public int? PharmacistId { get; set; } - public int? ProcedureId { get; set; } } } diff --git a/Hospital/HospitalContracts/SearchModels/PatientDescriptionProceduresSearchModel.cs b/Hospital/HospitalContracts/SearchModels/PatientDescriptionProceduresSearchModel.cs new file mode 100644 index 0000000..0bbdf0a --- /dev/null +++ b/Hospital/HospitalContracts/SearchModels/PatientDescriptionProceduresSearchModel.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalContracts.SearchModels +{ + public class PatientDescriptionProceduresSearchModel + { + public List? medicinesIds { get; set; } + + } +} diff --git a/Hospital/HospitalContracts/SearchModels/RecipeSearchModel.cs b/Hospital/HospitalContracts/SearchModels/RecipeSearchModel.cs index b4e7e1c..70aaded 100644 --- a/Hospital/HospitalContracts/SearchModels/RecipeSearchModel.cs +++ b/Hospital/HospitalContracts/SearchModels/RecipeSearchModel.cs @@ -11,6 +11,7 @@ namespace HospitalContracts.SearchModels public int? Id { get; set; } public int? DoctorId { get; set; } - DateTime IssueDate { get; } + public int? MedicineId { get; set; } + DateTime IssueDate { get; } } } diff --git a/Hospital/HospitalContracts/StoragesContracts/IProcedureStorage.cs b/Hospital/HospitalContracts/StoragesContracts/IProcedureStorage.cs index cce5954..975bce0 100644 --- a/Hospital/HospitalContracts/StoragesContracts/IProcedureStorage.cs +++ b/Hospital/HospitalContracts/StoragesContracts/IProcedureStorage.cs @@ -13,6 +13,7 @@ namespace HospitalContracts.StoragesContracts { List GetFullList(); List GetFilteredList(ProcedureSearchModel model); + List>>>> GetReportInfo(ListRecipesSearchModel model); ProcedureViewModel? GetElement(ProcedureSearchModel model); ProcedureViewModel? Insert(ProcedureBindingModel model); ProcedureViewModel? Update(ProcedureBindingModel model); diff --git a/Hospital/HospitalContracts/ViewModels/PatientDrscriptionProceduresViewModel.cs b/Hospital/HospitalContracts/ViewModels/PatientDrscriptionProceduresViewModel.cs new file mode 100644 index 0000000..57f61c2 --- /dev/null +++ b/Hospital/HospitalContracts/ViewModels/PatientDrscriptionProceduresViewModel.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HospitalContracts.ViewModels; + +namespace HospitalDataBaseImplement.Implements +{ + public class PatientsDescriptionProceduresViewModel + { + public string PatientName { get; set; } = string.Empty; + public List Patients { get; set; } = new(); + public List DescriptionProcedures { get; set; } = new(); + } +} diff --git a/Hospital/HospitalDataBaseImplement/Implementss/MedicineStorage.cs b/Hospital/HospitalDataBaseImplement/Implementss/MedicineStorage.cs index f6b3764..04c36f8 100644 --- a/Hospital/HospitalDataBaseImplement/Implementss/MedicineStorage.cs +++ b/Hospital/HospitalDataBaseImplement/Implementss/MedicineStorage.cs @@ -31,8 +31,7 @@ namespace HospitalDatabaseImplement.Implements return context.Medicines.Include(x => x.Pharmacist).Include(x => x.Recipes) .ThenInclude(x => x.Recipe).Include(x => x.Procedures).ThenInclude(x => x.Procedure) .Where(x => (string.IsNullOrEmpty(model.Name) || x.Name.Contains(model.Name)) - && (!model.PharmacistId.HasValue || x.PharmacistId == model.PharmacistId) - && (!model.ProcedureId.HasValue || x.Procedures.Select(x => x.ProcedureId).ToList().Contains(model.ProcedureId.Value))) + && (!model.PharmacistId.HasValue || x.PharmacistId == model.PharmacistId)) .Select(x => x.GetViewModel) .ToList(); } diff --git a/Hospital/HospitalDatabaseImplement/Implementss/ProcedureStorage.cs b/Hospital/HospitalDatabaseImplement/Implementss/ProcedureStorage.cs index 690fbaf..46c2b8e 100644 --- a/Hospital/HospitalDatabaseImplement/Implementss/ProcedureStorage.cs +++ b/Hospital/HospitalDatabaseImplement/Implementss/ProcedureStorage.cs @@ -26,17 +26,14 @@ namespace HospitalDatabaseImplement.Implements public List GetFilteredList(ProcedureSearchModel model) { using var context = new HospitalDatabase(); - if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue) - { - return context.Procedures - .Include(x => x.Medicines) - .Where(x => x.Name.Contains(model.Name)) - .Select(x => x.GetViewModel).ToList(); - } - else - { - return new(); - } + return context.Procedures.Include(x => x.Pharmacist) + .Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) + .Where(x => (string.IsNullOrEmpty(model.Name) || x.Name.Contains(model.Name)) + && (!model.PharmacistId.HasValue || x.PharmacistId == model.PharmacistId)) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); } public ProcedureViewModel? GetElement(ProcedureSearchModel model) @@ -46,10 +43,14 @@ namespace HospitalDatabaseImplement.Implements return null; } using var context = new HospitalDatabase(); - return context.Procedures - .Include(x => x.Medicines) - .FirstOrDefault(x => (!string.IsNullOrEmpty(model.Name) && x.Name == model.Name) || (model.Id.HasValue && x.Id == model.Id)) - ?.GetViewModel; + return context.Procedures.Include(x => x.Pharmacist) + .Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) + .FirstOrDefault(x => (!string.IsNullOrEmpty(model.Name) && + x.Name == model.Name) || + (model.Id.HasValue && x.Id == + model.Id)) + ?.GetViewModel; } public ProcedureViewModel? Insert(ProcedureBindingModel model) @@ -64,6 +65,23 @@ namespace HospitalDatabaseImplement.Implements context.SaveChanges(); return newProcedure.GetViewModel; } + public List>>>> GetReportInfo(ListRecipesSearchModel model) + { + if (model.proceduresIds == null) + { + return new(); + } + using var context = new HospitalDatabase(); + return context.Procedures + .Where(procedure => model.proceduresIds.Contains(procedure.Id)) + .Select(procedure => new Tuple>>>(procedure.GetViewModel, + context.ProcedureMedicines.Include(medicine => medicine.Medicine) + .Include(medicine => medicine.Procedure).Where(medicine => procedure.Id == medicine.ProcedureId). + Select(medicine => new Tuple>(medicine.Medicine.GetViewModel, + context.RecipeMedicines.Include(x => x.Recipe).Where(x => x.MedicineId == medicine.Medicine.Id). + Select(x => x.Recipe.GetViewModel).ToList())).ToList())).ToList(); + + } public ProcedureViewModel? Update(ProcedureBindingModel model) { @@ -71,17 +89,18 @@ namespace HospitalDatabaseImplement.Implements using var transaction = context.Database.BeginTransaction(); try { - var procedure = context.Procedures - .FirstOrDefault(rec => rec.Id == model.Id); - if (procedure == null) + var iceCream = context.Procedures.Include(x => x.Pharmacist) + .Include(x => x.Medicines).ThenInclude(x => x.Medicine).FirstOrDefault(rec => + rec.Id == model.Id); + if (iceCream == null) { return null; } - procedure.Update(model); + iceCream.Update(model); context.SaveChanges(); - procedure.UpdateMedicines(context, model); + iceCream.UpdateMedicines(context, model); transaction.Commit(); - return procedure.GetViewModel; + return iceCream.GetViewModel; } catch { @@ -93,9 +112,10 @@ namespace HospitalDatabaseImplement.Implements public ProcedureViewModel? Delete(ProcedureBindingModel model) { using var context = new HospitalDatabase(); - var element = context.Procedures - .Include(x => x.Medicines) - .FirstOrDefault(rec => rec.Id == model.Id); + var element = context.Procedures.Include(x => x.Pharmacist) + .Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) + .FirstOrDefault(rec => rec.Id == model.Id); if (element != null) { context.Procedures.Remove(element);