262 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 ComputerStoreContracts.ViewModels;
using ComputerStoreDatabaseImplement.Models;
using ComputerStoreDataModels.Models;
using DocumentFormat.OpenXml.Office2010.Excel;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System.Text.RegularExpressions;
namespace ComputerStoreSellerApp.Controllers
{
public class ConsignmentController : Controller
{
private IConsignmentLogic _consignmentLogic;
private IProductLogic _productLogic;
private static List<(int productId, int count)> selectedProducts = new();
public ConsignmentController(IConsignmentLogic consignmentLogic, IProductLogic productLogic)
{
_consignmentLogic = consignmentLogic;
_productLogic = productLogic;
}
[HttpPost("[controller]/[action]")]
public IActionResult AddProduct(int product, int amount)
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
if (amount <= 0)
{
return RedirectToAction("Create", "Consignment");
}
var tmp = selectedProducts.FirstOrDefault(x => x.productId == product && x.count > 0);
if (tmp.productId != 0)
{
selectedProducts.Remove((tmp.productId, tmp.count));
selectedProducts.Add((product, tmp.count + amount));
}
else
{
selectedProducts.Add((product, amount));
}
return RedirectToAction("CreatePage", "Consignment");
}
[HttpPost("[controller]/[action]")]
public IActionResult UpdateProduct(int product, int amount, int id)
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
if (amount <= 0)
{
return RedirectToAction("Create", "Consignment");
}
var tmp = selectedProducts.FirstOrDefault(x => x.productId == product && x.count > 0);
if (tmp.productId != 0)
{
selectedProducts.Remove((tmp.productId, tmp.count));
selectedProducts.Add((product, tmp.count + amount));
}
else
{
selectedProducts.Add((product, amount));
}
ViewData["currentConsignment"] = _consignmentLogic.ReadElement(new ConsignmentSearchModel() { ID = id });
ViewData["products"] = _productLogic.ReadList(null);
ViewData["selectedProducts"] = selectedProducts;
return View("Views/Consignment/Create.cshtml");
}
[HttpGet("[controller]/[action]")]
public IActionResult List()
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
selectedProducts.Clear();
ViewData["consignments"] = _consignmentLogic.ReadList(null);
return View();
}
[HttpGet("[controller]/[action]/{id}")]
public IActionResult View(int id)
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
var consignment = _consignmentLogic.ReadElement(new ConsignmentSearchModel() { ID = id });
if (consignment is null)
{
TempData.Add("error", "Партии с таким идентификатором не существует");
return RedirectToAction("List", "Consignment", null);
}
ViewData["currentConsignment"] = consignment;
ViewData["products"] = _productLogic.ReadList(null);
foreach (var selprod in consignment.ConsignmentProducts)
{
selectedProducts.Add((selprod.Value.Item1.ID, selprod.Value.Item2));
}
ViewData["selectedProducts"] = selectedProducts;
return View("Views/Consignment/Create.cshtml");
}
[HttpGet("[controller]/[action]")]
public IActionResult CreatePage()
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
ViewData["selectedProducts"] = selectedProducts;
ViewData["products"] = _productLogic.ReadList(null);
return View("Views/Consignment/Create.cshtml");
}
[HttpPost("[controller]/[action]")]
public IActionResult Create()
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
if (selectedProducts.Count == 0)
{
TempData.Add("error", "Партия должна содержать продукты");
return RedirectToAction("CreatePage", "Consignment");
}
try
{
double tmpPrice = 0;
foreach (var (productId, count) in selectedProducts)
{
tmpPrice += _productLogic.ReadElement(new ProductSearchModel() { ID = productId })!.Price * count;
}
_consignmentLogic.Create(new ConsignmentBindingModel()
{
OrderID = null,
ConsignmentProducts = selectedProducts.ToDictionary(x => x.productId, x => ((IProductModel)_productLogic.ReadElement(new ProductSearchModel() { ID = x.productId })!, x.count)),
Price = tmpPrice,
});
selectedProducts.Clear();
return RedirectToAction("List", "Consignment", null);
}
catch (Exception e)
{
TempData.Add("error", Regex.Replace(e.Message, "[a-zA-Z\\(\\)']", ""));
selectedProducts.Clear();
return RedirectToAction("List", "Consignment", null);
}
}
[HttpPost("[controller]/[action]/{id}")]
public IActionResult Edit(int id)
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
if (selectedProducts.Count == 0)
{
TempData.Add("error", "Партия должна содержать продукты");
ViewData["currentConsignment"] = _consignmentLogic.ReadElement(new ConsignmentSearchModel() { ID = id });
ViewData["products"] = _productLogic.ReadList(null);
ViewData["selectedProducts"] = selectedProducts;
return View("Views/Consignment/Create.cshtml");
}
try
{
double tmpPrice = 0;
foreach (var (productId, count) in selectedProducts)
{
tmpPrice += _productLogic.ReadElement(new ProductSearchModel() { ID = productId })!.Price * count;
}
_consignmentLogic.Update(new ConsignmentBindingModel()
{
ID = id,
OrderID = _consignmentLogic.ReadElement( new ConsignmentSearchModel() { ID = id })?.OrderID,
ConsignmentProducts = selectedProducts.ToDictionary(x => x.productId, x => ((IProductModel)_productLogic.ReadElement(new ProductSearchModel() { ID = x.productId })!, x.count)),
Price = tmpPrice,
});
selectedProducts.Clear();
return RedirectToAction("List", "Consignment", null);
}
catch (Exception e)
{
TempData.Add("error", Regex.Replace(e.Message, "[a-zA-Z\\(\\)']", ""));
return RedirectToAction("View", "Consignment", new { id = id });
}
}
[HttpPost("[controller]/[action]/{id}")]
public IActionResult Delete(int id)
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
if (_consignmentLogic.ReadElement(new ConsignmentSearchModel { ID = id })?.OrderID == null)
{
_consignmentLogic.Delete(new ConsignmentBindingModel() { ID = id });
}
return RedirectToAction("List", "Consignment", null);
}
[HttpPost("[controller]/[action]/{selectedproductid}/{currentconsignmentid}")]
public IActionResult DeleteProduct(int selectedproductid, int currentconsignmentid)
{
if (!HttpContext.Session.Keys.Contains("login"))
{
return RedirectToAction("Login", "Auth");
}
selectedProducts.Remove(selectedProducts.FirstOrDefault(x => x.productId == selectedproductid && x.count > 0));
if (currentconsignmentid > 0)
{
ViewData["currentConsignment"] = _consignmentLogic.ReadElement(new ConsignmentSearchModel() { ID = currentconsignmentid });
ViewData["products"] = _productLogic.ReadList(null);
ViewData["selectedProducts"] = selectedProducts;
return View("Views/Consignment/Create.cshtml");
}
else
{
return RedirectToAction("CreatePage", "Consignment");
}
}
}
}