ComputerHardwareStore_YouAr.../ComputerHardwareStore/StoreKeeperClient/Controllers/StoreKeeperController.cs
2024-05-30 07:44:40 +04:00

457 lines
17 KiB
C#

using ComputerHardwareStoreContracts.BindingModels;
using ComputerHardwareStoreContracts.ViewModels;
using ComputerHardwareStoreDataModels.Enums;
using HardwareShopContracts.ViewModels;
using Microsoft.AspNetCore.Mvc;
using StoreKeeperClient;
using System.ComponentModel;
namespace StorekeeperClient.Controllers
{
public class StorekeeperController : Controller
{
private readonly ILogger<HomeController> _logger;
public StorekeeperController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult CreateOrder()
{
if (APIClient.User == null)
{
return Redirect("~/Home/Enter");
}
ViewBag.Products = APIClient.GetRequest<List<ProductViewModel>>($"api/product/getproducts?userId={APIClient.User.Id}");
return View();
}
[HttpPost]
public void CreateOrder(int product, int count, string sum)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
if (product <= 0)
{
throw new Exception("Некорректный идентификатор товара");
}
if (count <= 0)
{
throw new Exception("Количество должно быть больше 0");
}
if (Convert.ToDouble(sum.Replace('.', ',')) <= 0)
{
throw new Exception("Цена должна быть больше 0");
}
//APIClient.PostRequest("api/order/createorder", new OrderBindingModel
//{
// //UserId = APIClient.User.Id,
// ProductId = product,
// Count = count,
// Sum = Convert.ToDouble(sum.Replace('.', ','))
//});
Response.Redirect("Orders");
}
[HttpPost]
public void DeleteOrder(int Id)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
if (Id <= 0)
{
throw new Exception("Некорректный идентификатор");
}
APIClient.PostRequest("api/order/deleteorder", new OrderBindingModel
{
Id = Id
});
Response.Redirect("Orders");
}
[HttpPost]
public void UpdateOrder(int id, int status)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
if (id <= 0)
{
throw new Exception("Некорректный идентификатор");
}
if (status <= 0)
{
throw new Exception("Некорректный статус");
}
APIClient.PostRequest("api/order/updatedata", new OrderBindingModel
{
Id = id,
Status = (OrderStatus)status
});
Response.Redirect("Orders");
}
[HttpPost]
public double Calc(int count, int product)
{
var prod = APIClient.GetRequest<ProductViewModel>($"api/product/getproduct?id={product}");
double result = Math.Round(count * (prod?.Price ?? 1), 2);
return result;
}
public IActionResult CreateProduct()
{
if (APIClient.User == null)
{
return Redirect("~/Home/Enter");
}
ViewBag.Components = APIClient.GetRequest<List<ComponentViewModel>>($"api/component/getcomponents?userId={APIClient.User.Id}");
return View();
}
[HttpPost]
public void CreateProduct([FromBody] ProductBindingModel productModel)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
if (string.IsNullOrEmpty(productModel.Name))
{
throw new Exception("Название не должно быть пустым");
}
if (productModel.Price <= 0)
{
throw new Exception("Цена должна быть больше 0");
}
productModel.StoreKeeperId = APIClient.User.Id;
APIClient.PostRequest("api/product/createproduct", productModel);
}
public IActionResult UpdateProduct(int productid)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
ViewBag.Components = APIClient.GetRequest<List<ComponentViewModel>>($"api/component/getcomponents?userId={APIClient.User.Id}");
return View(productid);
}
[HttpPost]
public void UpdateProduct([FromBody] ProductBindingModel productModel)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
if (string.IsNullOrEmpty(productModel.Name))
{
throw new Exception("Название не должно быть пустым");
}
if (productModel.Price <= 0)
{
throw new Exception("Цена должна быть больше 0");
}
productModel.StoreKeeperId = APIClient.User.Id;
APIClient.PostRequest("api/product/updatedata", productModel);
}
[HttpGet]
public ProductViewModel? GetProduct(int Id)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
if (Id <= 0)
{
throw new Exception($"Идентификатор товара не может быть меньше или равен 0");
}
var result = APIClient.GetRequest<ProductViewModel>($"api/product/getproduct?id={Id}");
return result;
}
[HttpGet]
public Tuple<ProductViewModel, List<Tuple<ComponentViewModel?, int>>>? GetProductUpdate(int productid)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
var result = APIClient.GetRequest<Tuple<ProductViewModel,
List<Tuple<ComponentViewModel?, int>>>?>($"api/product/getproductupdate?id={productid}&userId={APIClient.User.Id}");
return result;
}
[HttpPost]
public void DeleteProduct(int product)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
if (product <= 0)
{
throw new Exception($"Идентификатор товара не может быть меньше или равен 0");
}
APIClient.PostRequest("api/product/deleteproduct", new ProductBindingModel
{
Id = product
});
}
public IActionResult LinkBuilds(int componentid)
{
if (APIClient.User == null)
{
return Redirect("~/Home/Enter");
}
ViewBag.Builds = APIClient.GetRequest<List<BuildViewModel>>($"api/build/getbuilds");
return View(componentid);
}
[HttpPost]
public void LinkBuilds([FromBody] ComponentBindingModel componentModel)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
componentModel.StoreKeeperId = APIClient.User.Id;
APIClient.PostRequest($"api/component/updatedata", componentModel);
}
[HttpGet]
public BuildViewModel? GetBuild(int buildId)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
if (buildId <= 0)
{
throw new Exception($"Идентификатор сборки не может быть меньше или равен 0");
}
var result = APIClient.GetRequest<BuildViewModel>($"api/build/getbuild?buildId={buildId}");
return result;
}
[HttpGet]
public List<Tuple<BuildViewModel, int>>? GetComponentBuilds(int componentid)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
var result = APIClient.GetRequest<List<Tuple<BuildViewModel, int>>?>($"api/component/getcomponentbuilds?id={componentid}");
return result;
}
public IActionResult CreateComponent()
{
if (APIClient.User == null)
{
return Redirect("~/Home/Enter");
}
return View();
}
[HttpPost]
public void CreateComponent(string name, string cost)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
if (string.IsNullOrEmpty(name))
{
throw new Exception("Название не должно быть пустым");
}
if (string.IsNullOrEmpty(cost) || Convert.ToDouble(cost.Replace('.', ',')) <= 0)
{
throw new Exception("Цена должна быть больше 0");
}
APIClient.PostRequest("api/component/createcomponent", new ComponentBindingModel
{
StoreKeeperId = APIClient.User.Id,
Name = name,
Cost = Convert.ToDouble(cost.Replace('.', ','))
});
Response.Redirect("Components");
}
[HttpGet]
public ComponentViewModel? GetComponent(int Id)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
var result = APIClient.GetRequest<ComponentViewModel?>($"api/component/getcomponent?id={Id}");
if (result == null)
{
return default;
}
return result;
}
[HttpPost]
public void UpdateComponent(string name, string cost, DateTime date, int component)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
if (component <= 0)
{
throw new Exception($"Идентификатор комплектующего не может быть меньше или равен 0");
}
if (string.IsNullOrEmpty(name))
{
throw new Exception($"Имя комплектующего не должно быть пустым");
}
if (Convert.ToDouble(cost.Replace('.', ',')) <= 0)
{
throw new Exception($"Цена комплектующего не может быть меньше или равна 0");
}
APIClient.PostRequest("api/component/updatecomponent", new ComponentBindingModel
{
Id = component,
Name = name,
Cost = Convert.ToDouble(cost.Replace('.', ',')),
StoreKeeperId = APIClient.User.Id,
});
Response.Redirect("Components");
}
[HttpPost]
public void DeleteComponent(int component)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
if (component <= 0)
{
throw new Exception($"Идентификатор комплектующего не может быть меньше или равен 0");
}
APIClient.PostRequest("api/component/deletecomponent", new ComponentBindingModel
{
Id = component
});
}
public IActionResult MainStorekeeper()
{
if (APIClient.User == null)
{
return Redirect("~/Home/Enter");
}
return View();
}
public IActionResult Components()
{
if (APIClient.User == null)
{
return Redirect("~/Home/Enter");
}
return View(APIClient.GetRequest<List<ComponentViewModel>>($"api/component/getcomponents?userId={APIClient.User.Id}"));
}
public IActionResult Products()
{
if (APIClient.User == null)
{
return Redirect("~/Home/Enter");
}
return View(APIClient.GetRequest<List<ProductViewModel>>($"api/product/getproducts?userId={APIClient.User.Id}"));
}
public IActionResult Orders()
{
if (APIClient.User == null)
{
return Redirect("~/Home/Enter");
}
return View(APIClient.GetRequest<List<OrderViewModel>>($"api/order/getorders?userId={APIClient.User.Id}"));
}
public IActionResult ListBuilds()
{
if (APIClient.User == null)
{
return Redirect("~/Home/Enter");
}
ViewBag.Products = APIClient.GetRequest<List<ProductViewModel>>($"api/product/getproducts?userId={APIClient.User.Id}");
return View();
}
[HttpPost]
public int[]? ListBuilds([FromBody] ProductBindingModel productModel, [FromQuery] string format)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
if (string.IsNullOrEmpty(format))
{
throw new FormatException("Неправильный формат файла");
}
byte[]? file = APIClient.PostRequestWithResult<ProductBindingModel, byte[]>($"api/report/buildproductreport?format={format}", productModel);
return file!.Select(b => (int)b).ToArray();
}
public IActionResult Report()
{
if (APIClient.User == null)
{
return Redirect("~/Home/Enter");
}
return View();
}
[HttpPost]
public List<ReportComponentsViewModel> Report([FromBody] ReportBindingModel reportModel)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
//reportModel.UserId = APIClient.User.Id;
List<ReportComponentsViewModel>? list = APIClient.PostRequestWithResult
<ReportBindingModel, List<ReportComponentsViewModel>>("api/report/componentsreport", reportModel);
return list!;
}
[HttpPost]
public void ReportSendOnMail([FromBody] ReportBindingModel reportModel)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
reportModel.UserId = APIClient.User.Id;
reportModel.UserEmail = APIClient.User.Login;
APIClient.PostRequest("api/report/componentsreportsendonmail", reportModel);
}
[HttpGet]
public List<CommentViewModel> GetCommentsOnBuild(int buildId)
{
if (APIClient.User == null)
{
throw new Exception("Вы как сюда попали? Сюда вход только авторизованным");
}
return APIClient.GetRequest<List<CommentViewModel>>($"api/comment/GetCommentsOnBuild?buildId={buildId}")!;
}
}
}