доделала круды вроде для обычных сущностей, нужно привязки сделать..

This commit is contained in:
Елена Бакальская 2024-05-28 16:55:59 +04:00
parent abc0bcf254
commit 9c97590f23
7 changed files with 120 additions and 94 deletions

View File

@ -96,10 +96,6 @@ namespace PolyclinicBusinessLogic.BusinessLogics
{ {
throw new ArgumentNullException("Количество процедур не может быть равно нулю или быть меньше нуля", nameof(model)); 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); logger.LogInformation("Recipe. Comment:{Comment}. Id: { Id}", model.Comment, model.Id);
} }
} }

View File

@ -37,7 +37,7 @@ namespace PolyclinicDatabaseImplement.Implements
public RecipeViewModel? GetElement(RecipeSearchModel bindingModel) public RecipeViewModel? GetElement(RecipeSearchModel bindingModel)
{ {
if (!bindingModel.Id.HasValue || string.IsNullOrEmpty(bindingModel.Comment)) if (!bindingModel.Id.HasValue)
{ {
return null; return null;
} }

View File

@ -46,7 +46,7 @@ namespace PolyclinicDatabaseImplement.Models
CourseId = bindingModel.CourseId, CourseId = bindingModel.CourseId,
Procedures = bindingModel.RecipeProcedures.Select(x => new RecipeProcedure 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() }).ToList()
}; };
} }
@ -73,7 +73,7 @@ namespace PolyclinicDatabaseImplement.Models
if (RecipeProcedures != null) if (RecipeProcedures != null)
{ {
// удалили те, которых нет в модели // удалили те, которых нет в модели
database.RecipeProcedures.RemoveRange(RecipeProcedures.Where(rec => !bindingModel.RecipeProcedures.ContainsKey(rec.RecipeId))); database.RecipeProcedures.RemoveRange(RecipeProcedures);
database.SaveChanges(); database.SaveChanges();
} }
var Procedure = database.Procedures.First(x => x.Id == bindingModel.Id); var Procedure = database.Procedures.First(x => x.Id == bindingModel.Id);

View File

@ -4,6 +4,7 @@ using PolyclinicContracts.BindingModels;
using PolyclinicContracts.BusinessLogicsContracts; using PolyclinicContracts.BusinessLogicsContracts;
using PolyclinicContracts.SearchModels; using PolyclinicContracts.SearchModels;
using PolyclinicContracts.ViewModels; using PolyclinicContracts.ViewModels;
using PolyclinicDataModels.Models;
using PolyclinicWebAppSuretor.Models; using PolyclinicWebAppSuretor.Models;
using System.Diagnostics; using System.Diagnostics;
@ -16,18 +17,21 @@ namespace PolyclinicWebAppSuretor.Controllers
private readonly IMedicamentLogic _medicamentLogic; private readonly IMedicamentLogic _medicamentLogic;
private readonly IRecipeLogic _recipeLogic; private readonly IRecipeLogic _recipeLogic;
private readonly ISymptomLogic _symptomLogic; private readonly ISymptomLogic _symptomLogic;
private readonly ICourseLogic _courseLogic;
public HomeController(ILogger<HomeController> logger, public HomeController(ILogger<HomeController> logger,
IProcedureLogic procedureLogic, IProcedureLogic procedureLogic,
IMedicamentLogic medicamentLogic, IMedicamentLogic medicamentLogic,
IRecipeLogic recipeLogic, IRecipeLogic recipeLogic,
ISymptomLogic symptomLogic) ISymptomLogic symptomLogic,
ICourseLogic courseLogic)
{ {
_logger = logger; _logger = logger;
_procedureLogic = procedureLogic; _procedureLogic = procedureLogic;
_medicamentLogic = medicamentLogic; _medicamentLogic = medicamentLogic;
_recipeLogic = recipeLogic; _recipeLogic = recipeLogic;
_symptomLogic = symptomLogic; _symptomLogic = symptomLogic;
_courseLogic = courseLogic;
} }
public IActionResult Index() public IActionResult Index()
@ -52,63 +56,79 @@ namespace PolyclinicWebAppSuretor.Controllers
[HttpGet] [HttpGet]
[HttpPost] [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") if (HttpContext.Request.Method == "GET")
{ {
ViewData["Title"] = "Íîâûé ðåöåïò"; ViewData["Title"] = "Íîâûé ðåöåïò";
return View(); model = new()
{
Procedures = _procedureLogic.ReadList(null).Select(x => (x, false)).ToList()
};
return View("CreateRecipe", model);
} }
else else
{ {
// TODO ïðîïèñàòü UserId var allProcedures = _procedureLogic.ReadList(null);
RecipeBindingModel recipe = new RecipeBindingModel RecipeBindingModel recipe = new RecipeBindingModel
{ {
Comment = model.Comment, ProceduresCount = model.RecipeViewModel.ProceduresCount,
CourseId = model.CourseId, Comment = model.RecipeViewModel.Comment,
ProceduresCount = model.ProceduresCount, RecipeProcedures = selectedProcedures
RecipeProcedures = model.RecipeProcedures .ToDictionary(
x => x,
x => allProcedures.Where(y => y.Id == x) as IProcedureModel
)
}; };
_recipeLogic.Create(recipe); _recipeLogic.Create(recipe);
return RedirectToAction("Medicaments"); return RedirectToAction("Recipes");
} }
} }
[HttpGet] [HttpGet]
[HttpPost] [HttpPost]
public IActionResult EditRecipe(MedicamentViewModel model) public IActionResult EditRecipe(int id, RecipeModel model, int[] selectedProcedures)
{ {
if (HttpContext.Request.Method == "GET") if (HttpContext.Request.Method == "GET")
{ {
var obj = _medicamentLogic.ReadElement(new MedicamentSearchModel { Id = model.Id }); var obj = _recipeLogic.ReadElement(new RecipeSearchModel { Id = id });
ViewData["Title"] = "Ðåäàêòèðîâàòü ïðåïàðàò"; model = new()
return View("CreateMedicament", obj); {
RecipeViewModel = obj,
Procedures = _procedureLogic.ReadList(null).Select(x => (x, obj.RecipeProcedures.ContainsKey(x.Id))).ToList()
};
ViewData["Title"] = "Ðåäàêòèðîâàòü ñèìïòîì";
return View("CreateRecipe", model);
} }
else else
{ {
MedicamentBindingModel medicament = new MedicamentBindingModel var allProcedures = _procedureLogic.ReadList(null);
RecipeBindingModel recipe = new RecipeBindingModel
{ {
Id = model.Id, Id = id,
Name = model.Name, ProceduresCount = model.RecipeViewModel.ProceduresCount,
Comment = model.Comment ?? string.Empty, Comment = model.RecipeViewModel.Comment,
SymptomId = model.SymptomId, RecipeProcedures = selectedProcedures
ProcedureId = model.ProcedureId, .ToDictionary(
x => x,
x => allProcedures.Where(y => y.Id == x) as IProcedureModel
)
}; };
_medicamentLogic.Update(medicament); _recipeLogic.Update(recipe);
return RedirectToAction("Medicaments"); return RedirectToAction("Recipes");
} }
} }
[HttpPost] [HttpPost]
public IActionResult DeleteRecipe(int id) public IActionResult DeleteRecipe(int id)
{ {
var obj = _medicamentLogic.ReadElement(new MedicamentSearchModel { Id = id }); var obj = _recipeLogic.ReadElement(new RecipeSearchModel { Id = id });
if (obj != null) 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() public IActionResult Medicaments()

View File

@ -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();
}
}

View File

@ -1,8 +1,6 @@
@using PolyclinicContracts.ViewModels @using PolyclinicContracts.ViewModels
@model RecipeViewModel @model RecipeModel
@{
}
<div class="text-center mt-3 mb-3"> <div class="text-center mt-3 mb-3">
<h2 class="display-4">@ViewData["Title"]</h2> <h2 class="display-4">@ViewData["Title"]</h2>
</div> </div>
@ -15,65 +13,60 @@
<h3 class="col-3"> <h3 class="col-3">
Количество процедур: Количество процедур:
</h3> </h3>
<input class="col-6" type="text" style="width: 45vh" asp-for="ProceduresCount" /> <input class="col-6" type="text" style="width: 45vh" asp-for="RecipeViewModel.ProceduresCount" />
</div> </div>
<div class="d-flex flex-row mb-5 flex-row justify-content-between align-items-center"> <div class="d-flex flex-row mb-5 flex-row justify-content-between align-items-center">
<h3 class="col-3"> <h3 class="col-3">
Комментарий: Комментарий:
</h3> </h3>
<textarea class="col-6" id="comment" name="comment" style="width: 45vh" asp-for="Comment"> <textarea class="col-6" style="width: 45vh" asp-for="RecipeViewModel.Comment">
</textarea> </textarea>
</div> </div>
<div class="d-flex flex-row mb-5 justify-content-between align-items-center"> <div class="d-flex flex-row mb-5 flex-row justify-content-between align-items-center">
<h3 class="col-3"> <h3 class="col-3">
Выбор процедуры: Курс (номер):
</h3> </h3>
<select id="procedureId" name="procedureId" style="width: 45vh"> <select id="courseId" style="width: 45vh" asp-for="RecipeViewModel.CourseId">
<option value="">Выберите процедуру/ы</option> <option value="">Выберите номер курса</option>
@foreach (var item in ViewBag.Procedures) @foreach (var course in ViewBag.Courses)
{ {
<option value="@item.Id">@item.Name</option> <option value="@course.Id">@course.PillsPerDay</option>
} }
</select> </select>
</div> </div>
</div>
<div class="proc-list d-flex flex-column overflow-auto" style="max-height: 45vh"> <div class="d-flex flex-row mb-5 justify-content-between align-items-center overflow-auto" style="max-height: 20vh">
<table class="table-recipe-create table"> <h3 class="col-3">
<thead> Выбор процедуры:
<tr> </h3>
<th> <label value="">Выберите процедуру/ы</label>
Выбранное из процедур: <ol>
</th> @foreach (var item in Model.Procedures)
</tr>
</thead>
<tbody>
@foreach (var item in ViewBag.Procedures)
{ {
<tr> <li>
<td>Процедура № @item.Id @item.Name</td> @if (item.IsChecked)
<td> {
<svg class="bi-cart-delete" viewBox="0 0 154 164" fill="none" xmlns="http://www.w3.org/2000/svg"> <input type="checkbox" id="procedure-@item.procedure.Id" name="selectedProcedures" value="@item.procedure.Id" checked />
<path d="M44.5 123C4.99995 119.5 -11.8431 56.4293 24 19.5C40.5 2.50001 72.5 -5.5 101.5 27.5L115.5 14.5" stroke="#D10000" stroke-width="8" stroke-linecap="round" /> }
<path d="M65.2123 159.963L56 60.0001C88.0236 76.3307 119.521 77.4194 149 60.0001C141.63 142.346 140.08 160.953 140.226 159.963H65.2123Z" stroke="#D10000" stroke-width="8" /> else
<path d="M121 36L101.582 55L75 31" stroke="#D10000" stroke-width="8" stroke-linecap="round" /> {
</svg> <input type="checkbox" id="procedure-@item.procedure.Id" name="selectedProcedures" value="@item.procedure.Id" />
</td> }
</tr> <label for="procedure-@item.procedure.Id">@item.procedure.Name</label>
</li>
} }
</tbody> </ol>
</table> </div>
</div> </div>
<div class="d-flex flex-column mb-5 mt-5"> <div class="d-flex flex-column mb-5 mt-5">
<div class="col-8"></div> <div class="col-8"></div>
<div class="col-4"> <div class="col-4">
<input type="submit" value="Сохранить" class="button-save-recipe btn" asp-action="Recipes" /> <input type="submit" value="Сохранить" class="button-save-recipe btn" />
</div> </div>
</div> </div>
</form> </form>

View File

@ -30,6 +30,9 @@
<th> <th>
Количество процедур Количество процедур
</th> </th>
<th>
Номер курса
</th>
<th> <th>
Редактировать Редактировать
</th> </th>
@ -41,28 +44,32 @@
<tbody> <tbody>
@foreach (var item in Model) @foreach (var item in Model)
{ {
<td>@item.Id</td> <tr>
<td>@item.Comment</td> <td>@item.Id</td>
<td>@item.ProceduresCount</td> <td>@item.Comment</td>
<td> <td>@item.ProceduresCount</td
<a asp-action="CreateRecipe" asp-route-id="@item.Id"> <td>@item.CourseId</td>
<svg class="bi-edit-pen" viewBox="0 0 127 127" fill="none" xmlns="http://www.w3.org/2000/svg"> <td>
<path d="M105.5 26L37 114.5C34.5 117 16.3 121.7 7.5 122.5C79.1 34.1 101 5.5 102 4C104.833 4.5 119.3 14.6 122.5 21C105 44 98.5 55 111.5 58.5" stroke="#008315" stroke-width="6" stroke-linecap="round" /> <a asp-action="EditRecipe" asp-route-id="@item.Id">
</svg> <svg class="bi-edit-pen" viewBox="0 0 127 127" fill="none" xmlns="http://www.w3.org/2000/svg">
</a> <path d="M105.5 26L37 114.5C34.5 117 16.3 121.7 7.5 122.5C79.1 34.1 101 5.5 102 4C104.833 4.5 119.3 14.6 122.5 21C105 44 98.5 55 111.5 58.5" stroke="#008315" stroke-width="6" stroke-linecap="round" />
</td> </svg>
<td> </a>
<form method="post" asp-route-id="@item.Id"> </td>
<button class="btn" type="submit"> <td>
<svg class="bi-cart-delete" viewBox="0 0 154 164" fill="none" xmlns="http://www.w3.org/2000/svg"> <form method="post" asp-route-id="@item.Id" asp-action="DeleteRecipe">
<path d="M44.5 123C4.99995 119.5 -11.8431 56.4293 24 19.5C40.5 2.50001 72.5 -5.5 101.5 27.5L115.5 14.5" stroke="#D10000" stroke-width="8" stroke-linecap="round" /> <button class="btn" type="submit">
<path d="M65.2123 159.963L56 60.0001C88.0236 76.3307 119.521 77.4194 149 60.0001C141.63 142.346 140.08 160.953 140.226 159.963H65.2123Z" stroke="#D10000" stroke-width="8" /> <svg class="bi-cart-delete" viewBox="0 0 154 164" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M121 36L101.582 55L75 31" stroke="#D10000" stroke-width="8" stroke-linecap="round" /> <path d="M44.5 123C4.99995 119.5 -11.8431 56.4293 24 19.5C40.5 2.50001 72.5 -5.5 101.5 27.5L115.5 14.5" stroke="#D10000" stroke-width="8" stroke-linecap="round" />
</svg> <path d="M65.2123 159.963L56 60.0001C88.0236 76.3307 119.521 77.4194 149 60.0001C141.63 142.346 140.08 160.953 140.226 159.963H65.2123Z" stroke="#D10000" stroke-width="8" />
</button> <path d="M121 36L101.582 55L75 31" stroke="#D10000" stroke-width="8" stroke-linecap="round" />
</form> </svg>
</button>
</form>
</td>
</tr>
</td>
} }
</tbody> </tbody>