using FurnitureAssemblyWorkerClientApp.Models; using FurnitureAssemblyContracts.BindingModels; using FurnitureAssemblyContracts.ViewModels; using Microsoft.AspNetCore.Mvc; using System.Diagnostics; using FurnitureAssemblyDataModels.Models; using System; using FurnitureAssemblyContracts.SearchModels; using FurnitureAssemblyDataModels.Enums; using System.Web.Helpers; using System.Reflection; using FurnitureAssemblyBusinessLogic.BusinessLogics; using FurnitureAssemblyContracts.BusinessLogicContracts; using FurnitureAssemblyDatabaseImplement.Models; namespace FurnitureAssemblyWorkerClientApp.Controllers { public class HomeController : Controller { private readonly ILogger _logger; private readonly IReportWorkerLogic _report; public HomeController(ILogger logger, IReportWorkerLogic report) { _logger = logger; _report = report; } [HttpGet] public IActionResult Index() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(APIClient.GetRequest>($"api/order/getorderlistbyuser?userId={APIClient.User.Id}")); } [HttpGet] public IActionResult Privacy() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(APIClient.User); } [HttpPost] public void Privacy(string login, string password, string name, int roleId) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(name)) { throw new Exception("Введите логин, пароль и ФИО"); } APIClient.PostRequest("api/user/updateuser", new UserBindingModel { Id = APIClient.User.Id, Name = name, Login = login, Password = password, RoleId = roleId }); APIClient.User.Name = name; APIClient.User.Login = login; APIClient.User.Password = password; APIClient.User.RoleId = roleId; Response.Redirect("Index"); } [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); } [HttpGet] public IActionResult Enter() { return View(); } [HttpPost] public void Enter(string login, string password) { if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password)) { throw new Exception("Введите логин и пароль"); } APIClient.User = APIClient.GetRequest($"api/user/login?login={login}&password={password}"); if (APIClient.User == null) { throw new Exception("Неверный логин/пароль"); } if (APIClient.User.RoleName != "Работник") { APIClient.User = null; throw new Exception("Данному сотруднику вход запрещен"); } Response.Redirect("Orders"); } [HttpGet] public IActionResult Register() { return View(APIClient.GetRequest>($"api/role/getrolelist")); } [HttpPost] public void Register(string login, string password, string name, int roleId) { if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(name)) { throw new Exception("Введите логин, пароль и ФИО"); } APIClient.PostRequest("api/user/adduser", new UserBindingModel { Name = name, Login = login, Password = password, RoleId = roleId }); Response.Redirect("Enter"); return; } [HttpGet] public IActionResult Sets() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(APIClient.GetRequest>($"api/set/getsetlistbyuser?userId={APIClient.User.Id}")); } [HttpGet] public IActionResult CreateSet() { return View((APIClient.GetRequest>($"api/furnituremodule/getfurnituremodulelistbyuser?userId={APIClient.User.Id}"))); } [HttpPost] public void CreateSet(string name, double cost, int[] furnitureModuleIds, int[] counts) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } if (string.IsNullOrEmpty(name)) { throw new Exception("Название гарнитура не указано"); } if (cost <= 0) { throw new Exception("Стоимость гарнитура не корректна"); } var set = APIClient.PostRequest("api/set/addset", new SetBindingModel { Name = name, Cost = cost, UserId = APIClient.User.Id }); if (furnitureModuleIds != null && furnitureModuleIds.Length > 0 && counts != null && furnitureModuleIds.Length == counts.Length) { for (int i = 0; i < counts.Length; i++) { APIClient.PostRequest("api/set/addfurnituremoduleinset", Tuple.Create( new SetSearchModel() { Id = set.Id }, new FurnitureModuleViewModel() { Id = furnitureModuleIds[i] }, counts[i] )); } } Response.Redirect("Sets"); } [HttpGet] public Tuple? GetSetWithFurnitureModules(int setId) { var result = APIClient.GetRequest, List>> ($"api/set/getsetwithfurnituremodules?setId={setId}"); if (result == null) { return default; } string furnitureModuleTable = ""; for (int i = 0; i < result.Item2.Count; i++) { var furnitureModule = result.Item2[i]; var count = result.Item3[i]; furnitureModuleTable += ""; furnitureModuleTable += $"{furnitureModule.Name}"; furnitureModuleTable += $"{furnitureModule.Cost}"; furnitureModuleTable += $"{furnitureModule.DateCreate.Date}"; furnitureModuleTable += $"{count}"; furnitureModuleTable += ""; } return Tuple.Create(result.Item1, furnitureModuleTable); } [HttpGet] public IActionResult UpdateSet() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(APIClient.GetRequest>($"api/set/getsetlistbyuser?userId={APIClient.User.Id}")); } [HttpPost] public void UpdateSet(int set, string name, double cost, DateTime dateCreate) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } if (string.IsNullOrEmpty(name)) { throw new Exception("Название гарнитура не указано"); } if (cost <= 0) { throw new Exception("Стоимость гарнитура не корректна"); } var listFurnitureModules = APIClient.GetRequest>($"api/set/getsetfurnituremodules?setId={set}"); APIClient.PostRequest("api/set/updateset", new SetBindingModel { Id = set, Name = name, Cost = cost, DateCreate = dateCreate.Date, SetFurnitureModules = listFurnitureModules! }); Response.Redirect("Sets"); } [HttpGet] public IActionResult DeleteSet() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(APIClient.GetRequest>($"api/set/getsetlistbyuser?userId={APIClient.User.Id}")); } [HttpPost] public void DeleteSet(int set) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } APIClient.PostRequest("api/set/deleteset", new SetBindingModel { Id = set, }); Response.Redirect("Sets"); } [HttpGet] public IActionResult AddFurnitureModuleInSet() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(Tuple.Create(APIClient.GetRequest>($"api/set/getsetlistbyuser?userId={APIClient.User.Id}"), APIClient.GetRequest>($"api/furnituremodule/getfurnituremodulelistbyuser?userId={APIClient.User.Id}"))); } [HttpPost] public void AddFurnitureModuleInSet(int set, int furnitureModule, int count) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } if (count <= 0) { throw new Exception("Количество должно быть больше 0"); } APIClient.PostRequest("api/set/addfurnituremoduleinset", Tuple.Create( new SetSearchModel() { Id = set }, new FurnitureModuleViewModel() { Id = furnitureModule }, count )); Response.Redirect("Sets"); } [HttpGet] public IActionResult ListSetsFurnitureModulesToFile() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(APIClient.GetRequest>($"api/set/getsetlistbyuser?userId={APIClient.User.Id}")); } [HttpPost] public void ListSetsFurnitureModulesToFile(int[] setIds, string type) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } if (setIds.Length <= 0) { throw new Exception("Количество должно быть больше 0"); } if (string.IsNullOrEmpty(type)) { throw new Exception("Неверный тип отчета"); } List res = new List(); foreach (var item in setIds) { res.Add(item); } if (type == "docx") { APIClient.PostRequest("api/report/createreporttodocx", new ReportWorkerBindingModel { SetIds = res }); Response.Redirect("GetDocxFile"); } else { APIClient.PostRequest("api/report/createreporttoxlsx", new ReportWorkerBindingModel { SetIds = res }); Response.Redirect("GetXlsxFile"); } } [HttpGet] public IActionResult GetDocxFile() { return new PhysicalFileResult("C:\\temp\\word_worker.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); } public IActionResult GetXlsxFile() { return new PhysicalFileResult("C:\\temp\\excel_worker.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); } public IActionResult GetPdfFile() { return new PhysicalFileResult("C:\\temp\\pdf_worker.pdf", "application/pdf"); } [HttpGet] public IActionResult FurnitureModules() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(APIClient.GetRequest>($"api/furnituremodule/getfurnituremodulelistbyuser?userId={APIClient.User.Id}")); } [HttpGet] public IActionResult CreateFurnitureModule() { return View(); } [HttpPost] public void CreateFurnitureModule(string name, double cost) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } if (string.IsNullOrEmpty(name)) { throw new Exception("Название мебельного модуля не указано"); } if (cost <= 0) { throw new Exception("Стоимость мебельного модуля не корректна"); } APIClient.PostRequest("api/furnituremodule/addfurnituremodule", new FurnitureModuleBindingModel { Name = name, Cost = cost, UserId = APIClient.User.Id }); Response.Redirect("FurnitureModules"); } [HttpGet] public IActionResult UpdateFurnitureModule() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(APIClient.GetRequest>($"api/furnituremodule/getfurnituremodulelistbyuser?userId={APIClient.User.Id}")); } [HttpPost] public void UpdateFurnitureModule(int furnitureModule, string name, double cost, DateTime dateCreate) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } if (string.IsNullOrEmpty(name)) { throw new Exception("Название мебельного модуля не указано"); } if (cost <= 0) { throw new Exception("Стоимость мебельного модуля не корректна"); } APIClient.PostRequest("api/furnituremodule/updatefurnituremodule", new FurnitureModuleBindingModel { Id = furnitureModule, Name = name, Cost = cost, DateCreate = dateCreate.Date }); Response.Redirect("FurnitureModules"); } [HttpGet] public IActionResult DeleteFurnitureModule() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(APIClient.GetRequest>($"api/furnituremodule/getfurnituremodulelistbyuser?userId={APIClient.User.Id}")); } [HttpPost] public void DeleteFurnitureModule(int furnitureModule) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } APIClient.PostRequest("api/furnituremodule/deletefurnituremodule", new FurnitureModuleBindingModel { Id = furnitureModule, }); Response.Redirect("FurnitureModules"); } [HttpGet] public FurnitureModuleViewModel? GetFurnitureModule(int furnitureModuleId) { var result = APIClient.GetRequest ($"api/furnitureModule/getfurnituremodule?Id={furnitureModuleId}"); if (result == null) { return default; } return result; } [HttpGet] public IActionResult AddFurnitureModulesInSet() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(Tuple.Create(APIClient.GetRequest>($"api/set/getsetlistbyuser?userId={APIClient.User.Id}"), APIClient.GetRequest>($"api/furnituremodule/getfurnituremodulelistbyuser?userId={APIClient.User.Id}"))); } [HttpPost] public void AddFurnitureModulesInSet(int set, int[] furnitureModuleIds, int[] counts) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } if (furnitureModuleIds.Length != counts.Length) { throw new Exception("Массивы не совпадают"); } for (int i = 0; i < furnitureModuleIds.Length; i++) { APIClient.PostRequest("api/set/addfurnituremoduleinset", Tuple.Create( new SetSearchModel() { Id = set }, new FurnitureModuleViewModel() { Id = furnitureModuleIds[i] }, counts[i] )); } Response.Redirect("AddFurnitureModulesInSet"); } [HttpGet] public IActionResult Orders() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(APIClient.GetRequest>($"api/orderinfo/getorderinfolistbyuser?userId={APIClient.User.Id}")); } [HttpGet] public IActionResult CreateOrder() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(APIClient.GetRequest>($"api/set/getsetlistbyuser?userId={APIClient.User.Id}")); } [HttpPost] public void CreateOrder(string name, PaymentType paymentType, int[] setIds, int[] counts) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } if (string.IsNullOrEmpty(name)) { throw new Exception("Имя не должно быть пустым"); } var orderInfo = APIClient.PostRequest("api/orderinfo/addorderinfo", new OrderInfoBindingModel { CustomerName = name, PaymentType = paymentType, UserId = APIClient.User.Id }); if (orderInfo == null) { throw new Exception("Ошибка создания заказа"); } if (setIds != null && setIds.Length > 0 && counts != null && setIds.Length == counts.Length) { for (int i = 0; i < counts.Length; i++) { APIClient.PostRequest("api/order/addorder", new OrderBindingModel { OrderInfoId = orderInfo.Id, SetId = setIds[i], Count = counts[i] }); } } Response.Redirect("Orders"); } [HttpGet] public Tuple? GetOrderWithSets(int orderId) { var result = APIClient.GetRequest, List>> ($"api/order/getorderwithsets?orderId={orderId}"); if (result == null) { return default; } string setTable = ""; for (int i = 0; i < result.Item2.Count; i++) { var set = result.Item2[i]; var count = result.Item3[i]; setTable += ""; setTable += $"{set.Name}"; setTable += $"{set.Cost}"; setTable += $"{set.DateCreate.Date}"; setTable += $"{count}"; setTable += ""; } return Tuple.Create(result.Item1, setTable); } [HttpGet] public IActionResult UpdateOrder() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(APIClient.GetRequest>($"api/orderinfo/getorderinfolistbyuser?userId={APIClient.User.Id}")); } [HttpPost] public void UpdateOrder(int order, string name, DateTime dateCreate, PaymentType paymentType, double sum) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } if (string.IsNullOrEmpty(name)) { throw new Exception("Название гарнитура не указано"); } APIClient.PostRequest("api/orderinfo/updateorderinfo", new OrderInfoBindingModel { Id = order, CustomerName = name, DateCreate = dateCreate.Date, PaymentType = paymentType, UserId = APIClient.User.Id, Sum = sum }); Response.Redirect("Orders"); } [HttpGet] public IActionResult DeleteOrder() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(APIClient.GetRequest>($"api/orderinfo/getorderinfolistbyuser?userId={APIClient.User.Id}")); } [HttpPost] public void DeleteOrder(int order) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } APIClient.PostRequest("api/orderinfo/deleteorderinfo", new OrderInfoBindingModel { Id = order, }); Response.Redirect("Orders"); } [HttpGet] public IActionResult AddSetInOrder() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(Tuple.Create(APIClient.GetRequest>($"api/orderinfo/getorderinfolistbyuser?userId={APIClient.User.Id}"), APIClient.GetRequest>($"api/set/getsetlistbyuser?userId={APIClient.User.Id}"))); } [HttpPost] public void AddSetInOrder(int order, int[] setIds, int[] counts) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } if (setIds != null && counts != null && counts.Length > 0 && counts.Length == setIds.Length) { for (int i = 0; i < counts.Length; i++) { if (counts[i] <= 0) { throw new Exception("Количество должно быть больше 0"); } APIClient.PostRequest("api/order/addsetinorder", Tuple.Create( new OrderInfoSearchModel() { Id = order }, new SetSearchModel() { Id = setIds[i] }, counts[i] )); } } Response.Redirect("Orders"); } [HttpGet] public IActionResult OrdersReport() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View("OrdersReport"); } [HttpPost] public void OrdersReport(DateTime dateFrom, DateTime dateTo, string customerEmail) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } if (string.IsNullOrEmpty(customerEmail)) { throw new Exception("Email пуст"); } APIClient.PostRequest("api/report/createreportorderstopdf", new ReportWorkerBindingModel { DateFrom = dateFrom, DateTo = dateTo, UserId = APIClient.User.Id }); APIClient.PostRequest("api/report/sendpdftomail", new MailSendInfoBindingModel { MailAddress = customerEmail, Subject = "Отчет по заказам", Text = "Отчет по заказам с " + dateFrom.ToShortDateString() + " до " + dateTo.ToShortDateString() }); Response.Redirect("OrdersReport"); } [HttpGet] public string GetOrdersReport(DateTime dateFrom, DateTime dateTo) { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } Tuple,double> result; try { result = _report.GetOrders(new ReportWorkerBindingModel { UserId = APIClient.User.Id, DateFrom = dateFrom, DateTo = dateTo }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка создания отчета"); throw; } if (result == null) { return "error"; } string html = ""; foreach (var report in result.Item1) { html += $"

{report.SetName}

"; html += $""; html += ""; html += ""; html += $""; html += $""; html += $""; html += $""; html += ""; html += ""; int i = 1; html += ""; foreach (var furnitureModule in report.FurnitureModules) { html += ""; html += $""; html += $""; html += $""; html += $""; html += ""; i++; } html += ""; html += "
НомерДата заказаМебельный модульСумма
{i}{report.DateCreate}{furnitureModule.Name}{furnitureModule.Cost}
"; html += $"

Итого: {report.Sum}

"; } html += $"

Итого: {result.Item2}

"; return html; } [HttpGet] public IActionResult GraphicOrdersByPreviousYear() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(APIClient.GetRequest>>($"api/orderinfo/getorderinfolistbydate")); } [HttpGet] public IActionResult Graphics() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(); } [HttpGet] public IActionResult GraphicUsersByPreviousMonth() { if (APIClient.User == null) { return Redirect("~/Home/Enter"); } return View(); } [HttpGet] public List> GetGraphicUsersByPreviousMonth() { if (APIClient.User == null) { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } return APIClient.GetRequest>>($"api/orderinfo/getgraphicusersbypreviousmonth"); } } }