PIbd-21_Danilov_V.V._Course.../VeterinaryClinic/VeterinaryClinicWebApp/Controllers/VisitController.cs
Владимир Данилов 305719faef Почтааааааа
2024-05-30 01:20:47 +04:00

226 lines
6.3 KiB
C#

using DocumentFormat.OpenXml.Office2010.Excel;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
using VeterinaryClinicBusinessLogics.BusinessLogics;
using VeterinaryClinicContracts.BindingModels;
using VeterinaryClinicContracts.BusinessLogicsContracts;
using VeterinaryClinicContracts.SearchModels;
using VeterinaryClinicDatabaseImplement.Models;
using VeterinaryClinicDataModels.Models;
using VeterinaryClinicWebApp.Models;
namespace VeterinaryClinicWebApp.Controllers
{
public class VisitController : Controller
{
private readonly 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.Services = _serviceLogic.ReadList(null);
return View();
}
[HttpPost]
public void CreateVisit(DateTime dateVisit, List<int> service)
{
if (APIClient.User == null)
{
throw new Exception("Необходимо авторизоваться!");
}
if (dateVisit == DateTime.MinValue)
{
throw new Exception("Введены не все данные!");
}
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,
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.Services = _serviceLogic.ReadList(null);
return View(_visitLogic.ReadElement(new VisitSearchModel
{
Id = id
}));
}
[HttpPost]
public void UpdateVisit(int id, DateTime dateVisit, List<int> service)
{
if (APIClient.User == null)
{
throw new Exception("Необходимо авторизоваться!");
}
if (dateVisit == DateTime.MinValue)
{
throw new Exception("Введены не все данные!");
}
Dictionary<int, IServiceModel> visitServices = new Dictionary<int, IServiceModel>();
foreach (var serviceId in service)
{
visitServices.Add(serviceId, _serviceLogic.ReadElement(new ServiceSearchModel { Id = serviceId })!);
}
var visit = _visitLogic.ReadElement(new VisitSearchModel { Id = id });
_visitLogic.Update(new VisitBindingModel
{
Id = id,
Date = dateVisit,
VisitServices = visitServices,
VisitAnimals = visit!.VisitAnimals,
UserId = APIClient.User.Id
});
Response.Redirect("/Visit/Visits");
}
/// <summary>
/// Удалить визит
/// </summary>
[HttpPost]
public void DeleteVisit(int id)
{
if (APIClient.User == null)
{
throw new Exception("Необходимо авторизоваться!");
}
_visitLogic.Delete(new VisitBindingModel
{
Id = id
});
Response.Redirect("/Visit/Visits");
}
/// <summary>
/// Выписать рецепт пациенту
/// </summary>
/// <returns></returns>
/// <exception cref="Exception"></exception>
[HttpGet]
public IActionResult CreateVisitAnimal()
{
if (APIClient.User == null)
{
throw new Exception("Необходимо авторизоваться!");
}
ViewBag.Visits = _visitLogic.ReadList(new VisitSearchModel
{
UserId = APIClient.User.Id
});
ViewBag.Animals = _animalLogic.ReadList(new AnimalSearchModel
{
UserId = APIClient.User.Id
});
return View();
}
/// <summary>
/// Выписать рецепт пациенту
/// </summary>
/// <exception cref="Exception"></exception>
[HttpPost]
public void CreateVisitAnimal(int visitId, List<int> animals)
{
if (APIClient.User == null)
{
throw new Exception("Необходимо авторизоваться!");
}
if (visitId <= 0 || animals == null)
{
throw new Exception("Введены не все данные!");
}
Dictionary<int, IAnimalModel> visitAnimals = new Dictionary<int, IAnimalModel>();
foreach (var animalId in animals)
{
visitAnimals.Add(animalId, _animalLogic.ReadElement(new AnimalSearchModel { Id = animalId })!);
}
var visit = _visitLogic.ReadElement(new VisitSearchModel { Id = visitId });
_visitLogic.Update(new VisitBindingModel
{
Id = visit!.Id,
Date = visit!.Date,
VisitServices = visit!.VisitServices,
VisitAnimals = visitAnimals,
UserId = APIClient.User.Id
});
Response.Redirect("/Visit/Visits");
}
}
}