From d6c3358821adb453364a0889bfdf6f8e55b24d47 Mon Sep 17 00:00:00 2001 From: Safgerd Date: Wed, 21 Jun 2023 23:55:37 +0400 Subject: [PATCH] Some seller app (full this time, i think) --- .../Implements/ConsignmentStorage.cs | 4 +- .../Implements/OrderStorage.cs | 18 +- .../Implements/RequestStorage.cs | 2 +- .../Models/Consignment.cs | 3 +- .../Models/Request.cs | 2 +- .../ComputerStoreSellerApp.csproj | 4 - .../Controllers/ConsignmentController.cs | 59 ++- .../Controllers/OrderController.cs | 407 ++++++++++++++++++ .../Controllers/RequestController.cs | 40 +- .../Views/Consignment/Create.cshtml | 103 +++-- .../Views/Consignment/List.cshtml | 12 +- .../Views/Order/Create.cshtml | 154 +++++++ .../Views/Order/List.cshtml | 110 +++++ .../Views/Request/Create.cshtml | 100 +++-- .../Views/Request/List.cshtml | 12 +- .../Views/Shared/_Layout.cshtml | 3 + 16 files changed, 899 insertions(+), 134 deletions(-) create mode 100644 ComputerStoreSellerApp/Controllers/OrderController.cs create mode 100644 ComputerStoreSellerApp/Views/Order/Create.cshtml create mode 100644 ComputerStoreSellerApp/Views/Order/List.cshtml diff --git a/ComputerStoreDatabaseImplement/Implements/ConsignmentStorage.cs b/ComputerStoreDatabaseImplement/Implements/ConsignmentStorage.cs index e809f33..d1f1d98 100644 --- a/ComputerStoreDatabaseImplement/Implements/ConsignmentStorage.cs +++ b/ComputerStoreDatabaseImplement/Implements/ConsignmentStorage.cs @@ -35,7 +35,7 @@ namespace ComputerStoreDatabaseImplement.Implements .ThenInclude(x => x.Product) .Where(x => (!model.ID.HasValue || x.ID == model.ID) && - (!model.OrderID.HasValue || x.OrderID == model.OrderID) && + (x.OrderID == model.OrderID) && (!model.ProductID.HasValue || x.Products.FirstOrDefault(y => y.ProductID == model.ProductID) != null)) .Select(x => x.GetViewModel) .ToList(); @@ -78,7 +78,7 @@ namespace ComputerStoreDatabaseImplement.Implements { using var context = new ComputerStoreDatabase(); - var consignment = context.Consignments.Include(x => x.Products).FirstOrDefault(x => x.ID == model.ID); + var consignment = context.Consignments.Include(x => x.Products).ThenInclude(x => x.Product).FirstOrDefault(x => x.ID == model.ID); if (consignment == null) { return null; diff --git a/ComputerStoreDatabaseImplement/Implements/OrderStorage.cs b/ComputerStoreDatabaseImplement/Implements/OrderStorage.cs index 8e7174e..e1fa6e7 100644 --- a/ComputerStoreDatabaseImplement/Implements/OrderStorage.cs +++ b/ComputerStoreDatabaseImplement/Implements/OrderStorage.cs @@ -7,6 +7,7 @@ using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; +using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; @@ -18,8 +19,10 @@ namespace ComputerStoreDatabaseImplement.Implements { using var context = new ComputerStoreDatabase(); return context.Orders.Include(x => x.Seller) - .Include(x => x._consignments) - .Include(x => x._requests) + .Include(x => x._consignments) + .ThenInclude(x => x.Products) + .Include(y => y._requests) + .ThenInclude(y => y.PCs) .Select(x => x.GetViewModel) .ToList(); } @@ -30,7 +33,9 @@ namespace ComputerStoreDatabaseImplement.Implements return context.Orders .Include(x => x.Seller) .Include(x => x._consignments) + .ThenInclude(x => x.Products) .Include(x => x._requests) + .ThenInclude(x => x.PCs) .Where(x => (!model.ID.HasValue || x.ID == model.ID) && @@ -51,7 +56,9 @@ namespace ComputerStoreDatabaseImplement.Implements using var context = new ComputerStoreDatabase(); return context.Orders.Include(x => x.Seller) .Include(x => x._consignments) + .ThenInclude(x => x.Products) .Include(x => x._requests) + .ThenInclude(x => x.PCs) .FirstOrDefault(x => (!model.ID.HasValue || x.ID == model.ID) && @@ -92,8 +99,11 @@ namespace ComputerStoreDatabaseImplement.Implements using var context = new ComputerStoreDatabase(); var order = context.Orders + .Include(x => x.Seller) .Include(x => x._consignments) + .ThenInclude(x => x.Products) .Include(x => x._requests) + .ThenInclude(x => x.PCs) .FirstOrDefault(x => x.ID == model.ID); if (order == null) { @@ -107,7 +117,9 @@ namespace ComputerStoreDatabaseImplement.Implements return context.Orders.Include(x => x.Seller) .Include(x => x._consignments) + .ThenInclude(x => x.Products) .Include(x => x._requests) + .ThenInclude(x => x.PCs) .FirstOrDefault(x => x.ID == model.ID)? .GetViewModel; } @@ -118,7 +130,9 @@ namespace ComputerStoreDatabaseImplement.Implements var order = context.Orders.Include(x => x.Seller) .Include(x => x._consignments) + .ThenInclude(x => x.Products) .Include(x => x._requests) + .ThenInclude(x => x.PCs) .FirstOrDefault(x => x.ID == model.ID); if (order != null) { diff --git a/ComputerStoreDatabaseImplement/Implements/RequestStorage.cs b/ComputerStoreDatabaseImplement/Implements/RequestStorage.cs index 48ef46b..3af41f0 100644 --- a/ComputerStoreDatabaseImplement/Implements/RequestStorage.cs +++ b/ComputerStoreDatabaseImplement/Implements/RequestStorage.cs @@ -37,7 +37,7 @@ namespace ComputerStoreDatabaseImplement.Implements .ThenInclude(x => x.Component) .Where(x => (!model.ID.HasValue || x.ID == model.ID) && - (!model.OrderID.HasValue || x.OrderID == model.OrderID) && + (x.OrderID == model.OrderID) && (!model.PCID.HasValue || x.PCID == model.PCID)) .Select(y => y.GetViewModel) .ToList(); diff --git a/ComputerStoreDatabaseImplement/Models/Consignment.cs b/ComputerStoreDatabaseImplement/Models/Consignment.cs index e9f4c93..56c2f84 100644 --- a/ComputerStoreDatabaseImplement/Models/Consignment.cs +++ b/ComputerStoreDatabaseImplement/Models/Consignment.cs @@ -16,7 +16,7 @@ namespace ComputerStoreDatabaseImplement.Models { public int ID { get; private set; } - public int? OrderID { get; private set; } + public int? OrderID { get; set; } public virtual Order? Order { get; set; } [Required] @@ -84,6 +84,7 @@ namespace ComputerStoreDatabaseImplement.Models { context.ConsignmentProducts.RemoveRange(consignmentProducts.Where(rec => !model.ConsignmentProducts.ContainsKey(rec.ProductID))); context.SaveChanges(); + consignmentProducts = context.ConsignmentProducts.Where(rec => rec.ConsignmentID == model.ID).ToList(); foreach (var updateProduct in consignmentProducts) { updateProduct.Count = model.ConsignmentProducts[updateProduct.ProductID].Item2; diff --git a/ComputerStoreDatabaseImplement/Models/Request.cs b/ComputerStoreDatabaseImplement/Models/Request.cs index 99a3e86..c6edc5f 100644 --- a/ComputerStoreDatabaseImplement/Models/Request.cs +++ b/ComputerStoreDatabaseImplement/Models/Request.cs @@ -19,7 +19,7 @@ namespace ComputerStoreDatabaseImplement.Models { public int ID { get; private set; } - public int? OrderID { get; private set; } + public int? OrderID { get; set; } public virtual Order? Order { get; set; } public int? PCID { get; private set; } diff --git a/ComputerStoreSellerApp/ComputerStoreSellerApp.csproj b/ComputerStoreSellerApp/ComputerStoreSellerApp.csproj index a42ca18..355526a 100644 --- a/ComputerStoreSellerApp/ComputerStoreSellerApp.csproj +++ b/ComputerStoreSellerApp/ComputerStoreSellerApp.csproj @@ -21,8 +21,4 @@ - - - - diff --git a/ComputerStoreSellerApp/Controllers/ConsignmentController.cs b/ComputerStoreSellerApp/Controllers/ConsignmentController.cs index 64e4774..4229410 100644 --- a/ComputerStoreSellerApp/Controllers/ConsignmentController.cs +++ b/ComputerStoreSellerApp/Controllers/ConsignmentController.cs @@ -1,6 +1,8 @@ -using ComputerStoreContracts.BindingModels; +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; @@ -145,6 +147,12 @@ namespace ComputerStoreSellerApp.Controllers return RedirectToAction("Login", "Auth"); } + if (selectedProducts.Count == 0) + { + TempData.Add("error", "Партия должна содержать продукты"); + return RedirectToAction("CreatePage", "Consignment"); + } + try { double tmpPrice = 0; @@ -178,6 +186,15 @@ namespace ComputerStoreSellerApp.Controllers 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; @@ -219,26 +236,26 @@ namespace ComputerStoreSellerApp.Controllers 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"); - // } + [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"); - // } - //} + 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"); + } + } } } diff --git a/ComputerStoreSellerApp/Controllers/OrderController.cs b/ComputerStoreSellerApp/Controllers/OrderController.cs new file mode 100644 index 0000000..5e84a12 --- /dev/null +++ b/ComputerStoreSellerApp/Controllers/OrderController.cs @@ -0,0 +1,407 @@ +using ComputerStoreBusinessLogic.BusinessLogic; +using ComputerStoreContracts.BindingModels; +using ComputerStoreContracts.BusinessLogicContracts; +using ComputerStoreContracts.SearchModels; +using ComputerStoreContracts.ViewModels; +using ComputerStoreDataModels.Enums; +using ComputerStoreDataModels.Models; +using DocumentFormat.OpenXml.Office2013.Word; +using Microsoft.AspNetCore.Mvc; +using System.Text.RegularExpressions; + +namespace ComputerStoreSellerApp.Controllers +{ + public class OrderController : Controller + { + private IOrderLogic _orderLogic; + private IConsignmentLogic _consignmentLogic; + private IRequestLogic _requestLogic; + private ISellerLogic _sellerLogic; + + private static List selectedConsignments = new(); + private static List selectedRequests = new(); + + public OrderController(IOrderLogic orderLogic, IConsignmentLogic consignmentLogic, IRequestLogic requestLogic, ISellerLogic sellerLogic) + { + _orderLogic = orderLogic; + _consignmentLogic = consignmentLogic; + _requestLogic = requestLogic; + _sellerLogic = sellerLogic; + } + + + [HttpPost("[controller]/[action]")] + public IActionResult AddConsignment(int consignment) + { + if (!HttpContext.Session.Keys.Contains("login")) + { + return RedirectToAction("Login", "Auth"); + } + + if (!selectedConsignments.Contains(consignment)) + { + selectedConsignments.Add(consignment); + } + + return RedirectToAction("CreatePage", "Order"); + } + + [HttpPost("[controller]/[action]")] + public IActionResult UpdateConsignment(int consignment, int id) + { + if (!HttpContext.Session.Keys.Contains("login")) + { + return RedirectToAction("Login", "Auth"); + } + + if (!selectedConsignments.Contains(consignment)) + { + selectedConsignments.Add(consignment); + } + + ViewData["currentOrder"] = _orderLogic.ReadElement(new OrderSearchModel() { ID = id }); + var tmpconsignments = new List(); + tmpconsignments.AddRange(_consignmentLogic.ReadList(new ConsignmentSearchModel() { OrderID = null })!); + tmpconsignments.AddRange(_consignmentLogic.ReadList(new ConsignmentSearchModel() { OrderID = id })!); + ViewData["consignments"] = tmpconsignments; + + var tmprequests = new List(); + tmprequests.AddRange(_requestLogic.ReadList(new RequestSearchModel() { OrderID = null, PCID = null })!); + tmprequests.AddRange(_requestLogic.ReadList(new RequestSearchModel() { OrderID = id, PCID = null })!); + ViewData["requests"] = tmprequests; + + ViewData["selectedConsignments"] = selectedConsignments; + ViewData["selectedRequests"] = selectedRequests; + + return View("Views/Order/Create.cshtml"); + } + + [HttpPost("[controller]/[action]/{selectedconsignmentid}/{currentorderid}")] + public IActionResult DeleteConsignment(int selectedconsignmentid, int currentorderid) + { + if (!HttpContext.Session.Keys.Contains("login")) + { + return RedirectToAction("Login", "Auth"); + } + + selectedConsignments.Remove(selectedconsignmentid); + if (currentorderid > 0) + { + ViewData["currentOrder"] = _orderLogic.ReadElement(new OrderSearchModel() { ID = currentorderid }); + + var tmpconsignments = new List(); + tmpconsignments.AddRange(_consignmentLogic.ReadList(new ConsignmentSearchModel() { OrderID = null })!); + tmpconsignments.AddRange(_consignmentLogic.ReadList(new ConsignmentSearchModel() { OrderID = currentorderid })!); + ViewData["consignments"] = tmpconsignments; + + var tmprequests = new List(); + tmprequests.AddRange(_requestLogic.ReadList(new RequestSearchModel() { OrderID = null, PCID = null })!); + tmprequests.AddRange(_requestLogic.ReadList(new RequestSearchModel() { OrderID = currentorderid, PCID = null })!); + ViewData["requests"] = tmprequests; + + ViewData["selectedConsignments"] = selectedConsignments; + ViewData["selectedRequests"] = selectedRequests; + return View("Views/Order/Create.cshtml"); + } + else + { + return RedirectToAction("CreatePage", "Order"); + } + } + + [HttpPost("[controller]/[action]")] + public IActionResult AddRequest(int request) + { + if (!HttpContext.Session.Keys.Contains("login")) + { + return RedirectToAction("Login", "Auth"); + } + + if (!selectedRequests.Contains(request)) + { + selectedRequests.Add(request); + } + + return RedirectToAction("CreatePage", "Order"); + } + + [HttpPost("[controller]/[action]")] + public IActionResult UpdateRequest(int request, int id) + { + if (!HttpContext.Session.Keys.Contains("login")) + { + return RedirectToAction("Login", "Auth"); + } + + if (!selectedRequests.Contains(request)) + { + selectedRequests.Add(request); + } + + ViewData["currentOrder"] = _orderLogic.ReadElement(new OrderSearchModel() { ID = id }); + var tmpconsignments = new List(); + tmpconsignments.AddRange(_consignmentLogic.ReadList(new ConsignmentSearchModel() { OrderID = null })!); + tmpconsignments.AddRange(_consignmentLogic.ReadList(new ConsignmentSearchModel() { OrderID = id })!); + ViewData["consignments"] = tmpconsignments; + + var tmprequests = new List(); + tmprequests.AddRange(_requestLogic.ReadList(new RequestSearchModel() { OrderID = null, PCID = null })!); + tmprequests.AddRange(_requestLogic.ReadList(new RequestSearchModel() { OrderID = id, PCID = null })!); + ViewData["requests"] = tmprequests; + + ViewData["selectedConsignments"] = selectedConsignments; + ViewData["selectedRequests"] = selectedRequests; + + return View("Views/Order/Create.cshtml"); + } + + [HttpPost("[controller]/[action]/{selectedrequestid}/{currentorderid}")] + public IActionResult DeleteRequest(int selectedrequestid, int currentorderid) + { + if (!HttpContext.Session.Keys.Contains("login")) + { + return RedirectToAction("Login", "Auth"); + } + + selectedRequests.Remove(selectedrequestid); + if (currentorderid > 0) + { + ViewData["currentOrder"] = _orderLogic.ReadElement(new OrderSearchModel() { ID = currentorderid }); + var tmpconsignments = new List(); + tmpconsignments.AddRange(_consignmentLogic.ReadList(new ConsignmentSearchModel() { OrderID = null })!); + tmpconsignments.AddRange(_consignmentLogic.ReadList(new ConsignmentSearchModel() { OrderID = currentorderid })!); + ViewData["consignments"] = tmpconsignments; + + var tmprequests = new List(); + tmprequests.AddRange(_requestLogic.ReadList(new RequestSearchModel() { OrderID = null, PCID = null })!); + tmprequests.AddRange(_requestLogic.ReadList(new RequestSearchModel() { OrderID = currentorderid, PCID = null })!); + ViewData["requests"] = tmprequests; + ViewData["selectedConsignments"] = selectedConsignments; + ViewData["selectedRequests"] = selectedRequests; + return View("Views/Order/Create.cshtml"); + } + else + { + return RedirectToAction("CreatePage", "Order"); + } + } + + + [HttpGet("[controller]/[action]")] + public IActionResult List() + { + if (!HttpContext.Session.Keys.Contains("login")) + { + return RedirectToAction("Login", "Auth"); + } + selectedConsignments.Clear(); + selectedRequests.Clear(); + ViewData["orders"] = _orderLogic.ReadList(null); + + return View(); + } + + [HttpGet("[controller]/[action]/{id}")] + public IActionResult View(int id) + { + if (!HttpContext.Session.Keys.Contains("login")) + { + return RedirectToAction("Login", "Auth"); + } + + var order = _orderLogic.ReadElement(new OrderSearchModel() { ID = id }); + + if (order is null) + { + TempData.Add("error", "Заказа с таким идентификатором не существует"); + return RedirectToAction("List", "Order", null); + } + + ViewData["currentOrder"] = order; + var tmpconsignments = new List(); + tmpconsignments.AddRange(_consignmentLogic.ReadList(new ConsignmentSearchModel() { OrderID = null })!); + tmpconsignments.AddRange(_consignmentLogic.ReadList(new ConsignmentSearchModel() { OrderID = id })!); + ViewData["consignments"] = tmpconsignments; + + var tmprequests = new List(); + tmprequests.AddRange(_requestLogic.ReadList(new RequestSearchModel() { OrderID = null, PCID = null })!); + tmprequests.AddRange(_requestLogic.ReadList(new RequestSearchModel() { OrderID = id, PCID = null })!); + ViewData["requests"] = tmprequests; + + if (order.OrderConsignments != null && order.OrderConsignments.Count > 0) + { + selectedConsignments.AddRange(order.OrderConsignments.Select(x => x.ID)); + } + if (order.OrderRequests != null && order.OrderRequests.Count > 0) + { + selectedRequests.AddRange(order.OrderRequests.Select(x => x.ID)); + } + + ViewData["selectedConsignments"] = selectedConsignments; + ViewData["selectedRequests"] = selectedRequests; + + return View("Views/Order/Create.cshtml"); + } + + [HttpGet("[controller]/[action]")] + public IActionResult CreatePage() + { + if (!HttpContext.Session.Keys.Contains("login")) + { + return RedirectToAction("Login", "Auth"); + } + + ViewData["selectedConsignments"] = selectedConsignments; + ViewData["selectedRequests"] = selectedRequests; + ViewData["consignments"] = _consignmentLogic.ReadList(new ConsignmentSearchModel() { OrderID = null}); + ViewData["requests"] = _requestLogic.ReadList(new RequestSearchModel() { OrderID = null }); + + return View("Views/Order/Create.cshtml"); + } + + [HttpPost("[controller]/[action]")] + public IActionResult Create() + { + if (!HttpContext.Session.Keys.Contains("login")) + { + return RedirectToAction("Login", "Auth"); + } + + if (selectedConsignments.Count == 0 && selectedRequests.Count == 0) + { + TempData.Add("error", "Заказ должен содержать партию или заявку"); + return RedirectToAction("CreatePage", "Order"); + } + + try + { + double tmpPrice = 0; + foreach (var item in selectedConsignments) + { + tmpPrice += _consignmentLogic.ReadElement(new ConsignmentSearchModel() { ID = item })!.Price; + } + foreach (var item in selectedRequests) + { + tmpPrice += _requestLogic.ReadElement(new RequestSearchModel() { ID = item })!.Price; + } + + _orderLogic.CreateOrder(new OrderBindingModel() + { + Price = tmpPrice, + OrderConsignments = selectedConsignments.Select(x => (IConsignmentModel)_consignmentLogic.ReadElement(new ConsignmentSearchModel() { ID = x })!).ToList(), + OrderRequests = selectedRequests.Select(x => (IRequestModel)_requestLogic.ReadElement(new RequestSearchModel() { ID = x })!).ToList(), + SellerID = _sellerLogic.ReadElement(new SellerSearchModel() { Username = HttpContext.Session.GetString("login")!.ToString() })!.ID, + }); + selectedConsignments.Clear(); + selectedRequests.Clear(); + return RedirectToAction("List", "Order", null); + } + catch (Exception e) + { + TempData.Add("error", Regex.Replace(e.Message, "[a-zA-Z\\(\\)']", "")); + selectedConsignments.Clear(); + selectedRequests.Clear(); + return RedirectToAction("List", "Order", null); + } + } + + [HttpPost("[controller]/[action]/{id}")] + public IActionResult Edit(int id) + { + if (!HttpContext.Session.Keys.Contains("login")) + { + return RedirectToAction("Login", "Auth"); + } + + if (selectedConsignments.Count == 0 && selectedRequests.Count == 0) + { + TempData.Add("error", "Заказ должен содержать партию или заявку"); + ViewData["currentOrder"] = _orderLogic.ReadElement(new OrderSearchModel() { ID = id }); + var tmpconsignments = new List(); + tmpconsignments.AddRange(_consignmentLogic.ReadList(new ConsignmentSearchModel() { OrderID = null })!); + tmpconsignments.AddRange(_consignmentLogic.ReadList(new ConsignmentSearchModel() { OrderID = id })!); + ViewData["consignments"] = tmpconsignments; + + var tmprequests = new List(); + tmprequests.AddRange(_requestLogic.ReadList(new RequestSearchModel() { OrderID = null, PCID = null })!); + tmprequests.AddRange(_requestLogic.ReadList(new RequestSearchModel() { OrderID = id, PCID = null })!); + ViewData["requests"] = tmprequests; + + ViewData["selectedConsignments"] = selectedConsignments; + ViewData["selectedRequests"] = selectedRequests; + + return View("Views/Order/Create.cshtml"); + } + + try + { + double tmpPrice = 0; + foreach (var item in selectedConsignments) + { + tmpPrice += _consignmentLogic.ReadElement(new ConsignmentSearchModel() { ID = item })!.Price; + } + foreach (var item in selectedRequests) + { + tmpPrice += _requestLogic.ReadElement(new RequestSearchModel() { ID = item })!.Price; + } + + _orderLogic.UpdateOrder(new OrderBindingModel() + { + ID = id, + Price = tmpPrice, + Status = _orderLogic.ReadElement(new OrderSearchModel() { ID = id })!.Status, + DateCreate = _orderLogic.ReadElement(new OrderSearchModel() { ID = id })!.DateCreate, + DateImplement = _orderLogic.ReadElement(new OrderSearchModel() { ID = id })!.DateImplement, + SellerID = _orderLogic.ReadElement(new OrderSearchModel() { ID= id })!.SellerID, + OrderConsignments = selectedConsignments.Select(x => (IConsignmentModel)_consignmentLogic.ReadElement(new ConsignmentSearchModel() { ID = x })!).ToList(), + OrderRequests = selectedRequests.Select(x => (IRequestModel)_requestLogic.ReadElement(new RequestSearchModel() { ID = x })!).ToList(), + }); + selectedConsignments.Clear(); + selectedRequests.Clear(); + return RedirectToAction("List", "Order", null); + } + catch (Exception e) + { + TempData.Add("error", Regex.Replace(e.Message, "[a-zA-Z\\(\\)']", "")); + return RedirectToAction("View", "Order", new { id = id }); + } + } + + [HttpPost("[controller]/[action]/{id}")] + public IActionResult Delete(int id) + { + if (!HttpContext.Session.Keys.Contains("login")) + { + return RedirectToAction("Login", "Auth"); + } + + _orderLogic.DeleteOrder(new OrderBindingModel() { ID = id }); + + return RedirectToAction("List", "Order", null); + } + + [HttpPost("[controller]/[action]/{id}")] + public IActionResult UpdateStatus(int id) + { + if (!HttpContext.Session.Keys.Contains("login")) + { + return RedirectToAction("Login", "Auth"); + } + var curOrder = _orderLogic.ReadElement(new OrderSearchModel() { ID = id })!; + if (curOrder.Status == OrderStatus.Accepted) + { + _orderLogic.TakeOrderInProcess(new OrderBindingModel() { ID = id }); + } + if (curOrder.Status == OrderStatus.InProcess) + { + _orderLogic.TakeOrderReady(new OrderBindingModel() { ID = id }); + } + if (curOrder.Status == OrderStatus.Ready) + { + _orderLogic.TakeOrderGiven(new OrderBindingModel() { ID = id }); + } + + return RedirectToAction("List", "Order", null); + } + } +} diff --git a/ComputerStoreSellerApp/Controllers/RequestController.cs b/ComputerStoreSellerApp/Controllers/RequestController.cs index d471483..22d99c9 100644 --- a/ComputerStoreSellerApp/Controllers/RequestController.cs +++ b/ComputerStoreSellerApp/Controllers/RequestController.cs @@ -1,4 +1,5 @@ -using ComputerStoreContracts.BindingModels; +using ComputerStoreBusinessLogic.BusinessLogic; +using ComputerStoreContracts.BindingModels; using ComputerStoreContracts.BusinessLogicContracts; using ComputerStoreContracts.SearchModels; using ComputerStoreDataModels.Models; @@ -142,6 +143,12 @@ namespace ComputerStoreSellerApp.Controllers return RedirectToAction("Login", "Auth"); } + if (selectedComponents.Count == 0) + { + TempData.Add("error", "Заявка должна содержать компоненты"); + return RedirectToAction("CreatePage", "Request"); + } + try { double tmpPrice = 0; @@ -176,6 +183,15 @@ namespace ComputerStoreSellerApp.Controllers 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; @@ -218,5 +234,27 @@ namespace ComputerStoreSellerApp.Controllers 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"); + } + } } } diff --git a/ComputerStoreSellerApp/Views/Consignment/Create.cshtml b/ComputerStoreSellerApp/Views/Consignment/Create.cshtml index 43c7bc6..006ca6f 100644 --- a/ComputerStoreSellerApp/Views/Consignment/Create.cshtml +++ b/ComputerStoreSellerApp/Views/Consignment/Create.cshtml @@ -4,61 +4,62 @@ @{ ViewData["Title"] = "Партия"; - //var currentConsignment = TempData["currentConsignment"] is null ? null : JsonConvert.DeserializeObject((string)TempData["currentConsignment"]!); var currentConsignment = ViewData["currentConsignment"] as ConsignmentViewModel; - //var products = JsonConvert.DeserializeObject>((string)TempData["products"]!); var products = ViewData["products"] as List; - //var selectedProducts = JsonConvert.DeserializeObject>((string)TempData["selectedProducts"]!); var selectedProducts = ViewData["selectedProducts"] as List<(int productId, int count)>; } -
-
+@{ + if (currentConsignment is null || currentConsignment.OrderID is null) + { +
+
-
-

@(currentConsignment is not null ? "Просмотр партии" : "Создать партию")

- @{ - if (TempData.Keys.Contains("error")) - { - - } - } - -
- + } + +
+ +
+ +
+ +
+ +
+ +
+ + +
+
+ +
+
+ +
- -
- -
- -
- -
- - -
-
- -
-
- -
-
- + } +}
@@ -76,6 +77,16 @@ @products.FirstOrDefault(x => x.ID == selectedprod.productId)?.Name @selectedprod.count @(products.FirstOrDefault(x => x.ID == selectedprod.productId)?.Price * selectedprod.count) + @{ + if (currentConsignment is null || currentConsignment.OrderID is null) + { + +
+ +
+ + } + } } } diff --git a/ComputerStoreSellerApp/Views/Consignment/List.cshtml b/ComputerStoreSellerApp/Views/Consignment/List.cshtml index b4b9f88..755506b 100644 --- a/ComputerStoreSellerApp/Views/Consignment/List.cshtml +++ b/ComputerStoreSellerApp/Views/Consignment/List.cshtml @@ -9,18 +9,18 @@
-
+

Все партии

- - + + @@ -32,9 +32,9 @@ @{ - var productsString = string.Join(", ", consignment.ConsignmentProducts.Select(m => m.Value.Item1.Name.ToLower())); + var productsString = string.Join("
", consignment.ConsignmentProducts.Select(m => (m.Value.Item1.Name.ToLower() + " " + m.Value.Item2.ToString()))); } - + + @{ + if (currentRequest is null || currentRequest.OrderID is null) + { + + } + } } } diff --git a/ComputerStoreSellerApp/Views/Request/List.cshtml b/ComputerStoreSellerApp/Views/Request/List.cshtml index 8b75314..d7de9c9 100644 --- a/ComputerStoreSellerApp/Views/Request/List.cshtml +++ b/ComputerStoreSellerApp/Views/Request/List.cshtml @@ -9,18 +9,18 @@
-
+

Все заявки

НомерНомер заказа№ заказа Стоимость Товары
@(consignment.OrderID == null ? "" : consignment.OrderID) @consignment.Price@productsString@Html.Raw(productsString)
Посмотреть diff --git a/ComputerStoreSellerApp/Views/Order/Create.cshtml b/ComputerStoreSellerApp/Views/Order/Create.cshtml new file mode 100644 index 0000000..fc7c915 --- /dev/null +++ b/ComputerStoreSellerApp/Views/Order/Create.cshtml @@ -0,0 +1,154 @@ +@using Newtonsoft.Json +@using ComputerStoreContracts.ViewModels; +@inject IHttpContextAccessor Accessor; + +@{ + ViewData["Title"] = "Заказ"; + var currentOrder = ViewData["currentOrder"] as OrderViewModel; + + var consignments = ViewData["consignments"] as List; + var requests = ViewData["requests"] as List; + + var selectedConsignments = ViewData["selectedConsignments"] as List; + var selectedRequests = ViewData["selectedRequests"] as List; +} +@{ + if (currentOrder is null || currentOrder.Status == ComputerStoreDataModels.Enums.OrderStatus.Accepted) + { +
+

@(currentOrder is not null ? "Просмотр заказа" : "Создать заказ")

+ @{ + if (TempData.Keys.Contains("error")) + { + + } + } + +
+
+ +
+ +
+ +
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+
+ } +} + +
+
+

Партии заказа

+ + + + + + + @{ + foreach (var selectedcons in selectedConsignments!) + { + + + @{ + var productsString = string.Join("
", consignments.FirstOrDefault(x => x.ID == selectedcons)!.ConsignmentProducts.Select(m => (m.Value.Item1.Name.ToLower() + " " + m.Value.Item2.ToString()))); + } + + + @{ + if (currentOrder is null || currentOrder.Status == ComputerStoreDataModels.Enums.OrderStatus.Accepted) + { + + } + } + + } + } +
ТоварыЦена
@selectedcons@Html.Raw(productsString)@consignments.FirstOrDefault(x => x.ID == selectedcons)?.Price.ToString() +
+ +
+
+
+
+ +
+
+

Заявки заказа

+ + + + + + + @{ + foreach (var selectedreq in selectedRequests!) + { + + + @{ + var componentsString = string.Join("
", requests.FirstOrDefault(x => x.ID == selectedreq)!.RequestComponents.Select(m => (m.Item1.Name.ToLower() + " " + m.Item2.ToString()))); + } + + + @{ + if (currentOrder is null || currentOrder.Status == ComputerStoreDataModels.Enums.OrderStatus.Accepted) + { + + } + } + + + } + } +
КомпонентыЦена
@selectedreq@Html.Raw(componentsString)@requests.FirstOrDefault(x => x.ID == selectedreq)?.Price.ToString() +
+ +
+
+
+
+ + \ No newline at end of file diff --git a/ComputerStoreSellerApp/Views/Order/List.cshtml b/ComputerStoreSellerApp/Views/Order/List.cshtml new file mode 100644 index 0000000..6837a74 --- /dev/null +++ b/ComputerStoreSellerApp/Views/Order/List.cshtml @@ -0,0 +1,110 @@ +@using Newtonsoft.Json +@using ComputerStoreContracts.ViewModels; +@inject IHttpContextAccessor Accessor; + +@{ + ViewData["Title"] = "Заказы"; + var orders = ViewData["orders"] as List; +} + + + +
+
+

Все заказы

+ + + + + + + + + + + + @{ + foreach (var order in orders!) + { + + + @{ + var consignmentsString = order.OrderConsignments is not null ? string.Join(", ", order.OrderConsignments.Select(m => m.ID)) : ""; + } + + @{ + var requestsString = order.OrderRequests is not null ? string.Join(", ", order.OrderRequests.Select(m => m.ID)) : ""; + } + + + @{ + if (order.Status == ComputerStoreDataModels.Enums.OrderStatus.Accepted) + { + + } + if (order.Status == ComputerStoreDataModels.Enums.OrderStatus.InProcess) + { + + } + if (order.Status == ComputerStoreDataModels.Enums.OrderStatus.Ready) + { + + } + if (order.Status == ComputerStoreDataModels.Enums.OrderStatus.Given) + { + + } + } + + + + + + @{ + if (order.Status == ComputerStoreDataModels.Enums.OrderStatus.Accepted) + { + + + } + if (order.Status == ComputerStoreDataModels.Enums.OrderStatus.InProcess) + { + + } + if (order.Status == ComputerStoreDataModels.Enums.OrderStatus.Ready) + { + + } + } + + } + } +
№ партий№ заявокСтоимостьСтатусДата принятияДата выдачиПродавец
@order.ID@Html.Raw(consignmentsString)@Html.Raw(requestsString)@order.PriceПринятВ работеГотовВыдан@(order.DateCreate.ToShortDateString() + " " + order.DateCreate.ToLongTimeString())@(order.DateImplement is null ? "" : ((DateTime)order.DateImplement).ToShortDateString() + " " + ((DateTime)order.DateImplement).ToLongTimeString())@order.SellerUsername + + +
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+
+ + \ No newline at end of file diff --git a/ComputerStoreSellerApp/Views/Request/Create.cshtml b/ComputerStoreSellerApp/Views/Request/Create.cshtml index 67cce65..cfd9767 100644 --- a/ComputerStoreSellerApp/Views/Request/Create.cshtml +++ b/ComputerStoreSellerApp/Views/Request/Create.cshtml @@ -10,52 +10,56 @@ var selectedComponents = ViewData["selectedComponents"] as List<(int componentId, int count)>; } -
-
+@{ + if (currentRequest is null || currentRequest.OrderID is null) + { +
+
-
-

@(currentRequest is not null ? "Просмотр заявки" : "Создать заявку")

- @{ - if (TempData.Keys.Contains("error")) - { - - } - } - -
- + } + +
+ +
+ +
+ +
+ +
+ +
+ + +
+
+ +
+
+ +
- -
- -
- -
- -
- - -
-
- -
-
- -
-
- + } +}
@@ -73,6 +77,16 @@
@components.FirstOrDefault(x => x.ID == selectedcomp.componentId)?.Name @selectedcomp.count @(components.FirstOrDefault(x => x.ID == selectedcomp.componentId)?.Price * selectedcomp.count) +
+ +
+
- - + + @@ -34,9 +34,9 @@ @{ - var componentsString = string.Join(", ", request.RequestComponents.Select(m => m.Item1.Name.ToLower())); + var componentsString = string.Join("
", request.RequestComponents.Select(m => (m.Item1.Name.ToLower() + " " + m.Item2.ToString()))); } - +
НомерНомер заказа№ заказа Название ПК Стоимость Компоненты@(request.PCID == null ? "" : request.PCID) @request.Price@componentsString@Html.Raw(componentsString)
Посмотреть diff --git a/ComputerStoreSellerApp/Views/Shared/_Layout.cshtml b/ComputerStoreSellerApp/Views/Shared/_Layout.cshtml index 4a79ddf..9c09fbb 100644 --- a/ComputerStoreSellerApp/Views/Shared/_Layout.cshtml +++ b/ComputerStoreSellerApp/Views/Shared/_Layout.cshtml @@ -47,6 +47,9 @@ + } }