Order delete/edit
This commit is contained in:
parent
105adb9568
commit
d063e43236
@ -39,6 +39,24 @@ namespace ElectronicsShopBusinessLogic.BusinessLogic
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool Delete(OrderBindingModel model) {
|
||||||
|
CheckModel(model, false);
|
||||||
|
_logger.LogInformation($"Delete. ID:{model.ID}");
|
||||||
|
if (_storage.Delete(model) == null) {
|
||||||
|
_logger.LogWarning("Delete operation failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool DeleteProduct(OrderBindingModel model) {
|
||||||
|
if (_storage.DeleteProduct(model) == null) {
|
||||||
|
_logger.LogWarning("Update operation failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public List<OrderViewModel>? ReadList(OrderSearchModel? model)
|
public List<OrderViewModel>? ReadList(OrderSearchModel? model)
|
||||||
{
|
{
|
||||||
_logger.LogInformation($"ReadList:ID:{model?.ID}");
|
_logger.LogInformation($"ReadList:ID:{model?.ID}");
|
||||||
|
@ -18,5 +18,9 @@ namespace ElectronicsShopContracts.BusinessLogicContracts
|
|||||||
|
|
||||||
bool CreateOrder(OrderBindingModel model);
|
bool CreateOrder(OrderBindingModel model);
|
||||||
bool Update(OrderBindingModel model);
|
bool Update(OrderBindingModel model);
|
||||||
|
bool Delete(OrderBindingModel model);
|
||||||
|
|
||||||
|
bool DeleteProduct(OrderBindingModel model);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,5 +17,8 @@ namespace ElectronicsShopContracts.StorageContracts
|
|||||||
OrderViewModel? GetElement(OrderSearchModel model);
|
OrderViewModel? GetElement(OrderSearchModel model);
|
||||||
OrderViewModel? Insert(OrderBindingModel model);
|
OrderViewModel? Insert(OrderBindingModel model);
|
||||||
OrderViewModel? Update(OrderBindingModel model);
|
OrderViewModel? Update(OrderBindingModel model);
|
||||||
|
OrderViewModel? Delete(OrderBindingModel model);
|
||||||
|
OrderViewModel? DeleteProduct(OrderBindingModel model);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ using ElectronicsShopContracts.StorageContracts;
|
|||||||
using ElectronicsShopContracts.ViewModels;
|
using ElectronicsShopContracts.ViewModels;
|
||||||
using ElectronicsShopDataBaseImplement.Models;
|
using ElectronicsShopDataBaseImplement.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
|
||||||
|
|
||||||
namespace ElectronicsShopDataBaseImplement.Implements
|
namespace ElectronicsShopDataBaseImplement.Implements
|
||||||
@ -26,7 +27,7 @@ namespace ElectronicsShopDataBaseImplement.Implements
|
|||||||
public OrderViewModel? Update(OrderBindingModel model) {
|
public OrderViewModel? Update(OrderBindingModel model) {
|
||||||
using var context = new Database();
|
using var context = new Database();
|
||||||
using var transcation = context.Database.BeginTransaction();
|
using var transcation = context.Database.BeginTransaction();
|
||||||
try {
|
|
||||||
var order = context.Orders.FirstOrDefault(rec => rec.ID == model.ID);
|
var order = context.Orders.FirstOrDefault(rec => rec.ID == model.ID);
|
||||||
if (order == null) {
|
if (order == null) {
|
||||||
return null;
|
return null;
|
||||||
@ -35,10 +36,18 @@ namespace ElectronicsShopDataBaseImplement.Implements
|
|||||||
transcation.Commit();
|
transcation.Commit();
|
||||||
return order.GetViewModel;
|
return order.GetViewModel;
|
||||||
}
|
}
|
||||||
catch {
|
|
||||||
transcation.Rollback();
|
public OrderViewModel? DeleteProduct(OrderBindingModel model) {
|
||||||
throw;
|
using var context = new Database();
|
||||||
|
using var transcation = context.Database.BeginTransaction();
|
||||||
|
|
||||||
|
var order = context.Orders.FirstOrDefault(rec => rec.ID == model.ID);
|
||||||
|
if (order == null) {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
order.DeleteProducts(context, model);
|
||||||
|
transcation.Commit();
|
||||||
|
return order.GetViewModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public OrderViewModel? Delete(OrderBindingModel model)
|
public OrderViewModel? Delete(OrderBindingModel model)
|
||||||
@ -105,6 +114,5 @@ namespace ElectronicsShopDataBaseImplement.Implements
|
|||||||
.ThenInclude(x => x._product).ToList()
|
.ThenInclude(x => x._product).ToList()
|
||||||
.Select(x => x.GetViewModel).ToList();
|
.Select(x => x.GetViewModel).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -97,5 +97,11 @@ namespace ElectronicsShopDataBaseImplement.Models
|
|||||||
}
|
}
|
||||||
_productList = null;
|
_productList = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void DeleteProducts(Database context, OrderBindingModel model) {
|
||||||
|
var orderProducts = context.OrderProducts.Where(rec => rec.OrderID == model.ID).ToList();
|
||||||
|
context.OrderProducts.RemoveRange(orderProducts.Where(rec => !model.ProductList.ContainsKey(rec.ProductID)));
|
||||||
|
context.SaveChanges();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -252,12 +252,6 @@ namespace ElectronicsShopEmployeeApp.Controllers {
|
|||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public IActionResult DeleteProduct(int id) {
|
public IActionResult DeleteProduct(int id) {
|
||||||
var _product = APIEmployee.GetRequset<ProductViewModel>($"api/main/getproduct?_productid={id}");
|
|
||||||
|
|
||||||
if (_product == null) {
|
|
||||||
return Redirect("/Home/Index");
|
|
||||||
}
|
|
||||||
|
|
||||||
APIEmployee.PostRequest("api/employee/deleteproduct", new ProductBindingModel {
|
APIEmployee.PostRequest("api/employee/deleteproduct", new ProductBindingModel {
|
||||||
ID = id
|
ID = id
|
||||||
});
|
});
|
||||||
|
@ -83,6 +83,17 @@ namespace ElectronicsShopRestAPI.Controllers {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void DeleteOrders(OrderBindingModel model) {
|
||||||
|
try {
|
||||||
|
_order.Delete(model);
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
_logger.LogError(ex, "Ошибка удаления заказа");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void CreateOrder(OrderBindingModel model) {
|
public void CreateOrder(OrderBindingModel model) {
|
||||||
try {
|
try {
|
||||||
@ -147,7 +158,8 @@ namespace ElectronicsShopRestAPI.Controllers {
|
|||||||
ID = orderid,
|
ID = orderid,
|
||||||
ClientID = view.ClientID,
|
ClientID = view.ClientID,
|
||||||
DateCreate = view.DateCreate,
|
DateCreate = view.DateCreate,
|
||||||
ProductList = _productlist
|
ProductList = _productlist,
|
||||||
|
//sum
|
||||||
};
|
};
|
||||||
var operationResult = _order.Update(model);
|
var operationResult = _order.Update(model);
|
||||||
if (!operationResult) {
|
if (!operationResult) {
|
||||||
@ -159,5 +171,43 @@ namespace ElectronicsShopRestAPI.Controllers {
|
|||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void DeleteProductOrder(List<string> jslist) {
|
||||||
|
|
||||||
|
int _orderId = JsonConvert.DeserializeObject<int>(jslist[0]);
|
||||||
|
int _productId = JsonConvert.DeserializeObject<int>(jslist[1]);
|
||||||
|
|
||||||
|
var view = _order.ReadElement(new OrderSearchModel { ID = _orderId });
|
||||||
|
if (view == null) {
|
||||||
|
_logger.LogError("Ошибка получения данных");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_productlist = view.ProductList;
|
||||||
|
foreach (var item in _productlist) {
|
||||||
|
if (item.Key == _productId) {
|
||||||
|
_productlist.Remove(_productId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
var model = new OrderBindingModel {
|
||||||
|
ID = _orderId,
|
||||||
|
ClientID = view.ClientID,
|
||||||
|
DateCreate = view.DateCreate,
|
||||||
|
ProductList = _productlist
|
||||||
|
//sum
|
||||||
|
};
|
||||||
|
var operationResult = _order.DeleteProduct(model);
|
||||||
|
if (!operationResult) {
|
||||||
|
throw new Exception("Ошибка при сохранении, дополнительная информация в логах");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
_logger.LogError(ex, "Ошибка");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,24 @@ namespace ElectronicsShopUserApp {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void PostRequestStr(string requstUrl, int _orderId, int _productId) {
|
||||||
|
var list = new List<string>() {
|
||||||
|
JsonConvert.SerializeObject(_orderId),
|
||||||
|
JsonConvert.SerializeObject(_productId),
|
||||||
|
};
|
||||||
|
|
||||||
|
var json = JsonConvert.SerializeObject(list);
|
||||||
|
|
||||||
|
var data = new StringContent(json, Encoding.UTF8, "application/json");
|
||||||
|
|
||||||
|
var response = _client.PostAsync(requstUrl, data);
|
||||||
|
|
||||||
|
var result = response.Result.Content.ReadAsStringAsync().Result;
|
||||||
|
if (!response.Result.IsSuccessStatusCode) {
|
||||||
|
throw new Exception(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void ListPostRequest<T>(string requstUrl, T model, int count, int orderID) {
|
public static void ListPostRequest<T>(string requstUrl, T model, int count, int orderID) {
|
||||||
var list = new List<string>() {
|
var list = new List<string>() {
|
||||||
JsonConvert.SerializeObject(model),
|
JsonConvert.SerializeObject(model),
|
||||||
|
@ -15,6 +15,7 @@ namespace ElectronicsShopUserApp.Controllers {
|
|||||||
public class HomeController : Controller {
|
public class HomeController : Controller {
|
||||||
private readonly ILogger<HomeController> _logger;
|
private readonly ILogger<HomeController> _logger;
|
||||||
private Dictionary<int, (IProductModel, int)> _productList;
|
private Dictionary<int, (IProductModel, int)> _productList;
|
||||||
|
public int Id;
|
||||||
//private readonly IOrderLogic _order;
|
//private readonly IOrderLogic _order;
|
||||||
|
|
||||||
public HomeController(ILogger<HomeController> logger/*, IOrderLogic orderLogic*/) {
|
public HomeController(ILogger<HomeController> logger/*, IOrderLogic orderLogic*/) {
|
||||||
@ -121,12 +122,22 @@ namespace ElectronicsShopUserApp.Controllers {
|
|||||||
return RedirectToAction("OrderView");
|
return RedirectToAction("OrderView");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult DeleteOrder(int id) {
|
||||||
|
APIClient.PostRequest($"api/main/deleteorders", new OrderBindingModel { ID = id });
|
||||||
|
return RedirectToAction("Orders");
|
||||||
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public IActionResult OrderView() {
|
public IActionResult OrderView() {
|
||||||
if (APIClient.Client == null) {
|
if (APIClient.Client == null) {
|
||||||
return Redirect("~/Home/Enter");
|
return Redirect("~/Home/Enter");
|
||||||
}
|
}
|
||||||
var view = APIClient.GetRequset<OrderViewModel>($"api/main/getorder?_clientid={APIClient.Client?.ID}");
|
var view = APIClient.GetRequset<OrderViewModel>($"api/main/getorder?_clientid={APIClient.Client?.ID}");
|
||||||
|
if (view != null) {
|
||||||
|
Id = view.ID;
|
||||||
|
}
|
||||||
|
|
||||||
var products = APIClient.GetRequset<List<List<string>>>($"api/main/getorderproducts?_orderid={view?.ID}");
|
var products = APIClient.GetRequset<List<List<string>>>($"api/main/getorderproducts?_orderid={view?.ID}");
|
||||||
|
|
||||||
foreach (var pr in products) {
|
foreach (var pr in products) {
|
||||||
@ -135,14 +146,26 @@ namespace ElectronicsShopUserApp.Controllers {
|
|||||||
_productList.Add(product.ID, (product, count));
|
_productList.Add(product.ID, (product, count));
|
||||||
}
|
}
|
||||||
|
|
||||||
return View(_productList);
|
(int, Dictionary<int, (IProductModel, int)>) tuple = (Id, _productList);
|
||||||
|
return View(tuple);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void OrderView(int sum) {
|
public void OrderView(int sum, int id) {
|
||||||
|
if (sum <= 0) {
|
||||||
|
APIClient.PostRequest($"api/main/deleteorders", new OrderBindingModel { ID = id});
|
||||||
|
}
|
||||||
Response.Redirect("Orders");
|
Response.Redirect("Orders");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public IActionResult DeleteProductOrder(int id) {
|
||||||
|
var view = APIClient.GetRequset<OrderViewModel>($"api/main/getorder?_clientid={APIClient.Client?.ID}");
|
||||||
|
APIClient.PostRequestStr($"api/main/deleteproductorder", view.ID, id);
|
||||||
|
|
||||||
|
return RedirectToAction("OrderView");
|
||||||
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public IActionResult AddProduct() {
|
public IActionResult AddProduct() {
|
||||||
ViewBag.Products = APIClient.GetRequset<List<ProductViewModel>>($"api/main/getproducts");
|
ViewBag.Products = APIClient.GetRequset<List<ProductViewModel>>($"api/main/getproducts");
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach (var item in Model) {
|
@foreach (var item in Model) {
|
||||||
<th>
|
<tr>
|
||||||
<th>
|
<th>
|
||||||
@Html.DisplayFor(modelItem => item.ID)
|
@Html.DisplayFor(modelItem => item.ID)
|
||||||
</th>
|
</th>
|
||||||
@ -43,7 +43,7 @@
|
|||||||
<th>
|
<th>
|
||||||
@Html.DisplayFor(modelItem => item.Sum)
|
@Html.DisplayFor(modelItem => item.Sum)
|
||||||
</th>
|
</th>
|
||||||
</th>
|
</tr>
|
||||||
}
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
@using ElectronicsShopContracts.ViewModels
|
@using ElectronicsShopContracts.ViewModels
|
||||||
@using ElectronicsShopDataModels.Models
|
@using ElectronicsShopDataModels.Models
|
||||||
|
|
||||||
@model Dictionary<int, (IProductModel, int)>
|
@model (int, Dictionary<int, (IProductModel, int)>)
|
||||||
|
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = "OrderView";
|
ViewData["Title"] = "OrderView";
|
||||||
@ -11,7 +11,15 @@
|
|||||||
<h1 class="display-4">Создание корзины</h1>
|
<h1 class="display-4">Создание корзины</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<form method="post">
|
<form method="post">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4"></div>
|
||||||
|
<div class="col-8">
|
||||||
|
<input id="id" type="hidden" name="id" readonly value="@Model.Item1" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class=" text-center">
|
<div class=" text-center">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-4">Сумма:</div>
|
<div class="col-4">Сумма:</div>
|
||||||
@ -25,6 +33,9 @@
|
|||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th>
|
||||||
|
Номер
|
||||||
|
</th>
|
||||||
<th>
|
<th>
|
||||||
Продукт
|
Продукт
|
||||||
</th>
|
</th>
|
||||||
@ -37,8 +48,11 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach (var item in Model) {
|
@foreach (var item in Model.Item2) {
|
||||||
<tr class="element">
|
<tr class="element">
|
||||||
|
<th>
|
||||||
|
@Html.DisplayFor(modelItem => item.Key)
|
||||||
|
</th>
|
||||||
<th>
|
<th>
|
||||||
@Html.DisplayFor(modelItem => item.Value.Item1.ProductName)
|
@Html.DisplayFor(modelItem => item.Value.Item1.ProductName)
|
||||||
</th>
|
</th>
|
||||||
@ -52,7 +66,7 @@
|
|||||||
</th>
|
</th>
|
||||||
|
|
||||||
<td>
|
<td>
|
||||||
<a class="btn btn-primary btn-sm" asp-action="DeleteProductOrder" asp->Удалить</a>
|
<a class="btn btn-primary btn-sm" asp-action="DeleteProductOrder" asp-route-ID="@item.Key">Удалить</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
|
@ -48,8 +48,8 @@
|
|||||||
@Html.DisplayFor(modelItem => item.Sum)
|
@Html.DisplayFor(modelItem => item.Sum)
|
||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
<a class="btn btn-primary btn-sm" asp-action="EditCostItem" asp-route-ID="@item.ID">Изменить</a>
|
<a class="btn btn-primary btn-sm" asp-action="EditOrder" asp-route-ID="@item.ID">Изменить</a>
|
||||||
<a class="btn btn-primary btn-sm" asp-action="DeleteCostItem" asp-route-ID="@item.ID">Удалить</a>
|
<a class="btn btn-primary btn-sm" asp-action="DeleteOrder" asp-route-ID="@item.ID">Удалить</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user