круд - осталось удаление
This commit is contained in:
parent
2d4eb46712
commit
9fab1534a5
@ -23,7 +23,6 @@ namespace VeterinaryClinicDatabaseImplement.Implements
|
|||||||
.ThenInclude(x => x.Animal)
|
.ThenInclude(x => x.Animal)
|
||||||
.Include(x => x.Services)
|
.Include(x => x.Services)
|
||||||
.ThenInclude(x => x.Service)
|
.ThenInclude(x => x.Service)
|
||||||
.ToList()
|
|
||||||
.Select(x => x.GetViewModel)
|
.Select(x => x.GetViewModel)
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
@ -31,20 +30,23 @@ namespace VeterinaryClinicDatabaseImplement.Implements
|
|||||||
{
|
{
|
||||||
using var context = new VeterinaryClinicDatabase();
|
using var context = new VeterinaryClinicDatabase();
|
||||||
|
|
||||||
if (model.DateFrom.HasValue && model.DateTo.HasValue)
|
var filtered = context.Visits
|
||||||
{
|
|
||||||
return context.Visits
|
|
||||||
.Include(x => x.User)
|
.Include(x => x.User)
|
||||||
.Include(x => x.Animals)
|
.Include(x => x.Animals)
|
||||||
.ThenInclude(x => x.Animal)
|
.ThenInclude(x => x.Animal)
|
||||||
.Include(x => x.Services)
|
.Include(x => x.Services)
|
||||||
.ThenInclude (x => x.Service)
|
.ThenInclude (x => x.Service)
|
||||||
.Where(x => x.Date >= model.DateFrom && x.Date <= model.DateTo)
|
|
||||||
.Select(x => x.GetViewModel)
|
.Select(x => x.GetViewModel)
|
||||||
.ToList();
|
.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)
|
public VisitViewModel? GetElement(VisitSearchModel model)
|
||||||
@ -96,7 +98,7 @@ namespace VeterinaryClinicDatabaseImplement.Implements
|
|||||||
visit.Update(model);
|
visit.Update(model);
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
visit.UpdateAnimals(context, model);
|
visit.UpdateAnimals(context, model);
|
||||||
visit.UpdateMedication(context, model);
|
visit.UpdateServices(context, model);
|
||||||
transaction.Commit();
|
transaction.Commit();
|
||||||
return visit.GetViewModel;
|
return visit.GetViewModel;
|
||||||
}
|
}
|
||||||
|
@ -94,11 +94,8 @@ namespace VeterinaryClinicDatabaseImplement.Models
|
|||||||
public void UpdateMedications(VeterinaryClinicDatabase context, AnimalBindingModel model)
|
public void UpdateMedications(VeterinaryClinicDatabase context, AnimalBindingModel model)
|
||||||
{
|
{
|
||||||
var animalMedications = context.AnimalMedications.Where(rec => rec.AnimalId == model.Id).ToList();
|
var animalMedications = context.AnimalMedications.Where(rec => rec.AnimalId == model.Id).ToList();
|
||||||
if (animalMedications != null && animalMedications.Count > 0)
|
context.AnimalMedications.RemoveRange(animalMedications);
|
||||||
{
|
|
||||||
context.AnimalMedications.RemoveRange(animalMedications.Where(rec => !model.AnimalMedications.ContainsKey(rec.MedicationId)));
|
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
}
|
|
||||||
|
|
||||||
var animal = context.Animals.First(x => x.Id == Id);
|
var animal = context.Animals.First(x => x.Id == Id);
|
||||||
foreach (var pr in model.AnimalMedications)
|
foreach (var pr in model.AnimalMedications)
|
||||||
|
@ -105,11 +105,8 @@ namespace VeterinaryClinicDatabaseImplement.Models
|
|||||||
public void UpdateAnimals(VeterinaryClinicDatabase context, VisitBindingModel model)
|
public void UpdateAnimals(VeterinaryClinicDatabase context, VisitBindingModel model)
|
||||||
{
|
{
|
||||||
var visitAnimals = context.VisitAnimals.Where(rec => rec.VisitId == model.Id).ToList();
|
var visitAnimals = context.VisitAnimals.Where(rec => rec.VisitId == model.Id).ToList();
|
||||||
if (visitAnimals != null && visitAnimals.Count > 0)
|
context.VisitAnimals.RemoveRange(visitAnimals);
|
||||||
{
|
|
||||||
context.VisitAnimals.RemoveRange(visitAnimals.Where(rec => !model.VisitAnimals.ContainsKey(rec.AnimalId)));
|
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
}
|
|
||||||
|
|
||||||
var visit = context.Visits.First(x => x.Id == Id);
|
var visit = context.Visits.First(x => x.Id == Id);
|
||||||
foreach (var rm in model.VisitAnimals)
|
foreach (var rm in model.VisitAnimals)
|
||||||
@ -124,14 +121,11 @@ namespace VeterinaryClinicDatabaseImplement.Models
|
|||||||
_visitAnimals = null;
|
_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();
|
var visitServices = context.VisitServices.Where(rec => rec.VisitId == model.Id).ToList();
|
||||||
if (visitServices != null && visitServices.Count > 0)
|
context.VisitServices.RemoveRange(visitServices);
|
||||||
{
|
|
||||||
context.VisitServices.RemoveRange(visitServices.Where(rec => !model.VisitServices.ContainsKey(rec.ServiceId)));
|
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
}
|
|
||||||
|
|
||||||
var visit = context.Visits.First(x => x.Id == Id);
|
var visit = context.Visits.First(x => x.Id == Id);
|
||||||
foreach (var rm in model.VisitServices)
|
foreach (var rm in model.VisitServices)
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using VeterinaryClinicBusinessLogics.BusinessLogics;
|
||||||
|
using VeterinaryClinicContracts.BindingModels;
|
||||||
|
using VeterinaryClinicContracts.BusinessLogicsContracts;
|
||||||
|
using VeterinaryClinicContracts.SearchModels;
|
||||||
|
using VeterinaryClinicDataModels.Models;
|
||||||
using VeterinaryClinicWebApp.Models;
|
using VeterinaryClinicWebApp.Models;
|
||||||
|
|
||||||
namespace VeterinaryClinicWebApp.Controllers
|
namespace VeterinaryClinicWebApp.Controllers
|
||||||
@ -8,20 +13,156 @@ namespace VeterinaryClinicWebApp.Controllers
|
|||||||
public class VisitController : Controller
|
public class VisitController : Controller
|
||||||
{
|
{
|
||||||
private readonly ILogger<VisitController> _logger;
|
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;
|
_logger = logger;
|
||||||
|
_visitLogic = visitLogic;
|
||||||
|
_animalLogic = animalLogic;
|
||||||
|
_serviceLogic = serviceLogic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Вывести список животных
|
||||||
|
/// </summary>
|
||||||
public IActionResult Visits()
|
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();
|
return View();
|
||||||
}
|
}
|
||||||
|
|
||||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
[HttpPost]
|
||||||
public IActionResult Error()
|
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="row">
|
||||||
<div class="col-4">Медикаменты:</div>
|
<div class="col-4">Медикаменты:</div>
|
||||||
<div class="col-8">
|
<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)
|
@foreach (var medication in ViewBag.Medications)
|
||||||
{
|
{
|
||||||
<option value="@medication.Id">@medication.Name</option>
|
<option value="@medication.Id">@medication.Name</option>
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-4">Медикаменты:</div>
|
<div class="col-4">Медикаменты:</div>
|
||||||
<div class="col-8">
|
<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)
|
@foreach (var medication in ViewBag.Medications)
|
||||||
{
|
{
|
||||||
var isSelected = Model.AnimalMedications.Any(x => x.Key.Equals(medication.Id));
|
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>
|
||||||
<th>Услуги</th>
|
<th>Услуги</th>
|
||||||
|
<th>Действия</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
@ -38,14 +39,40 @@
|
|||||||
{
|
{
|
||||||
<tr>
|
<tr>
|
||||||
<td>@Html.DisplayFor(modelItem => visit.Id)</td>
|
<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.UserFullName)</td>
|
||||||
<td>@Html.DisplayFor(modelItem => visit.VisitAnimals)</td>
|
|
||||||
<td>@Html.DisplayFor(modelItem => visit.VisitServices)</td>
|
|
||||||
<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>
|
||||||
<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>
|
<p><button type="button" class="btn btn-primary" onclick="deleteVisit(@visit.Id)">Удалить</button></p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
Loading…
Reference in New Issue
Block a user