Coursach/Course/ImplementerApp/Controllers/HomeController.cs
2024-05-25 21:36:21 +04:00

312 lines
8.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<HomeController> _logger;
private readonly ImplementerData _data;
public HomeController(ILogger<HomeController> 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<DetailViewModel>());
}
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<DetailTimeReport> detailTimeReports = new List<DetailTimeReport>
{
new DetailTimeReport
{
DetailName = "Деталь А",
Productions = new List<string> { "Производство 1", "Производство 2" },
Products = new List<string> { "Машина X", "Машина Y" }
},
new DetailTimeReport
{
DetailName = "Деталь B",
Productions = new List<string> { "Производство 3", "Производство 4" },
Products = new List<string> { "Машина Z", "Машина W" }
}
};
return View(detailTimeReports);
}
public IActionResult DetailWorkshopReport()
{
List<DetailWorkshopReportViewModel> detailWorkshopReports = new List<DetailWorkshopReportViewModel>
{
new DetailWorkshopReportViewModel
{
DetailName = "Деталь X",
WorkShops = new List<string> { "Цех 1", "Цех 2" }
},
new DetailWorkshopReportViewModel
{
DetailName = "Деталь Y",
WorkShops = new List<string> { "Цех 3", "Цех 4" }
}
};
return View(detailWorkshopReports);
}
public IActionResult ReportsMenu()
{
return View();
}
public IActionResult ProductMachineAdd()
{
List<MachineViewModel> machines = new List<MachineViewModel>
{
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 });
}
}
}