diff --git a/Polyclinic/PolyclinicBusinessLogic/BusinessLogics/RecipeLogic.cs b/Polyclinic/PolyclinicBusinessLogic/BusinessLogics/RecipeLogic.cs index 7f5c66c..eb9228f 100644 --- a/Polyclinic/PolyclinicBusinessLogic/BusinessLogics/RecipeLogic.cs +++ b/Polyclinic/PolyclinicBusinessLogic/BusinessLogics/RecipeLogic.cs @@ -96,10 +96,6 @@ namespace PolyclinicBusinessLogic.BusinessLogics { throw new ArgumentNullException("Количество процедур не может быть равно нулю или быть меньше нуля", nameof(model)); } - if (string.IsNullOrEmpty(model.Comment)) - { - throw new ArgumentNullException("Нет комментария", nameof(model.Comment)); - } logger.LogInformation("Recipe. Comment:{Comment}. Id: { Id}", model.Comment, model.Id); } } diff --git a/Polyclinic/PolyclinicDatabaseImplement/Implements/RecipeStorage.cs b/Polyclinic/PolyclinicDatabaseImplement/Implements/RecipeStorage.cs index b2b0e4f..d80bbba 100644 --- a/Polyclinic/PolyclinicDatabaseImplement/Implements/RecipeStorage.cs +++ b/Polyclinic/PolyclinicDatabaseImplement/Implements/RecipeStorage.cs @@ -37,7 +37,7 @@ namespace PolyclinicDatabaseImplement.Implements public RecipeViewModel? GetElement(RecipeSearchModel bindingModel) { - if (!bindingModel.Id.HasValue || string.IsNullOrEmpty(bindingModel.Comment)) + if (!bindingModel.Id.HasValue) { return null; } diff --git a/Polyclinic/PolyclinicDatabaseImplement/Models/Recipe.cs b/Polyclinic/PolyclinicDatabaseImplement/Models/Recipe.cs index 6bb6636..30b214a 100644 --- a/Polyclinic/PolyclinicDatabaseImplement/Models/Recipe.cs +++ b/Polyclinic/PolyclinicDatabaseImplement/Models/Recipe.cs @@ -46,7 +46,7 @@ namespace PolyclinicDatabaseImplement.Models CourseId = bindingModel.CourseId, Procedures = bindingModel.RecipeProcedures.Select(x => new RecipeProcedure { - Recipe = database.Recipes.First(y => y.Id == x.Key) + Procedure = database.Procedures.First(y => y.Id == x.Key), }).ToList() }; } @@ -73,7 +73,7 @@ namespace PolyclinicDatabaseImplement.Models if (RecipeProcedures != null) { // удалили те, которых нет в модели - database.RecipeProcedures.RemoveRange(RecipeProcedures.Where(rec => !bindingModel.RecipeProcedures.ContainsKey(rec.RecipeId))); + database.RecipeProcedures.RemoveRange(RecipeProcedures); database.SaveChanges(); } var Procedure = database.Procedures.First(x => x.Id == bindingModel.Id); diff --git a/Polyclinic/PolyclinicWebAppSuretor/Controllers/HomeController.cs b/Polyclinic/PolyclinicWebAppSuretor/Controllers/HomeController.cs index 1a58c93..f57f4b4 100644 --- a/Polyclinic/PolyclinicWebAppSuretor/Controllers/HomeController.cs +++ b/Polyclinic/PolyclinicWebAppSuretor/Controllers/HomeController.cs @@ -4,6 +4,7 @@ using PolyclinicContracts.BindingModels; using PolyclinicContracts.BusinessLogicsContracts; using PolyclinicContracts.SearchModels; using PolyclinicContracts.ViewModels; +using PolyclinicDataModels.Models; using PolyclinicWebAppSuretor.Models; using System.Diagnostics; @@ -16,18 +17,21 @@ namespace PolyclinicWebAppSuretor.Controllers private readonly IMedicamentLogic _medicamentLogic; private readonly IRecipeLogic _recipeLogic; private readonly ISymptomLogic _symptomLogic; + private readonly ICourseLogic _courseLogic; public HomeController(ILogger logger, IProcedureLogic procedureLogic, IMedicamentLogic medicamentLogic, IRecipeLogic recipeLogic, - ISymptomLogic symptomLogic) + ISymptomLogic symptomLogic, + ICourseLogic courseLogic) { _logger = logger; _procedureLogic = procedureLogic; _medicamentLogic = medicamentLogic; _recipeLogic = recipeLogic; _symptomLogic = symptomLogic; + _courseLogic = courseLogic; } public IActionResult Index() @@ -52,63 +56,79 @@ namespace PolyclinicWebAppSuretor.Controllers [HttpGet] [HttpPost] - public IActionResult CreateRecipe(RecipeViewModel model) + public IActionResult CreateRecipe(RecipeModel model, int[] selectedProcedures) { - ViewBag.Procedures = _procedureLogic.ReadList(null); + ViewBag.Courses = _courseLogic.ReadList(null); if (HttpContext.Request.Method == "GET") { ViewData["Title"] = " "; - return View(); + model = new() + { + Procedures = _procedureLogic.ReadList(null).Select(x => (x, false)).ToList() + }; + return View("CreateRecipe", model); } else { - // TODO UserId + var allProcedures = _procedureLogic.ReadList(null); + RecipeBindingModel recipe = new RecipeBindingModel { - Comment = model.Comment, - CourseId = model.CourseId, - ProceduresCount = model.ProceduresCount, - RecipeProcedures = model.RecipeProcedures + ProceduresCount = model.RecipeViewModel.ProceduresCount, + Comment = model.RecipeViewModel.Comment, + RecipeProcedures = selectedProcedures + .ToDictionary( + x => x, + x => allProcedures.Where(y => y.Id == x) as IProcedureModel + ) }; _recipeLogic.Create(recipe); - return RedirectToAction("Medicaments"); + return RedirectToAction("Recipes"); } } - [HttpGet] [HttpPost] - public IActionResult EditRecipe(MedicamentViewModel model) + public IActionResult EditRecipe(int id, RecipeModel model, int[] selectedProcedures) { if (HttpContext.Request.Method == "GET") { - var obj = _medicamentLogic.ReadElement(new MedicamentSearchModel { Id = model.Id }); - ViewData["Title"] = " "; - return View("CreateMedicament", obj); + var obj = _recipeLogic.ReadElement(new RecipeSearchModel { Id = id }); + model = new() + { + RecipeViewModel = obj, + Procedures = _procedureLogic.ReadList(null).Select(x => (x, obj.RecipeProcedures.ContainsKey(x.Id))).ToList() + }; + ViewData["Title"] = " "; + return View("CreateRecipe", model); } else { - MedicamentBindingModel medicament = new MedicamentBindingModel + var allProcedures = _procedureLogic.ReadList(null); + + RecipeBindingModel recipe = new RecipeBindingModel { - Id = model.Id, - Name = model.Name, - Comment = model.Comment ?? string.Empty, - SymptomId = model.SymptomId, - ProcedureId = model.ProcedureId, + Id = id, + ProceduresCount = model.RecipeViewModel.ProceduresCount, + Comment = model.RecipeViewModel.Comment, + RecipeProcedures = selectedProcedures + .ToDictionary( + x => x, + x => allProcedures.Where(y => y.Id == x) as IProcedureModel + ) }; - _medicamentLogic.Update(medicament); - return RedirectToAction("Medicaments"); + _recipeLogic.Update(recipe); + return RedirectToAction("Recipes"); } } - [HttpPost] public IActionResult DeleteRecipe(int id) { - var obj = _medicamentLogic.ReadElement(new MedicamentSearchModel { Id = id }); + var obj = _recipeLogic.ReadElement(new RecipeSearchModel { Id = id }); if (obj != null) { - _medicamentLogic.Delete(new MedicamentBindingModel { Id = obj.Id }); + _recipeLogic.Delete(new RecipeBindingModel { Id = obj.Id }); } - return RedirectToAction("Medicaments"); + return RedirectToAction("Recipes"); } public IActionResult Medicaments() diff --git a/Polyclinic/PolyclinicWebAppSuretor/Models/RecipeModel.cs b/Polyclinic/PolyclinicWebAppSuretor/Models/RecipeModel.cs new file mode 100644 index 0000000..9e07859 --- /dev/null +++ b/Polyclinic/PolyclinicWebAppSuretor/Models/RecipeModel.cs @@ -0,0 +1,10 @@ +using PolyclinicContracts.ViewModels; + +namespace PolyclinicWebAppSuretor.Models +{ + public class RecipeModel + { + public RecipeViewModel? RecipeViewModel { get; set; } + public List<(ProcedureViewModel procedure, bool IsChecked)> Procedures { get; set; } = new(); + } +} diff --git a/Polyclinic/PolyclinicWebAppSuretor/Views/Home/CreateRecipe.cshtml b/Polyclinic/PolyclinicWebAppSuretor/Views/Home/CreateRecipe.cshtml index d7fd636..6185efa 100644 --- a/Polyclinic/PolyclinicWebAppSuretor/Views/Home/CreateRecipe.cshtml +++ b/Polyclinic/PolyclinicWebAppSuretor/Views/Home/CreateRecipe.cshtml @@ -1,8 +1,6 @@ @using PolyclinicContracts.ViewModels -@model RecipeViewModel -@{ +@model RecipeModel -}

@ViewData["Title"]

@@ -15,65 +13,60 @@

Количество процедур:

- +

Комментарий:

- -
-
+

- Выбор процедуры: + Курс (номер):

- + + @foreach (var course in ViewBag.Courses) { - + }
-
-
- - - - - - - - @foreach (var item in ViewBag.Procedures) +
+

+ Выбор процедуры: +

+ +
    + @foreach (var item in Model.Procedures) { -
- - - - +
  • + @if (item.IsChecked) + { + + } + else + { + + } + +
  • } - -
    - Выбранное из процедур: -
    Процедура № @item.Id @item.Name - - - - - -
    - + +
    + +
    - +
    \ No newline at end of file diff --git a/Polyclinic/PolyclinicWebAppSuretor/Views/Home/Recipes.cshtml b/Polyclinic/PolyclinicWebAppSuretor/Views/Home/Recipes.cshtml index cfb7a95..091e167 100644 --- a/Polyclinic/PolyclinicWebAppSuretor/Views/Home/Recipes.cshtml +++ b/Polyclinic/PolyclinicWebAppSuretor/Views/Home/Recipes.cshtml @@ -30,6 +30,9 @@ Количество процедур + + Номер курса + Редактировать @@ -41,28 +44,32 @@ @foreach (var item in Model) { - @item.Id - @item.Comment - @item.ProceduresCount - - - - - - - - -
    - -
    + + @item.Id + @item.Comment + @item.ProceduresCount@item.CourseId + + + + + + + + +
    + +
    + + + - }