From d6d13df913cf8a4e4142e5f2e23bfbe9f7a2b759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=BA=D0=B0=D1=82=D0=B5=D1=80=D0=B8=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=A0=D0=BE=D0=B3=D0=B0=D1=88=D0=BE=D0=B2=D0=B0?= Date: Mon, 19 Jun 2023 13:29:55 +0400 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B1=D0=B4=20(=D0=B8=D0=B7-?= =?UTF-8?q?=D0=B7=D0=B0=20=D0=BA=D1=83=D1=80=D1=81=D0=BE=D0=B2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/KurseLogic.cs | 7 +- .../BusinessLogics/MedicinesLogic.cs | 4 +- .../BusinessLogics/ProceduresLogic.cs | 2 +- .../BusinessLogics/RecipesLogic.cs | 1 + .../BusinessLogics/ReportLogic.cs | 165 +++++++++++ .../OfficePackage/AbstractSaveToExcel.cs | 22 +- .../OfficePackage/AbstractSaveToWord.cs | 11 +- .../Controllers/HomeController.cs | 277 ++++++++++++++---- .../Views/Home/CreateMedicine.cshtml | 10 +- .../Views/Home/CreateProcedure.cshtml | 8 - .../HospitalClientApp/Views/Home/Enter.cshtml | 6 +- .../HospitalClientApp/Views/Home/Index.cshtml | 2 +- .../Views/Home/ListMedicines.cshtml | 3 +- .../Views/Home/ListProcedures.cshtml | 4 +- .../Views/Home/ListRecipes.cshtml | 9 +- .../Views/Home/Register.cshtml | 2 +- .../Views/Home/ReportWordExel.cshtml | 77 +++++ .../Views/Home/UpdateMedicine.cshtml | 40 ++- .../Views/Home/UpdateProcedure.cshtml | 49 +++- .../Views/Home/UpdateRecipe.cshtml | 58 +++- .../Views/Shared/_Layout.cshtml | 8 +- .../Controllers/MainController.cs | 121 +++++--- .../Controllers/ReportController.cs | 83 ++++++ .../BindingModels/KurseBindingModel.cs | 9 +- .../BindingModels/ReportBindingModel.cs | 2 + .../IProceduresLogic.cs | 2 +- .../BusinessLogicsContracts/IReportLogic.cs | 10 +- .../ViewModels/KurseViewModel.cs | 16 +- .../ReportKurseMedicinesViewModel.cs | 5 +- .../HospitalDatabase.cs | 1 + .../Implements/KurseStorage.cs | 15 +- .../Implements/MedicinesStorage.cs | 12 +- .../Implements/ProceduresStorage.cs | 11 +- .../Implements/RecipesStorage.cs | 5 +- .../Models/KurseMedicines.cs | 20 ++ HospitalDataBaseImplements/Models/Kurses.cs | 31 +- .../Models/Medicines.cs | 1 + .../Models/Procedures.cs | 15 +- HospitalDataModels/Models/IKurseModel.cs | 3 +- 39 files changed, 890 insertions(+), 237 deletions(-) create mode 100644 Hospital/HospitalBusinessLogic/BusinessLogics/ReportLogic.cs create mode 100644 Hospital/HospitalClientApp/Views/Home/ReportWordExel.cshtml create mode 100644 Hospital/HospitalRestApi/Controllers/ReportController.cs create mode 100644 HospitalDataBaseImplements/Models/KurseMedicines.cs diff --git a/Hospital/HospitalBusinessLogic/BusinessLogics/KurseLogic.cs b/Hospital/HospitalBusinessLogic/BusinessLogics/KurseLogic.cs index 296b7ed..bb467f9 100644 --- a/Hospital/HospitalBusinessLogic/BusinessLogics/KurseLogic.cs +++ b/Hospital/HospitalBusinessLogic/BusinessLogics/KurseLogic.cs @@ -96,16 +96,11 @@ namespace HospitalBusinessLogic.BusinessLogics return; } - if (model.MedicinesId < 0) - { - throw new ArgumentNullException("Некорректный идентификатор лекарства", nameof(model.MedicinesId)); - } - if (model.CountInDay <= 0) { throw new ArgumentNullException("Количество приемов в день должно быть больше 0", nameof(model.CountInDay)); } - _logger.LogInformation("Kurse. KurseId:{Id}.CountInDay:{ CountInDay}. MedicinesId: { MedicinesId}. MedicinesName: {MedicinesName}", model.Id, model.CountInDay, model.MedicinesId, model.MedicinesName); + _logger.LogInformation("Kurse. KurseId:{Id}.CountInDay:{ CountInDay}", model.Id, model.CountInDay); } } } diff --git a/Hospital/HospitalBusinessLogic/BusinessLogics/MedicinesLogic.cs b/Hospital/HospitalBusinessLogic/BusinessLogics/MedicinesLogic.cs index 0d66496..7091dba 100644 --- a/Hospital/HospitalBusinessLogic/BusinessLogics/MedicinesLogic.cs +++ b/Hospital/HospitalBusinessLogic/BusinessLogics/MedicinesLogic.cs @@ -16,10 +16,12 @@ namespace HospitalBusinessLogic.BusinessLogics { private readonly ILogger _logger; private readonly IMedicinesStorage _medicinesStorage; - public MedicinesLogic(ILogger logger, IMedicinesStorage medicinesStorage) + private readonly IClientLogic _clientLogic; + public MedicinesLogic(ILogger logger, IMedicinesStorage medicinesStorage, IClientLogic clientLogic) { _logger = logger; _medicinesStorage = medicinesStorage; + _clientLogic = clientLogic; } public bool Create(MedicinesBindingModel model) { diff --git a/Hospital/HospitalBusinessLogic/BusinessLogics/ProceduresLogic.cs b/Hospital/HospitalBusinessLogic/BusinessLogics/ProceduresLogic.cs index 75b0cf6..e5a2ab7 100644 --- a/Hospital/HospitalBusinessLogic/BusinessLogics/ProceduresLogic.cs +++ b/Hospital/HospitalBusinessLogic/BusinessLogics/ProceduresLogic.cs @@ -23,7 +23,7 @@ namespace HospitalBusinessLogic.BusinessLogics _proceduresStorage = proceduresStorage; } - public bool AddMedicines(ProceduresSearchModel model, IMedicinesModel medicine) + public bool AddMedicineToProcedure(ProceduresSearchModel model, IMedicinesModel medicine) { if (model == null) { diff --git a/Hospital/HospitalBusinessLogic/BusinessLogics/RecipesLogic.cs b/Hospital/HospitalBusinessLogic/BusinessLogics/RecipesLogic.cs index 3a46201..356ce02 100644 --- a/Hospital/HospitalBusinessLogic/BusinessLogics/RecipesLogic.cs +++ b/Hospital/HospitalBusinessLogic/BusinessLogics/RecipesLogic.cs @@ -50,6 +50,7 @@ namespace HospitalBusinessLogic.BusinessLogics ModeOfApplication = element.ModeOfApplication, Date = element.Date, ClientId = element.ClientId, + SymptomsId = element.SymptomsId, RecipeProcedures = element.RecipeProcedures }); diff --git a/Hospital/HospitalBusinessLogic/BusinessLogics/ReportLogic.cs b/Hospital/HospitalBusinessLogic/BusinessLogics/ReportLogic.cs new file mode 100644 index 0000000..63928be --- /dev/null +++ b/Hospital/HospitalBusinessLogic/BusinessLogics/ReportLogic.cs @@ -0,0 +1,165 @@ +using HospitalBusinessLogic.OfficePackage; +using HospitalBusinessLogic.OfficePackage.HelperModels; +using HospitalContracts.BindingModels; +using HospitalContracts.BusinessLogicsContracts; +using HospitalContracts.SearchModels; +using HospitalContracts.StoragesContracts; +using HospitalContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalBusinessLogic.BusinessLogics +{ + public class ReportLogic : IReportLogic + { + private readonly IKurseStorage _kurseStorage; + private readonly IMedicinesStorage _medicineStorage; + private readonly IRecipesStorage _recipeStorage; + private readonly AbstractSaveToExcel _saveToExcel; + private readonly AbstractSaveToWord _saveToWord; + private readonly AbstractSaveToPdf _saveToPdf; + public ReportLogic(IKurseStorage kurseStorage, IMedicinesStorage medicineStorage, IRecipesStorage recipeStorage, AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf) + { + _saveToExcel = saveToExcel; + _saveToWord = saveToWord; + _saveToPdf = saveToPdf; + _kurseStorage = kurseStorage; + _medicineStorage = medicineStorage; + _recipeStorage = recipeStorage; + } + public List GetKurseMedicines(List Ids) + { + if (Ids == null) + { + return new List(); + } + var kurses = _kurseStorage.GetFullList(); + List medicines = new List(); + foreach (var memId in Ids) + { + var res = _medicineStorage.GetElement(new MedicinesSearchModel { Id = memId }); + if (res != null) + { + medicines.Add(res); + } + } + var list = new List(); + foreach (var medicine in medicines) + { + var record = new ReportKurseMedicinesViewModel + { + MedicinesName = medicine.MedicinesName, + Kurses = new List>() + }; + foreach (var kurse in kurses) + { + if (kurse.KurseMedicine.ContainsKey(medicine.Id)) + { + record.Kurses.Add(new Tuple(kurse.Id, kurse.Duration)); + } + } + list.Add(record); + } + return list; + } + + //public List GetMembers(ReportBindingModel model) + //{ + // var listAll = new List(); + + // var listСonferences = _conferenceStorage.GetFilteredList(new ConferenceSearchModel + // { + // OrganiserId = model.OrganiserId, + // DateFrom = model.DateFrom, + // DateTo = model.DateTo + // }); + + // foreach (var conference in listСonferences) + // { + // foreach (var m in conference.ConferenceMembers.Values) + // { + // listAll.Add(new ReportMembersViewModel + // { + // StartDate = conference.StartDate, + // ConferenceName = conference.ConferenceName, + // MemberFIO = m.MemberFIO + // }); + // } + // } + + // var listMealPlans = _mealPlanStorage.GetFilteredList(new MealPlanSearchModel + // { + // OrganiserId = model.OrganiserId, + // }); + + // foreach (var mealPlan in listMealPlans) + // { + // foreach (var mp in mealPlan.MealPlanMembers.Values) + // { + // listAll.Add(new ReportMembersViewModel + // { + // MemberFIO = mp.MemberFIO, + // MealPlanName = mealPlan.MealPlanName, + // MealPlanPrice = mealPlan.MealPlanPrice + // }); + // } + // } + + // return listAll; + //} + + public List GetRecipeMedicine(ReportBindingModel model) + { + throw new NotImplementedException(); + } + + public void SaveMedicinesToExcelFile(ReportBindingModel model) + { + _saveToExcel.CreateReport(new ExcelInfo + { + FileName = model.FileName, + Title = "Список курсов", + KurseMedicines = GetKurseMedicines(model.Ids) + }); + } + + public void SaveMedicinesToWordFile(ReportBindingModel model) + { + _saveToWord.CreateDoc(new WordInfo + { + FileName = model.FileName, + Title = "Список конференций", + KurseMedicines = GetKurseMedicines(model.Ids) + }); + } + + //public void SaveMembersToPdfFile(ReportBindingModel model) + //{ + // if (model.DateFrom == null) + // { + // throw new ArgumentException("Дата начала не задана"); + // } + + // if (model.DateTo == null) + // { + // throw new ArgumentException("Дата окончания не задана"); + // } + // _saveToPdf.CreateDoc(new PdfInfoOrganiser + // { + // FileName = model.FileName, + // Title = "Список участников", + // DateFrom = model.DateFrom!.Value, + // DateTo = model.DateTo!.Value, + // Members = GetMembers(model) + // }); + //} + + public void SaveOrdersToPdfFile(ReportBindingModel model) + { + throw new NotImplementedException(); + } + } +} diff --git a/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToExcel.cs b/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToExcel.cs index 5b490ad..3899cb5 100644 --- a/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToExcel.cs +++ b/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToExcel.cs @@ -36,28 +36,30 @@ namespace HospitalBusinessLogic.OfficePackage { ColumnName = "A", RowIndex = rowIndex, - Text = pc.KurseId.ToString(), + Text = pc.MedicinesName, StyleInfo = ExcelStyleInfoType.Text }); rowIndex++; - foreach (var Medicine in pc.Medicines) + foreach (var kurse in pc.Kurses) { InsertCellInWorksheet(new ExcelCellParameters { ColumnName = "B", RowIndex = rowIndex, - Text = Medicine, + Text = kurse.Item1.ToString(), + StyleInfo = ExcelStyleInfoType.TextWithBroder + }); + rowIndex++; + InsertCellInWorksheet(new ExcelCellParameters + { + ColumnName = "B", + RowIndex = rowIndex, + Text = kurse.Item2, StyleInfo = ExcelStyleInfoType.TextWithBroder }); rowIndex++; } - InsertCellInWorksheet(new ExcelCellParameters - { - ColumnName = "A", - RowIndex = rowIndex, - Text = "Итого", - StyleInfo = ExcelStyleInfoType.Text - }); + rowIndex++; } SaveExcel(info); diff --git a/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToWord.cs b/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToWord.cs index dcad3aa..3b84185 100644 --- a/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToWord.cs +++ b/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToWord.cs @@ -22,22 +22,25 @@ namespace HospitalBusinessLogic.OfficePackage JustificationType = WordJustificationType.Center } }); - foreach (var kurse in info.KurseMedicines) + foreach (var km in info.KurseMedicines) { CreateParagraph(new WordParagraph { - Texts = new List<(string, WordTextProperties)> { (kurse.Title, new WordTextProperties { Size = "24", Bold = true, }) }, + Texts = new List<(string, WordTextProperties)> + { (km.MedicinesName, new WordTextProperties { Size = "20", Bold=true})}, TextProperties = new WordTextProperties { Size = "24", JustificationType = WordJustificationType.Both } }); - foreach (var medicine in kurse.Medicines) + foreach (var kurse in km.Kurses) { CreateParagraph(new WordParagraph { - Texts = new List<(string, WordTextProperties)> { (medicine, new WordTextProperties { Size = "20", Bold = false, }) }, + Texts = new List<(string, WordTextProperties)> + { (kurse.Item1 + " - ", new WordTextProperties { Size = "16", Bold=false}), + (kurse.Item2, new WordTextProperties { Size = "16", Bold=false})}, TextProperties = new WordTextProperties { Size = "24", diff --git a/Hospital/HospitalClientApp/Controllers/HomeController.cs b/Hospital/HospitalClientApp/Controllers/HomeController.cs index c8ee491..91fa145 100644 --- a/Hospital/HospitalClientApp/Controllers/HomeController.cs +++ b/Hospital/HospitalClientApp/Controllers/HomeController.cs @@ -105,7 +105,74 @@ namespace HospitalClientApp.Controllers Response.Redirect("Enter"); return; } + //ОТЧЕТ// + [HttpGet] + public IActionResult ReportWordExel() + { + if (APIClient.Client == null) + { + return Redirect("~/Home/Enter"); + } + return View(APIClient.GetRequest>($"api/main/getmedicineslist?clientId={APIClient.Client.Id}")); + } + [HttpPost] + public void ReportWordExel(int[] Ids, string type) + { + if (APIClient.Client == null) + { + throw new Exception("Вы как суда попали? Суда вход только авторизованным"); + } + if (Ids.Length <= 0) + { + throw new Exception("Количество должно быть больше 0"); + } + + if (string.IsNullOrEmpty(type)) + { + throw new Exception("Неверный тип отчета"); + } + + List res = new List(); + + foreach (var item in Ids) + { + res.Add(item); + } + + if (type == "docx") + { + APIClient.PostRequest("api/report/createreporttowordfile", new ReportBindingModel + { + Ids = res, + FileName = "E:\\ReportsCourseWork\\wordfile.docx" + }); + Response.Redirect("GetWordFile"); + } + else + { + APIClient.PostRequest("api/report/createreporttoexcelfile", new ReportBindingModel + { + Ids = res, + FileName = "E:\\ReportsCourseWork\\excelfile.xlsx" + }); + Response.Redirect("GetExcelFile"); + } + } + + [HttpGet] + public IActionResult GetWordFile() + { + return new PhysicalFileResult("E:\\ReportsCourseWork\\wordfile.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); + } + public IActionResult GetPdfFile() + { + return new PhysicalFileResult("E:\\ReportsCourseWork\\pdffile.pdf", "application/pdf"); + } + public IActionResult GetExcelFile() + { + return new PhysicalFileResult("E:\\ReportsCourseWork\\excelfile.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + } /// /// ПРОЦЕДУРЫ /// @@ -161,22 +228,55 @@ namespace HospitalClientApp.Controllers } Response.Redirect("ListProcedures"); } + [HttpGet] - public ProceduresViewModel? GetProcedure(int procedureId) + public Tuple? GetProcedure(int procedureId) { if (APIClient.Client == null) { throw new Exception("Необходима авторизация"); } - var result = APIClient.GetRequest($"api/main/getprocedure?procedureid={procedureId}"); + var result = APIClient.GetRequest>>>($"api/main/getprocedure?procedureId={procedureId}"); if (result == null) { return default; } - var proceduresName = result.ProceduresName; - var proceduretype = result.Type; + string table = ""; + for (int i = 0; i < result.Item2.Count; i++) + { + var medicinesName = result.Item2[i].Item1; + table += ""; + table += $"{medicinesName}"; + table += ""; + } + return Tuple.Create(result.Item1, table); + } - return result; + public IActionResult AddMedicineToProcedure() + { + if (APIClient.Client == null) + { + return Redirect("~/Home/Enter"); + } + return View(Tuple.Create(APIClient.GetRequest>($"api/main/getprocedurelist?clientId={APIClient.Client.Id}"), + APIClient.GetRequest>($"api/main/getmedicinelist?clientId={APIClient.Client.Id}"))); + } + + [HttpPost] + public void AddMedicineToProcedure(int procedure, int[] medicine) + { + if (APIClient.Client == null) + { + throw new Exception("Необходима авторизация"); + } + for (int i = 0; i < medicine.Length; i++) + { + APIClient.PostRequest("api/main/AddMedicineToProcedure", Tuple.Create( + new ProceduresSearchModel() { Id = procedure }, + new MedicinesViewModel() { Id = medicine[i] } + )); + } + Response.Redirect("ListConferences"); } [HttpPost] @@ -201,28 +301,41 @@ namespace HospitalClientApp.Controllers return View(); } - //[HttpGet] - //public IActionResult AddDrugCourse() - //{ - // if (APIClient.Client == null) - // { - // return Redirect("~/Home/Enter"); - // } - // ViewBag.Medicines = APIClient.GetRequest>($"api/medicine/getmedicines"); - // ViewBag.DrugCourses = APIClient.GetRequest>($"api/drugcourse/getdrugcourses"); - // return View(); - //} + public IActionResult UpdateProcedure() + { + if (APIClient.Client == null) + { + return Redirect("~/Home/Enter"); + } + ViewBag.Procedures = APIClient.GetRequest>($"api/main/getprocedurelist?clientId={APIClient.Client.Id}"); + return View(); + } + + [HttpPost] + public void UpdateProcedure(int procedure, string procedurename, string type) + { + if (APIClient.Client == null) + { + throw new Exception("Необходима авторизация"); + } + if (string.IsNullOrEmpty(procedurename)) + { + throw new Exception("Название не может быть пустым"); + } + if (string.IsNullOrEmpty(type)) + { + throw new Exception("Тип не может быть пустым"); + } + APIClient.PostRequest("api/main/UpdateProcedure", new ProceduresBindingModel + { + Id = procedure, + ProceduresName = procedurename, + Type = type, + ClientId = APIClient.Client.Id + }); + Response.Redirect("ListProcedures"); + } - //[HttpPost] - //public void AddMedicineDrugCourse(int medicine, int drugcourse) - //{ - // if (APIClient.Client == null) - // { - // throw new Exception("Доступно только авторизованным пользователям"); - // } - // APIClient.PostRequest($"api/medicine/addmedicinedrugcourse", (new DrugCourseBindingModel { Id = drugcourse }, new MedicineBindingModel { Id = medicine })); - // Response.Redirect("ListDrugCourses"); - //} /// /// ЛЕКАРСТВА /// @@ -235,46 +348,27 @@ namespace HospitalClientApp.Controllers } return View(APIClient.GetRequest>($"api/main/getmedicineslist?clientId={APIClient.Client.Id}")); } - public IActionResult CreateMedicine(int? id) + public IActionResult CreateMedicine() { if (APIClient.Client == null) { return Redirect("~/Home/Enter"); } - - if (!id.HasValue) - { - return View(); - } - var model = APIClient.GetRequest($"api/main/getmedicine?id={id}"); - return View(model); + return View(); } [HttpPost] - public void CreateMedicine(int? id, string namemedicine, string group) + public void CreateMedicine(string namemedicine, string group) { if (APIClient.Client == null) { throw new Exception("Вы как сюда попали? Сюда вход только авторизованным"); } - if (id.HasValue) + APIClient.PostRequest("api/main/createmedicine", new MedicinesBindingModel { - APIClient.PostRequest("api/main/updatemedicine", new MedicinesBindingModel - { - Id = id.Value, - MedicinesName = namemedicine, - Group = group - }); - } - else - { - APIClient.PostRequest("api/main/createmedicine", new MedicinesBindingModel - { - ClientId = APIClient.Client.Id, - MedicinesName = namemedicine, - Group = group - - }); - } + ClientId = APIClient.Client.Id, + MedicinesName = namemedicine, + Group = group + }); Response.Redirect("ListMedicines"); } [HttpGet] @@ -289,7 +383,7 @@ namespace HospitalClientApp.Controllers { return default; } - var medicineName = result.MedicinesName; + var medicinename = result.MedicinesName; var group = result.Group; return result; @@ -316,6 +410,41 @@ namespace HospitalClientApp.Controllers ViewBag.Medicines = APIClient.GetRequest>($"api/main/GetMedicinesList?clientId={APIClient.Client.Id}"); return View(); } + + public IActionResult UpdateMedicine() + { + if (APIClient.Client == null) + { + return Redirect("~/Home/Enter"); + } + ViewBag.Medicines = APIClient.GetRequest>($"api/main/getmedicineslist?clientId={APIClient.Client.Id}"); + return View(); + } + + [HttpPost] + public void UpdateMedicine(int medicine, string medicinename, string group) + { + if (APIClient.Client == null) + { + throw new Exception("Необходима авторизация"); + } + if (string.IsNullOrEmpty(medicinename)) + { + throw new Exception("Название не может быть пустым"); + } + if (string.IsNullOrEmpty(group)) + { + throw new Exception("Группа не может быть пустой"); + } + APIClient.PostRequest("api/main/UpdateMedicine", new MedicinesBindingModel + { + Id = medicine, + MedicinesName = medicinename, + Group = group, + ClientId = APIClient.Client.Id + }); + Response.Redirect("ListMedicines"); + } /// /// РЕЦЕПТЫ /// @@ -378,7 +507,7 @@ namespace HospitalClientApp.Controllers { throw new Exception("Необходима авторизация"); } - var result = APIClient.GetRequest>>>($"api/main/getrecipe?recipeId={recipeId}"); + var result = APIClient.GetRequest>>>($"api/main/getrecipe?recipeId={recipeId}"); if (result == null) { return default; @@ -387,10 +516,8 @@ namespace HospitalClientApp.Controllers for (int i = 0; i < result.Item2.Count; i++) { var proceduresName = result.Item2[i].Item1; - var type = result.Item2[i].Item2; table += ""; table += $"{proceduresName}"; - table += $"{type}"; table += ""; } return Tuple.Create(result.Item1, table); @@ -417,6 +544,42 @@ namespace HospitalClientApp.Controllers return View(); } + public IActionResult UpdateRecipe() + { + if (APIClient.Client == null) + { + return Redirect("~/Home/Enter"); + } + ViewBag.Recipes = APIClient.GetRequest>($"api/main/GetRecipesList?clientId={APIClient.Client.Id}"); + ViewBag.Symptomses = APIClient.GetRequest>("api/main/getsymptoms"); + return View(); + } + + [HttpPost] + public void UpdateRecipe(int recipe, string dose, string modeofapplication) + { + if (APIClient.Client == null) + { + throw new Exception("Необходима авторизация"); + } + if (string.IsNullOrEmpty(dose)) + { + throw new Exception("Поле не может быть пустым"); + } + if (string.IsNullOrEmpty(modeofapplication)) + { + throw new Exception("Способ применения не может быть пустым"); + } + APIClient.PostRequest("api/main/updaterecipe", new RecipesBindingModel + { + Id = recipe, + Dose = dose, + ModeOfApplication = modeofapplication, + ClientId = APIClient.Client.Id + }); + Response.Redirect("ListRecipes"); + } + [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { diff --git a/Hospital/HospitalClientApp/Views/Home/CreateMedicine.cshtml b/Hospital/HospitalClientApp/Views/Home/CreateMedicine.cshtml index 10e0ab6..dd29593 100644 --- a/Hospital/HospitalClientApp/Views/Home/CreateMedicine.cshtml +++ b/Hospital/HospitalClientApp/Views/Home/CreateMedicine.cshtml @@ -3,18 +3,10 @@ } @{ - if (Model != null) - { -
-

Редактирование лекарства

-
- } - else - { +

Создание лекарства

- } }
diff --git a/Hospital/HospitalClientApp/Views/Home/CreateProcedure.cshtml b/Hospital/HospitalClientApp/Views/Home/CreateProcedure.cshtml index 67d87a1..6bf6716 100644 --- a/Hospital/HospitalClientApp/Views/Home/CreateProcedure.cshtml +++ b/Hospital/HospitalClientApp/Views/Home/CreateProcedure.cshtml @@ -3,17 +3,9 @@ } @{ -if (Model != null) - { -
-

Редактирование процедуры

-
- } - else {

Создание процедуры

- } }
diff --git a/Hospital/HospitalClientApp/Views/Home/Enter.cshtml b/Hospital/HospitalClientApp/Views/Home/Enter.cshtml index 49dbc3a..9df5511 100644 --- a/Hospital/HospitalClientApp/Views/Home/Enter.cshtml +++ b/Hospital/HospitalClientApp/Views/Home/Enter.cshtml @@ -8,14 +8,14 @@
- +
- +
- +
diff --git a/Hospital/HospitalClientApp/Views/Home/Index.cshtml b/Hospital/HospitalClientApp/Views/Home/Index.cshtml index 7ab9688..617ea3f 100644 --- a/Hospital/HospitalClientApp/Views/Home/Index.cshtml +++ b/Hospital/HospitalClientApp/Views/Home/Index.cshtml @@ -20,7 +20,7 @@
+ style="margin-left: 600px"> Создать лекарство Удалить + Редактировать

@@ -53,7 +54,7 @@ @Html.DisplayFor(modelItem => item.Group) } diff --git a/Hospital/HospitalClientApp/Views/Home/ListProcedures.cshtml b/Hospital/HospitalClientApp/Views/Home/ListProcedures.cshtml index 33f9290..16e83d8 100644 --- a/Hospital/HospitalClientApp/Views/Home/ListProcedures.cshtml +++ b/Hospital/HospitalClientApp/Views/Home/ListProcedures.cshtml @@ -21,6 +21,7 @@

Создать процедуру Удалить + Редактировать

- Редактировать +
@@ -52,9 +53,6 @@ - } diff --git a/Hospital/HospitalClientApp/Views/Home/ListRecipes.cshtml b/Hospital/HospitalClientApp/Views/Home/ListRecipes.cshtml index 06a0a00..fdd6539 100644 --- a/Hospital/HospitalClientApp/Views/Home/ListRecipes.cshtml +++ b/Hospital/HospitalClientApp/Views/Home/ListRecipes.cshtml @@ -21,6 +21,7 @@

Создать рецепт Удалить + Редактировать

@Html.DisplayFor(modelItem => item.Type) - Редактировать -
@@ -34,9 +35,6 @@ - @@ -56,10 +54,7 @@ @Html.DisplayFor(modelItem => item.Dose) - } diff --git a/Hospital/HospitalClientApp/Views/Home/Register.cshtml b/Hospital/HospitalClientApp/Views/Home/Register.cshtml index c0021d2..044cc56 100644 --- a/Hospital/HospitalClientApp/Views/Home/Register.cshtml +++ b/Hospital/HospitalClientApp/Views/Home/Register.cshtml @@ -21,6 +21,6 @@
- +
diff --git a/Hospital/HospitalClientApp/Views/Home/ReportWordExel.cshtml b/Hospital/HospitalClientApp/Views/Home/ReportWordExel.cshtml new file mode 100644 index 0000000..cc37bbb --- /dev/null +++ b/Hospital/HospitalClientApp/Views/Home/ReportWordExel.cshtml @@ -0,0 +1,77 @@ +@using HospitalContracts.ViewModels + +@model List + +@{ + ViewData["Title"] = "ReportWordExel"; +} + +
+

+ Создание отчета word/exel +

+
+ +
+
+
+ +
+ + +
+
+ + +
+
+
+
+
+
Доза - Лекарство - - @Html.DisplayFor(modelItem => item.SymptomsId) - - Редактировать +
+ + + + + + + + + @foreach (var item in Model) + { + + + + + + } + +
+ + + Название + + Группа +
+ + + @Html.DisplayFor(modelItem => item.MedicinesName) + + @Html.DisplayFor(modelItem => item.Group) +
+
+
+
+
+
+
+
+ + diff --git a/Hospital/HospitalClientApp/Views/Home/UpdateMedicine.cshtml b/Hospital/HospitalClientApp/Views/Home/UpdateMedicine.cshtml index 30a3e11..ba927ec 100644 --- a/Hospital/HospitalClientApp/Views/Home/UpdateMedicine.cshtml +++ b/Hospital/HospitalClientApp/Views/Home/UpdateMedicine.cshtml @@ -1,10 +1,15 @@ -@{ +@using HospitalContracts.ViewModels; +@using HospitalDataModels.Models; +@{ ViewData["Title"] = "UpdateMedicine"; }

Изменения лекарства

+ + +
@@ -17,19 +22,42 @@ + name="medicinename" />
+ name="group" />
-
+
+ + +@section Scripts + { + +} \ No newline at end of file diff --git a/Hospital/HospitalClientApp/Views/Home/UpdateProcedure.cshtml b/Hospital/HospitalClientApp/Views/Home/UpdateProcedure.cshtml index 6a625cb..ef734f4 100644 --- a/Hospital/HospitalClientApp/Views/Home/UpdateProcedure.cshtml +++ b/Hospital/HospitalClientApp/Views/Home/UpdateProcedure.cshtml @@ -1,9 +1,11 @@ -@{ +@using HospitalContracts.ViewModels; +@using HospitalDataModels.Models; +@{ ViewData["Title"] = "UpdateProcedure"; }
-

Изменения процедуры

+

Изменение процедуры

@@ -17,19 +19,52 @@ + name="procedurename" />
+ name="type" /> +
+
+

Лекарства

+ + + + + + +
Название
-
+
+ +@section Scripts + { + +} \ No newline at end of file diff --git a/Hospital/HospitalClientApp/Views/Home/UpdateRecipe.cshtml b/Hospital/HospitalClientApp/Views/Home/UpdateRecipe.cshtml index 39d90fa..71e37fe 100644 --- a/Hospital/HospitalClientApp/Views/Home/UpdateRecipe.cshtml +++ b/Hospital/HospitalClientApp/Views/Home/UpdateRecipe.cshtml @@ -1,15 +1,18 @@ -@{ +@using HospitalContracts.ViewModels; +@using HospitalDataModels.Models; + +@{ ViewData["Title"] = "UpdateRecipe"; }
-

Изменения рецепта

+

Изменение рецепта

- +
@@ -17,23 +20,58 @@ + name="dose" />
+ name="modeofapplication"/>
- - + + +
+
+

Процедуры

+ + + + + + + +
НазваниеТип
-
+
+ +@section Scripts + { + +} \ No newline at end of file diff --git a/Hospital/HospitalClientApp/Views/Shared/_Layout.cshtml b/Hospital/HospitalClientApp/Views/Shared/_Layout.cshtml index 947b973..ec4b4c0 100644 --- a/Hospital/HospitalClientApp/Views/Shared/_Layout.cshtml +++ b/Hospital/HospitalClientApp/Views/Shared/_Layout.cshtml @@ -37,11 +37,11 @@ diff --git a/Hospital/HospitalRestApi/Controllers/MainController.cs b/Hospital/HospitalRestApi/Controllers/MainController.cs index 10ef123..2f31e46 100644 --- a/Hospital/HospitalRestApi/Controllers/MainController.cs +++ b/Hospital/HospitalRestApi/Controllers/MainController.cs @@ -70,22 +70,22 @@ namespace HospitalRestApi.Controllers throw; } } - [HttpGet] - public ProceduresViewModel? GetProcedure(int procedureId) - { - try - { - return _procedure.ReadElement(new ProceduresSearchModel - { - Id = procedureId - }); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка получения процедуры по id={Id}", procedureId); - throw; - } - } + //[HttpGet] + //public ProceduresViewModel? GetProcedure(int procedureId) + //{ + // try + // { + // return _procedure.ReadElement(new ProceduresSearchModel + // { + // Id = procedureId + // }); + // } + // catch (Exception ex) + // { + // _logger.LogError(ex, "Ошибка получения процедуры по id={Id}", procedureId); + // throw; + // } + //} [HttpPost] public void CreateProcedure(ProceduresBindingModel model) { @@ -105,7 +105,8 @@ namespace HospitalRestApi.Controllers { try { - _procedure.Update(GetModelWithMedicines(model)); + model.ProcedureMedicine = null!; + _procedure.Update(model); } catch (Exception ex) { @@ -113,18 +114,34 @@ namespace HospitalRestApi.Controllers throw; } } - - private ProceduresBindingModel GetModelWithMedicines(ProceduresBindingModel model) + [HttpGet] + public Tuple>>? GetProcedure(int procedureId) { - var medicines = _medicine.ReadList(new MedicinesSearchModel { Ids = model.ProcedureMedicine.Keys.ToArray() }); - if (medicines != null) + try { - model.ProcedureMedicine = medicines.Where(m => model.ProcedureMedicine.Keys.Contains(m.Id)) - .ToDictionary(m => m.Id, m => m as IMedicinesModel); + var elem = _procedure.ReadElement(new ProceduresSearchModel { Id = procedureId }); + if (elem == null) + return null; + return Tuple.Create(elem, elem.ProcedureMedicine.Select(x => Tuple.Create(x.Value.MedicinesName)).ToList()); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения процедуры по id={Id}", procedureId); + throw; } - return model; } + //private ProceduresBindingModel GetModelWithMedicines(ProceduresBindingModel model) + //{ + // var medicines = _medicine.ReadList(new MedicinesSearchModel { Ids = model.ProcedureMedicine.Keys.ToArray() }); + // if (medicines != null) + // { + // model.ProcedureMedicine = medicines.Where(m => model.ProcedureMedicine.Keys.Contains(m.Id)) + // .ToDictionary(m => m.Id, m => m as IMedicinesModel); + // } + // return model; + //} + [HttpPost] public void DeleteProcedure(ProceduresBindingModel model) { @@ -281,29 +298,30 @@ namespace HospitalRestApi.Controllers throw; } } - [HttpGet] - public RecipesViewModel? GetRecipe(int recipeId) - { - try - { - return _recipe.ReadElement(new RecipesSearchModel - { - Id = recipeId - }); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка получения рецепта по id={Id}", recipeId); - throw; - } - } + //[HttpGet] + //public RecipesViewModel? GetRecipe(int recipeId) + //{ + // try + // { + // return _recipe.ReadElement(new RecipesSearchModel + // { + // Id = recipeId + // }); + // } + // catch (Exception ex) + // { + // _logger.LogError(ex, "Ошибка получения рецепта по id={Id}", recipeId); + // throw; + // } + //} [HttpPost] public void UpdateRecipe(RecipesBindingModel model) { try { - _recipe.Update(GetModelWithProcedures(model)); + model.RecipeProcedures = null!; + _recipe.Update(model); } catch (Exception ex) { @@ -311,6 +329,23 @@ namespace HospitalRestApi.Controllers throw; } } + [HttpGet] + public Tuple>>? GetRecipe(int recipeId) + { + try + { + var elem = _recipe.ReadElement(new RecipesSearchModel { Id = recipeId }); + if (elem == null) + return null; + return Tuple.Create(elem, elem.RecipeProcedures.Select(x => Tuple.Create(x.Value.ProceduresName)).ToList()); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения процедуры по id={Id}", recipeId); + throw; + } + } + [HttpPost] public void AddProcedures(Tuple model) { @@ -325,11 +360,11 @@ namespace HospitalRestApi.Controllers } } [HttpPost] - public void AddMedicines(Tuple model) + public void AddMedicineToProcedure(Tuple model) { try { - _procedure.AddMedicines(model.Item1, model.Item2); + _procedure.AddMedicineToProcedure(model.Item1, model.Item2); } catch (Exception ex) { diff --git a/Hospital/HospitalRestApi/Controllers/ReportController.cs b/Hospital/HospitalRestApi/Controllers/ReportController.cs new file mode 100644 index 0000000..b89ef90 --- /dev/null +++ b/Hospital/HospitalRestApi/Controllers/ReportController.cs @@ -0,0 +1,83 @@ +using HospitalContracts.BindingModels; +using HospitalContracts.BusinessLogicsContracts; +using Microsoft.AspNetCore.Mvc; + +namespace HospitalRestApi.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class ReportController : Controller + { + private readonly ILogger _logger; + private readonly IReportLogic _reportLogic; + //private readonly AbstractMailWorker _mailWorker; + public ReportController(ILogger logger, IReportLogic reportLogic) + { + _logger = logger; + _reportLogic = reportLogic; + //_mailWorker = mailWorker; + } + + //[HttpPost] + //public void CreateReportToPdfFile(ReportBindingModel model) + //{ + // try + // { + // _reportLogic.SaveMedicinesToPdfFile(new ReportBindingModel + // { + // DateFrom = model.DateFrom, + // DateTo = model.DateTo, + // OrganiserId = model.OrganiserId, + // FileName = "C:\\ReportsCourseWork\\pdffile.pdf", + // }); + // } + // catch (Exception ex) + // { + // _logger.LogError(ex, "Ошибка создания отчета"); + // throw; + // } + //} + + //[HttpPost] + //public void SendPdfToMail(MailSendInfoBindingModel model) + //{ + // try + // { + // _mailWorker.MailSendAsync(model); + // } + // catch (Exception ex) + // { + // _logger.LogError(ex, "Ошибка отправки письма"); + // throw; + // } + //} + + [HttpPost] + public void CreateReportToWordFile(ReportBindingModel model) + { + try + { + _reportLogic.SaveMedicinesToWordFile(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка создания отчета"); + throw; + } + } + + [HttpPost] + public void CreateReportToExcelFile(ReportBindingModel model) + { + try + { + _reportLogic.SaveMedicinesToExcelFile(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка создания отчета"); + throw; + } + } + } +} diff --git a/HospitalContracts/BindingModels/KurseBindingModel.cs b/HospitalContracts/BindingModels/KurseBindingModel.cs index 269e64f..c4669dc 100644 --- a/HospitalContracts/BindingModels/KurseBindingModel.cs +++ b/HospitalContracts/BindingModels/KurseBindingModel.cs @@ -11,8 +11,11 @@ namespace HospitalContracts.BindingModels { public int Id { get; set; } public string Duration { get; set; } = string.Empty; - public int CountInDay { get; set; } - public int MedicinesId { get; set; } - public string MedicinesName { get; set; } = string.Empty; + public int CountInDay { get; set; } + public Dictionary KurseMedicine + { + get; + set; + } = new(); } } diff --git a/HospitalContracts/BindingModels/ReportBindingModel.cs b/HospitalContracts/BindingModels/ReportBindingModel.cs index b19244b..ab2bc55 100644 --- a/HospitalContracts/BindingModels/ReportBindingModel.cs +++ b/HospitalContracts/BindingModels/ReportBindingModel.cs @@ -11,5 +11,7 @@ namespace HospitalContracts.BindingModels public string FileName { get; set; } = string.Empty; public DateTime? DateFrom { get; set; } public DateTime? DateTo { get; set; } + public int ClientId { get; set; } + public List? Ids { get; set; } } } diff --git a/HospitalContracts/BusinessLogicsContracts/IProceduresLogic.cs b/HospitalContracts/BusinessLogicsContracts/IProceduresLogic.cs index e3ce5e0..69f2098 100644 --- a/HospitalContracts/BusinessLogicsContracts/IProceduresLogic.cs +++ b/HospitalContracts/BusinessLogicsContracts/IProceduresLogic.cs @@ -14,7 +14,7 @@ namespace HospitalContracts.BusinessLogicsContracts { List? ReadList(ProceduresSearchModel? model); ProceduresViewModel? ReadElement(ProceduresSearchModel model); - bool AddMedicines(ProceduresSearchModel model, IMedicinesModel member); + bool AddMedicineToProcedure(ProceduresSearchModel model, IMedicinesModel member); bool Create(ProceduresBindingModel model); bool Update(ProceduresBindingModel model); bool Delete(ProceduresBindingModel model); diff --git a/HospitalContracts/BusinessLogicsContracts/IReportLogic.cs b/HospitalContracts/BusinessLogicsContracts/IReportLogic.cs index 44724a2..979590e 100644 --- a/HospitalContracts/BusinessLogicsContracts/IReportLogic.cs +++ b/HospitalContracts/BusinessLogicsContracts/IReportLogic.cs @@ -11,12 +11,12 @@ namespace HospitalContracts.BusinessLogicsContracts public interface IReportLogic { /// - /// Получение списка компонент с указанием, в каких изделиях используются + /// Получение списка лекарств с указанием, в каких курсах используются /// /// - List GetKurseMedicines(); + List GetKurseMedicines(List Ids); /// - /// Получение списка заказов за определенный период + /// Получение списка рецептов за определенный период /// /// /// @@ -25,12 +25,12 @@ namespace HospitalContracts.BusinessLogicsContracts /// Сохранение компонент в файл-Word /// /// - void SaveGiftsToWordFile(ReportBindingModel model); + void SaveMedicinesToWordFile(ReportBindingModel model); /// /// Сохранение компонент с указаеним продуктов в файл-Excel /// /// - void SaveGiftComponentToExcelFile(ReportBindingModel model); + void SaveMedicinesToExcelFile(ReportBindingModel model); /// /// Сохранение заказов в файл-Pdf /// diff --git a/HospitalContracts/ViewModels/KurseViewModel.cs b/HospitalContracts/ViewModels/KurseViewModel.cs index ab9d674..f7e338c 100644 --- a/HospitalContracts/ViewModels/KurseViewModel.cs +++ b/HospitalContracts/ViewModels/KurseViewModel.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; +using System.Text.Json.Serialization; using System.Threading.Tasks; namespace HospitalContracts.ViewModels @@ -15,8 +16,17 @@ namespace HospitalContracts.ViewModels public string Duration { get; set; } = string.Empty; [DisplayName("Срок приема")] public int CountInDay { get; set; } - public int MedicinesId { get; set; } - [DisplayName("Название лекарства")] - public string MedicinesName { get; set; } = string.Empty; + public Dictionary KurseMedicine + { + get; + set; + } = new(); + + public KurseViewModel() { } + [JsonConstructor] + public KurseViewModel(Dictionary KurseMedicine) + { + this.KurseMedicine = KurseMedicine.ToDictionary(x => x.Key, x => x.Value as IMedicinesModel); + } } } diff --git a/HospitalContracts/ViewModels/ReportKurseMedicinesViewModel.cs b/HospitalContracts/ViewModels/ReportKurseMedicinesViewModel.cs index 586a872..3fc46a7 100644 --- a/HospitalContracts/ViewModels/ReportKurseMedicinesViewModel.cs +++ b/HospitalContracts/ViewModels/ReportKurseMedicinesViewModel.cs @@ -8,8 +8,7 @@ namespace HospitalContracts.ViewModels { public class ReportKurseMedicinesViewModel { - public string Title { get; set; } = string.Empty; - public int KurseId { get; set; } - public List Medicines { get; set; } = new(); + public string MedicinesName { get; set; } = string.Empty; + public List> Kurses { get; set; } = new(); } } diff --git a/HospitalDataBaseImplements/HospitalDatabase.cs b/HospitalDataBaseImplements/HospitalDatabase.cs index b1778a6..080e389 100644 --- a/HospitalDataBaseImplements/HospitalDatabase.cs +++ b/HospitalDataBaseImplements/HospitalDatabase.cs @@ -19,6 +19,7 @@ namespace HospitalDataBaseImplements base.OnConfiguring(optionsBuilder); } public virtual DbSet Kurse { set; get; } + public virtual DbSet KurseMedicines { set; get; } public virtual DbSet Illnesses { set; get; } public virtual DbSet IllnessKurse { set; get; } public virtual DbSet IllnessSymptomses { set; get; } diff --git a/HospitalDataBaseImplements/Implements/KurseStorage.cs b/HospitalDataBaseImplements/Implements/KurseStorage.cs index 1d56d68..948e74b 100644 --- a/HospitalDataBaseImplements/Implements/KurseStorage.cs +++ b/HospitalDataBaseImplements/Implements/KurseStorage.cs @@ -34,7 +34,8 @@ namespace HospitalDataBaseImplements.Implements return null; } using var context = new HospitalDatabase(); - return context.Kurse.FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))?.GetViewModel; + return context.Kurse.Include(x => x.Medicines) + .ThenInclude(x => x.Medicine).FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))?.GetViewModel; } public List GetFilteredList(KurseSearchModel model) @@ -44,8 +45,8 @@ namespace HospitalDataBaseImplements.Implements return new(); } using var context = new HospitalDatabase(); - return context.Kurse - .Where(x => x.MedicinesName.Contains(model.MedicinesName)) + return context.Kurse.Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) .Select(x => x.GetViewModel) .ToList(); } @@ -53,7 +54,8 @@ namespace HospitalDataBaseImplements.Implements public List GetFullList() { using var context = new HospitalDatabase(); - return context.Kurse.Select(x => x.GetViewModel).ToList(); + return context.Kurse.Include(x => x.Medicines) + .ThenInclude(x => x.Medicine).Select(x => x.GetViewModel).ToList(); } public KurseViewModel? Insert(KurseBindingModel model) @@ -66,7 +68,10 @@ namespace HospitalDataBaseImplements.Implements using var context = new HospitalDatabase(); context.Kurse.Add(newKurse); context.SaveChanges(); - return newKurse.GetViewModel; + return context.Kurse + .Include(x => x.Medicines) + .ThenInclude(x => x.Medicine).FirstOrDefault(x => x.Id == newKurse.Id) + ?.GetViewModel; } public KurseViewModel? Update(KurseBindingModel model) diff --git a/HospitalDataBaseImplements/Implements/MedicinesStorage.cs b/HospitalDataBaseImplements/Implements/MedicinesStorage.cs index 09e55f7..62cea10 100644 --- a/HospitalDataBaseImplements/Implements/MedicinesStorage.cs +++ b/HospitalDataBaseImplements/Implements/MedicinesStorage.cs @@ -65,10 +65,8 @@ namespace HospitalDataBaseImplements.Implements public MedicinesViewModel? Update(MedicinesBindingModel model) { using var context = new HospitalDatabase(); - using var transaction = context.Database.BeginTransaction(); - try - { - var medicine = context.Medicines.FirstOrDefault(x => x.Id == model.Id); + + var medicine = context.Medicines.FirstOrDefault(x => x.Id == model.Id); if (medicine == null) { return null; @@ -76,12 +74,6 @@ namespace HospitalDataBaseImplements.Implements medicine.Update(model); context.SaveChanges(); return medicine.GetViewModel; - } - catch - { - transaction.Rollback(); - throw; - } } public MedicinesViewModel? Delete(MedicinesBindingModel model) { diff --git a/HospitalDataBaseImplements/Implements/ProceduresStorage.cs b/HospitalDataBaseImplements/Implements/ProceduresStorage.cs index 140f918..0075289 100644 --- a/HospitalDataBaseImplements/Implements/ProceduresStorage.cs +++ b/HospitalDataBaseImplements/Implements/ProceduresStorage.cs @@ -30,7 +30,8 @@ namespace HospitalDataBaseImplements.Implements return new(); } using var context = new HospitalDatabase(); - return context.Procedures + return context.Procedures.Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) .Include(x => x.Client) .Where(x => x.ClientId == model.ClientId) .Select(x => x.GetViewModel) @@ -43,7 +44,8 @@ namespace HospitalDataBaseImplements.Implements return null; } using var context = new HospitalDatabase(); - return context.Procedures.Include(x => x.Client) + return context.Procedures.Include(x => x.Client).Include(x => x.Medicines) + .ThenInclude(x => x.Medicine) .FirstOrDefault(x => (!string.IsNullOrEmpty(model.ProceduresName) && x.ProceduresName == model.ProceduresName) || @@ -78,7 +80,10 @@ namespace HospitalDataBaseImplements.Implements } procedure.Update(model); context.SaveChanges(); - procedure.UpdateMedicines(context, model); + if (model.ProcedureMedicine != null) + { + procedure.UpdateMedicines(context, model); + } transaction.Commit(); return procedure.GetViewModel; } diff --git a/HospitalDataBaseImplements/Implements/RecipesStorage.cs b/HospitalDataBaseImplements/Implements/RecipesStorage.cs index b257586..47abaff 100644 --- a/HospitalDataBaseImplements/Implements/RecipesStorage.cs +++ b/HospitalDataBaseImplements/Implements/RecipesStorage.cs @@ -18,7 +18,7 @@ namespace HospitalDataBaseImplements.Implements public RecipesViewModel? Delete(RecipesBindingModel model) { using var context = new HospitalDatabase(); - var element = context.Recipes.Include(x => x.Procedures).Include(x => x.Symptoms) + var element = context.Recipes.Include(x => x.Procedures).ThenInclude(x => x.Procedure).Include(x => x.Symptoms) .Include(x => x.Client).FirstOrDefault(rec => rec.Id == model.Id); if (element != null) { @@ -107,7 +107,8 @@ namespace HospitalDataBaseImplements.Implements } recipe.Update(model); context.SaveChanges(); - recipe.UpdateProcedures(context, model); + if (model.RecipeProcedures != null) + recipe.UpdateProcedures(context, model); transaction.Commit(); return recipe.GetViewModel; } diff --git a/HospitalDataBaseImplements/Models/KurseMedicines.cs b/HospitalDataBaseImplements/Models/KurseMedicines.cs new file mode 100644 index 0000000..dc33de1 --- /dev/null +++ b/HospitalDataBaseImplements/Models/KurseMedicines.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HospitalDataBaseImplements.Models +{ + public class KurseMedicines + { + public int Id { get; set; } + [Required] + public int MedicineId { get; set; } + [Required] + public int KurseId { get; set; } + public virtual Medicines Medicine { get; set; } = new(); + public virtual Kurses Kurse { get; set; } = new(); + } +} diff --git a/HospitalDataBaseImplements/Models/Kurses.cs b/HospitalDataBaseImplements/Models/Kurses.cs index 07b3d9e..bf3caee 100644 --- a/HospitalDataBaseImplements/Models/Kurses.cs +++ b/HospitalDataBaseImplements/Models/Kurses.cs @@ -14,10 +14,6 @@ namespace HospitalDataBaseImplements.Models public class Kurses : IKurseModel { public int Id { get; private set; } - [ForeignKey("MedicinesId")] - public int MedicinesId { get; private set; } - public virtual Medicines Medicines { get; set; } = new(); - public string MedicinesName { get; private set; } = string.Empty; [Required] public string Duration { get; private set; } = string.Empty; [Required] @@ -25,7 +21,26 @@ namespace HospitalDataBaseImplements.Models [ForeignKey("KurseId")] public virtual List IllnessKurses { get; set; } = new(); - public static Kurses? Create(KurseBindingModel model) + + private Dictionary? _kurseMedicine = null; + + [NotMapped] + public Dictionary KurseMedicine + { + get + { + if (_kurseMedicine == null) + { + _kurseMedicine = Medicines + .ToDictionary(rec => rec.MedicineId, rec => + rec.Medicine as IMedicinesModel); + } + return _kurseMedicine; + } + } + [ForeignKey("KurseId")] + public virtual List Medicines { get; set; } = new(); + public static Kurses? Create(KurseBindingModel model) { if (model == null) { @@ -34,7 +49,6 @@ namespace HospitalDataBaseImplements.Models return new Kurses() { Id = model.Id, - MedicinesId = model.MedicinesId, Duration = model.Duration, CountInDay = model.CountInDay }; @@ -44,8 +58,6 @@ namespace HospitalDataBaseImplements.Models return new Kurses { Id = model.Id, - MedicinesId = model.MedicinesId, - MedicinesName = model.MedicinesName, Duration = model.Duration, CountInDay = model.CountInDay }; @@ -56,15 +68,12 @@ namespace HospitalDataBaseImplements.Models { return; } - MedicinesName = model.MedicinesName; Duration = model.Duration; CountInDay = model.CountInDay; } public KurseViewModel GetViewModel => new() { Id = Id, - MedicinesId = MedicinesId, - MedicinesName = MedicinesName, Duration = Duration, CountInDay = CountInDay }; diff --git a/HospitalDataBaseImplements/Models/Medicines.cs b/HospitalDataBaseImplements/Models/Medicines.cs index ce85c27..0a1df44 100644 --- a/HospitalDataBaseImplements/Models/Medicines.cs +++ b/HospitalDataBaseImplements/Models/Medicines.cs @@ -55,6 +55,7 @@ namespace HospitalDataBaseImplements.Models } MedicinesName = model.MedicinesName; Group = model.Group; + ClientId = model.ClientId; } public MedicinesViewModel GetViewModel => new() { diff --git a/HospitalDataBaseImplements/Models/Procedures.cs b/HospitalDataBaseImplements/Models/Procedures.cs index 9c8c96e..e27f4e5 100644 --- a/HospitalDataBaseImplements/Models/Procedures.cs +++ b/HospitalDataBaseImplements/Models/Procedures.cs @@ -53,14 +53,18 @@ namespace HospitalDataBaseImplements.Models Type = model.Type }; } - public static Procedures Create(ProceduresViewModel model) + public static Procedures Create(HospitalDatabase context, ProceduresViewModel model) { return new Procedures { Id = model.Id, ClientId = model.ClientId, ProceduresName = model.ProceduresName, - Type = model.Type + Type = model.Type, + Medicines = model.ProcedureMedicine.Select(x => new ProcedureMedicine + { + Medicine = context.Medicines.First(y => y.Id == x.Key), + }).ToList() }; } public void Update(ProceduresBindingModel model) @@ -77,7 +81,8 @@ namespace HospitalDataBaseImplements.Models Id = Id, ClientId = ClientId, ProceduresName = ProceduresName, - Type = Type + Type = Type, + ProcedureMedicine = ProcedureMedicine }; public void UpdateMedicines(HospitalDatabase context, ProceduresBindingModel model) @@ -93,15 +98,11 @@ namespace HospitalDataBaseImplements.Models var existingMedicineIds = procedureMedicine?.Select(x => x.MedicineId).ToList(); foreach (var rec in model.ProcedureMedicine) { - - if (existingMedicineIds != null && !existingMedicineIds.Contains(rec.Key)) - { context.ProcedureMedicine.Add(new ProcedureMedicine { Procedure = procedure, Medicine = context.Medicines.First(x => x.Id == rec.Key), }); - } } context.SaveChanges(); _procedureMedicine = null; diff --git a/HospitalDataModels/Models/IKurseModel.cs b/HospitalDataModels/Models/IKurseModel.cs index b5f6899..1186761 100644 --- a/HospitalDataModels/Models/IKurseModel.cs +++ b/HospitalDataModels/Models/IKurseModel.cs @@ -10,7 +10,6 @@ namespace HospitalDataModels.Models { string Duration { get; } int CountInDay { get; } - int MedicinesId { get; } - string MedicinesName { get; } + Dictionary KurseMedicine { get; } } }