Многое начало, для многих
This commit is contained in:
parent
7c0c56acb7
commit
b1a3c8923c
@ -71,7 +71,7 @@ namespace VeterinaryClinicBusinessLogics.BusinessLogics
|
|||||||
|
|
||||||
public List<AnimalViewModel>? ReadList(AnimalSearchModel? model)
|
public List<AnimalViewModel>? ReadList(AnimalSearchModel? model)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("ReadList. Animal.Id: {Id}. UserId: {DoctorId}", model?.Id, model?.UserId);
|
_logger.LogInformation("ReadList. Animal.Id: {Id}. UserId: {UserId}", model?.Id, model?.UserId);
|
||||||
|
|
||||||
var list = model == null ? _animalStorage.GetFullList() : _animalStorage.GetFilteredList(model);
|
var list = model == null ? _animalStorage.GetFullList() : _animalStorage.GetFilteredList(model);
|
||||||
if (list == null)
|
if (list == null)
|
||||||
|
@ -53,18 +53,21 @@ namespace VeterinaryClinicDatabaseImplement.Implements
|
|||||||
{
|
{
|
||||||
using var context = new VeterinaryClinicDatabase();
|
using var context = new VeterinaryClinicDatabase();
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(model.Breed))
|
var filtered = context.Animals
|
||||||
{
|
|
||||||
return context.Animals
|
|
||||||
.Include(x => x.User)
|
.Include(x => x.User)
|
||||||
.Include(x => x.Medications)
|
.Include(x => x.Medications)
|
||||||
.ThenInclude(x => x.Medication)
|
.ThenInclude(x => x.Medication)
|
||||||
.Where(x => x.Breed.Contains(model.Breed))
|
|
||||||
.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 List<AnimalViewModel> GetFullList()
|
public List<AnimalViewModel> GetFullList()
|
||||||
@ -74,7 +77,6 @@ namespace VeterinaryClinicDatabaseImplement.Implements
|
|||||||
.Include(x => x.User)
|
.Include(x => x.User)
|
||||||
.Include(x => x.Medications)
|
.Include(x => x.Medications)
|
||||||
.ThenInclude(x => x.Medication)
|
.ThenInclude(x => x.Medication)
|
||||||
.ToList()
|
|
||||||
.Select(x => x.GetViewModel)
|
.Select(x => x.GetViewModel)
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
|
@ -47,10 +47,10 @@ namespace VeterinaryClinicDatabaseImplement.Implements
|
|||||||
?.GetViewModel;
|
?.GetViewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(model.Phone))
|
if (!string.IsNullOrEmpty(model.Email))
|
||||||
{
|
{
|
||||||
return context.Users
|
return context.Users
|
||||||
.FirstOrDefault(x => x.Phone.Equals(model.Phone))
|
.FirstOrDefault(x => x.Email.Equals(model.Email))
|
||||||
?.GetViewModel;
|
?.GetViewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,17 +58,20 @@ namespace VeterinaryClinicDatabaseImplement.Implements
|
|||||||
{
|
{
|
||||||
using var database = new VeterinaryClinicDatabase();
|
using var database = new VeterinaryClinicDatabase();
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(model.Name))
|
var filtered = database.Vaccinations
|
||||||
{
|
|
||||||
return database.Vaccinations
|
|
||||||
.Include(x => x.User)
|
.Include(x => x.User)
|
||||||
.Include(x => x.Animal)
|
.Include(x => x.Animal)
|
||||||
.Where(x => x.Name.Contains(model.Name))
|
|
||||||
.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 List<VaccinationViewModel> GetFullList()
|
public List<VaccinationViewModel> GetFullList()
|
||||||
|
@ -33,7 +33,7 @@ namespace VeterinaryClinicDatabaseImplement.Models
|
|||||||
[ForeignKey("AnimalId")]
|
[ForeignKey("AnimalId")]
|
||||||
public virtual List<AnimalMedication> Medications { get; set; } = new();
|
public virtual List<AnimalMedication> Medications { get; set; } = new();
|
||||||
|
|
||||||
private Dictionary<int, IMedicationModel>? _animalMedications { get; set; } = new();
|
private Dictionary<int, IMedicationModel>? _animalMedications = null;
|
||||||
|
|
||||||
[NotMapped]
|
[NotMapped]
|
||||||
public Dictionary<int, IMedicationModel> AnimalMedications { get
|
public Dictionary<int, IMedicationModel> AnimalMedications { get
|
||||||
|
@ -54,6 +54,7 @@ namespace VeterinaryClinicDatabaseImplement.Models
|
|||||||
|
|
||||||
Name = model.Name;
|
Name = model.Name;
|
||||||
Cost = model.Cost;
|
Cost = model.Cost;
|
||||||
|
MedicationId = model.MedicationId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServiceViewModel GetViewModel => new()
|
public ServiceViewModel GetViewModel => new()
|
||||||
|
@ -47,6 +47,7 @@ namespace VeterinaryClinicDatabaseImplement.Models
|
|||||||
Id = model.Id,
|
Id = model.Id,
|
||||||
Name = model.Name,
|
Name = model.Name,
|
||||||
DateInjection = model.DateInjection,
|
DateInjection = model.DateInjection,
|
||||||
|
ValidityPeriod = model.ValidityPeriod,
|
||||||
UserId = model.UserId,
|
UserId = model.UserId,
|
||||||
User = context.Users
|
User = context.Users
|
||||||
.First(x => x.Id == model.UserId),
|
.First(x => x.Id == model.UserId),
|
||||||
@ -65,6 +66,8 @@ namespace VeterinaryClinicDatabaseImplement.Models
|
|||||||
|
|
||||||
Name = model.Name;
|
Name = model.Name;
|
||||||
DateInjection = model.DateInjection;
|
DateInjection = model.DateInjection;
|
||||||
|
ValidityPeriod = model.ValidityPeriod;
|
||||||
|
AnimalId = model.AnimalId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public VaccinationViewModel GetViewModel => new()
|
public VaccinationViewModel GetViewModel => new()
|
||||||
@ -72,6 +75,7 @@ namespace VeterinaryClinicDatabaseImplement.Models
|
|||||||
Id = Id,
|
Id = Id,
|
||||||
Name = Name,
|
Name = Name,
|
||||||
DateInjection = DateInjection,
|
DateInjection = DateInjection,
|
||||||
|
ValidityPeriod = ValidityPeriod,
|
||||||
UserId = UserId,
|
UserId = UserId,
|
||||||
UserFullName = User.FullName,
|
UserFullName = User.FullName,
|
||||||
AnimalId = Animal.Id,
|
AnimalId = Animal.Id,
|
||||||
|
@ -1,37 +1,142 @@
|
|||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using VeterinaryClinicContracts.BindingModels;
|
||||||
using System.Diagnostics;
|
using VeterinaryClinicContracts.BusinessLogicsContracts;
|
||||||
using VeterinaryClinicWebApp.Models;
|
using VeterinaryClinicContracts.SearchModels;
|
||||||
|
using VeterinaryClinicDataModels.Models;
|
||||||
|
|
||||||
namespace VeterinaryClinicWebApp.Controllers
|
namespace VeterinaryClinicWebApp.Controllers
|
||||||
{
|
{
|
||||||
public class AnimalController : Controller
|
public class AnimalController : Controller
|
||||||
{
|
{
|
||||||
private readonly ILogger<AnimalController> _logger;
|
private readonly ILogger<AnimalController> _logger;
|
||||||
public AnimalController(ILogger<AnimalController> logger)
|
|
||||||
|
private readonly IAnimalLogic _animalLogic;
|
||||||
|
|
||||||
|
private readonly IMedicationLogic _medicationLogic;
|
||||||
|
public AnimalController(ILogger<AnimalController> logger, IAnimalLogic animalLogic, IMedicationLogic medicationLogic)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
_animalLogic = animalLogic;
|
||||||
|
_medicationLogic = medicationLogic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Вывести список животных
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet]
|
||||||
public IActionResult Animals()
|
public IActionResult Animals()
|
||||||
{
|
{
|
||||||
return View();
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return View(_animalLogic.ReadList(new AnimalSearchModel
|
||||||
|
{
|
||||||
|
UserId = APIClient.User.Id,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Создать животного
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet]
|
||||||
public IActionResult CreateAnimal()
|
public IActionResult CreateAnimal()
|
||||||
{
|
{
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
|
}
|
||||||
|
|
||||||
|
ViewBag.Medications = _medicationLogic.ReadList(null);
|
||||||
|
|
||||||
return View();
|
return View();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IActionResult UpdateAnimal()
|
[HttpPost]
|
||||||
|
public void CreateAnimal(string type, string breed, int age, List<int> medication)
|
||||||
{
|
{
|
||||||
return View();
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
throw new Exception("Необходимо авторизоваться!");
|
||||||
}
|
}
|
||||||
|
|
||||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
if (string.IsNullOrEmpty(type) || string.IsNullOrEmpty(breed) || age < 0 || medication == null)
|
||||||
public IActionResult Error()
|
|
||||||
{
|
{
|
||||||
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
|
throw new Exception("Введены не все данные!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dictionary<int, IMedicationModel> animalMedication = new Dictionary<int, IMedicationModel>();
|
||||||
|
foreach (var medicationId in medication)
|
||||||
|
{
|
||||||
|
animalMedication.Add(medicationId, _medicationLogic.ReadElement(new MedicationSearchModel { Id = medicationId })!);
|
||||||
|
}
|
||||||
|
|
||||||
|
_animalLogic.Create(new AnimalBindingModel
|
||||||
|
{
|
||||||
|
Type = type,
|
||||||
|
Breed = breed,
|
||||||
|
Age = age,
|
||||||
|
AnimalMedications = animalMedication,
|
||||||
|
UserId = APIClient.User.Id
|
||||||
|
});
|
||||||
|
|
||||||
|
Response.Redirect("/Animal/Animals");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Редактировать животного
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult UpdateAnimal(int id)
|
||||||
|
{
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
|
}
|
||||||
|
|
||||||
|
ViewBag.Medications = _medicationLogic.ReadList(null);
|
||||||
|
|
||||||
|
return View(_animalLogic.ReadElement(new AnimalSearchModel
|
||||||
|
{
|
||||||
|
Id = id
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void UpdateAnimal(int id, string type, string breed, int age, List<int> medication)
|
||||||
|
{
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
throw new Exception("Необходимо авторизоваться!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(type) || string.IsNullOrEmpty(breed) || age < 0 || medication == null)
|
||||||
|
{
|
||||||
|
throw new Exception("Введены не все данные!");
|
||||||
|
}
|
||||||
|
|
||||||
|
Dictionary<int, IMedicationModel> animalMedication = new Dictionary<int, IMedicationModel>();
|
||||||
|
foreach (var medicationId in medication)
|
||||||
|
{
|
||||||
|
animalMedication.Add(medicationId, _medicationLogic.ReadElement(new MedicationSearchModel { Id = medicationId })!);
|
||||||
|
}
|
||||||
|
|
||||||
|
_animalLogic.Update(new AnimalBindingModel
|
||||||
|
{
|
||||||
|
Id = id,
|
||||||
|
Type = type,
|
||||||
|
Breed = breed,
|
||||||
|
Age = age,
|
||||||
|
AnimalMedications = animalMedication,
|
||||||
|
UserId = APIClient.User.Id
|
||||||
|
});
|
||||||
|
|
||||||
|
Response.Redirect("/Animal/Animals");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Удалить животного
|
||||||
|
/// </summary>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using VeterinaryClinicContracts.BindingModels;
|
||||||
|
using VeterinaryClinicContracts.BusinessLogicsContracts;
|
||||||
|
using VeterinaryClinicContracts.SearchModels;
|
||||||
|
using VeterinaryClinicDataModels.Enums;
|
||||||
using VeterinaryClinicWebApp.Models;
|
using VeterinaryClinicWebApp.Models;
|
||||||
|
|
||||||
namespace VeterinaryClinicWebApp.Controllers;
|
namespace VeterinaryClinicWebApp.Controllers;
|
||||||
@ -8,30 +12,169 @@ public class HomeController : Controller
|
|||||||
{
|
{
|
||||||
private readonly ILogger<HomeController> _logger;
|
private readonly ILogger<HomeController> _logger;
|
||||||
|
|
||||||
public HomeController(ILogger<HomeController> logger)
|
private readonly IUserLogic _userLogic;
|
||||||
|
|
||||||
|
public HomeController(ILogger<HomeController> logger, IUserLogic userLogic)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
_userLogic = userLogic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Äîìàøíÿÿ ñòðàíèöà
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet]
|
||||||
public IActionResult Index()
|
public IActionResult Index()
|
||||||
{
|
{
|
||||||
return View();
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return View(APIClient.User);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ëè÷íûå äàííûå ïîëüçîâàòåëÿ
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet]
|
||||||
public IActionResult Privacy()
|
public IActionResult Privacy()
|
||||||
{
|
{
|
||||||
return View();
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return View(APIClient.User);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void Privacy(string fullname, UserRole role, string phone, string email, string password) {
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
throw new Exception("Íåîáõîäèìî àâòîðèçîâàòüñÿ!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(fullname) || string.IsNullOrEmpty(phone) || string.IsNullOrEmpty(email) || string.IsNullOrEmpty(password))
|
||||||
|
{
|
||||||
|
throw new Exception("Ââåäåíû íå âñå äàííûå!");
|
||||||
|
}
|
||||||
|
|
||||||
|
_userLogic.Update(new UserBindingModel
|
||||||
|
{
|
||||||
|
Id = APIClient.User.Id,
|
||||||
|
FullName = fullname,
|
||||||
|
Role = role,
|
||||||
|
Phone = phone,
|
||||||
|
Email = email,
|
||||||
|
Password = password
|
||||||
|
});
|
||||||
|
|
||||||
|
APIClient.User.FullName = fullname;
|
||||||
|
APIClient.User.Role = role;
|
||||||
|
APIClient.User.Phone = phone;
|
||||||
|
APIClient.User.Email = email;
|
||||||
|
APIClient.User.Password = password;
|
||||||
|
|
||||||
|
Response.Redirect("Privacy");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Àóòåíòèôèêàöèÿ
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet]
|
||||||
public IActionResult Enter()
|
public IActionResult Enter()
|
||||||
{
|
{
|
||||||
return View();
|
if (APIClient.User != null)
|
||||||
}
|
|
||||||
public IActionResult Register()
|
|
||||||
{
|
{
|
||||||
|
throw new Exception("Âû óæå àâòîðèçîâàëèñü!");
|
||||||
|
}
|
||||||
|
|
||||||
return View();
|
return View();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void Enter(string email, string password)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(email) || string.IsNullOrEmpty(password))
|
||||||
|
{
|
||||||
|
throw new Exception("Ââåäåíû íå âñå äàííûå!");
|
||||||
|
}
|
||||||
|
|
||||||
|
APIClient.User = _userLogic.ReadElement(new UserSearchModel
|
||||||
|
{
|
||||||
|
Email = email,
|
||||||
|
Password = password
|
||||||
|
});
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
throw new Exception("Íåâåðíûé ëîãèí/ïàðîëü");
|
||||||
|
}
|
||||||
|
|
||||||
|
Response.Redirect("Index");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ðåãèñòðàöèÿ
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult Register()
|
||||||
|
{
|
||||||
|
if (APIClient.User != null)
|
||||||
|
{
|
||||||
|
throw new Exception("Âû óæå çàðåãèñòðèðîâàëèñü!");
|
||||||
|
}
|
||||||
|
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void Register(string fullname, UserRole role, string phone, string email, string password)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(fullname) || string.IsNullOrEmpty(phone) || string.IsNullOrEmpty(email) || string.IsNullOrEmpty(password))
|
||||||
|
{
|
||||||
|
throw new Exception("Ââåäåíû íå âñå äàííûå!");
|
||||||
|
}
|
||||||
|
|
||||||
|
_userLogic.Create(new UserBindingModel
|
||||||
|
{
|
||||||
|
FullName = fullname,
|
||||||
|
Role = role,
|
||||||
|
Phone = phone,
|
||||||
|
Email = email,
|
||||||
|
Password = password
|
||||||
|
});
|
||||||
|
|
||||||
|
Response.Redirect("Enter");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Âûéòè èç àêêàóíòà
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ïîëó÷èòü îò÷åò
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ñîçäàòü îò÷¸ò â ôîðìàòå Word
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ñîçäàòü îò÷¸ò â ôîðìàòå Excel
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ñîçäàòü îò÷¸ò â ôîðìàòå Pdf
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Îòïðàâèòü ïî ïî÷òå îò÷¸ò
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Îøèáêà
|
||||||
|
/// </summary>
|
||||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
||||||
public IActionResult Error()
|
public IActionResult Error()
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using VeterinaryClinicContracts.BindingModels;
|
||||||
|
using VeterinaryClinicContracts.BusinessLogicsContracts;
|
||||||
|
using VeterinaryClinicContracts.SearchModels;
|
||||||
using VeterinaryClinicWebApp.Models;
|
using VeterinaryClinicWebApp.Models;
|
||||||
|
|
||||||
namespace VeterinaryClinicWebApp.Controllers
|
namespace VeterinaryClinicWebApp.Controllers
|
||||||
@ -8,20 +11,107 @@ namespace VeterinaryClinicWebApp.Controllers
|
|||||||
public class MedicationController : Controller
|
public class MedicationController : Controller
|
||||||
{
|
{
|
||||||
private readonly ILogger<MedicationController> _logger;
|
private readonly ILogger<MedicationController> _logger;
|
||||||
public MedicationController(ILogger<MedicationController> logger)
|
|
||||||
|
private readonly IMedicationLogic _medicationLogic;
|
||||||
|
public MedicationController(ILogger<MedicationController> logger, IMedicationLogic medicationLogic)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
_medicationLogic = medicationLogic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Вывести список лекарств
|
||||||
|
/// </summary>
|
||||||
public IActionResult Medications()
|
public IActionResult Medications()
|
||||||
{
|
{
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(_medicationLogic.ReadList(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Создать лекарство
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult CreateMedication()
|
||||||
|
{
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
|
}
|
||||||
|
|
||||||
return View();
|
return View();
|
||||||
}
|
}
|
||||||
|
|
||||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
[HttpPost]
|
||||||
public IActionResult Error()
|
public void CreateMedication(string name, string description)
|
||||||
{
|
{
|
||||||
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
throw new Exception("Необходимо авторизоваться!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(description))
|
||||||
|
{
|
||||||
|
throw new Exception("Введены не все данные!");
|
||||||
|
}
|
||||||
|
|
||||||
|
_medicationLogic.Create(new MedicationBindingModel
|
||||||
|
{
|
||||||
|
Name = name,
|
||||||
|
Description = description
|
||||||
|
});
|
||||||
|
|
||||||
|
Response.Redirect("/Medication/Medications");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Редактировать лекарство
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult UpdateMedication(int id)
|
||||||
|
{
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(_medicationLogic.ReadElement(new MedicationSearchModel
|
||||||
|
{
|
||||||
|
Id = id
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void UpdateMedication(int id, string name, string description)
|
||||||
|
{
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
throw new Exception("Необходимо авторизоваться!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(description))
|
||||||
|
{
|
||||||
|
throw new Exception("Введены не все данные!");
|
||||||
|
}
|
||||||
|
|
||||||
|
_medicationLogic.Update(new MedicationBindingModel
|
||||||
|
{
|
||||||
|
Id = id,
|
||||||
|
Name = name,
|
||||||
|
Description = description
|
||||||
|
});
|
||||||
|
|
||||||
|
Response.Redirect("/Medication/Medications");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Удалить лекарство
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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,115 @@ namespace VeterinaryClinicWebApp.Controllers
|
|||||||
public class ServiceController : Controller
|
public class ServiceController : Controller
|
||||||
{
|
{
|
||||||
private readonly ILogger<ServiceController> _logger;
|
private readonly ILogger<ServiceController> _logger;
|
||||||
public ServiceController(ILogger<ServiceController> logger)
|
|
||||||
|
private readonly IServiceLogic _serviceLogic;
|
||||||
|
|
||||||
|
private readonly IMedicationLogic _medicationLogic;
|
||||||
|
public ServiceController(ILogger<ServiceController> logger, IServiceLogic serviceLogic, IMedicationLogic medicationLogic)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
_serviceLogic = serviceLogic;
|
||||||
|
_medicationLogic = medicationLogic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Вывести список животных
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet]
|
||||||
public IActionResult Services()
|
public IActionResult Services()
|
||||||
{
|
{
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(_serviceLogic.ReadList(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Создать животного
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult CreateService()
|
||||||
|
{
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
|
}
|
||||||
|
|
||||||
|
ViewBag.Medications = _medicationLogic.ReadList(null);
|
||||||
|
|
||||||
return View();
|
return View();
|
||||||
}
|
}
|
||||||
|
|
||||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
[HttpPost]
|
||||||
public IActionResult Error()
|
public void CreateService(string name, int cost, int medication)
|
||||||
{
|
{
|
||||||
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
throw new Exception("Необходимо авторизоваться!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(name) || cost <= 0 || medication == 0)
|
||||||
|
{
|
||||||
|
throw new Exception("Введены не все данные!");
|
||||||
|
}
|
||||||
|
|
||||||
|
_serviceLogic.Create(new ServiceBindingModel
|
||||||
|
{
|
||||||
|
Name = name,
|
||||||
|
Cost = cost,
|
||||||
|
MedicationId = medication
|
||||||
|
});
|
||||||
|
|
||||||
|
Response.Redirect("/Service/Services");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Редактировать животного
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult UpdateService(int id)
|
||||||
|
{
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
|
}
|
||||||
|
|
||||||
|
ViewBag.Medications = _medicationLogic.ReadList(null);
|
||||||
|
|
||||||
|
return View(_serviceLogic.ReadElement(new ServiceSearchModel
|
||||||
|
{
|
||||||
|
Id = id
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void UpdateService(int id, string name, int cost, int medication)
|
||||||
|
{
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
throw new Exception("Необходимо авторизоваться!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(name) || cost <= 0 || medication == 0)
|
||||||
|
{
|
||||||
|
throw new Exception("Введены не все данные!");
|
||||||
|
}
|
||||||
|
|
||||||
|
_serviceLogic.Update(new ServiceBindingModel
|
||||||
|
{
|
||||||
|
Id = id,
|
||||||
|
Name = name,
|
||||||
|
Cost = cost,
|
||||||
|
MedicationId = medication
|
||||||
|
});
|
||||||
|
|
||||||
|
Response.Redirect("/Service/Services");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Удалить животного
|
||||||
|
/// </summary>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,13 @@
|
|||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
using VeterinaryClinicBusinessLogics.BusinessLogics;
|
||||||
|
using VeterinaryClinicContracts.BindingModels;
|
||||||
|
using VeterinaryClinicContracts.BusinessLogicsContracts;
|
||||||
|
using VeterinaryClinicContracts.SearchModels;
|
||||||
|
using VeterinaryClinicDatabaseImplement.Models;
|
||||||
|
using VeterinaryClinicDataModels.Models;
|
||||||
using VeterinaryClinicWebApp.Models;
|
using VeterinaryClinicWebApp.Models;
|
||||||
|
|
||||||
namespace VeterinaryClinicWebApp.Controllers
|
namespace VeterinaryClinicWebApp.Controllers
|
||||||
@ -8,20 +15,127 @@ namespace VeterinaryClinicWebApp.Controllers
|
|||||||
public class VaccinationController : Controller
|
public class VaccinationController : Controller
|
||||||
{
|
{
|
||||||
private readonly ILogger<VaccinationController> _logger;
|
private readonly ILogger<VaccinationController> _logger;
|
||||||
public VaccinationController(ILogger<VaccinationController> logger)
|
|
||||||
|
private readonly IAnimalLogic _animalLogic;
|
||||||
|
|
||||||
|
private readonly IVaccinationLogic _vaccinationLogic;
|
||||||
|
public VaccinationController(ILogger<VaccinationController> logger, IVaccinationLogic vaccinationLogic, IAnimalLogic animalLogic)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
_vaccinationLogic = vaccinationLogic;
|
||||||
|
_animalLogic = animalLogic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Вывести список вакцинаций
|
||||||
|
/// </summary>
|
||||||
public IActionResult Vaccinations()
|
public IActionResult Vaccinations()
|
||||||
{
|
{
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(_vaccinationLogic.ReadList(new VaccinationSearchModel
|
||||||
|
{
|
||||||
|
UserId = APIClient.User.Id,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Создать животного
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult CreateVaccination()
|
||||||
|
{
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
|
}
|
||||||
|
|
||||||
|
ViewBag.Animals = _animalLogic.ReadList(new AnimalSearchModel
|
||||||
|
{
|
||||||
|
UserId = APIClient.User.Id,
|
||||||
|
});
|
||||||
|
|
||||||
return View();
|
return View();
|
||||||
}
|
}
|
||||||
|
|
||||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
[HttpPost]
|
||||||
public IActionResult Error()
|
public void CreateVaccination(string name, DateTime dateInjection, string validityPeriod, int animal)
|
||||||
{
|
{
|
||||||
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
throw new Exception("Необходимо авторизоваться!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(name) || dateInjection == DateTime.MinValue || string.IsNullOrEmpty(validityPeriod) || animal <= 0)
|
||||||
|
{
|
||||||
|
throw new Exception("Введены не все данные!");
|
||||||
|
}
|
||||||
|
|
||||||
|
_vaccinationLogic.Create(new VaccinationBindingModel
|
||||||
|
{
|
||||||
|
Name = name,
|
||||||
|
DateInjection = dateInjection,
|
||||||
|
ValidityPeriod = validityPeriod,
|
||||||
|
AnimalId = animal,
|
||||||
|
UserId = APIClient.User.Id
|
||||||
|
});
|
||||||
|
|
||||||
|
Response.Redirect("/Vaccination/Vaccinations");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Редактировать животного
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult UpdateVaccination(int id)
|
||||||
|
{
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
return Redirect("~/Home/Enter");
|
||||||
|
}
|
||||||
|
|
||||||
|
ViewBag.Animals = _animalLogic.ReadList(new AnimalSearchModel
|
||||||
|
{
|
||||||
|
UserId = APIClient.User.Id,
|
||||||
|
});
|
||||||
|
|
||||||
|
return View(_vaccinationLogic.ReadElement(new VaccinationSearchModel
|
||||||
|
{
|
||||||
|
Id = id
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void UpdateVaccination(int id, string name, DateTime dateInjection, string validityPeriod, int animal)
|
||||||
|
{
|
||||||
|
if (APIClient.User == null)
|
||||||
|
{
|
||||||
|
throw new Exception("Необходимо авторизоваться!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(name) || dateInjection == DateTime.MinValue || string.IsNullOrEmpty(validityPeriod) || animal <= 0)
|
||||||
|
{
|
||||||
|
throw new Exception("Введены не все данные!");
|
||||||
|
}
|
||||||
|
|
||||||
|
_vaccinationLogic.Update(new VaccinationBindingModel
|
||||||
|
{
|
||||||
|
Id = id,
|
||||||
|
Name = name,
|
||||||
|
DateInjection = dateInjection,
|
||||||
|
ValidityPeriod = validityPeriod,
|
||||||
|
AnimalId = animal,
|
||||||
|
UserId = APIClient.User.Id
|
||||||
|
});
|
||||||
|
|
||||||
|
Response.Redirect("/Vaccination/Vaccinations");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Удалить животного
|
||||||
|
/// </summary>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
using VeterinaryClinicBusinessLogics.BusinessLogics;
|
||||||
|
using VeterinaryClinicContracts.BusinessLogicsContracts;
|
||||||
|
using VeterinaryClinicContracts.StoragesContracts;
|
||||||
|
using VeterinaryClinicDatabaseImplement.Implements;
|
||||||
using VeterinaryClinicWebApp;
|
using VeterinaryClinicWebApp;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
@ -5,6 +9,29 @@ var builder = WebApplication.CreateBuilder(args);
|
|||||||
// Add services to the container.
|
// Add services to the container.
|
||||||
builder.Services.AddControllersWithViews();
|
builder.Services.AddControllersWithViews();
|
||||||
|
|
||||||
|
builder.Logging.SetMinimumLevel(LogLevel.Trace);
|
||||||
|
|
||||||
|
builder.Services.AddTransient<IAnimalStorage, AnimalStorage>();
|
||||||
|
builder.Services.AddTransient<IMedicationStorage, MedicationStorage>();
|
||||||
|
builder.Services.AddTransient<IServiceStorage, ServiceStorage>();
|
||||||
|
builder.Services.AddTransient<IUserStorage, UserStorage>();
|
||||||
|
builder.Services.AddTransient<IVaccinationStorage, VaccinationStorage>();
|
||||||
|
builder.Services.AddTransient<IVisitStorage, VisitStorage>();
|
||||||
|
|
||||||
|
builder.Services.AddTransient<IAnimalLogic, AnimalLogic>();
|
||||||
|
builder.Services.AddTransient<IMedicationLogic, MedicationLogic>();
|
||||||
|
builder.Services.AddTransient<IServiceLogic, ServiceLogic>();
|
||||||
|
builder.Services.AddTransient<IUserLogic, UserLogic>();
|
||||||
|
builder.Services.AddTransient<IVaccinationLogic, VaccinationLogic>();
|
||||||
|
builder.Services.AddTransient<IVisitLogic, VisitLogic>();
|
||||||
|
|
||||||
|
builder.Services.AddSession(options =>
|
||||||
|
{
|
||||||
|
options.IdleTimeout = TimeSpan.FromMinutes(30);
|
||||||
|
options.Cookie.HttpOnly = true;
|
||||||
|
options.Cookie.IsEssential = true;
|
||||||
|
});
|
||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
|
|
||||||
APIClient.Connect(builder.Configuration);
|
APIClient.Connect(builder.Configuration);
|
||||||
|
@ -31,6 +31,8 @@
|
|||||||
<th>Порода</th>
|
<th>Порода</th>
|
||||||
<th>Возраст</th>
|
<th>Возраст</th>
|
||||||
<th>Пользователь</th>
|
<th>Пользователь</th>
|
||||||
|
<th>Назначенные лекарства</th>
|
||||||
|
<th>Действия</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
@ -38,15 +40,28 @@
|
|||||||
@foreach (var animal in Model)
|
@foreach (var animal in Model)
|
||||||
{
|
{
|
||||||
<tr>
|
<tr>
|
||||||
<td>@Html.DisplayFor(modelItem => animal.Id)</td>
|
<th>@animal.Id</th>
|
||||||
<td>@Html.DisplayFor(modelItem => animal.Type)</td>
|
<td>@animal.Type</td>
|
||||||
<td>@Html.DisplayFor(modelItem => animal.Breed)</td>
|
<td>@animal.Breed</td>
|
||||||
<td>@Html.DisplayFor(modelItem => animal.Age)</td>
|
<td>@animal.Age</td>
|
||||||
<td>@Html.DisplayFor(modelItem => animal.UserFullName)</td>
|
<td>@animal.UserFullName</td>
|
||||||
<td>
|
<td>
|
||||||
<p><button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("UpdateAnimal", "/Animal", new { id = animal.Id })'">Изменить</button></p>
|
@if (animal.AnimalMedications.Any())
|
||||||
|
{
|
||||||
|
<ul>
|
||||||
|
@foreach (var medication in animal.AnimalMedications)
|
||||||
|
{
|
||||||
|
<li>@medication.Value.Name</li>
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<p>Нет назначенных лекарств</p>
|
||||||
|
}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
|
<p><button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("UpdateAnimal", "/Animal", new { id = animal.Id })'">Изменить</button></p>
|
||||||
<p><button type="button" class="btn btn-primary" onclick="deleteAnimal(@animal.Id)">Удалить</button></p>
|
<p><button type="button" class="btn btn-primary" onclick="deleteAnimal(@animal.Id)">Удалить</button></p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -24,14 +24,14 @@
|
|||||||
<div class="col-8"><input type="text" name="Age" id="Age" /></div>
|
<div class="col-8"><input type="text" name="Age" id="Age" /></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Пользователь -->
|
<!-- Медикаменты -->
|
||||||
<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="medication" id="medication" class="form-control">
|
<select name="medications" id="medications" class="form-control" size="4" multiple>
|
||||||
@foreach (var medication in ViewBag.Medications)
|
@foreach (var medication in ViewBag.Medications)
|
||||||
{
|
{
|
||||||
<option value="@medication.Name"></option>
|
<option value="@medication.Id">@medication.Name</option>
|
||||||
}
|
}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
@ -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="medication" id="medication" class="form-control" size="4" multiple>
|
<select name="medications" id="medications" 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));
|
||||||
|
@ -3,5 +3,5 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<h1 class="display-4">Welcome to my progect</h1>
|
<h1 class="display-4">Welcome to my project</h1>
|
||||||
</div>
|
</div>
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
@{
|
||||||
|
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="text" name="name" id="name" /></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Описание -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Описание:</div>
|
||||||
|
<div class="col-8"><input type="text" name="description" id="description" /></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>
|
@ -28,6 +28,7 @@
|
|||||||
<th>Номер</th>
|
<th>Номер</th>
|
||||||
<th>Название</th>
|
<th>Название</th>
|
||||||
<th>Описание</th>
|
<th>Описание</th>
|
||||||
|
<th>Действия</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
@ -40,8 +41,6 @@
|
|||||||
<td>@Html.DisplayFor(modelItem => medication.Description)</td>
|
<td>@Html.DisplayFor(modelItem => medication.Description)</td>
|
||||||
<td>
|
<td>
|
||||||
<p><button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("UpdateMedication", "/Medication", new { id = medication.Id })'">Изменить</button></p>
|
<p><button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("UpdateMedication", "/Medication", new { id = medication.Id })'">Изменить</button></p>
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<p><button type="button" class="btn btn-primary" onclick="deleteMedication(@medication.Id)">Удалить</button></p>
|
<p><button type="button" class="btn btn-primary" onclick="deleteMedication(@medication.Id)">Удалить</button></p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
|
||||||
|
@using VeterinaryClinicContracts.ViewModels
|
||||||
|
|
||||||
|
@model MedicationViewModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
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="text" name="name" value="@Model.Name" /></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Описание -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Описание:</div>
|
||||||
|
<div class="col-8"><input type="text" class="form-control" name="description" value="@Model.Description" /></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,40 @@
|
|||||||
|
@{
|
||||||
|
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="text" name="name" id="name" /></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Стоимость -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Цена:</div>
|
||||||
|
<div class="col-8"><input type="int" name="cost" id="cost" /></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Медикаменты -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Медикамент:</div>
|
||||||
|
<div class="col-8">
|
||||||
|
<select name="medication" id="medication" class="form-control">
|
||||||
|
@foreach (var medication in ViewBag.Medications)
|
||||||
|
{
|
||||||
|
<option value="@medication.Id">@medication.Name</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>
|
@ -29,6 +29,7 @@
|
|||||||
<th>Название</th>
|
<th>Название</th>
|
||||||
<th>Цена</th>
|
<th>Цена</th>
|
||||||
<th>Медикамент</th>
|
<th>Медикамент</th>
|
||||||
|
<th>Действия</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
@ -42,8 +43,6 @@
|
|||||||
<td>@Html.DisplayFor(modelItem => service.MedicationName)</td>
|
<td>@Html.DisplayFor(modelItem => service.MedicationName)</td>
|
||||||
<td>
|
<td>
|
||||||
<p><button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("UpdateService", "/Service", new { id = service.Id })'">Изменить</button></p>
|
<p><button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("UpdateService", "/Service", new { id = service.Id })'">Изменить</button></p>
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<p><button type="button" class="btn btn-primary" onclick="deleteService(@service.Id)">Удалить</button></p>
|
<p><button type="button" class="btn btn-primary" onclick="deleteService(@service.Id)">Удалить</button></p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
|
||||||
|
@using VeterinaryClinicContracts.ViewModels
|
||||||
|
|
||||||
|
@model ServiceViewModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
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="text" name="name" value="@Model.Name" /></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Стоимость -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Стоимость:</div>
|
||||||
|
<div class="col-8"><input type="int" class="form-control" name="cost" value="@Model.Cost" /></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Медикамент -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Медикамент:</div>
|
||||||
|
<div class="col-8">
|
||||||
|
<select name="medication" id="medication" class="form-control">
|
||||||
|
@foreach (var medication in ViewBag.Medications)
|
||||||
|
{
|
||||||
|
var isSelected = medication.Id == Model.MedicationId;
|
||||||
|
<option value="@medication.Id" selected="@isSelected" >@medication.Name</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>
|
@ -11,7 +11,7 @@
|
|||||||
<header>
|
<header>
|
||||||
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bgwhite border-bottom box-shadow mb-3">
|
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bgwhite border-bottom box-shadow mb-3">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<a class="navbar-brand" asp-area="" asp-controller="Home" aspaction="Index">Айболит</a>
|
<a class="navbar-brand" asparea="" asp-controller="Home" asp-action="Index">Айболит</a>
|
||||||
<button class="navbar-toggler" type="button" datatoggle="collapse" data-target=".navbar-collapse" ariacontrols="navbarSupportedContent"
|
<button class="navbar-toggler" type="button" datatoggle="collapse" data-target=".navbar-collapse" ariacontrols="navbarSupportedContent"
|
||||||
aria-expanded="false" aria-label="Toggle navigation">
|
aria-expanded="false" aria-label="Toggle navigation">
|
||||||
<span class="navbar-toggler-icon"></span>
|
<span class="navbar-toggler-icon"></span>
|
||||||
@ -66,7 +66,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<footer class="border-top footer text-muted">
|
<footer class="border-top footer text-muted">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
© 2024 - Айболит - <a asp-area="" aspcontroller="Home" asp-action="Privacy">Privacy</a>
|
© 2024 - Айболит - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
@{
|
||||||
|
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="text" name="name" id="name" /></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Дата укола -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Дата укола:</div>
|
||||||
|
<div class="col-8"><input type="date" class="form-control" name="dateInjection" id="dateInjection" /></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Период действия -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Период действия:</div>
|
||||||
|
<div class="col-8"><input type="text" name="validityPeriod" id="validityPeriod" /></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Животное -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Животное:</div>
|
||||||
|
<div class="col-8">
|
||||||
|
<select name="animal" id="animal" class="form-control">
|
||||||
|
@foreach (var animal in ViewBag.Animals)
|
||||||
|
{
|
||||||
|
<option value="@animal.Id">@animal.Breed</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,52 @@
|
|||||||
|
|
||||||
|
@using VeterinaryClinicContracts.ViewModels
|
||||||
|
|
||||||
|
@model VaccinationViewModel
|
||||||
|
|
||||||
|
@{
|
||||||
|
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="text" name="name" value="@Model.Name" /></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Дата укола -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Дата укола:</div>
|
||||||
|
<div class="col-8"><input type="date" class="form-control" name="dateInjection" value="@Model.DateInjection.ToString("yyyy-MM-dd")" /></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Период действия -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Период действия:</div>
|
||||||
|
<div class="col-8"><input type="text" name="validityPeriod" value="@Model.ValidityPeriod" /></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Животное -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4">Животное:</div>
|
||||||
|
<div class="col-8">
|
||||||
|
<select name="animal" id="animal" class="form-control">
|
||||||
|
@foreach (var animal in ViewBag.Animals)
|
||||||
|
{
|
||||||
|
var isSelected = animal.Id == Model.AnimalId;
|
||||||
|
<option value="@animal.Id" selected="@isSelected">@animal.Breed</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>
|
||||||
|
|
||||||
@ -41,11 +42,9 @@
|
|||||||
<td>@Html.DisplayFor(modelItem => vaccination.Name)</td>
|
<td>@Html.DisplayFor(modelItem => vaccination.Name)</td>
|
||||||
<td>@Html.DisplayFor(modelItem => vaccination.AnimalBreed)</td>
|
<td>@Html.DisplayFor(modelItem => vaccination.AnimalBreed)</td>
|
||||||
<td>@Html.DisplayFor(modelItem => vaccination.ValidityPeriod)</td>
|
<td>@Html.DisplayFor(modelItem => vaccination.ValidityPeriod)</td>
|
||||||
<td>@Html.DisplayFor(modelItem => vaccination.DateInjection.ToShortDateString())</td>
|
<td>@Html.DisplayFor(modelItem => vaccination.DateInjection)</td>
|
||||||
<td>
|
<td>
|
||||||
<p><button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("UpdateVaccination", "/Vaccination", new { id = vaccination.Id })'">Изменить</button></p>
|
<p><button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("UpdateVaccination", "/Vaccination", new { id = vaccination.Id })'">Изменить</button></p>
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<p><button type="button" class="btn btn-primary" onclick="deleteVaccination(@vaccination.Id)">Удалить</button></p>
|
<p><button type="button" class="btn btn-primary" onclick="deleteVaccination(@vaccination.Id)">Удалить</button></p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
Loading…
Reference in New Issue
Block a user