2023-05-18 21:58:16 +04:00

435 lines
13 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 BankYouBankruptClientApp.Models;
using BankYouBankruptContracts.BindingModels;
using BankYouBankruptContracts.ViewModels;
using BankYouBankruptContracts.ViewModels.Client.Default;
using BankYouBankruptContracts.ViewModels.Client.Reports;
using BankYouBankruptContracts.ViewModels.Client.Diagram;
using BankYouBankruptDataModels.Enums;
using BankYouBankruptСlientApp;
using Microsoft.AspNetCore.Mvc;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using System.Collections;
using System.Diagnostics;
using System.Reflection;
using System.Xml.Linq;
using static System.Net.Mime.MediaTypeNames;
namespace BankYouBankruptClientApp.Controllers
{
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
#region Профиль, вход и регистрация
[HttpGet]
public IActionResult Profile()
{
if (APIClient.Client == null)
{
return Redirect("~/Home/Enter");
}
return View(APIClient.GetRequest<ClientViewModel>($"api/Client/GetClient?clientId={APIClient.Client.Id}"));
}
[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.Client = APIClient.GetRequest<ClientViewModel>($"api/Client/Login?login={login}&password={password}");
if (APIClient.Client == null)
{
throw new Exception("Неверный логин/пароль");
}
Response.Redirect("Profile");
}
[HttpGet]
public IActionResult Register()
{
return View();
}
[HttpPost]
public void Register(string login, string password, string name, string surname, string patronymic, string telephone)
{
if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(name)
|| string.IsNullOrEmpty(surname) || string.IsNullOrEmpty(patronymic) || string.IsNullOrEmpty(telephone))
{
throw new Exception("Введите логин, пароль, ФИО и телефон");
}
APIClient.PostRequest("api/Client/Register", new ClientBindingModel
{
Name = name,
Surname = surname,
Patronymic = patronymic,
Email = login,
Password = password,
Telephone = telephone
});
Response.Redirect("Enter");
return;
}
#endregion
#region Карты
[HttpGet]
public IActionResult CardsList()
{
if (APIClient.Client == null)
{
return Redirect("~/Home/Enter");
}
return View(APIClient.GetRequest<List<CardViewModel>>($"api/Card/GetUsersCardsList?id={APIClient.Client.Id}"));
}
[HttpGet]
public IActionResult CreateCard() {
if (APIClient.Client == null)
{
return Redirect("~/Home/Enter");
}
ViewBag.Accounts = APIClient.GetRequest<List<AccountViewModel>>($"api/Account/SearchAccountsOfCLient?clientId={APIClient.Client.Id}");
return View();
}
[HttpPost]
public IActionResult CreateCard(string accountId, string number, string cvc, string period) {
if (APIClient.Client == null)
{
throw new Exception("Не авторизованы");
}
APIClient.PostRequest("api/Card/CreateCard", new CardBindingModel {
ClientID = APIClient.Client.Id,
AccountId = int.Parse(accountId),
Number = number,
CVC = cvc,
Period = DateTime.Parse(period)
});
return Redirect("~/Home/CardsList");
}
#endregion
#region Снятие средств
[HttpGet]
public IActionResult DebitingList()
{
if (APIClient.Client == null)
{
return Redirect("~/Home/Enter");
}
return View(APIClient.GetRequest<List<DebitingViewModel>>($"api/Client/getUsersDebitings?userId={APIClient.Client.Id}"));
}
[HttpGet]
public IActionResult CreateDebiting()
{
if (APIClient.Client == null)
{
return Redirect("~/Home/Enter");
}
ViewBag.Cards = APIClient.GetRequest<List<CardViewModel>>($"api/Card/GetUsersCardsList?id={APIClient.Client.Id}");
return View();
}
[HttpPost]
public IActionResult CreateDebiting(string cardId, int sum)
{
if (APIClient.Client == null)
{
throw new Exception("Не авторизованы");
}
APIClient.PostRequest("api/Card/CreateDebitingRequest", new DebitingBindingModel()
{
CardId = int.Parse(cardId),
Sum = sum,
DateOpen = DateTime.Now,
Status = StatusEnum.Открыта
});
return Redirect("~/Home/DebitingList");
}
#endregion
#region Пополнение средств
[HttpGet]
public IActionResult CreditingList()
{
if (APIClient.Client == null)
{
return Redirect("~/Home/Enter");
}
return View(APIClient.GetRequest<List<CreditingViewModel>>($"api/Client/getUsersCreditings?userId={APIClient.Client.Id}"));
}
[HttpGet]
public IActionResult CreateCrediting()
{
if (APIClient.Client == null)
{
return Redirect("~/Home/Enter");
}
ViewBag.Cards = APIClient.GetRequest<List<CardViewModel>>($"api/Card/GetAllCards").Select(x => new ClientSelectViewModel
{
Id = x.Id,
FullName = x.ClientSurname + " " + x.Number.ToString()
}).ToList();
return View();
}
[HttpPost]
public IActionResult CreateCrediting(string cardId, int sum)
{
if (APIClient.Client == null)
{
throw new Exception("Не авторизованы");
}
APIClient.PostRequest("api/Card/CreateCreditingOperation", new CreditingBindingModel()
{
CardId = int.Parse(cardId),
Sum = sum,
DateOpen = DateTime.Now,
Status = StatusEnum.Открыта
});
return Redirect("~/Home/CreditingList");
}
#endregion
#region Получение отчёта PDF
[HttpGet]
public IActionResult CreateReport()
{
if (APIClient.Client == null)
{
return Redirect("~/Home/Enter");
}
return View();
}
[HttpPost]
public IActionResult CreateReport(DateTime dateFrom, DateTime dateTo)
{
if (APIClient.Client == null)
{
throw new Exception("Не авторизованы");
}
APIClient.PostRequest("api/Report/CreateClientReport", new ReportSupportBindingModel()
{
DateFrom = dateFrom,
DateTo = dateTo
});
PdfLoadViewModel support = APIClient.GetRequest<PdfLoadViewModel>($"api/Report/LoadReport?whoRequested={bool.TrueString}");
/*PdfDocument doc = new PdfDocument();
doc.LoadFromBytes(support.bytes);
support.document = doc;*/
//return File(support.bytes, "application/pdf", "support.pdf")
/*/Create PDF Document
PdfDocument document = new PdfDocument();
//You will have to add Page in PDF Document
PdfPage page = document.AddPage();
//For drawing in PDF Page you will nedd XGraphics Object
XGraphics gfx = XGraphics.FromPdfPage(page);
//For Test you will have to define font to be used
XFont font = new XFont("Verdana", 20, XFontStyle.Bold);
//Finally use XGraphics & font object to draw text in PDF Page
gfx.DrawString("My First PDF Document", font, XBrushes.Black,
new XRect(0, 0, page.Width, page.Height), XStringFormats.Center);
//Specify file name of the PDF file
string filename = "FirstPDFDocument.pdf";
//Save PDF File
document.Save(filename);
//Load PDF File for viewing
Process.Start(filename);*/
/*MemoryStream stream = new MemoryStream(support.bytes);
PdfDocument document = PdfReader.Open(stream, PdfDocumentOpenMode.Import);
support.document = document.Save(stream, false);*/
//ViewBag.ReportFile = File(support.bytes, "application/pdf");
ViewBag.ReportFile = new FileContentResult(support.bytes, "application/pdf");
//ViewBag.ReportFile = System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location).ToString();
return View();
}
/*[HttpPost]
public object LoadReport()
{
return null;
}*/
#endregion
#region Получение отчета по картам
[HttpGet]
public IActionResult ReportWithCards()
{
if (APIClient.Client == null)
{
return Redirect("~/Home/Enter");
}
return View(new ReportClientCardsViewModel()
{
Cards = APIClient.GetRequest<List<CardViewModel>>($"api/Card/GetUsersCardsList?id={APIClient.Client.Id}").Select(x => new CheckboxViewModel() {
Id = x.Id,
LabelName = x.Number,
IsChecked = false
}).ToList()
});
}
[HttpPost]
public IActionResult ReportWithCards(List<CheckboxViewModel> cards)
{
if (APIClient.Client == null)
{
return Redirect("~/Home/Enter");
}
List<int> cardList = cards.Where(x => x.IsChecked).Select(x => x.Id).ToList();
List<ReportViewModel> creditings = APIClient.GetRequest<List<CreditingViewModel>>($"api/Client/getUsersCreditings?userId={APIClient.Client.Id}")
.Where(x => cardList.Contains(x.CardId)).Select(x => new ReportViewModel() {
Id = x.Id,
CardId = x.CardId,
DateOpen = x.DateOpen,
DateClose = x.DateClose,
CardNumber = x.CardNumber,
Status = x.Status,
Sum = x.Sum,
TypeOperation = TypeOperationEnum.Пополнение
}).ToList();
List<ReportViewModel> debitings = APIClient.GetRequest<List<DebitingViewModel>>($"api/Client/getUsersDebitings?userId={APIClient.Client.Id}")
.Where(x => cardList.Contains(x.CardId)).Select(x => new ReportViewModel()
{
Id = x.Id,
CardId = x.CardId,
DateOpen = x.DateOpen,
DateClose = x.DateClose,
CardNumber = x.CardNumber,
Status = x.Status,
Sum = x.Sum,
TypeOperation = TypeOperationEnum.Снятие
}).ToList();
List<ReportViewModel> result = creditings.Concat(debitings).OrderBy(x => x.DateOpen).ToList();
return View(new ReportClientCardsViewModel()
{
Cards = cards,
Operations = result,
});
}
#endregion
[HttpGet]
public IActionResult Diagram() {
if (APIClient.Client == null)
{
return Redirect("~/Home/Enter");
}
ViewBag.Cards = APIClient.GetRequest<List<CardViewModel>>($"api/Card/GetUsersCardsList?id={APIClient.Client.Id}");
return View();
}
[HttpPost]
public IActionResult Diagram(int cardId)
{
if (APIClient.Client == null)
{
return Redirect("~/Home/Enter");
}
ViewBag.Cards = APIClient.GetRequest<List<CardViewModel>>($"api/Card/GetUsersCardsList?id={APIClient.Client.Id}");
return View(new ClientDiagramViewModel() {
DiagramName = "Hello World",
Elements = APIClient.GetRequest<List<ClientDiagramElementsViewModel>>($"api/Card/getCardMonthResult?cardId={cardId}")
});
}
}
}