Сashier's report on the task.

This commit is contained in:
Programmist73 2023-05-18 14:45:28 +04:00
parent 36910cd4b4
commit eb8a5172d5
19 changed files with 185 additions and 11 deletions

View File

@ -0,0 +1,33 @@
using BankYouBankruptContracts.BindingModels;
using BankYouBankruptContracts.BusinessLogicsContracts;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankYouBankruptBusinessLogic.BusinessLogics
{
public class MessageInfoLogic : IMessageInfoLogic
{
private readonly ILogger _logger;
//private readonly IMessageInfoStorage _messageInfoStorage;
public MessageInfoLogic(ILogger<MessageInfoLogic> logger)
{
_logger = logger;
}
public bool Create(MessageInfoBindingModel model)
{
throw new NotImplementedException();
}
public bool Update(MessageInfoBindingModel model)
{
throw new NotImplementedException();
}
}
}

View File

@ -19,7 +19,7 @@ namespace BankYouBankruptBusinessLogic.BusinessLogics
private readonly ICashWithdrawalStorage _cashWithdrawalStorage;
private readonly IAccountStorage _accountStorage;
private readonly IClientStorage _clientStorage;
private readonly AbstractSaveToExcelCashier _saveToExcel;
@ -29,22 +29,22 @@ namespace BankYouBankruptBusinessLogic.BusinessLogics
//инициализируем поля класса через контейнер
public ReportCashierLogic(IMoneyTransferStorage moneyTransferStorage, ICashWithdrawalStorage cashWithdrawalStorage,
IAccountStorage accountStorage, AbstractSaveToExcelCashier saveToExcel, AbstractSaveToWordCashier saveToWord,
AbstractSaveToPdfClient saveToPdf)
IClientStorage clientStorage, AbstractSaveToExcelCashier saveToExcel,
AbstractSaveToWordCashier saveToWord, AbstractSaveToPdfClient saveToPdf)
{
_moneyTransferStorage = moneyTransferStorage;
_cashWithdrawalStorage = cashWithdrawalStorage;
_accountStorage = accountStorage;
_saveToExcel = saveToExcel;
_saveToWord = saveToWord;
_saveToPdf = saveToPdf;
_clientStorage = clientStorage;
}
//формирование списка переводов между счетами за период
public List<ReportCashierViewModel>? GetMoneyTransfers(ReportBindingModel model)
{
return _moneyTransferStorage.GetFilteredList(new MoneyTransferSearchModel { DateFrom = model.DateFrom, DateTo = model.DateTo})
return _moneyTransferStorage.GetFilteredList(new MoneyTransferSearchModel { ClientId = model.ClientId, DateFrom = model.DateFrom, DateTo = model.DateTo})
.Select(x => new ReportCashierViewModel
{
OperationId = x.Id,
@ -59,7 +59,7 @@ namespace BankYouBankruptBusinessLogic.BusinessLogics
//формирование списка выдаци наличных со счёта за период
public List<ReportCashierViewModel>? GetCashWithrawals(ReportBindingModel model)
{
return _cashWithdrawalStorage.GetFilteredList(new CashWithdrawalSearchModel { DateFrom = model.DateFrom, DateTo = model.DateTo })
return _cashWithdrawalStorage.GetFilteredList(new CashWithdrawalSearchModel { ClientId = model.ClientId, DateFrom = model.DateFrom, DateTo = model.DateTo })
.Select(x => new ReportCashierViewModel
{
OperationId = x.Id,
@ -71,6 +71,17 @@ namespace BankYouBankruptBusinessLogic.BusinessLogics
.ToList();
}
//формирование полного имени клиента для отчёта
public string GetFullName(ReportBindingModel model)
{
var client = _clientStorage.GetElement(new ClientSearchModel
{
Id = model.ClientId
});
return client.Surname + " " + client.Name + " " + client.Patronymic;
}
//Сохранение мороженных в файл-Word
public void SaveAccountsToWordFile(ReportBindingModel model)
{
@ -90,6 +101,7 @@ namespace BankYouBankruptBusinessLogic.BusinessLogics
{
ForClient = false,
FileName = model.FileName,
FullClientName = GetFullName(model),
Title = "Отчёт по операциям начислений и переводов между счетами",
DateFrom = model.DateFrom!.Value,
DateTo = model.DateTo!.Value,

View File

@ -1,11 +1,11 @@
using BankYouBankruptContracts.BusinessLogicsContracts;
using BankYouBankruptContracts.BindingModels;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using System.Net;
using System.Security.Authentication;
using System.Text;
using System.Threading.Tasks;
using MailKit.Net.Pop3;

View File

@ -108,7 +108,7 @@ namespace BankYouBankruptBusinessLogic.OfficePackage
CreateParagraph(new PdfParagraph
{
Text = info.Title + $"\nот {DateTime.Now.ToShortDateString()}",
Text = info.Title + $"\nот {DateTime.Now.ToShortDateString()}\nФИО клиента: {info.FullClientName}",
Style = "NormalTitle",
ParagraphAlignment = PdfParagraphAlignmentType.Center
});

View File

@ -21,6 +21,9 @@ namespace BankYouBankruptBusinessLogic.OfficePackage.HelperModels
//по умолчанию отчёт делается для клиента
public bool ForClient { get; set; } = true;
//для передачи полного имени клиента в отчёт
public string FullClientName { get; set; } = string.Empty;
//перечень заказов за указанный период для вывода/сохранения
public List<ReportClientViewModel> ReportCrediting { get; set; } = new();

View File

@ -433,11 +433,18 @@ namespace BankYouBankruptCashierApp.Controllers
return Redirect("~/Home/Enter");
}
//запрашиваем список в формате вспомогательной вьюшки из-за работы select в asp net
ViewBag.Clients = APICashier.GetRequest<List<ClientViewModel>>($"/api/Client/GetAllClients").Select(x => new ClientSelectViewModel
{
Id = x.Id,
FullName = x.Surname + " " + x.Name + " " + x.Patronymic
}).ToList();
return View();
}
[HttpPost]
public void CreateReport(DateTime dateFrom, DateTime dateTo)
public void CreateReport(int clientId, DateTime dateFrom, DateTime dateTo)
{
if (APICashier.Cashier == null)
{
@ -446,6 +453,7 @@ namespace BankYouBankruptCashierApp.Controllers
APICashier.PostRequest("api/Report/CreateCashierReport", new ReportSupportBindingModel()
{
ClientId = clientId,
DateFrom = dateFrom,
DateTo = dateTo
});

View File

@ -6,6 +6,12 @@
<h2 class="display-4">Отчёт по счетам за выбранный период</h2>
</div>
<form method="post">
<div class="row">
<div class="col-4">Клиент:</div>
<div class="col-8">
<select id="clientId" name="clientId" class="form-control" asp-items="@(new SelectList( @ViewBag.Clients, "Id", "FullName"))"></select>
</div>
</div>
<div class="row">
<div class="col-4">Дата начала периода:</div>
<div class="col-8">

View File

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankYouBankruptContracts.BindingModels
{
//один из двух классов для обмена информацией по почте
public class MailSendInfoBindingModel
{
public string MailAddress { get; set; } = string.Empty;
public string Subject { get; set; } = string.Empty;
public string Text { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,30 @@
using BankYouBankruptDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankYouBankruptContracts.BindingModels
{
public class MessageInfoBindingModel : IMessageInfoModel
{
public int Id { get; set; }
public string MessageId { get; set; } = string.Empty;
public int? ClientId { get; set; }
public string SenderName { get; set; } = string.Empty;
public DateTime DateDelivery { get; set; } = DateTime.Now;
public string Subject { get; set; } = string.Empty;
public string Body { get; set; } = string.Empty;
public bool IsRead { get; set; } = false;
public string? Answer { get; set; } = string.Empty;
}
}

View File

@ -10,6 +10,10 @@ namespace BankYouBankruptContracts.BindingModels
{
public string FileName { get; set; } = string.Empty;
public int? ClientId { get; set; }
public string? ClientFullName { get; set; } = string.Empty;
public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; }

View File

@ -9,6 +9,8 @@ namespace BankYouBankruptContracts.BindingModels
//вспомогательная модель для передачи DateTime при формировании отчёта
public class ReportSupportBindingModel
{
public int ClientId { get; set; }
public DateTime DateFrom { get; set; }
public DateTime DateTo { get; set; }

View File

@ -0,0 +1,20 @@
using BankYouBankruptContracts.BindingModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankYouBankruptContracts.BusinessLogicsContracts
{
public interface IMessageInfoLogic
{
//List<MessageInfoViewModel>? ReadList(MessageInfoSearchModel? model);
//MessageInfoViewModel? ReadElement(MessageInfoSearchModel model);
bool Create(MessageInfoBindingModel model);
bool Update(MessageInfoBindingModel model);
}
}

View File

@ -16,6 +16,8 @@ namespace BankYouBankruptContracts.SearchModels
public int? CashierId { get; set; }
public int? ClientId { get; set; }
public int? Sum { get; set; }
public DateTime? DateFrom { get; set; }

View File

@ -12,6 +12,8 @@ namespace BankYouBankruptContracts.SearchModels
public int? Sum { get; set; }
public int? ClientId { get; set; }
public int? AccountSenderId { get; set; }
public int? AccountPayeeId { get; set; }

View File

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankYouBankruptDataModels.Models
{
public interface IMessageInfoModel : IId
{
string MessageId { get; }
int? ClientId { get; }
string SenderName { get; }
DateTime DateDelivery { get; }
string Subject { get; }
string Body { get; }
public bool IsRead { get; }
public string Answer { get; }
}
}

View File

@ -46,13 +46,14 @@ namespace BankYouBankruptDatabaseImplement.Implements
.ToList();
}
//выборка для заполнения отчёта
if(model.DateFrom.HasValue && model.DateTo.HasValue)
{
return context.CashWithdrawals
.Include(x => x.Cashier)
.Include(x => x.Debiting)
.Include(x => x.Account)
.Where(x => x.DateOperation >= model.DateFrom && x.DateOperation <= model.DateTo)
.Where(x => x.DateOperation >= model.DateFrom && x.DateOperation <= model.DateTo && x.Account.ClientId == model.ClientId)
.Select(x => x.GetViewModel)
.ToList();
}

View File

@ -41,7 +41,8 @@ namespace BankYouBankruptDatabaseImplement.Implements
.Include(x => x.AccountPayeer)
.Include(x => x.AccountSender)
.Include(x => x.Cashier)
.Where(x => x.DateOperation >= model.DateFrom && x.DateOperation <= model.DateTo && x.AccountSenderId != null)
.Where(x => x.DateOperation >= model.DateFrom && x.DateOperation <= model.DateTo && x.AccountSenderId != null
&& (x.AccountPayeer.ClientId == model.ClientId || x.AccountSender.Id == model.ClientId))
.Select(x => x.GetViewModel)
.ToList();
}

View File

@ -21,6 +21,7 @@ namespace BankYouBankruptRestAPI.Controllers
private readonly IReportCashierLogic _reportCashierLogic;
public ReportController(ILogger<ReportController> logger, IReportClientLogic reportClientLogic, IReportCashierLogic reportCashierLogic)
{
_logger = logger;
@ -57,6 +58,7 @@ namespace BankYouBankruptRestAPI.Controllers
_reportCashierLogic.SaveAccountsToPdfFile(new ReportBindingModel
{
FileName = "Отчёт по счетам за " + DateTime.Now.ToShortDateString() + ".pdf",
ClientId = model.ClientId,
DateFrom = model.DateFrom,
DateTo = model.DateTo
});

View File

@ -35,6 +35,9 @@ builder.Services.AddTransient<ICashWithdrawalLogic, CashWithdrawalLogic>();
builder.Services.AddTransient<IReportClientLogic, ReportClientLogic>();
builder.Services.AddTransient<IReportCashierLogic, ReportCashierLogic>();
builder.Services.AddTransient<IMessageInfoLogic, MessageInfoLogic>();
builder.Services.AddSingleton<AbstractMailWorker, MailKitWorker>();
//теперь общий
builder.Services.AddTransient<AbstractSaveToPdfClient, SaveToPdf>();