Stage 2: BussinessLogic(Добавлена немного бизнес-логика. OfficePackage - добавил HelperEnums, HelperModels), Переделал Cotracts, Binding, ViewModel, Reports добавил
This commit is contained in:
parent
b1bae75641
commit
357d568425
@ -7,8 +7,13 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="BusinessLogic\" />
|
||||
<Folder Include="OfficePackage\" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\BankContracts\BankContracts.csproj" />
|
||||
<ProjectReference Include="..\BankDatabaseImplement\BankDatabaseImplement.csproj" />
|
||||
<ProjectReference Include="..\BankDataModels\BankDataModels.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
185
Bank/BankBusinessLogic/BusinessLogic/CashierLogic.cs
Normal file
185
Bank/BankBusinessLogic/BusinessLogic/CashierLogic.cs
Normal 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("Аккаунт с таким логином уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
173
Bank/BankBusinessLogic/BusinessLogic/ClientLogic.cs
Normal file
173
Bank/BankBusinessLogic/BusinessLogic/ClientLogic.cs
Normal 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("Клиент с такой почтой уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
@ -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; }
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
@ -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}";
|
||||
}
|
||||
}
|
38
Bank/BankBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs
Normal file
38
Bank/BankBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs
Normal 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();
|
||||
}
|
||||
}
|
@ -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; }
|
||||
}
|
||||
}
|
@ -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; }
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -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; }
|
||||
}
|
||||
}
|
@ -15,6 +15,7 @@
|
||||
<Folder Include="ViewModels\Cashier\Reports\" />
|
||||
<Folder Include="ViewModels\Client\Diagram\" />
|
||||
<Folder Include="ViewModels\Client\Reports\" />
|
||||
<Folder Include="ViewModels\Reports\" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
@ -10,7 +10,7 @@ namespace BankContracts.BindingModels.Cashier
|
||||
public class MoneyTransferBindingModel : IMoneyTransferModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
//сменили int на double
|
||||
|
||||
public double Sum { get; set; }
|
||||
|
||||
public int CashierId { get; set; }
|
||||
@ -19,8 +19,8 @@ namespace BankContracts.BindingModels.Cashier
|
||||
|
||||
public int? CreditingId { get; set; }
|
||||
|
||||
// для реализации между двумя клиента, аккаунтами
|
||||
public int? AccountSenderId { get; set; }
|
||||
// Для реализации между двумя аккаунтами, (клиента?)
|
||||
public int? AccountSenderId { get; set; }
|
||||
|
||||
public int AccountPayeeId { get; set; }
|
||||
|
||||
|
@ -7,14 +7,17 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BindingModels.Client
|
||||
{
|
||||
public class CreditingBindingModel : ICreditingModel
|
||||
// Реализация сущности "Пополнение карты"
|
||||
public class CreditingBindingModel : ICreditingModel
|
||||
{
|
||||
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 int ClientId { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -7,12 +7,14 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BindingModels.Client
|
||||
{
|
||||
public class DebitingBindingModel : IDebitingModel
|
||||
// Реализация сущности "Клиент"
|
||||
public class DebitingBindingModel : IDebitingModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public int CardId { get; set; }
|
||||
// и тут я понял почему ты задавался вопросом про id, надо подумать
|
||||
|
||||
// И тут я понял почему ты задавался вопросом про id, надо подумать
|
||||
public int ClientId { get; set; }
|
||||
|
||||
public double Sum { get; set; }
|
||||
|
@ -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; }
|
||||
}
|
||||
}
|
@ -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; }
|
||||
}
|
||||
}
|
@ -9,7 +9,8 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BusinessLogicsContracts.Cashier
|
||||
{
|
||||
public interface IAccountLogic
|
||||
// Интерфейс бизнес-логики для счёта
|
||||
public interface IAccountLogic
|
||||
{
|
||||
List<AccountViewModel>? ReadList(AccountSearchModel? model);
|
||||
|
||||
|
@ -9,7 +9,8 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BusinessLogicsContracts.Cashier
|
||||
{
|
||||
public interface ICashWithdrawalLogic
|
||||
// Интерфейс бизнес-логики для выдачи наличных
|
||||
public interface ICashWithdrawalLogic
|
||||
{
|
||||
List<CashWithdrawalViewModel>? ReadList(CashWithdrawalSearchModel? model);
|
||||
|
||||
|
@ -9,7 +9,8 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BusinessLogicsContracts.Cashier
|
||||
{
|
||||
public interface ICashierLogic
|
||||
// Интерфейс бизнес-логики для кассира
|
||||
public interface ICashierLogic
|
||||
{
|
||||
List<CashierViewModel>? ReadList(CashierSearchModel? model);
|
||||
|
||||
|
@ -9,7 +9,8 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BusinessLogicsContracts.Cashier
|
||||
{
|
||||
public interface IMoneyTransferLogic
|
||||
// Интерфейс бизнес-логики для перевода денег
|
||||
public interface IMoneyTransferLogic
|
||||
{
|
||||
List<MoneyTransferViewModel>? ReadList(MoneyTransferSearchModel? model);
|
||||
|
||||
|
@ -9,7 +9,8 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BusinessLogicsContracts.Client
|
||||
{
|
||||
public interface ICardLogic
|
||||
// Интерфейс бизнес-логики для банковской карты
|
||||
public interface ICardLogic
|
||||
{
|
||||
List<CardViewModel>? ReadList(CardSearchModel? model);
|
||||
|
||||
|
@ -9,7 +9,8 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BusinessLogicsContracts.Client
|
||||
{
|
||||
public interface IClientLogic
|
||||
// Интерфейс бизнес-логики для клиента
|
||||
public interface IClientLogic
|
||||
{
|
||||
List<ClientViewModel>? ReadList(ClientSearchModel? model);
|
||||
|
||||
|
@ -9,7 +9,8 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BusinessLogicsContracts.Client
|
||||
{
|
||||
public interface ICreditingLogic
|
||||
// Интерфейс бизнес-логики для пополнения карты
|
||||
public interface ICreditingLogic
|
||||
{
|
||||
List<CreditingViewModel>? ReadList(CreditingSearchModel? model);
|
||||
|
||||
|
@ -9,7 +9,8 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BusinessLogicsContracts.Client
|
||||
{
|
||||
public interface IDebitingLogic
|
||||
// Интерфейс бизнес-логики для получение наличных по карте
|
||||
public interface IDebitingLogic
|
||||
{
|
||||
List<DebitingViewModel>? ReadList(DebitingSearchModel? model);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -17,6 +17,6 @@ namespace BankContracts.SearchModels.Client
|
||||
|
||||
public DateTime? DateCrediting { get; set; }
|
||||
|
||||
public int? UserId { get; set; } // ИЛИ лучше CLientId, правильнее будет юзер
|
||||
public int? ClientId { get; set; } // ИЛИ лучше CLientId, ClientId будет лучше :)
|
||||
}
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ namespace BankContracts.SearchModels.Client
|
||||
|
||||
public int? CardId { get; set; }
|
||||
|
||||
public int? UserId { get; set; } // Возможно лишнюю фигню делаю и лучше ClientId , по нашей бд именно к пользователю относятся операции по пополнению
|
||||
public int? ClientId { get; set; } // ClientId будет лучше :) Возможно лишнюю фигню делаю и лучше ClientId
|
||||
|
||||
public int? Sum { get; set; }
|
||||
|
||||
|
@ -9,7 +9,8 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels
|
||||
{
|
||||
public class AccountViewModel : IAccountModel
|
||||
// Класс для отображения информации о счетах
|
||||
public class AccountViewModel : IAccountModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
@ -29,13 +30,12 @@ namespace BankContracts.ViewModels
|
||||
[DisplayName("Статус счёта")]
|
||||
public StatusAccount StatusAccount { get; set; } = StatusAccount.Закрыт;
|
||||
|
||||
// ВОЗМОЖНО ПОНАДОБИТЬСЯ ДЛЯ ОТЧЁТОВ
|
||||
//[DisplayName("Имя")]
|
||||
//public string Name { get; set; } = string.Empty;
|
||||
[DisplayName("Имя")]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
//[DisplayName("Отчество")]
|
||||
//public string Patronymic { get; set; } = string.Empty;
|
||||
[DisplayName("Отчество")]
|
||||
public string Patronymic { get; set; } = string.Empty;
|
||||
|
||||
//public string PasswordAccount { get; set; } = string.Empty;
|
||||
public string PasswordAccount { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
|
@ -8,24 +8,30 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels.Cashier.ViewModels
|
||||
{
|
||||
public class CashWithdrawalViewModel : ICashWithdrawalModel
|
||||
// Класс для отображения информации о выдаче наличных
|
||||
public class CashWithdrawalViewModel : ICashWithdrawalModel
|
||||
{
|
||||
//вот тут вопрос, смотри можно сделать номер операции айдишником
|
||||
//то есть просто сделать так , думаю это будет правильно
|
||||
//[DisplayName("Номер операции")]
|
||||
|
||||
[DisplayName("Номер операции")]
|
||||
public int Id { 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;
|
||||
public int CashierId { get; set; }
|
||||
// Хмм, ну свяжем, хотя бы со счётом, потому как это сущность твоего варианта, уже как минимум стоит
|
||||
|
||||
//[DisplayName("Номер счёта")]
|
||||
//public string AccountNumber { get; set; } = string.Empty;
|
||||
|
||||
//для более правильной логики наверное надо
|
||||
//[DisplayName("Кассир")]
|
||||
//public string SurmaneCashier { get; set; } = string.Empty;
|
||||
public int CashierId { get; set; }
|
||||
|
||||
[DisplayName("Сумма выданных наличных")]
|
||||
public double Sum { get; set; }
|
||||
|
@ -8,7 +8,8 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels.Cashier.ViewModels
|
||||
{
|
||||
public class CashierViewModel : ICashierModel
|
||||
// Класс для отображения информации о кассирах
|
||||
public class CashierViewModel : ICashierModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
|
@ -8,20 +8,31 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels.Cashier.ViewModels
|
||||
{
|
||||
public class MoneyTransferViewModel : IMoneyTransferModel
|
||||
// Класс для отображения информации о переводах денег
|
||||
public class MoneyTransferViewModel : IMoneyTransferModel
|
||||
{
|
||||
//как будет выглядеть перевод
|
||||
//я понял, что надо модель доработать скорее всего, потому что мы же переводим не в пустоту , поэтому надо добавить кому и куда переводим
|
||||
//хотя если судить по нашей бд, которую принял у нас Эгов не должно быть отправителя и получателя , да еще и номеров счета
|
||||
|
||||
// Однако по-хорошему лучше сделать, логично, что переводы могут быть, надо тз поизучать, пока что я добавил
|
||||
|
||||
public int Id { get; set; }
|
||||
|
||||
[DisplayName("Сумма перевода")]
|
||||
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 int CashierId { get; set; }
|
||||
public int? CreditingId { get; }
|
||||
|
||||
public int CashierId { get; set; }
|
||||
|
||||
[DisplayName("Фамилия кассира")]
|
||||
public string CashierSurname { get; set; } = string.Empty;
|
||||
|
@ -9,7 +9,8 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels.Client.ViewModels
|
||||
{
|
||||
public class CardViewModel : ICardModel
|
||||
// Класс для отображения информации о банковских картах
|
||||
public class CardViewModel : ICardModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
|
@ -8,7 +8,8 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels.Client.ViewModels
|
||||
{
|
||||
public class ClientViewModel : IClientModel
|
||||
// Класс для отображения информации о клиентах
|
||||
public class ClientViewModel : IClientModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
|
@ -8,17 +8,19 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels.Client.ViewModels
|
||||
{
|
||||
public class CreditingViewModel : ICreditingModel
|
||||
// Класс для отображения информации о пополнении карты
|
||||
public class CreditingViewModel : ICreditingModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public int ClientId { get; set; }
|
||||
|
||||
public int CardId { get; set; }
|
||||
|
||||
[DisplayName("Сумма операции")]
|
||||
public double Sum { get; set; }
|
||||
|
||||
[DisplayName("Дата заявки")]
|
||||
public DateTime DateCredit { get; set; } = DateTime.Now;
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -8,11 +8,15 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels.Client.ViewModels
|
||||
{
|
||||
public class DebitingViewModel : IDebitingModel
|
||||
// Класс для отображения информации о получении наличных по карте
|
||||
public class DebitingViewModel : IDebitingModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public int ClientId { get; set; }
|
||||
|
||||
public int CardId { get; set; }
|
||||
|
||||
[DisplayName("Сумма операции")]
|
||||
public double Sum { get; set; }
|
||||
|
||||
|
15
Bank/BankDataModels/Enums/MailsEnum.cs
Normal file
15
Bank/BankDataModels/Enums/MailsEnum.cs
Normal 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
|
||||
}
|
||||
}
|
19
Bank/BankDataModels/Enums/OfficeOperationEnum.cs
Normal file
19
Bank/BankDataModels/Enums/OfficeOperationEnum.cs
Normal 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
|
||||
}
|
||||
}
|
17
Bank/BankDataModels/Enums/TypeDocEnum.cs
Normal file
17
Bank/BankDataModels/Enums/TypeDocEnum.cs
Normal 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
|
||||
}
|
||||
}
|
@ -10,8 +10,11 @@ namespace BankDataModels.Models.Cashier
|
||||
public interface ICashWithdrawalModel : IId
|
||||
{
|
||||
int DebitingId { get; }
|
||||
|
||||
int AccountId { get; }
|
||||
|
||||
int CashierId { get; }
|
||||
|
||||
// Сумма наличисления наличных
|
||||
double Sum { get; } //?? все суммы глянуть !
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user