126 lines
4.6 KiB
C#
126 lines
4.6 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using PolyclinicContracts.BindingModels;
|
|
using PolyclinicContracts.BusinessLogicsContracts;
|
|
using PolyclinicContracts.SearchModels;
|
|
using PolyclinicContracts.ViewModels;
|
|
using PolyclinicDataModels.Models;
|
|
using PolyclinicWebAppImplementer.Models;
|
|
|
|
namespace PolyclinicWebAppImplementer.Controllers
|
|
{
|
|
public class CoursesController : Controller
|
|
{
|
|
private readonly IDiagnoseLogic _diagnoseLogic;
|
|
private readonly ICourseLogic _courseLogic;
|
|
|
|
public CoursesController(IDiagnoseLogic diagnoseLogic, ICourseLogic courseLogic)
|
|
{
|
|
_diagnoseLogic = diagnoseLogic;
|
|
_courseLogic = courseLogic;
|
|
}
|
|
|
|
[HttpGet]
|
|
public IActionResult Index()
|
|
{
|
|
var currentUser = LoginManager.LogginedUser;
|
|
if (currentUser == null)
|
|
{
|
|
return RedirectToAction("Login", "User");
|
|
}
|
|
List<CourseViewModel> courses = _courseLogic.ReadList();
|
|
ViewData["Title"] = "Список курсов";
|
|
return View("CoursesList", courses);
|
|
}
|
|
[HttpGet]
|
|
[HttpPost]
|
|
public IActionResult Add(CourseFormModel model, int[] selectedDiagnoses)
|
|
{
|
|
var currentUser = LoginManager.LogginedUser;
|
|
if (currentUser == null)
|
|
{
|
|
return RedirectToAction("Login", "User");
|
|
}
|
|
if (HttpContext.Request.Method == "GET")
|
|
{
|
|
ViewData["Title"] = "Новый курс";
|
|
model = new()
|
|
{
|
|
Diagnoses = _diagnoseLogic.ReadList().Select(x => (x, false)).ToList()
|
|
};
|
|
return View("CourseForm", model);
|
|
}
|
|
else
|
|
{
|
|
var allDiagnoses = _diagnoseLogic.ReadList();
|
|
CourseBindingModel course = new CourseBindingModel
|
|
{
|
|
Comment = model.CourseViewModel.Comment,
|
|
DaysCount = model.CourseViewModel.DaysCount,
|
|
PillsPerDay = model.CourseViewModel.PillsPerDay,
|
|
CourseDiagnoses = selectedDiagnoses
|
|
.ToDictionary(
|
|
x => x,
|
|
x => allDiagnoses.Where(y => y.Id == x) as IDiagnoseModel
|
|
)
|
|
};
|
|
_courseLogic.Create(course);
|
|
return RedirectToAction("Index");
|
|
}
|
|
}
|
|
[HttpGet]
|
|
[HttpPost]
|
|
public IActionResult Edit(int id, CourseFormModel model, int[] selectedDiagnoses)
|
|
{
|
|
var currentUser = LoginManager.LogginedUser;
|
|
if (currentUser == null)
|
|
{
|
|
return RedirectToAction("Login", "User");
|
|
}
|
|
if (HttpContext.Request.Method == "GET")
|
|
{
|
|
var obj = _courseLogic.ReadElement(new CourseSearchModel { Id = id });
|
|
model = new()
|
|
{
|
|
CourseViewModel = obj,
|
|
Diagnoses = _diagnoseLogic.ReadList().Select(x => (x, obj.CourseDiagnoses.ContainsKey(x.Id))).ToList()
|
|
};
|
|
ViewData["Title"] = "Редактировать курс";
|
|
return View("CourseForm", model);
|
|
}
|
|
else
|
|
{
|
|
var allDiagnoses = _diagnoseLogic.ReadList();
|
|
CourseBindingModel course = new CourseBindingModel
|
|
{
|
|
Id = id,
|
|
Comment = model.CourseViewModel.Comment,
|
|
DaysCount = model.CourseViewModel.DaysCount,
|
|
PillsPerDay = model.CourseViewModel.PillsPerDay,
|
|
CourseDiagnoses = selectedDiagnoses
|
|
.ToDictionary(
|
|
x => x,
|
|
x => allDiagnoses.Where(y => y.Id == x) as IDiagnoseModel
|
|
)
|
|
};
|
|
_courseLogic.Update(course);
|
|
return RedirectToAction("Index");
|
|
}
|
|
}
|
|
[HttpPost]
|
|
public IActionResult Delete(int id)
|
|
{
|
|
var currentUser = LoginManager.LogginedUser;
|
|
if (currentUser == null)
|
|
{
|
|
return RedirectToAction("Login", "User");
|
|
}
|
|
var obj = _courseLogic.ReadElement(new CourseSearchModel { Id = id });
|
|
if (obj != null)
|
|
{
|
|
_courseLogic.Delete(new CourseBindingModel { Id = obj.Id });
|
|
}
|
|
return RedirectToAction("Index");
|
|
}
|
|
}
|
|
}
|