using ImplementerApp.Models; using Microsoft.AspNetCore.Mvc; using System.Diagnostics; using BusinessLogic.BusinessLogic; using Contracts.BusinessLogicsContracts; using Contracts.ViewModels; using DataModels.Models; using Contracts.BindingModels; namespace ImplementerApp.Controllers { public class HomeController : Controller { private readonly ILogger _logger; private readonly ImplementerData _data; public HomeController(ILogger logger, ImplementerData data) { _logger = logger; _data = data; } private bool IsLoggedIn { get {return UserImplementer.user != null; } } public IActionResult IndexNonReg() { if (!IsLoggedIn) return View(); return RedirectToAction("Index"); } public IActionResult Index() { if (!IsLoggedIn) return RedirectToAction("IndexNonReg"); return View(); } [HttpGet] public IActionResult Enter() { if (!IsLoggedIn) return View(); return RedirectToAction("Index"); } [HttpPost] public void Enter(string login, string password) { var user = _data.Login(login, password); if (user != null) { UserImplementer.user = user; Response.Redirect("Index"); } } [HttpGet] public IActionResult Register() { return View(); } [HttpPost] public void Register(string name, string login, string email, string password1, string password2) { if (password1 == password2 && _data.Register(new() { Email = email, Login = login, Name = name, Password = password1 })) { Response.Redirect("Index"); } } [HttpGet] public IActionResult IndexDetail() { if (UserImplementer.user != null) { var list = _data.GetDetails(UserImplementer.user.Id); if (list != null) return View(list); return View(new List()); } return RedirectToAction("IndexNonReg"); } [HttpPost] public void IndexDetail(int id) { if (UserImplementer.user != null) { _data.DeleteDetail(id); } Response.Redirect("IndexDetail"); } [HttpGet] public IActionResult CreateDetail(int id) { if (id != 0) { var value = _data.GetDetail(id); if (value != null) return View(value); } return View(new DetailViewModel()); } [HttpPost] public IActionResult CreateDetail(DetailBindingModel model) { if (model.Id == 0) { model.DateCreate = DateTime.Now; model.UserId = UserImplementer.user!.Id; if (_data.CreateDetail(model)) return RedirectToAction("IndexDetail"); } else { if (_data.UpdateDetail(model)) return RedirectToAction("IndexDetail"); } return View(); } [HttpGet] public IActionResult IndexProduct() { if (IsLoggedIn) { var products = _data.GetProducts(UserImplementer.user!.Id); return View(products); } return RedirectToAction("IndexNonReg"); } [HttpPost] public IActionResult IndexProduct(int id) { _data.DeleteProduct(id); return RedirectToAction("IndexProduct"); } [HttpGet] public IActionResult CreateProduct(int id) { var details = _data.GetDetails(UserImplementer.user!.Id); ViewBag.AllDetails = details; if (id != 0) { var value = _data.GetProduct(id); if (value != null) return View(value); } return View(new ProductViewModel()); } [HttpPost] public IActionResult CreateProduct(int id, string title, int[] detailIds, int[] counts) { ProductBindingModel model = new ProductBindingModel(); model.Id = id; model.Name = title; model.UserId = UserImplementer.user!.Id; var details = _data.GetDetails(UserImplementer.user!.Id); double sum = 0; for (int i = 0; i < detailIds.Length; i++) { var detail = details!.FirstOrDefault(x => x.Id == detailIds[i])!; if (counts[i] <= 0) continue; model.ProductDetails[detailIds[i]] = (detail, counts[i]); sum += detail.Cost * counts[i]; } if (model.ProductDetails.Count == 0) return RedirectToAction("IndexProduct"); model.Cost = sum; if (id != 0) { _data.UpdateProduct(model); } else { _data.CreateProduct(model); } return RedirectToAction("IndexProduct"); } [HttpGet] public IActionResult IndexProduction() { if (UserImplementer.user != null) { var productions = _data.GetProductions(UserImplementer.user.Id); return View(productions); } return RedirectToAction("IndexNonReg"); } [HttpPost] public IActionResult IndexProduction(int id) { _data.DeleteProduction(id); return RedirectToAction("IndexProduction"); } [HttpGet] public IActionResult CreateProduction(int id) { var details = _data.GetDetails(UserImplementer.user!.Id); ViewBag.AllDetails = details; if (id != 0) { var value = _data.GetProduction(id); if (value != null) return View(value); } return View(new ProductionViewModel()); } [HttpPost] public IActionResult CreateProduction(int id, string title, int[] detailIds) { ProductionBindingModel model = new ProductionBindingModel(); model.Id = id; model.Name = title; model.UserId = UserImplementer.user!.Id; var details = _data.GetDetails(UserImplementer.user!.Id); double sum = 0; for (int i = 0; i < detailIds.Length; i++) { var detail = details!.FirstOrDefault(x => x.Id == detailIds[i])!; model.ProductionDetails[detailIds[i]] = detail; sum += detail.Cost; } model.Cost = sum; bool changed = false; if (model.ProductionDetails.Count > 0) { if (id != 0) { changed = _data.UpdateProduction(model); } else { changed = _data.CreateProduction(model); } } if (changed) return RedirectToAction("IndexProduction"); else { ViewBag.AllDetails = details; return View(model); } } public IActionResult Privacy() { if (IsLoggedIn) return View(UserImplementer.user); return RedirectToAction("IndexNonReg"); } public IActionResult DetailTimeReport() { List detailTimeReports = new List { new DetailTimeReport { DetailName = "Деталь А", Productions = new List { "Производство 1", "Производство 2" }, Products = new List { "Машина X", "Машина Y" } }, new DetailTimeReport { DetailName = "Деталь B", Productions = new List { "Производство 3", "Производство 4" }, Products = new List { "Машина Z", "Машина W" } } }; return View(detailTimeReports); } public IActionResult DetailWorkshopReport() { List detailWorkshopReports = new List { new DetailWorkshopReportViewModel { DetailName = "Деталь X", WorkShops = new List { "Цех 1", "Цех 2" } }, new DetailWorkshopReportViewModel { DetailName = "Деталь Y", WorkShops = new List { "Цех 3", "Цех 4" } } }; return View(detailWorkshopReports); } public IActionResult ReportsMenu() { return View(); } public IActionResult ProductMachineAdd() { List machines = new List { new MachineViewModel { Id = 1, Title = "Токарный станок", Country = "Германия", UserId = 1, WorkerMachines = new() }, new MachineViewModel { Id = 2, Title = "Фрезерный станок", Country = "Япония", UserId = 2, WorkerMachines = new() } }; return View(machines); } [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } } }