diff --git a/Bank/BankBusinessLogic/MailWorker/MailKitWorker.cs b/Bank/BankBusinessLogic/MailWorker/MailKitWorker.cs index 5c0799b..96403d7 100644 --- a/Bank/BankBusinessLogic/MailWorker/MailKitWorker.cs +++ b/Bank/BankBusinessLogic/MailWorker/MailKitWorker.cs @@ -28,7 +28,7 @@ namespace BankBusinessLogic.MailWorker objMailMessage.Body = info.Text; objMailMessage.SubjectEncoding = Encoding.UTF8; objMailMessage.BodyEncoding = Encoding.UTF8; - Attachment attachment = new Attachment("C:\\Users\\pdffile.pdf", new ContentType(MediaTypeNames.Application.Pdf)); + Attachment attachment = new Attachment("C:\\forpdf\\pdffile.pdf", new ContentType(MediaTypeNames.Application.Pdf)); objMailMessage.Attachments.Add(attachment); objSmtpClient.UseDefaultCredentials = false; objSmtpClient.EnableSsl = true; diff --git a/Bank/BankBusinessLogic/OfficePackage/AbstractSaveToPdf.cs b/Bank/BankBusinessLogic/OfficePackage/AbstractSaveToPdf.cs index e83290c..a665eea 100644 --- a/Bank/BankBusinessLogic/OfficePackage/AbstractSaveToPdf.cs +++ b/Bank/BankBusinessLogic/OfficePackage/AbstractSaveToPdf.cs @@ -52,6 +52,7 @@ namespace BankBusinessLogic.OfficePackage public void CreateOperationsRequestsDoc(PdfInfo info) { CreatePdf(info); + //title CreateParagraph(new PdfParagraph { Text = info.Title, @@ -64,28 +65,161 @@ namespace BankBusinessLogic.OfficePackage Style = "Normal", ParagraphAlignment = PdfParagraphAlignmentType.Center }); + + //sender operations + CreateParagraph(new PdfParagraph + { + Text = "Операции на другие карты", + Style = "NormalTitle", + ParagraphAlignment = PdfParagraphAlignmentType.Left + }); CreateTable(new List { "2cm", "3cm", "6cm", "3cm", "3cm" }); CreateRow(new PdfRowParameters { - Texts = new List { "Номер", "Дата заказа", "Компьютер", "Сумма", "Статус" }, + Texts = new List { "Номер карты", "Номер перевода", "Время перевода", "Сумма", "Карта получателя" }, Style = "NormalTitle", ParagraphAlignment = PdfParagraphAlignmentType.Center }); - foreach (var entry in info.OperationsRequests) + foreach (var report in info.OperationsRequests) { CreateRow(new PdfRowParameters { - Texts = new List { entry.CardNumber.ToString(), }, + Texts = new List { + report.CardNumber.ToString(), + "", + "", + "", + "", + }, Style = "Normal", ParagraphAlignment = PdfParagraphAlignmentType.Left }); + foreach (var senderOperation in report.SenderOperations) + { + CreateRow(new PdfRowParameters + { + Texts = new List + { + "", + senderOperation.Id.ToString(), + senderOperation.OperationTime.ToString(), + senderOperation.Sum.ToString(), + senderOperation.RecipientCardNumber, + }, + Style = "Normal", + ParagraphAlignment = PdfParagraphAlignmentType.Left + }); + } } CreateParagraph(new PdfParagraph { Text = "", Style = "Normal", - ParagraphAlignment = - PdfParagraphAlignmentType.Right + ParagraphAlignment = PdfParagraphAlignmentType.Right + }); + + //recipient operations + CreateParagraph(new PdfParagraph + { + Text = "Операции на другие карты", + Style = "NormalTitle", + ParagraphAlignment = PdfParagraphAlignmentType.Left + }); + CreateTable(new List { "2cm", "3cm", "6cm", "3cm", "3cm" }); + CreateRow(new PdfRowParameters + { + Texts = new List { "Номер карты", "Номер перевода", "Время перевода", "Сумма", "Карта отправителя" }, + Style = "NormalTitle", + ParagraphAlignment = PdfParagraphAlignmentType.Center + }); + foreach (var report in info.OperationsRequests) + { + CreateRow(new PdfRowParameters + { + Texts = new List { + report.CardNumber.ToString(), + "", + "", + "", + "", + }, + Style = "Normal", + ParagraphAlignment = PdfParagraphAlignmentType.Left + }); + foreach (var recipientOperation in report.RecipientOperations) + { + CreateRow(new PdfRowParameters + { + Texts = new List + { + "", + recipientOperation.Id.ToString(), + recipientOperation.OperationTime.ToString(), + recipientOperation.Sum.ToString(), + recipientOperation.SenderCardNumber, + }, + Style = "Normal", + ParagraphAlignment = PdfParagraphAlignmentType.Left + }); + } + } + CreateParagraph(new PdfParagraph + { + Text = "", + Style = "Normal", + ParagraphAlignment = PdfParagraphAlignmentType.Right + }); + + //requests + CreateParagraph(new PdfParagraph + { + Text = "Заявки", + Style = "NormalTitle", + ParagraphAlignment = PdfParagraphAlignmentType.Left + }); + CreateTable(new List { "2cm", "3cm", "6cm", "3cm", "3cm" }); + CreateRow(new PdfRowParameters + { + Texts = new List { "Номер карты", "Номер заявки", "Время создания", "Сумма", "Статус" }, + Style = "NormalTitle", + ParagraphAlignment = PdfParagraphAlignmentType.Center + }); + foreach (var report in info.OperationsRequests) + { + CreateRow(new PdfRowParameters + { + Texts = new List { + report.CardNumber.ToString(), + "", + "", + "", + "", + }, + Style = "Normal", + ParagraphAlignment = PdfParagraphAlignmentType.Left + }); + foreach (var request in report.Requests) + { + CreateRow(new PdfRowParameters + { + Texts = new List + { + "", + request.Id.ToString(), + request.RequestTime.ToString(), + request.Sum.ToString(), + request.Status.ToString(), + }, + Style = "Normal", + ParagraphAlignment = PdfParagraphAlignmentType.Left + }); + } + } + CreateParagraph(new PdfParagraph + { + Text = "", + Style = "Normal", + ParagraphAlignment = PdfParagraphAlignmentType.Right }); SavePdf(info); } diff --git a/Bank/BankClientApp/Controllers/HomeController.cs b/Bank/BankClientApp/Controllers/HomeController.cs index 0812aae..f24006e 100644 --- a/Bank/BankClientApp/Controllers/HomeController.cs +++ b/Bank/BankClientApp/Controllers/HomeController.cs @@ -8,6 +8,7 @@ using DocumentFormat.OpenXml.Spreadsheet; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore.Metadata.Internal; using System.Diagnostics; +using System.Globalization; namespace BankClientApp.Controllers { @@ -508,9 +509,9 @@ namespace BankClientApp.Controllers { throw new Exception("Вы как суда попали? Суда вход только авторизованным"); } - APIClient.PostRequest("api/report/sandoperationsrequeststoemail", new ReportBindingModel + APIClient.PostRequest("api/report/sendoperationsRequeststoemail", new ReportBindingModel { - FileName = "C:\\Users\\pdffile.pdf", + FileName = "C:\\forpdf\\pdffile.pdf", DateFrom = dateFrom, DateTo = dateTo, Email = APIClient.Client.Email @@ -519,6 +520,156 @@ namespace BankClientApp.Controllers } + [HttpGet] + public string GetOperationsRequests(DateTime dateFrom, DateTime dateTo) + { + if (APIClient.Client == null) + { + throw new Exception("Вы как суда попали? Суда вход только авторизованным"); + } + List? result; + try + { + string dateFromS = dateFrom.ToString("s", CultureInfo.InvariantCulture); + string dateToS = dateTo.ToString("s", CultureInfo.InvariantCulture); + result = APIClient.GetRequest?>($"api/report/getoperationsrequests?datefroms={dateFromS}&datetos={dateToS}"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка создания отчета"); + throw; + } + //title + string tables = ""; + tables += "

Отчет по картам

"; + tables += $"
c {dateFrom.ToShortDateString()} по {dateTo.ToShortDateString()}
"; + //sender operations + string senderOperationsTable = ""; + senderOperationsTable += "

Операции на счета

"; + senderOperationsTable += "
"; + senderOperationsTable += ""; + senderOperationsTable += ""; + senderOperationsTable += ""; + senderOperationsTable += ""; + senderOperationsTable += ""; + senderOperationsTable += ""; + senderOperationsTable += ""; + senderOperationsTable += ""; + senderOperationsTable += ""; + senderOperationsTable += ""; + senderOperationsTable += ""; + foreach (var report in result) + { + senderOperationsTable += ""; + senderOperationsTable += $""; + senderOperationsTable += $""; + senderOperationsTable += $""; + senderOperationsTable += $""; + senderOperationsTable += $""; + senderOperationsTable += ""; + foreach (var senderOperation in report.SenderOperations) + { + senderOperationsTable += ""; + senderOperationsTable += $""; + senderOperationsTable += $""; + senderOperationsTable += $""; + senderOperationsTable += $""; + senderOperationsTable += $""; + senderOperationsTable += ""; + } + } + senderOperationsTable += ""; + senderOperationsTable += "
Номер счетаНомер переводаВремя переводаСуммаКарта получателя
{report.CardNumber}
{senderOperation.Id}{senderOperation.OperationTime}{senderOperation.Sum}{senderOperation.RecipientCardNumber}
"; + senderOperationsTable += "
"; + + tables += senderOperationsTable; + + //sender operations + string recipientOperationsTable = ""; + recipientOperationsTable += "

Операции со счетов

"; + recipientOperationsTable += "
"; + recipientOperationsTable += ""; + recipientOperationsTable += ""; + recipientOperationsTable += ""; + recipientOperationsTable += ""; + recipientOperationsTable += ""; + recipientOperationsTable += ""; + recipientOperationsTable += ""; + recipientOperationsTable += ""; + recipientOperationsTable += ""; + recipientOperationsTable += ""; + recipientOperationsTable += ""; + foreach (var report in result) + { + recipientOperationsTable += ""; + recipientOperationsTable += $""; + recipientOperationsTable += $""; + recipientOperationsTable += $""; + recipientOperationsTable += $""; + recipientOperationsTable += $""; + recipientOperationsTable += ""; + foreach (var recipientOperation in report.RecipientOperations) + { + recipientOperationsTable += ""; + recipientOperationsTable += $""; + recipientOperationsTable += $""; + recipientOperationsTable += $""; + recipientOperationsTable += $""; + recipientOperationsTable += $""; + recipientOperationsTable += ""; + } + } + recipientOperationsTable += ""; + recipientOperationsTable += "
Номер счетаНомер переводаВремя переводаСуммаКарта получателя
{report.CardNumber}
{recipientOperation.Id}{recipientOperation.OperationTime}{recipientOperation.Sum}{recipientOperation.SenderCardNumber}
"; + recipientOperationsTable += "
"; + + tables += recipientOperationsTable; + + //requests + string requestsTable = ""; + requestsTable += "

Заявки

"; + requestsTable += "
"; + requestsTable += ""; + requestsTable += ""; + requestsTable += ""; + requestsTable += ""; + requestsTable += ""; + requestsTable += ""; + requestsTable += ""; + requestsTable += ""; + requestsTable += ""; + requestsTable += ""; + requestsTable += ""; + foreach (var report in result) + { + requestsTable += ""; + requestsTable += $""; + requestsTable += $""; + requestsTable += $""; + requestsTable += $""; + requestsTable += $""; + requestsTable += ""; + foreach (var request in report.Requests) + { + requestsTable += ""; + requestsTable += $""; + requestsTable += $""; + requestsTable += $""; + requestsTable += $""; + requestsTable += $""; + requestsTable += ""; + } + } + requestsTable += ""; + requestsTable += "
Номер счетаНомер заявкиВремя созданияСуммаСтатус
{report.CardNumber}
{request.Id}{request.RequestTime}{request.Sum}{request.Status}
"; + requestsTable += "
"; + + tables += requestsTable; + return tables; + + + } + [HttpGet] public IActionResult TransferListReport() { diff --git a/Bank/BankClientApp/Views/Home/Report.cshtml b/Bank/BankClientApp/Views/Home/Report.cshtml index 06bde4d..2aa0a8e 100644 --- a/Bank/BankClientApp/Views/Home/Report.cshtml +++ b/Bank/BankClientApp/Views/Home/Report.cshtml @@ -4,50 +4,53 @@

Список карт с расшифровкой по операциям и заявкам за период

-
- @{ -
-
Начальная дата:
-
- +
+
+ @{ +
+
Начальная дата:
+
+ +
-
-
-
Конечная дата:
-
- +
+
Конечная дата:
+
+ +
-
-
-
-
-
-
-
-
-
- - - - - - - - - - - - -
- Номер - - Дата - - Карта - - Операция - - Заявка -
- } -
\ No newline at end of file +
+
+
+
+
+
+
+
+
+ } + +
+ +@section Scripts { + +} \ No newline at end of file diff --git a/Bank/BankDatabaseImplement/Implements/CardStorage.cs b/Bank/BankDatabaseImplement/Implements/CardStorage.cs index eaf53db..3a110cc 100644 --- a/Bank/BankDatabaseImplement/Implements/CardStorage.cs +++ b/Bank/BankDatabaseImplement/Implements/CardStorage.cs @@ -62,23 +62,30 @@ namespace BankDatabaseImplement.Implements { using var context = new BankDatabase(); return context.Cards - .Select(c => new ReportOperationsRequestsViewModel() + .Select(card => new ReportOperationsRequestsViewModel() { - CardNumber = c.Number, + CardNumber = card.Number, SenderOperations = context.Operations - .Where(x => x.OperationTime >= model.DateFrom && x.OperationTime <= model.DateTo && x.SenderCardId == c.Id) + .Include(x => x.RecipientCard) + .Where(x => x.OperationTime >= model.DateFrom && x.OperationTime <= model.DateTo && x.SenderCardId == card.Id) .Select(t => t.GetViewModel) .ToList(), RecipientOperations = context.Operations - .Where(x => x.OperationTime >= model.DateFrom && x.OperationTime <= model.DateTo && x.RecipientCardId == c.Id) + .Include(x => x.SenderCard) + .Where(x => x.OperationTime >= model.DateFrom && x.OperationTime <= model.DateTo && x.RecipientCardId == card.Id) .Select(t => t.GetViewModel) .ToList(), - Requests = context.Requests - .Include(x => x.CardRequests) - .Where(x => x.Cards.Select(x => x.CardId).ToList().Contains(c.Id) && x.RequestTime >= model.DateFrom && x.RequestTime <= model.DateTo) + Requests = context.CardRequests + .Include(x => x.Request) + .ThenInclude(x => x.Cards) + .Where(x => x.CardId == card.Id) + .Select(x => x.Request) + .Where(x => + x.RequestTime >= model.DateFrom && + x.RequestTime <= model.DateTo) .Select(r => r.GetViewModel) .ToList(), - }).ToList(); + }).ToList(); } public CardViewModel? GetElement(CardSearchModel model) diff --git a/Bank/BankRestApi/Controllers/ReportController.cs b/Bank/BankRestApi/Controllers/ReportController.cs index 1a09273..bc0f28d 100644 --- a/Bank/BankRestApi/Controllers/ReportController.cs +++ b/Bank/BankRestApi/Controllers/ReportController.cs @@ -1,6 +1,7 @@ using BankBusinessLogic.MailWorker; using BankContracts.BindingModels; using BankContracts.BusinessLogicsContracts; +using BankContracts.ViewModels; using Microsoft.AspNetCore.Mvc; namespace BankRestApi.Controllers @@ -111,5 +112,33 @@ namespace BankRestApi.Controllers throw; } } + + [HttpGet] + public List GetOperationsRequests(string dateFromS, string dateToS) + { + try + { + DateTime dateFrom = DateTime.Parse(dateFromS); + DateTime dateTo = DateTime.Parse(dateToS); + var tmp = _logic.CreateReportOperationsRequests(new BankContracts.SearchModels.CardSearchModel + { + DateFrom = dateFrom, + DateTo = dateTo + }); + foreach(var item in tmp) + { + foreach(var item2 in item.Requests) + { + item2.CardRequests = null; + } + } + return tmp; + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения для таблицы"); + throw; + } + } } } diff --git a/ERD/Bank.vpp b/ERD/Bank.vpp index 1cd64b2..702292c 100644 Binary files a/ERD/Bank.vpp and b/ERD/Bank.vpp differ