261 lines
9.6 KiB
C#
261 lines
9.6 KiB
C#
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");
|
||
}
|
||
}
|
||
}
|
||
}
|