круд - осталось удаление
This commit is contained in:
parent
2d4eb46712
commit
9fab1534a5
@ -23,7 +23,6 @@ namespace VeterinaryClinicDatabaseImplement.Implements
|
||||
.ThenInclude(x => x.Animal)
|
||||
.Include(x => x.Services)
|
||||
.ThenInclude(x => x.Service)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
@ -31,20 +30,23 @@ namespace VeterinaryClinicDatabaseImplement.Implements
|
||||
{
|
||||
using var context = new VeterinaryClinicDatabase();
|
||||
|
||||
if (model.DateFrom.HasValue && model.DateTo.HasValue)
|
||||
{
|
||||
return context.Visits
|
||||
var filtered = context.Visits
|
||||
.Include(x => x.User)
|
||||
.Include(x => x.Animals)
|
||||
.ThenInclude(x => x.Animal)
|
||||
.Include(x => x.Services)
|
||||
.ThenInclude (x => x.Service)
|
||||
.Where(x => x.Date >= model.DateFrom && x.Date <= model.DateTo)
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
|
||||
if (model.UserId.HasValue)
|
||||
{
|
||||
filtered = filtered
|
||||
.Where(x => x.UserId.Equals(model.UserId))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
return new();
|
||||
return filtered ?? new();
|
||||
}
|
||||
|
||||
public VisitViewModel? GetElement(VisitSearchModel model)
|
||||
@ -96,7 +98,7 @@ namespace VeterinaryClinicDatabaseImplement.Implements
|
||||
visit.Update(model);
|
||||
context.SaveChanges();
|
||||
visit.UpdateAnimals(context, model);
|
||||
visit.UpdateMedication(context, model);
|
||||
visit.UpdateServices(context, model);
|
||||
transaction.Commit();
|
||||
return visit.GetViewModel;
|
||||
}
|
||||
|
@ -94,11 +94,8 @@ namespace VeterinaryClinicDatabaseImplement.Models
|
||||
public void UpdateMedications(VeterinaryClinicDatabase context, AnimalBindingModel model)
|
||||
{
|
||||
var animalMedications = context.AnimalMedications.Where(rec => rec.AnimalId == model.Id).ToList();
|
||||
if (animalMedications != null && animalMedications.Count > 0)
|
||||
{
|
||||
context.AnimalMedications.RemoveRange(animalMedications.Where(rec => !model.AnimalMedications.ContainsKey(rec.MedicationId)));
|
||||
context.AnimalMedications.RemoveRange(animalMedications);
|
||||
context.SaveChanges();
|
||||
}
|
||||
|
||||
var animal = context.Animals.First(x => x.Id == Id);
|
||||
foreach (var pr in model.AnimalMedications)
|
||||
|
@ -105,11 +105,8 @@ namespace VeterinaryClinicDatabaseImplement.Models
|
||||
public void UpdateAnimals(VeterinaryClinicDatabase context, VisitBindingModel model)
|
||||
{
|
||||
var visitAnimals = context.VisitAnimals.Where(rec => rec.VisitId == model.Id).ToList();
|
||||
if (visitAnimals != null && visitAnimals.Count > 0)
|
||||
{
|
||||
context.VisitAnimals.RemoveRange(visitAnimals.Where(rec => !model.VisitAnimals.ContainsKey(rec.AnimalId)));
|
||||
context.VisitAnimals.RemoveRange(visitAnimals);
|
||||
context.SaveChanges();
|
||||
}
|
||||
|
||||
var visit = context.Visits.First(x => x.Id == Id);
|
||||
foreach (var rm in model.VisitAnimals)
|
||||
@ -124,14 +121,11 @@ namespace VeterinaryClinicDatabaseImplement.Models
|
||||
_visitAnimals = null;
|
||||
}
|
||||
|
||||
public void UpdateMedication(VeterinaryClinicDatabase context, VisitBindingModel model)
|
||||
public void UpdateServices(VeterinaryClinicDatabase context, VisitBindingModel model)
|
||||
{
|
||||
var visitServices = context.VisitServices.Where(rec => rec.VisitId == model.Id).ToList();
|
||||
if (visitServices != null && visitServices.Count > 0)
|
||||
{
|
||||
context.VisitServices.RemoveRange(visitServices.Where(rec => !model.VisitServices.ContainsKey(rec.ServiceId)));
|
||||
context.VisitServices.RemoveRange(visitServices);
|
||||
context.SaveChanges();
|
||||
}
|
||||
|
||||
var visit = context.Visits.First(x => x.Id == Id);
|
||||
foreach (var rm in model.VisitServices)
|
||||
|
@ -1,6 +1,11 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.Diagnostics;
|
||||
using VeterinaryClinicBusinessLogics.BusinessLogics;
|
||||
using VeterinaryClinicContracts.BindingModels;
|
||||
using VeterinaryClinicContracts.BusinessLogicsContracts;
|
||||
using VeterinaryClinicContracts.SearchModels;
|
||||
using VeterinaryClinicDataModels.Models;
|
||||
using VeterinaryClinicWebApp.Models;
|
||||
|
||||
namespace VeterinaryClinicWebApp.Controllers
|
||||
@ -8,20 +13,156 @@ namespace VeterinaryClinicWebApp.Controllers
|
||||
public class VisitController : Controller
|
||||
{
|
||||
private readonly ILogger<VisitController> _logger;
|
||||
public VisitController(ILogger<VisitController> logger)
|
||||
|
||||
private readonly IVisitLogic _visitLogic;
|
||||
|
||||
private readonly IAnimalLogic _animalLogic;
|
||||
|
||||
private readonly IServiceLogic _serviceLogic;
|
||||
public VisitController(ILogger<VisitController> logger, IVisitLogic visitLogic, IAnimalLogic animalLogic, IServiceLogic serviceLogic)
|
||||
{
|
||||
_logger = logger;
|
||||
_visitLogic = visitLogic;
|
||||
_animalLogic = animalLogic;
|
||||
_serviceLogic = serviceLogic;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Вывести список животных
|
||||
/// </summary>
|
||||
public IActionResult Visits()
|
||||
{
|
||||
if (APIClient.User == null)
|
||||
{
|
||||
return Redirect("~/Home/Enter");
|
||||
}
|
||||
|
||||
return View(_visitLogic.ReadList(new VisitSearchModel
|
||||
{
|
||||
UserId = APIClient.User.Id,
|
||||
}));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создать животного
|
||||
/// </summary>
|
||||
[HttpGet]
|
||||
public IActionResult CreateVisit()
|
||||
{
|
||||
if (APIClient.User == null)
|
||||
{
|
||||
return Redirect("~/Home/Enter");
|
||||
}
|
||||
|
||||
ViewBag.Animals = _animalLogic.ReadList(new AnimalSearchModel
|
||||
{
|
||||
UserId = APIClient.User.Id,
|
||||
});
|
||||
|
||||
ViewBag.Services = _serviceLogic.ReadList(null);
|
||||
|
||||
return View();
|
||||
}
|
||||
|
||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
||||
public IActionResult Error()
|
||||
[HttpPost]
|
||||
public void CreateVisit(DateTime dateVisit, List<int> animal, List<int> service)
|
||||
{
|
||||
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
|
||||
}
|
||||
if (APIClient.User == null)
|
||||
{
|
||||
throw new Exception("Необходимо авторизоваться!");
|
||||
}
|
||||
|
||||
if (dateVisit == DateTime.MinValue || animal == null || service == null)
|
||||
{
|
||||
throw new Exception("Введены не все данные!");
|
||||
}
|
||||
|
||||
Dictionary<int, IAnimalModel> visitAnimals = new Dictionary<int, IAnimalModel>();
|
||||
foreach (var animalId in animal)
|
||||
{
|
||||
visitAnimals.Add(animalId, _animalLogic.ReadElement(new AnimalSearchModel { Id = animalId })!);
|
||||
}
|
||||
|
||||
Dictionary<int, IServiceModel> visitServices = new Dictionary<int, IServiceModel>();
|
||||
foreach (var serviceId in service)
|
||||
{
|
||||
visitServices.Add(serviceId, _serviceLogic.ReadElement(new ServiceSearchModel { Id = serviceId })!);
|
||||
}
|
||||
|
||||
_visitLogic.Create(new VisitBindingModel
|
||||
{
|
||||
Date = dateVisit,
|
||||
VisitAnimals = visitAnimals,
|
||||
VisitServices = visitServices,
|
||||
UserId = APIClient.User.Id
|
||||
});
|
||||
|
||||
Response.Redirect("/Visit/Visits");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Редактировать животного
|
||||
/// </summary>
|
||||
[HttpGet]
|
||||
public IActionResult UpdateVisit(int id)
|
||||
{
|
||||
if (APIClient.User == null)
|
||||
{
|
||||
return Redirect("~/Home/Enter");
|
||||
}
|
||||
|
||||
ViewBag.Animals = _animalLogic.ReadList(new AnimalSearchModel
|
||||
{
|
||||
UserId = APIClient.User.Id,
|
||||
});
|
||||
|
||||
ViewBag.Services = _serviceLogic.ReadList(null);
|
||||
|
||||
return View(_visitLogic.ReadElement(new VisitSearchModel
|
||||
{
|
||||
Id = id
|
||||
}));
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public void UpdateVisit(int id, DateTime dateVisit, List<int> animal, List<int> service)
|
||||
{
|
||||
if (APIClient.User == null)
|
||||
{
|
||||
throw new Exception("Необходимо авторизоваться!");
|
||||
}
|
||||
|
||||
if (dateVisit == DateTime.MinValue || animal == null || service == null)
|
||||
{
|
||||
throw new Exception("Введены не все данные!");
|
||||
}
|
||||
|
||||
Dictionary<int, IAnimalModel> visitAnimals = new Dictionary<int, IAnimalModel>();
|
||||
foreach (var animalId in animal)
|
||||
{
|
||||
visitAnimals.Add(animalId, _animalLogic.ReadElement(new AnimalSearchModel { Id = animalId })!);
|
||||
}
|
||||
|
||||
Dictionary<int, IServiceModel> visitServices = new Dictionary<int, IServiceModel>();
|
||||
foreach (var serviceId in service)
|
||||
{
|
||||
visitServices.Add(serviceId, _serviceLogic.ReadElement(new ServiceSearchModel { Id = serviceId })!);
|
||||
}
|
||||
|
||||
_visitLogic.Update(new VisitBindingModel
|
||||
{
|
||||
Id = id,
|
||||
Date = dateVisit,
|
||||
VisitAnimals = visitAnimals,
|
||||
VisitServices = visitServices,
|
||||
UserId = APIClient.User.Id
|
||||
});
|
||||
|
||||
Response.Redirect("/Visit/Visits");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Удалить животного
|
||||
/// </summary>
|
||||
}
|
||||
}
|
||||
|
@ -28,7 +28,7 @@
|
||||
<div class="row">
|
||||
<div class="col-4">Медикаменты:</div>
|
||||
<div class="col-8">
|
||||
<select name="medications" id="medications" class="form-control" size="4" multiple>
|
||||
<select name="medication" id="medication" class="form-control" size="4" multiple>
|
||||
@foreach (var medication in ViewBag.Medications)
|
||||
{
|
||||
<option value="@medication.Id">@medication.Name</option>
|
||||
|
@ -34,7 +34,7 @@
|
||||
<div class="row">
|
||||
<div class="col-4">Медикаменты:</div>
|
||||
<div class="col-8">
|
||||
<select name="medications" id="medications" class="form-control" multiple>
|
||||
<select name="medication" id="medication" class="form-control" multiple>
|
||||
@foreach (var medication in ViewBag.Medications)
|
||||
{
|
||||
var isSelected = Model.AnimalMedications.Any(x => x.Key.Equals(medication.Id));
|
||||
|
@ -0,0 +1,47 @@
|
||||
@{
|
||||
ViewData["Title"] = "Создание визита";
|
||||
}
|
||||
|
||||
<div class="text-center">
|
||||
<h2 class="display-4">Создание визита</h2>
|
||||
</div>
|
||||
|
||||
<form method="post" style="margin-top: 50px">
|
||||
<!-- Дата визита -->
|
||||
<div class="row">
|
||||
<div class="col-4">Дата визита:</div>
|
||||
<div class="col-8"><input type="datetime-local" class="form-control" name="dateVisit" id="dateVisit" /></div>
|
||||
</div>
|
||||
|
||||
<!-- Животные -->
|
||||
<div class="row">
|
||||
<div class="col-4">Животные:</div>
|
||||
<div class="col-8">
|
||||
<select name="animal" id="animal" class="form-control" size="4" multiple>
|
||||
@foreach (var animal in ViewBag.Animals)
|
||||
{
|
||||
<option value="@animal.Id">@animal.Breed</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Услуги -->
|
||||
<div class="row">
|
||||
<div class="col-4">Услуги:</div>
|
||||
<div class="col-8">
|
||||
<select name="service" id="service" class="form-control" size="4" multiple>
|
||||
@foreach (var service in ViewBag.Services)
|
||||
{
|
||||
<option value="@service.Id">@service.Name - @service.Cost</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Кнопка "Создать" -->
|
||||
<div class="row">
|
||||
<div class="col-8"></div>
|
||||
<div class="col-4"><input type="submit" value="Создать" class="btn btn-primary" /></div>
|
||||
</div>
|
||||
</form>
|
@ -0,0 +1,54 @@
|
||||
|
||||
@using VeterinaryClinicContracts.ViewModels
|
||||
|
||||
@model VisitViewModel
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Редактирование визита";
|
||||
}
|
||||
|
||||
<div class="text-center">
|
||||
<h2 class="display-4">Редактирование визита</h2>
|
||||
</div>
|
||||
|
||||
<form method="post" style="margin-top: 50px">
|
||||
<!-- Дата визита -->
|
||||
<div class="row">
|
||||
<div class="col-4">Дата визита:</div>
|
||||
<div class="col-8"><input type="datetime-local" class="form-control" name="dateVisit" value="@Model.Date.ToString("yyyy-MM-ddTHH:mm")" /></div>
|
||||
</div>
|
||||
|
||||
<!-- Животные -->
|
||||
<div class="row">
|
||||
<div class="col-4">Животные:</div>
|
||||
<div class="col-8">
|
||||
<select name="animal" id="animal" class="form-control" size="4" multiple>
|
||||
@foreach (var animal in ViewBag.Animals)
|
||||
{
|
||||
var isSelected = Model.VisitAnimals.Any(x => x.Key.Equals(animal.Id));
|
||||
<option value="@animal.Id" selected="@isSelected">@animal.Breed</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Услуги -->
|
||||
<div class="row">
|
||||
<div class="col-4">Услуги:</div>
|
||||
<div class="col-8">
|
||||
<select name="service" id="service" class="form-control" size="4" multiple>
|
||||
@foreach (var service in ViewBag.Services)
|
||||
{
|
||||
var isSelected = Model.VisitServices.Any(x => x.Key.Equals(service.Id));
|
||||
<option value="@service.Id" selected="@isSelected">@service.Name - @service.Cost</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Кнопка "Сохранить" -->
|
||||
<div class="row">
|
||||
<div class="col-8"></div>
|
||||
<div class="col-4"><input type="submit" value="Сохранить" class="btn btn-primary" /></div>
|
||||
</div>
|
||||
</form>
|
@ -30,6 +30,7 @@
|
||||
<th>Пользователь</th>
|
||||
<th>Животные</th>
|
||||
<th>Услуги</th>
|
||||
<th>Действия</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@ -38,14 +39,40 @@
|
||||
{
|
||||
<tr>
|
||||
<td>@Html.DisplayFor(modelItem => visit.Id)</td>
|
||||
<td>@Html.DisplayFor(modelItem => visit.Date.ToShortDateString())</td>
|
||||
<td>@Html.DisplayFor(modelItem => visit.Date)</td>
|
||||
<td>@Html.DisplayFor(modelItem => visit.UserFullName)</td>
|
||||
<td>@Html.DisplayFor(modelItem => visit.VisitAnimals)</td>
|
||||
<td>@Html.DisplayFor(modelItem => visit.VisitServices)</td>
|
||||
<td>
|
||||
<p><button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("UpdateVisit", "/Visit", new { id = visit.Id })'">Изменить</button></p>
|
||||
@if (visit.VisitAnimals.Any())
|
||||
{
|
||||
<ul>
|
||||
@foreach (var animal in visit.VisitAnimals)
|
||||
{
|
||||
<li>@animal.Value.Breed</li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
else
|
||||
{
|
||||
<p>Нет назначенных лекарств</p>
|
||||
}
|
||||
</td>
|
||||
<td>
|
||||
@if (visit.VisitServices.Any())
|
||||
{
|
||||
<ul>
|
||||
@foreach (var service in visit.VisitServices)
|
||||
{
|
||||
<li>@service.Value.Name - @service.Value.Cost</li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
else
|
||||
{
|
||||
<p>Нет назначенных лекарств</p>
|
||||
}
|
||||
</td>
|
||||
<td>
|
||||
<p><button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("UpdateVisit", "/Visit", new { id = visit.Id })'">Изменить</button></p>
|
||||
<p><button type="button" class="btn btn-primary" onclick="deleteVisit(@visit.Id)">Удалить</button></p>
|
||||
</td>
|
||||
</tr>
|
||||
|
Loading…
Reference in New Issue
Block a user