Stage 2: BussinessLogic(Добавлена немного бизнес-логика. OfficePackage - добавил HelperEnums, HelperModels), Переделал Cotracts, Binding, ViewModel, Reports добавил

This commit is contained in:
nikbel2004@outlook.com 2024-04-28 15:15:17 +04:00
parent b1bae75641
commit 357d568425
45 changed files with 896 additions and 47 deletions

View File

@ -7,8 +7,13 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Folder Include="BusinessLogic\" /> <PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
<Folder Include="OfficePackage\" /> </ItemGroup>
<ItemGroup>
<ProjectReference Include="..\BankContracts\BankContracts.csproj" />
<ProjectReference Include="..\BankDatabaseImplement\BankDatabaseImplement.csproj" />
<ProjectReference Include="..\BankDataModels\BankDataModels.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,185 @@
using BankContracts.BindingModels.Cashier;
using BankContracts.BindingModels.Client;
using BankContracts.BusinessLogicsContracts.Cashier;
using BankContracts.SearchModels.Cashier;
using BankContracts.StoragesModels.Cashier;
using BankContracts.ViewModels.Cashier.ViewModels;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankBusinessLogic.BusinessLogic
{
// Класс, реализующий бизнес-логику для кассиров
public class CashierLogic : ICashierLogic
{
private readonly ILogger _logger;
private readonly ICashierStorage _cashierStorage;
// Конструктор
public CashierLogic(ILogger<CashierLogic> logger, ICashierStorage cashierStorage)
{
_logger = logger;
_cashierStorage = cashierStorage;
}
// Вывод конкретного клиента
public CashierViewModel? ReadElement(CashierSearchModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
_logger.LogInformation("ReadElement. CashierName:{Name}. CashierSurname:{Surname}. CashierPatronymic:{Patronymic}. Id:{Id}",
model.Name, model.Surname, model.Patronymic, model?.Id);
var element = _cashierStorage.GetElement(model);
if (element == null)
{
_logger.LogWarning("ReadElement element not found");
return null;
}
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
return element;
}
// Вывод отфильтрованного списка
public List<CashierViewModel>? ReadList(CashierSearchModel? model)
{
_logger.LogInformation("ReadList. CashierName:{Name}. CashierSurname:{Surname}. CashierPatronymic:{Patronymic}. Id:{Id}",
model.Name, model.Surname, model.Patronymic, model?.Id);
// list хранит весь список в случае, если model пришло со значением null на вход метода
var list = model == null ? _cashierStorage.GetFullList() : _cashierStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("ReadList return null list");
return null;
}
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
// Создание кассира
public bool Create(CashierBindingModel model)
{
CheckModel(model);
if (_cashierStorage.Insert(model) == null)
{
_logger.LogWarning("Insert operation failed");
return false;
}
return true;
}
// Обновление кассира
public bool Update(CashierBindingModel model)
{
CheckModel(model);
if (_cashierStorage.Update(model) == null)
{
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
// Удаление кассира
public bool Delete(CashierBindingModel model)
{
CheckModel(model, false);
_logger.LogInformation("Delete. Id:{Id}", model.Id);
if (_cashierStorage.Delete(model) == null)
{
_logger.LogWarning("Delete operation failed");
return false;
}
return true;
}
// Проверка входного аргумента для методов Insert, Update и Delete
private void CheckModel(CashierBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
// Так как при удалении передаём как параметр false
if (!withParams)
{
return;
}
// Проверка на наличие имени
if (string.IsNullOrEmpty(model.Name))
{
throw new ArgumentNullException("Отсутствие имени в учётной записи", nameof(model.Name));
}
// Проверка на наличие фамилия
if (string.IsNullOrEmpty(model.Surname))
{
throw new ArgumentNullException("Отсутствие фамилии в учётной записи", nameof(model.Surname));
}
// Проверка на наличие отчество
if (string.IsNullOrEmpty(model.Patronymic))
{
throw new ArgumentNullException("Отсутствие отчества в учётной записи", nameof(model.Patronymic));
}
// Проверка на наличие почты
if (string.IsNullOrEmpty(model.Email))
{
throw new ArgumentNullException("Отсутствие почты в учётной записи (логина)", nameof(model.Email));
}
// Проверка на наличие пароля
if (string.IsNullOrEmpty(model.Password))
{
throw new ArgumentNullException("Отсутствие пароля в учётной записи", nameof(model.Password));
}
// Проверка на мобильный телефон
if (string.IsNullOrEmpty(model.MobilePhone))
{
throw new ArgumentNullException("Отсутствие почты в учётной записи (логина)", nameof(model.MobilePhone));
}
_logger.LogInformation("Cashier. CashierName:{Name}. CashierSurname:{Surname}. CashierPatronymic:{Patronymic}. " +
"Email:{Email}. Password:{Password}. MobilePhone:{MobilePhone} Id:{Id}",
model.Name, model.Surname, model.Patronymic, model.Email, model.Password, model.MobilePhone, model.Id);
// Для проверка на наличие такого же аккаунта
var element = _cashierStorage.GetElement(new CashierSearchModel
{
Email = model.Email,
});
//если элемент найден и его Id не совпадает с Id переданного объекта
if (element != null && element.Id != model.Id)
{
throw new InvalidOperationException("Аккаунт с таким логином уже есть");
}
}
}
}

View File

@ -0,0 +1,173 @@
using BankContracts.BindingModels.Client;
using BankContracts.BusinessLogicsContracts.Client;
using BankContracts.SearchModels.Client;
using BankContracts.StoragesModels.Client;
using BankContracts.ViewModels.Client.ViewModels;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankBusinessLogic.BusinessLogic
{
// Класс, реализующий бизнес-логику для клиентов
public class ClientLogic : IClientLogic
{
private readonly ILogger _logger;
private readonly IClientStorage _clientStorage;
// Конструктор
public ClientLogic(ILogger<ClientLogic> logger, IClientStorage clientStorage)
{
_logger = logger;
_clientStorage = clientStorage;
}
// Вывод конкретного клиента
public ClientViewModel? ReadElement(ClientSearchModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
_logger.LogInformation("ReadElement. Name:{Name}.Surname:{Surname}.Patronymic:{Patronymic}.Id:{Id}", model.Name, model.Surname, model.Patronymic, model.Id);
var element = _clientStorage.GetElement(model);
if (element == null)
{
_logger.LogWarning("Read element not found");
return null;
}
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
return element;
}
// Вывод отфильтрованного списка
public List<ClientViewModel>? ReadList(ClientSearchModel model)
{
_logger.LogInformation("ReadList. ClientId:{Id}", model?.Id);
// list хранит весь список в случае, если model пришло со значением null на вход метода
var list = model == null ? _clientStorage.GetFullList() : _clientStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("ReadList return null list");
return null;
}
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
// Создание клиента
public bool Create(ClientBindingModel model)
{
CheckModel(model);
if (_clientStorage.Insert(model) == null)
{
_logger.LogWarning("Insert operation failed");
return false;
}
return true;
}
// Обновление клиента
public bool Update(ClientBindingModel model)
{
CheckModel(model);
if (_clientStorage.Update(model) == null)
{
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
// Удаление клиента
public bool Delete(ClientBindingModel model)
{
CheckModel(model, false);
_logger.LogInformation("Delete. Id:{Id}", model.Id);
if (_clientStorage.Delete(model) == null)
{
_logger.LogWarning("Delete operation failed");
return false;
}
return true;
}
// Проверка входного аргумента для методов Insert, Update и Delete
public void CheckModel(ClientBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
// При удалении параметру withParams передаём false
if (!withParams)
{
return;
}
// Проверка на наличие имени клиента
if (string.IsNullOrEmpty(model.Name))
{
throw new ArgumentNullException("Нет имени пользователя", nameof(model.Name));
}
// Проверка на наличие фамилии клиента
if (string.IsNullOrEmpty(model.Surname))
{
throw new ArgumentNullException("Нет фамилии пользователя", nameof(model.Surname));
}
// Проверка на наличие отчества клиента
if (string.IsNullOrEmpty(model.Patronymic))
{
throw new ArgumentNullException("Нет отчества пользователя", nameof(model.Patronymic));
}
// Проверка на наличие эл. почты
if (string.IsNullOrEmpty(model.Email))
{
throw new ArgumentNullException("Нет почты пользователя", nameof(model.Email));
}
// Проверка на наличие пароля
if (string.IsNullOrEmpty(model.Password))
{
throw new ArgumentNullException("Нет пароля пользователя", nameof(model.Password));
}
// Проверка на наличие мобильного телефона
if (string.IsNullOrEmpty(model.MobilePhone))
{
throw new ArgumentNullException("Нет моб.телефона пользователя", nameof(model.MobilePhone));
}
_logger.LogInformation("Client. Name:{Name}.Surname:{Surname}.Patronymic:{Patronymic}.Email:{Email}.Password:{Password}.Mobeliphone:{MobilePhone}.Id:{Id}",
model.Name, model.Surname, model.Patronymic, model.Email, model.Password, model.MobilePhone, model.Id);
// Для проверка на наличие такого же аккаунта
var element = _clientStorage.GetElement(new ClientSearchModel
{
Email = model.Email,
});
// Если элемент найден и его Id не совпадает с Id переданного объекта
if (element != null && element.Id != model.Id)
{
throw new InvalidOperationException("Клиент с такой почтой уже есть");
}
}
}
}

View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankBusinessLogic.OfficePackage.HelperEnums
{
// Вспомогательное перечисление для оформления Excel
public enum ExcelStyleInfoType
{
// Заголовок
Title,
// Просто текст
Text,
// Текст в рамке
TextWithBorder
}
}

View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankBusinessLogic.OfficePackage.HelperEnums
{
// Вспомогательное перечисление для оформления pdf документа
public enum PdfParagraphAlignmentType
{
// Либо по центру
Center,
// Либо с левого края
Left,
// Либо с правого края
Right
}
}

View File

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankBusinessLogic.OfficePackage.HelperEnums
{
// Вспомогательное перечисление для настройки формата word документа
public enum WordJustificationType
{
// Выравниваем либо по центру
Center,
// Либо на всю ширину
Both
}
}

View File

@ -0,0 +1,28 @@
using BankBusinessLogic.OfficePackage.HelperEnums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankBusinessLogic.OfficePackage.HelperModels
{
// Информация по ячейке в таблице Excel
public class ExcelCellParameters
{
// Название колонки
public string ColumnName { get; set; } = string.Empty;
// Строка
public uint RowIndex { get; set; }
// текст в ячейке
public string Text { get; set; } = string.Empty;
// Геттер для того, чтобы не искать каждый раз
public string CellReference => $"{ColumnName}{RowIndex}";
// В каком стиле выводить информацию
public ExcelStyleInfoType StyleInfo { get; set; }
}
}

View File

@ -0,0 +1,29 @@
using BankContracts.ViewModels.Cashier.ViewModels;
using BankContracts.ViewModels.Client.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankBusinessLogic.OfficePackage.HelperModels
{
// Информация по excel файлу, который хотим создать
public class ExcelInfo
{
// Название файла
public string FileName { get; set; } = string.Empty;
// Заголовок
public string Title { get; set; } = string.Empty;
// Списки для отчёта клиента
public List<MoneyTransferViewModel> MoneyTransfer { get; set; } = new();
public List<CreditingViewModel> Crediting { get; set; } = new();
// Список для отчёта кассира и клиента
public List<DebitingViewModel> Debiting { get; set; } = new();
}
}
}

View File

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankBusinessLogic.OfficePackage.HelperModels
{
// Информация для объединения ячеек
public class ExcelMergeParameters
{
public string CellFromName { get; set; } = string.Empty;
public string CellToName { get; set; } = string.Empty;
// Геттер для указания диапазона для объединения, чтобы каждый раз его не вычислять
public string Merge => $"{CellFromName}:{CellToName}";
}
}

View File

@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankBusinessLogic.OfficePackage.HelperModels
{
// Общая информация по pdf файлу
public class PdfInfo
{
public string FileName { get; set; } = string.Empty;
public string Title { get; set; } = string.Empty;
public DateTime DateFrom { get; set; }
public DateTime DateTo { get; set; }
// По умолчанию отчёт делается для клиента
public bool ForClient { get; set; } = true;
// Для передачи полного имени клиента в отчёт
public string FullClientName { get; set; } = string.Empty;
// Перечень заказов за указанный период для вывода/сохранения
public List<ReportClientViewModel> ReportCrediting { get; set; } = new();
// Перечень заказов за указанный период для вывода/сохранения
public List<ReportClientViewModel> ReportDebiting { get; set; } = new();
// Перечень переводов со счёта на счёт
public List<ReportCashierViewModel> ReportMoneyTransfer { get; set; } = new();
// Перечень зачислений денежных средств на карту (т. е. на её счёт)
public List<ReportCashierViewModel> ReportCashWithdrawal { get; set; } = new();
}
}

View File

@ -0,0 +1,20 @@
using BankBusinessLogic.OfficePackage.HelperEnums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankBusinessLogic.OfficePackage.HelperModels
{
// Информация по параграфу в pdf документе
public class PdfParagraph
{
public string Text { get; set; } = string.Empty;
public string Style { get; set; } = string.Empty;
// Информация по выравниванию текста в параграфе
public PdfParagraphAlignmentType ParagraphAlignment { get; set; }
}
}

View File

@ -0,0 +1,22 @@
using BankBusinessLogic.OfficePackage.HelperEnums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankBusinessLogic.OfficePackage.HelperModels
{
// Информация по параметрам строк таблицы
public class PdfRowParameters
{
// Набор текстов
public List<string> Texts { get; set; } = new();
// Стиль к текстам
public string Style { get; set; } = string.Empty;
// Как выравниваем
public PdfParagraphAlignmentType ParagraphAlignment { get; set; }
}
}

View File

@ -0,0 +1,26 @@
using BankContracts.ViewModels.Cashier.ViewModels;
using BankContracts.ViewModels.Client.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankBusinessLogic.OfficePackage.HelperModels
{
// Общая информация по документу
internal class WordInfo
{
public string FileName { get; set; } = string.Empty;
public string Title { get; set; } = string.Empty;
// Списки для отчёта клиента
public List<MoneyTransferViewModel> MoneyTransfer { get; set; } = new();
public List<CreditingViewModel> Crediting { get; set; } = new();
// Список для отчёта кассира и клиента
public List<DebitingViewModel> Debiting { get; set; } = new();
}
}

View File

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankBusinessLogic.OfficePackage.HelperModels
{
// Модель параграфов, которые есть в тексте
public class WordParagraph
{
// Набор текстов в абзаце (для случая, если в абзаце текст разных стилей)
public List<(string, WordTextProperties)> Texts { get; set; } = new();
// Свойства параграфа, если они есть
public WordTextProperties? TextProperties { get; set; }
public List<List<(string, WordTextProperties)>> RowTexts { get; set; } = new();
}
}

View File

@ -0,0 +1,22 @@
using BankBusinessLogic.OfficePackage.HelperEnums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankBusinessLogic.OfficePackage.HelperModels
{
// Модель свойств текста, которые нам нужны в word документе
public class WordTextProperties
{
// Размере текста
public string Size { get; set; } = string.Empty;
// Надо ли делать его жирным
public bool Bold { get; set; }
// Выравнивание
public WordJustificationType JustificationType { get; set; }
}
}

View File

@ -15,6 +15,7 @@
<Folder Include="ViewModels\Cashier\Reports\" /> <Folder Include="ViewModels\Cashier\Reports\" />
<Folder Include="ViewModels\Client\Diagram\" /> <Folder Include="ViewModels\Client\Diagram\" />
<Folder Include="ViewModels\Client\Reports\" /> <Folder Include="ViewModels\Client\Reports\" />
<Folder Include="ViewModels\Reports\" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -10,7 +10,7 @@ namespace BankContracts.BindingModels.Cashier
public class MoneyTransferBindingModel : IMoneyTransferModel public class MoneyTransferBindingModel : IMoneyTransferModel
{ {
public int Id { get; set; } public int Id { get; set; }
//сменили int на double
public double Sum { get; set; } public double Sum { get; set; }
public int CashierId { get; set; } public int CashierId { get; set; }
@ -19,8 +19,8 @@ namespace BankContracts.BindingModels.Cashier
public int? CreditingId { get; set; } public int? CreditingId { get; set; }
// для реализации между двумя клиента, аккаунтами // Для реализации между двумя аккаунтами, (клиента?)
public int? AccountSenderId { get; set; } public int? AccountSenderId { get; set; }
public int AccountPayeeId { get; set; } public int AccountPayeeId { get; set; }

View File

@ -7,14 +7,17 @@ using System.Threading.Tasks;
namespace BankContracts.BindingModels.Client namespace BankContracts.BindingModels.Client
{ {
public class CreditingBindingModel : ICreditingModel // Реализация сущности "Пополнение карты"
public class CreditingBindingModel : ICreditingModel
{ {
public int Id { get; set; } public int Id { get; set; }
public double Sum { get; set; } public int ClientId { get; set; }
public int CardId { get; set; }
public double Sum { get; set; }
public DateTime DateCredit { get; set; } public DateTime DateCredit { get; set; }
public int ClientId { get; set; }
} }
} }

View File

@ -7,12 +7,14 @@ using System.Threading.Tasks;
namespace BankContracts.BindingModels.Client namespace BankContracts.BindingModels.Client
{ {
public class DebitingBindingModel : IDebitingModel // Реализация сущности "Клиент"
public class DebitingBindingModel : IDebitingModel
{ {
public int Id { get; set; } public int Id { get; set; }
public int CardId { get; set; } public int CardId { get; set; }
// и тут я понял почему ты задавался вопросом про id, надо подумать
// И тут я понял почему ты задавался вопросом про id, надо подумать
public int ClientId { get; set; } public int ClientId { get; set; }
public double Sum { get; set; } public double Sum { get; set; }

View File

@ -0,0 +1,30 @@
using BankDataModels.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankContracts.BindingModels.Reports
{
public class ReportBindingModel
{
public string FileName { get; set; } = string.Empty;
public int? ClientId { get; set; }
public int? AccountId { get; set; }
public List<int>? CardList { get; set; }
public string? ClientFullName { get; set; } = string.Empty;
public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; }
public MailsEnum Role { get; set; }
public string? Email { get; set; }
}
}

View File

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankContracts.BindingModels.Reports
{
// Вспомогательная модель для передачи DateTime при формировании отчёта
public class ReportSupportBindingModel
{
public int? ClientId { get; set; }
public int? AccountId { get; set; }
public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; }
// Для Excel отчёта клиента
public List<int>? CardList { get; set; }
public string? Email { get; set; }
}
}

View File

@ -9,7 +9,8 @@ using System.Threading.Tasks;
namespace BankContracts.BusinessLogicsContracts.Cashier namespace BankContracts.BusinessLogicsContracts.Cashier
{ {
public interface IAccountLogic // Интерфейс бизнес-логики для счёта
public interface IAccountLogic
{ {
List<AccountViewModel>? ReadList(AccountSearchModel? model); List<AccountViewModel>? ReadList(AccountSearchModel? model);

View File

@ -9,7 +9,8 @@ using System.Threading.Tasks;
namespace BankContracts.BusinessLogicsContracts.Cashier namespace BankContracts.BusinessLogicsContracts.Cashier
{ {
public interface ICashWithdrawalLogic // Интерфейс бизнес-логики для выдачи наличных
public interface ICashWithdrawalLogic
{ {
List<CashWithdrawalViewModel>? ReadList(CashWithdrawalSearchModel? model); List<CashWithdrawalViewModel>? ReadList(CashWithdrawalSearchModel? model);

View File

@ -9,7 +9,8 @@ using System.Threading.Tasks;
namespace BankContracts.BusinessLogicsContracts.Cashier namespace BankContracts.BusinessLogicsContracts.Cashier
{ {
public interface ICashierLogic // Интерфейс бизнес-логики для кассира
public interface ICashierLogic
{ {
List<CashierViewModel>? ReadList(CashierSearchModel? model); List<CashierViewModel>? ReadList(CashierSearchModel? model);

View File

@ -9,7 +9,8 @@ using System.Threading.Tasks;
namespace BankContracts.BusinessLogicsContracts.Cashier namespace BankContracts.BusinessLogicsContracts.Cashier
{ {
public interface IMoneyTransferLogic // Интерфейс бизнес-логики для перевода денег
public interface IMoneyTransferLogic
{ {
List<MoneyTransferViewModel>? ReadList(MoneyTransferSearchModel? model); List<MoneyTransferViewModel>? ReadList(MoneyTransferSearchModel? model);

View File

@ -9,7 +9,8 @@ using System.Threading.Tasks;
namespace BankContracts.BusinessLogicsContracts.Client namespace BankContracts.BusinessLogicsContracts.Client
{ {
public interface ICardLogic // Интерфейс бизнес-логики для банковской карты
public interface ICardLogic
{ {
List<CardViewModel>? ReadList(CardSearchModel? model); List<CardViewModel>? ReadList(CardSearchModel? model);

View File

@ -9,7 +9,8 @@ using System.Threading.Tasks;
namespace BankContracts.BusinessLogicsContracts.Client namespace BankContracts.BusinessLogicsContracts.Client
{ {
public interface IClientLogic // Интерфейс бизнес-логики для клиента
public interface IClientLogic
{ {
List<ClientViewModel>? ReadList(ClientSearchModel? model); List<ClientViewModel>? ReadList(ClientSearchModel? model);

View File

@ -9,7 +9,8 @@ using System.Threading.Tasks;
namespace BankContracts.BusinessLogicsContracts.Client namespace BankContracts.BusinessLogicsContracts.Client
{ {
public interface ICreditingLogic // Интерфейс бизнес-логики для пополнения карты
public interface ICreditingLogic
{ {
List<CreditingViewModel>? ReadList(CreditingSearchModel? model); List<CreditingViewModel>? ReadList(CreditingSearchModel? model);

View File

@ -9,7 +9,8 @@ using System.Threading.Tasks;
namespace BankContracts.BusinessLogicsContracts.Client namespace BankContracts.BusinessLogicsContracts.Client
{ {
public interface IDebitingLogic // Интерфейс бизнес-логики для получение наличных по карте
public interface IDebitingLogic
{ {
List<DebitingViewModel>? ReadList(DebitingSearchModel? model); List<DebitingViewModel>? ReadList(DebitingSearchModel? model);

View File

@ -0,0 +1,26 @@
using BankContracts.BindingModels.Reports;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankContracts.BusinessLogicsContracts.Reports
{
// Интерфейс бизнес-логики для отчёта (Кассир)
public interface IReportCashierLogic
{
List<ReportCashierViewModel>? GetMoneyTransfers(ReportBindingModel model);
List<ReportCashierViewModel>? GetCashWithrawals(ReportBindingModel model);
// Сохранение отчёта по счетам в файл-Word
void SaveAccountsToWordFile(ReportBindingModel model);
// Сохранение отчёта по счетам в файл-Excel
void SaveAccountsToExcelFile(ReportBindingModel model);
// Сохранение отчёта по счетам в файл-Pdf
ReportCashierViewModelForHTML SaveAccountsToPdfFile(ReportBindingModel model);
}
}

View File

@ -0,0 +1,27 @@
using BankContracts.BindingModels.Reports;
using BankDataModels.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankContracts.BusinessLogicsContracts.Reports
{
// Интерфейс бизнес-логики для отчёта (Клиент)
public interface IReportClientLogic
{
List<ReportClientViewModel>? GetCrediting(ReportBindingModel model);
List<ReportClientViewModel>? GetDebiting(ReportBindingModel model);
//Сохранение отчёта по картам в файл-Word
void SaveToWordFile(ReportBindingModel model, OfficeOperationEnum operationEnum);
//Сохранение отчёта по картам в файл-Excel
void SaveToExcelFile(ReportBindingModel model, OfficeOperationEnum operationEnum);
//Сохранение отчёта по картам в файл-Pdf
ReportClientViewModelForHTML SaveClientReportToPdfFile(ReportBindingModel model);
}
}

View File

@ -17,6 +17,6 @@ namespace BankContracts.SearchModels.Client
public DateTime? DateCrediting { get; set; } public DateTime? DateCrediting { get; set; }
public int? UserId { get; set; } // ИЛИ лучше CLientId, правильнее будет юзер public int? ClientId { get; set; } // ИЛИ лучше CLientId, ClientId будет лучше :)
} }
} }

View File

@ -13,7 +13,7 @@ namespace BankContracts.SearchModels.Client
public int? CardId { get; set; } public int? CardId { get; set; }
public int? UserId { get; set; } // Возможно лишнюю фигню делаю и лучше ClientId , по нашей бд именно к пользователю относятся операции по пополнению public int? ClientId { get; set; } // ClientId будет лучше :) Возможно лишнюю фигню делаю и лучше ClientId
public int? Sum { get; set; } public int? Sum { get; set; }

View File

@ -9,7 +9,8 @@ using System.Threading.Tasks;
namespace BankContracts.ViewModels namespace BankContracts.ViewModels
{ {
public class AccountViewModel : IAccountModel // Класс для отображения информации о счетах
public class AccountViewModel : IAccountModel
{ {
public int Id { get; set; } public int Id { get; set; }
@ -29,13 +30,12 @@ namespace BankContracts.ViewModels
[DisplayName("Статус счёта")] [DisplayName("Статус счёта")]
public StatusAccount StatusAccount { get; set; } = StatusAccount.Закрыт; public StatusAccount StatusAccount { get; set; } = StatusAccount.Закрыт;
// ВОЗМОЖНО ПОНАДОБИТЬСЯ ДЛЯ ОТЧЁТОВ [DisplayName("Имя")]
//[DisplayName("Имя")] public string Name { get; set; } = string.Empty;
//public string Name { get; set; } = string.Empty;
//[DisplayName("Отчество")] [DisplayName("Отчество")]
//public string Patronymic { get; set; } = string.Empty; public string Patronymic { get; set; } = string.Empty;
//public string PasswordAccount { get; set; } = string.Empty; public string PasswordAccount { get; set; } = string.Empty;
} }
} }

View File

@ -8,24 +8,30 @@ using System.Threading.Tasks;
namespace BankContracts.ViewModels.Cashier.ViewModels namespace BankContracts.ViewModels.Cashier.ViewModels
{ {
public class CashWithdrawalViewModel : ICashWithdrawalModel // Класс для отображения информации о выдаче наличных
public class CashWithdrawalViewModel : ICashWithdrawalModel
{ {
//вот тут вопрос, смотри можно сделать номер операции айдишником //вот тут вопрос, смотри можно сделать номер операции айдишником
//то есть просто сделать так , думаю это будет правильно //то есть просто сделать так , думаю это будет правильно
//[DisplayName("Номер операции")]
[DisplayName("Номер операции")]
public int Id { get; set; } public int Id { get; set; }
public int DebitingId { get; set; } public int DebitingId { get; set; }
//public int AccountId { get; set; } public int AccountId { get; set; }
// тут тоже вопрос, у нас операции не связаны ни со счетом ни с картами, поэтому это стоит обсудить // тут тоже вопрос, у нас операции не связаны ни со счетом ни с картами, поэтому это стоит обсудить
//[DisplayName("Номер счёта")]
//public string AccountNumber { get; set; } = string.Empty;
//для более правильной логики наверное надо // Хмм, ну свяжем, хотя бы со счётом, потому как это сущность твоего варианта, уже как минимум стоит
//[DisplayName("Кассир")]
//public string SurmaneCashier { get; set; } = string.Empty; //[DisplayName("Номер счёта")]
public int CashierId { get; set; } //public string AccountNumber { get; set; } = string.Empty;
//для более правильной логики наверное надо
//[DisplayName("Кассир")]
//public string SurmaneCashier { get; set; } = string.Empty;
public int CashierId { get; set; }
[DisplayName("Сумма выданных наличных")] [DisplayName("Сумма выданных наличных")]
public double Sum { get; set; } public double Sum { get; set; }

View File

@ -8,7 +8,8 @@ using System.Threading.Tasks;
namespace BankContracts.ViewModels.Cashier.ViewModels namespace BankContracts.ViewModels.Cashier.ViewModels
{ {
public class CashierViewModel : ICashierModel // Класс для отображения информации о кассирах
public class CashierViewModel : ICashierModel
{ {
public int Id { get; set; } public int Id { get; set; }

View File

@ -8,20 +8,31 @@ using System.Threading.Tasks;
namespace BankContracts.ViewModels.Cashier.ViewModels namespace BankContracts.ViewModels.Cashier.ViewModels
{ {
public class MoneyTransferViewModel : IMoneyTransferModel // Класс для отображения информации о переводах денег
public class MoneyTransferViewModel : IMoneyTransferModel
{ {
//как будет выглядеть перевод //как будет выглядеть перевод
//я понял, что надо модель доработать скорее всего, потому что мы же переводим не в пустоту , поэтому надо добавить кому и куда переводим //я понял, что надо модель доработать скорее всего, потому что мы же переводим не в пустоту , поэтому надо добавить кому и куда переводим
//хотя если судить по нашей бд, которую принял у нас Эгов не должно быть отправителя и получателя , да еще и номеров счета //хотя если судить по нашей бд, которую принял у нас Эгов не должно быть отправителя и получателя , да еще и номеров счета
// Однако по-хорошему лучше сделать, логично, что переводы могут быть, надо тз поизучать, пока что я добавил
public int Id { get; set; } public int Id { get; set; }
[DisplayName("Сумма перевода")] [DisplayName("Сумма перевода")]
public double Sum { get; set; } public double Sum { get; set; }
[DisplayName("Дата операции")] // Для перевода между счетами
public int? AccountSenderId { get; set; }
public int AccountPayeeId { get; set; }
[DisplayName("Дата операции")]
public DateTime DateTransfer { get; set; } = DateTime.Now; public DateTime DateTransfer { get; set; } = DateTime.Now;
public int CashierId { get; set; } public int? CreditingId { get; }
public int CashierId { get; set; }
[DisplayName("Фамилия кассира")] [DisplayName("Фамилия кассира")]
public string CashierSurname { get; set; } = string.Empty; public string CashierSurname { get; set; } = string.Empty;

View File

@ -9,7 +9,8 @@ using System.Threading.Tasks;
namespace BankContracts.ViewModels.Client.ViewModels namespace BankContracts.ViewModels.Client.ViewModels
{ {
public class CardViewModel : ICardModel // Класс для отображения информации о банковских картах
public class CardViewModel : ICardModel
{ {
public int Id { get; set; } public int Id { get; set; }

View File

@ -8,7 +8,8 @@ using System.Threading.Tasks;
namespace BankContracts.ViewModels.Client.ViewModels namespace BankContracts.ViewModels.Client.ViewModels
{ {
public class ClientViewModel : IClientModel // Класс для отображения информации о клиентах
public class ClientViewModel : IClientModel
{ {
public int Id { get; set; } public int Id { get; set; }

View File

@ -8,17 +8,19 @@ using System.Threading.Tasks;
namespace BankContracts.ViewModels.Client.ViewModels namespace BankContracts.ViewModels.Client.ViewModels
{ {
public class CreditingViewModel : ICreditingModel // Класс для отображения информации о пополнении карты
public class CreditingViewModel : ICreditingModel
{ {
public int Id { get; set; } public int Id { get; set; }
public int ClientId { get; set; } public int ClientId { get; set; }
public int CardId { get; set; }
[DisplayName("Сумма операции")] [DisplayName("Сумма операции")]
public double Sum { get; set; } public double Sum { get; set; }
[DisplayName("Дата заявки")] [DisplayName("Дата заявки")]
public DateTime DateCredit { get; set; } = DateTime.Now; public DateTime DateCredit { get; set; } = DateTime.Now;
} }
} }

View File

@ -8,11 +8,15 @@ using System.Threading.Tasks;
namespace BankContracts.ViewModels.Client.ViewModels namespace BankContracts.ViewModels.Client.ViewModels
{ {
public class DebitingViewModel : IDebitingModel // Класс для отображения информации о получении наличных по карте
public class DebitingViewModel : IDebitingModel
{ {
public int Id { get; set; } public int Id { get; set; }
public int ClientId { get; set; } public int ClientId { get; set; }
public int CardId { get; set; }
[DisplayName("Сумма операции")] [DisplayName("Сумма операции")]
public double Sum { get; set; } public double Sum { get; set; }

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankDataModels.Enums
{
public enum MailsEnum
{
Клиент = 0,
Кассир = 1
}
}

View File

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankDataModels.Enums
{
public enum OfficeOperationEnum
{
Между_cчетами = 0,
Пополнениеарт = 1,
Cнятие_сарты = 2,
Дляассира = 3
}
}

View File

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BankDataModels.Enums
{
public enum TypeDocEnum
{
PDF = 0,
EXCEL = 1,
WORD = 2
}
}

View File

@ -10,8 +10,11 @@ namespace BankDataModels.Models.Cashier
public interface ICashWithdrawalModel : IId public interface ICashWithdrawalModel : IId
{ {
int DebitingId { get; } int DebitingId { get; }
int AccountId { get; } int AccountId { get; }
int CashierId { get; } int CashierId { get; }
// Сумма наличисления наличных // Сумма наличисления наличных
double Sum { get; } //?? все суммы глянуть ! double Sum { get; } //?? все суммы глянуть !