261 lines
9.6 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 ComputerStoreBusinessLogic.BusinessLogic;
using ComputerStoreContracts.BindingModels;
using ComputerStoreContracts.BusinessLogicContracts;
using ComputerStoreContracts.SearchModels;
using ComputerStoreDataModels.Models;
using Microsoft.AspNetCore.Mvc;
using System.Text.RegularExpressions;
namespace ComputerStoreSellerApp.Controllers
{
public class RequestController : Controller
{
private IRequestLogic _requestLogic;
private IComponentLogic _componentLogic;
private static List<(int componentId, int count)> selectedComponents = new();
public RequestController(IRequestLogic requestLogic, IComponentLogic componentLogic)
{
_requestLogic = requestLogic;
_componentLogic = componentLogic;
}
[HttpPost("[controller]/[action]")]
public IActionResult AddComponent(int component, int amount)
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
if (amount <= 0)
{
return RedirectToAction("Create", "Request");
}
var tmp = selectedComponents.FirstOrDefault(x => x.componentId == component && x.count > 0);
if (tmp.componentId != 0)
{
selectedComponents.Remove((tmp.componentId, tmp.count));
selectedComponents.Add((component, tmp.count + amount));
}
else
{
selectedComponents.Add((component, amount));
}
return RedirectToAction("CreatePage", "Request");
}
[HttpPost("[controller]/[action]")]
public IActionResult UpdateComponent(int component, int amount, int id)
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
if (amount <= 0)
{
return RedirectToAction("Create", "Request");
}
var tmp = selectedComponents.FirstOrDefault(x => x.componentId == component && x.count > 0);
if (tmp.componentId != 0)
{
selectedComponents.Remove((tmp.componentId, tmp.count));
selectedComponents.Add((component, tmp.count + amount));
}
else
{
selectedComponents.Add((component, amount));
}
ViewData["currentRequest"] = _requestLogic.ReadElement(new RequestSearchModel() { ID = id });
ViewData["components"] = _componentLogic.ReadList(null);
ViewData["selectedComponents"] = selectedComponents;
return View("Views/Request/Create.cshtml");
}
[HttpGet("[controller]/[action]")]
public IActionResult List()
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
selectedComponents.Clear();
ViewData["requests"] = _requestLogic.ReadList(null);
return View();
}
[HttpGet("[controller]/[action]/{id}")]
public IActionResult View(int id)
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
var request = _requestLogic.ReadElement(new RequestSearchModel() { ID = id });
if (request is null)
{
TempData.Add("error", "Заявки с таким идентификатором не существует");
return RedirectToAction("List", "Request", null);
}
ViewData["currentRequest"] = request;
ViewData["components"] = _componentLogic.ReadList(null);
foreach (var selcomp in request.RequestComponents)
{
selectedComponents.Add((selcomp.Item1.ID, selcomp.Item2));
}
ViewData["selectedComponents"] = selectedComponents;
return View("Views/Request/Create.cshtml");
}
[HttpGet("[controller]/[action]")]
public IActionResult CreatePage()
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
ViewData["selectedComponents"] = selectedComponents;
ViewData["components"] = _componentLogic.ReadList(null);
return View("Views/Request/Create.cshtml");
}
[HttpPost("[controller]/[action]")]
public IActionResult Create()
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
if (selectedComponents.Count == 0)
{
TempData.Add("error", "Заявка должна содержать компоненты");
return RedirectToAction("CreatePage", "Request");
}
try
{
double tmpPrice = 0;
foreach (var (componentId, count) in selectedComponents)
{
tmpPrice += _componentLogic.ReadElement(new ComponentSearchModel() { ID = componentId })!.Price * count;
}
_requestLogic.Create(new RequestBindingModel()
{
OrderID = null,
PCID = null,
Price = tmpPrice,
RequestComponents = selectedComponents.Select(x => ((IComponentModel)_componentLogic.ReadElement(new ComponentSearchModel() { ID = x.componentId })!, x.count)).ToList()
});
selectedComponents.Clear();
return RedirectToAction("List", "Request", null);
}
catch (Exception e)
{
TempData.Add("error", Regex.Replace(e.Message, "[a-zA-Z\\(\\)']", ""));
selectedComponents.Clear();
return RedirectToAction("List", "Request", null);
}
}
[HttpPost("[controller]/[action]/{id}")]
public IActionResult Edit(int id)
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
if (selectedComponents.Count == 0)
{
TempData.Add("error", "Заявка должна содержать компоненты");
ViewData["currentRequest"] = _requestLogic.ReadElement(new RequestSearchModel() { ID = id });
ViewData["components"] = _componentLogic.ReadList(null);
ViewData["selectedComponents"] = selectedComponents;
return View("Views/Request/Create.cshtml");
}
try
{
double tmpPrice = 0;
foreach (var (componentId, count) in selectedComponents)
{
tmpPrice += _componentLogic.ReadElement(new ComponentSearchModel() { ID = componentId })!.Price * count;
}
_requestLogic.Update(new RequestBindingModel()
{
ID = id,
OrderID = _requestLogic.ReadElement(new RequestSearchModel() { ID = id })?.OrderID,
PCID = _requestLogic.ReadElement(new RequestSearchModel() { ID = id })?.PCID,
Price = tmpPrice,
RequestComponents = selectedComponents.Select(x => ((IComponentModel)_componentLogic.ReadElement(new ComponentSearchModel() { ID = x.componentId })!, x.count)).ToList(),
});
selectedComponents.Clear();
return RedirectToAction("List", "Request", null);
}
catch (Exception e)
{
TempData.Add("error", Regex.Replace(e.Message, "[a-zA-Z\\(\\)']", ""));
return RedirectToAction("View", "Request", new { id = id });
}
}
[HttpPost("[controller]/[action]/{id}")]
public IActionResult Delete(int id)
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
var deletedRequest = _requestLogic.ReadElement(new RequestSearchModel { ID = id });
if (deletedRequest != null && deletedRequest.PCID == null && deletedRequest.OrderID == null)
{
_requestLogic.Delete(new RequestBindingModel() { ID = id });
}
return RedirectToAction("List", "Request", null);
}
[HttpPost("[controller]/[action]/{selectedcomponentid}/{currentrequestid}")]
public IActionResult DeleteComponent(int selectedcomponentid, int currentrequestid)
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
selectedComponents.Remove(selectedComponents.FirstOrDefault(x => x.componentId == selectedcomponentid && x.count > 0));
if (currentrequestid > 0)
{
ViewData["currentRequest"] = _requestLogic.ReadElement(new RequestSearchModel() { ID = currentrequestid });
ViewData["components"] = _componentLogic.ReadList(null);
ViewData["selectedComponents"] = selectedComponents;
return View("Views/Request/Create.cshtml");
}
else
{
return RedirectToAction("CreatePage", "Request");
}
}
}
}