diff --git a/Polyclinic/PolyclinicBusinessLogic/BusinessLogics/SymptomLogic.cs b/Polyclinic/PolyclinicBusinessLogic/BusinessLogics/SymptomLogic.cs index a1dea88..f52adc7 100644 --- a/Polyclinic/PolyclinicBusinessLogic/BusinessLogics/SymptomLogic.cs +++ b/Polyclinic/PolyclinicBusinessLogic/BusinessLogics/SymptomLogic.cs @@ -73,7 +73,7 @@ namespace PolyclinicBusinessLogic.BusinessLogics public bool Update(SymptomBindingModel model) { - CheckModel(model); + CheckModel(model, false); if (_symptomStorage.Update(model) == null) { _logger.LogWarning("Update operation failed"); diff --git a/Polyclinic/PolyclinicContracts/SearchModels/SymptomSearchModel.cs b/Polyclinic/PolyclinicContracts/SearchModels/SymptomSearchModel.cs index 8131037..d3ee845 100644 --- a/Polyclinic/PolyclinicContracts/SearchModels/SymptomSearchModel.cs +++ b/Polyclinic/PolyclinicContracts/SearchModels/SymptomSearchModel.cs @@ -3,6 +3,6 @@ public class SymptomSearchModel { public int? Id { get; set; } - public string?Name { get; set; } + public string? Name { get; set; } } } diff --git a/Polyclinic/PolyclinicDatabaseImplement/Implements/CourseStorage.cs b/Polyclinic/PolyclinicDatabaseImplement/Implements/CourseStorage.cs index fccc716..e49cdd8 100644 --- a/Polyclinic/PolyclinicDatabaseImplement/Implements/CourseStorage.cs +++ b/Polyclinic/PolyclinicDatabaseImplement/Implements/CourseStorage.cs @@ -31,12 +31,9 @@ namespace PolyclinicDatabaseImplement.Implements public List GetFilteredList(CourseSearchModel model) { var elements = GetFullList(); - foreach (var prop in model.GetType().GetProperties()) + if (model.Id != null) { - if (model.GetType().GetProperty(prop.Name)?.GetValue(model, null) != null) - { - elements = elements.Where(x => x.GetType().GetProperty(prop.Name)?.GetValue(x, null) == model.GetType().GetProperty(prop.Name)?.GetValue(model, null)).ToList(); - } + elements = elements.Where(x => x.Id == model.Id).ToList(); } return elements; } diff --git a/Polyclinic/PolyclinicDatabaseImplement/Implements/SymptomStorage.cs b/Polyclinic/PolyclinicDatabaseImplement/Implements/SymptomStorage.cs index ce5759d..a532493 100644 --- a/Polyclinic/PolyclinicDatabaseImplement/Implements/SymptomStorage.cs +++ b/Polyclinic/PolyclinicDatabaseImplement/Implements/SymptomStorage.cs @@ -1,4 +1,5 @@ using Microsoft.EntityFrameworkCore; +using Microsoft.IdentityModel.Tokens; using PolyclinicContracts.BindingModels; using PolyclinicContracts.SearchModels; using PolyclinicContracts.StoragesContracts; @@ -31,12 +32,13 @@ namespace PolyclinicDatabaseImplement.Implements public List GetFilteredList(SymptomSearchModel model) { var elements = GetFullList(); - foreach (var prop in model.GetType().GetProperties()) + if (model.Id != null) { - if (model.GetType().GetProperty(prop.Name)?.GetValue(model, null) != null) - { - elements = elements.Where(x => x.GetType().GetProperty(prop.Name)?.GetValue(x, null) == model.GetType().GetProperty(prop.Name)?.GetValue(model, null)).ToList(); - } + elements = elements.Where(x => x.Id == model.Id).ToList(); + } + if (!model.Name.IsNullOrEmpty()) + { + elements = elements.Where(x => x.Name == model.Name).ToList(); } return elements; } @@ -67,14 +69,26 @@ namespace PolyclinicDatabaseImplement.Implements public SymptomViewModel? Update(SymptomBindingModel model) { using var context = new PolyclinicDatabase(); - var element = context.Symptomes.FirstOrDefault(x => x.Id == model.Id); - if (element == null) + using var transaction = context.Database.BeginTransaction(); + try { - return null; + var element = context.Symptomes.FirstOrDefault(x => x.Id == model.Id); + if (element == null) + { + return null; + } + element.Update(model); + context.SaveChanges(); + element.UpdateDiagnoses(context, model); + transaction.Commit(); + return element.GetViewModel; } - element.Update(model); - context.SaveChanges(); - return element.GetViewModel; + catch (Exception ex) + { + transaction.Rollback(); + throw; + } + } } } diff --git a/Polyclinic/PolyclinicDatabaseImplement/Models/Symptom.cs b/Polyclinic/PolyclinicDatabaseImplement/Models/Symptom.cs index f0c9b51..def1f94 100644 --- a/Polyclinic/PolyclinicDatabaseImplement/Models/Symptom.cs +++ b/Polyclinic/PolyclinicDatabaseImplement/Models/Symptom.cs @@ -63,19 +63,18 @@ namespace PolyclinicDatabaseImplement.Models public void UpdateDiagnoses(PolyclinicDatabase context, SymptomBindingModel model) { var symptomDiagnoses = context.SymptomDiagnoses.Where(rec => rec.SymptomId == model.Id).ToList(); + if (symptomDiagnoses != null && symptomDiagnoses.Count > 0) { - // удалили те, которых нет в модели - context.SymptomDiagnoses.RemoveRange(symptomDiagnoses - .Where(rec => !model.SymptomDiagnoses.ContainsKey(rec.DiagnoseId))); + context.SymptomDiagnoses.RemoveRange(symptomDiagnoses); context.SaveChanges(); } - var course = context.Symptomes.First(x => x.Id == Id); + var symptom = context.Symptomes.First(x => x.Id == model.Id); foreach (var pc in model.SymptomDiagnoses) { context.SymptomDiagnoses.Add(new SymptomDiagnose { - Symptom = course, + Symptom = symptom, Diagnose = context.Diagnoses.First(x => x.Id == pc.Key), }); context.SaveChanges(); diff --git a/Polyclinic/PolyclinicWebAppImplementer/Controllers/SymptomesController.cs b/Polyclinic/PolyclinicWebAppImplementer/Controllers/SymptomesController.cs index 6cf3a23..8578b12 100644 --- a/Polyclinic/PolyclinicWebAppImplementer/Controllers/SymptomesController.cs +++ b/Polyclinic/PolyclinicWebAppImplementer/Controllers/SymptomesController.cs @@ -3,6 +3,7 @@ using PolyclinicContracts.BindingModels; using PolyclinicContracts.BusinessLogicsContracts; using PolyclinicContracts.SearchModels; using PolyclinicContracts.ViewModels; +using PolyclinicDataModels.Models; using PolyclinicWebAppImplementer.Models; namespace PolyclinicWebAppImplementer.Controllers @@ -25,21 +26,29 @@ namespace PolyclinicWebAppImplementer.Controllers } [HttpGet] [HttpPost] - public IActionResult Add(SymptomFormModel model) + public IActionResult Add(SymptomFormModel model, int[] selectedDiagnoses) { if (HttpContext.Request.Method == "GET") { ViewData["Title"] = "Новый симптом"; - model = new(); - model.AvailableDiagnoses = _diagnoseLogic.ReadList(); + model = new() + { + Diagnoses = _diagnoseLogic.ReadList().Select(x => (x, false)).ToList() + }; return View("SymptomForm", model); } else { + var allDiagnoses = _diagnoseLogic.ReadList(); SymptomBindingModel symptom = new SymptomBindingModel { Name = model.SymptomViewModel.Name, Comment = model.SymptomViewModel.Comment, + SymptomDiagnoses = selectedDiagnoses + .ToDictionary( + x => x, + x => allDiagnoses.Where(y => y.Id == x) as IDiagnoseModel + ) }; _symptomLogic.Create(symptom); return RedirectToAction("Index"); @@ -47,21 +56,32 @@ namespace PolyclinicWebAppImplementer.Controllers } [HttpGet] [HttpPost] - public IActionResult Edit(int id, SymptomViewModel model) + public IActionResult Edit(int id, SymptomFormModel model, int[] selectedDiagnoses) { if (HttpContext.Request.Method == "GET") { var obj = _symptomLogic.ReadElement(new SymptomSearchModel { Id = id }); + model = new() + { + SymptomViewModel = obj, + Diagnoses = _diagnoseLogic.ReadList().Select(x => (x, obj.SymptomDiagnoses.ContainsKey(x.Id))).ToList() + }; ViewData["Title"] = "Редактировать симптом"; - return View("SymptomForm", obj); + return View("SymptomForm", model); } else { + var allDiagnoses = _diagnoseLogic.ReadList(); SymptomBindingModel symptom = new SymptomBindingModel { - Id = model.Id, - Name = model.Name, - Comment = model.Comment, + Id = id, + Name = model.SymptomViewModel.Name, + Comment = model.SymptomViewModel.Comment, + SymptomDiagnoses = selectedDiagnoses + .ToDictionary( + x => x, + x => allDiagnoses.Where(y => y.Id == x) as IDiagnoseModel + ) }; _symptomLogic.Update(symptom); return RedirectToAction("Index"); diff --git a/Polyclinic/PolyclinicWebAppImplementer/Models/SymptomFormModel.cs b/Polyclinic/PolyclinicWebAppImplementer/Models/SymptomFormModel.cs index 58de5b0..3364b2c 100644 --- a/Polyclinic/PolyclinicWebAppImplementer/Models/SymptomFormModel.cs +++ b/Polyclinic/PolyclinicWebAppImplementer/Models/SymptomFormModel.cs @@ -5,7 +5,6 @@ namespace PolyclinicWebAppImplementer.Models public class SymptomFormModel { public SymptomViewModel? SymptomViewModel { get; set; } - public List SelectecDiagnoses { get; set; } = new(); - public List AvailableDiagnoses { get; set; } = new(); + public List<(DiagnoseViewModel Diagnose, bool IsChecked)> Diagnoses { get; set; } = new(); } } diff --git a/Polyclinic/PolyclinicWebAppImplementer/Views/Diagnoses/DiagnoseForm.cshtml b/Polyclinic/PolyclinicWebAppImplementer/Views/Diagnoses/DiagnoseForm.cshtml index d730b29..e786401 100644 --- a/Polyclinic/PolyclinicWebAppImplementer/Views/Diagnoses/DiagnoseForm.cshtml +++ b/Polyclinic/PolyclinicWebAppImplementer/Views/Diagnoses/DiagnoseForm.cshtml @@ -4,20 +4,20 @@
-
Название:
-
+
Название:
+
-
Коментарий:
-
+
Коментарий:
+
-
Начало:
-
+
Начало:
+
-
Конец:
-
+
Конец:
+
diff --git a/Polyclinic/PolyclinicWebAppImplementer/Views/Symptomes/SymptomForm.cshtml b/Polyclinic/PolyclinicWebAppImplementer/Views/Symptomes/SymptomForm.cshtml index 2e6b4e8..aa4b38e 100644 --- a/Polyclinic/PolyclinicWebAppImplementer/Views/Symptomes/SymptomForm.cshtml +++ b/Polyclinic/PolyclinicWebAppImplementer/Views/Symptomes/SymptomForm.cshtml @@ -4,42 +4,27 @@
Название:
-
+
Коментарий:
-
-
-
Болезни
- - -
-
    - @{ - int count = 7; - for (int i = 0; i < count; i++) - { -
  1. - - - - - - Выбранная болезнь -
  2. - } + @foreach (var item in Model.Diagnoses) + { +
  3. + @if (item.IsChecked) + { + + } + else + { + + } + +
  4. }