этап
This commit is contained in:
parent
6a1f89ef3e
commit
41691e5af1
55
Bank/Bank.sln
Normal file
55
Bank/Bank.sln
Normal file
@ -0,0 +1,55 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.3.32819.101
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bank", "Bank\Bank.csproj", "{AFB79BC5-47CC-4DC9-B090-2190ECC6165E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BankDataModels", "BankDataModels\BankDataModels.csproj", "{84B572A0-F8F5-40D2-9D9E-ACAEC7A91859}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BankContracts", "BankContracts\BankContracts.csproj", "{0A3FDB59-29E9-459A-8D17-62CA88D1C56E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BankBusinessLogic", "BankBusinessLogic\BankBusinessLogic.csproj", "{861E0654-2ECE-4A7D-8A82-2E6DB5AEBDCE}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BankDatabaseImplement", "BankDatabaseImplement\BankDatabaseImplement.csproj", "{2C40C8A1-137C-4B36-BA44-888CD7230E50}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BankWorkerApp", "BankWorkerApp\BankWorkerApp.csproj", "{E42AD3E0-7FFF-4F13-8F06-DEE8C095B1FA}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{AFB79BC5-47CC-4DC9-B090-2190ECC6165E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AFB79BC5-47CC-4DC9-B090-2190ECC6165E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AFB79BC5-47CC-4DC9-B090-2190ECC6165E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AFB79BC5-47CC-4DC9-B090-2190ECC6165E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{84B572A0-F8F5-40D2-9D9E-ACAEC7A91859}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{84B572A0-F8F5-40D2-9D9E-ACAEC7A91859}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{84B572A0-F8F5-40D2-9D9E-ACAEC7A91859}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{84B572A0-F8F5-40D2-9D9E-ACAEC7A91859}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0A3FDB59-29E9-459A-8D17-62CA88D1C56E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0A3FDB59-29E9-459A-8D17-62CA88D1C56E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0A3FDB59-29E9-459A-8D17-62CA88D1C56E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0A3FDB59-29E9-459A-8D17-62CA88D1C56E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{861E0654-2ECE-4A7D-8A82-2E6DB5AEBDCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{861E0654-2ECE-4A7D-8A82-2E6DB5AEBDCE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{861E0654-2ECE-4A7D-8A82-2E6DB5AEBDCE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{861E0654-2ECE-4A7D-8A82-2E6DB5AEBDCE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2C40C8A1-137C-4B36-BA44-888CD7230E50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2C40C8A1-137C-4B36-BA44-888CD7230E50}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2C40C8A1-137C-4B36-BA44-888CD7230E50}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2C40C8A1-137C-4B36-BA44-888CD7230E50}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E42AD3E0-7FFF-4F13-8F06-DEE8C095B1FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E42AD3E0-7FFF-4F13-8F06-DEE8C095B1FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E42AD3E0-7FFF-4F13-8F06-DEE8C095B1FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E42AD3E0-7FFF-4F13-8F06-DEE8C095B1FA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {10D52A8F-A93F-4B95-8944-3690FFD8508E}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
25
Bank/Bank/Bank.csproj
Normal file
25
Bank/Bank/Bank.csproj
Normal file
@ -0,0 +1,25 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.4">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Controllers\" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\BankDatabaseImplement\BankDatabaseImplement.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
25
Bank/Bank/Program.cs
Normal file
25
Bank/Bank/Program.cs
Normal file
@ -0,0 +1,25 @@
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
// Add services to the container.
|
||||
|
||||
builder.Services.AddControllers();
|
||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||
builder.Services.AddEndpointsApiExplorer();
|
||||
builder.Services.AddSwaggerGen();
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
// Configure the HTTP request pipeline.
|
||||
if (app.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseSwagger();
|
||||
app.UseSwaggerUI();
|
||||
}
|
||||
|
||||
app.UseHttpsRedirection();
|
||||
|
||||
app.UseAuthorization();
|
||||
|
||||
app.MapControllers();
|
||||
|
||||
app.Run();
|
31
Bank/Bank/Properties/launchSettings.json
Normal file
31
Bank/Bank/Properties/launchSettings.json
Normal file
@ -0,0 +1,31 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/launchsettings.json",
|
||||
"iisSettings": {
|
||||
"windowsAuthentication": false,
|
||||
"anonymousAuthentication": true,
|
||||
"iisExpress": {
|
||||
"applicationUrl": "http://localhost:18296",
|
||||
"sslPort": 44326
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"Bank": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"launchUrl": "swagger",
|
||||
"applicationUrl": "https://localhost:7080;http://localhost:5080",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"IIS Express": {
|
||||
"commandName": "IISExpress",
|
||||
"launchBrowser": true,
|
||||
"launchUrl": "swagger",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
8
Bank/Bank/appsettings.Development.json
Normal file
8
Bank/Bank/appsettings.Development.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
9
Bank/Bank/appsettings.json
Normal file
9
Bank/Bank/appsettings.json
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
17
Bank/BankBusinessLogic/BankBusinessLogic.csproj
Normal file
17
Bank/BankBusinessLogic/BankBusinessLogic.csproj
Normal file
@ -0,0 +1,17 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\BankContracts\BankContracts.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
124
Bank/BankBusinessLogic/BusinessLogics/ClerkLogic.cs
Normal file
124
Bank/BankBusinessLogic/BusinessLogics/ClerkLogic.cs
Normal file
@ -0,0 +1,124 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.BusinessLogicsContracts;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.BusinessLogics
|
||||
{
|
||||
public class ClerkLogic : IClerkLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly IClerkStorage _clerkStorage;
|
||||
|
||||
public ClerkLogic(ILogger<ClerkLogic> logger, IClerkStorage clerkStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_clerkStorage = clerkStorage;
|
||||
}
|
||||
|
||||
public bool Create(ClerkBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_clerkStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Update(ClerkBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_clerkStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Delete(ClerkBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
||||
if (_clerkStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public ClerkViewModel? ReadElement(ClerkSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement. Login:{Login}. PhoneNumber:{PhoneNumber}. Id:{ Id}", model.Login, model.PhoneNumber, model.Id);
|
||||
var element = _clerkStorage.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<ClerkViewModel>? ReadList(ClerkSearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. ClerkId:{Id}", model?.Id);
|
||||
var list = model == null ? _clerkStorage.GetFullList() : _clerkStorage.GetFilteredList(model);
|
||||
if (list == null)
|
||||
{
|
||||
_logger.LogWarning("ReadList return null list");
|
||||
return null;
|
||||
}
|
||||
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
||||
return list;
|
||||
}
|
||||
|
||||
private void CheckModel(ClerkBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.Login))
|
||||
{
|
||||
throw new ArgumentNullException("Нет логина клерка", nameof(model.Login));
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.PhoneNumber))
|
||||
{
|
||||
throw new ArgumentNullException("Нет номера телефона клерка", nameof(model.PhoneNumber));
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.Password))
|
||||
{
|
||||
throw new ArgumentNullException("Нет пароля клерка", nameof(model.Password));
|
||||
}
|
||||
_logger.LogInformation("Clerk. Login:{Login}. PhoneNumber:{PhoneNumber}. Password:{Password}. Id:{ Id}", model.Login, model.PhoneNumber, model.Password, model.Id);
|
||||
var element = _clerkStorage.GetElement(new ClerkSearchModel
|
||||
{
|
||||
Login = model.Login,
|
||||
PhoneNumber = model.PhoneNumber,
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new InvalidOperationException("Клерк с таким именем уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
129
Bank/BankBusinessLogic/BusinessLogics/ClientLogic.cs
Normal file
129
Bank/BankBusinessLogic/BusinessLogics/ClientLogic.cs
Normal file
@ -0,0 +1,129 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.BusinessLogicsContracts;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.BusinessLogics
|
||||
{
|
||||
public class ClientLogic : IClientLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly IClientStorage _clientStorage;
|
||||
|
||||
public ClientLogic(ILogger<ClientLogic> logger, IClientStorage clientStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_clientStorage = clientStorage;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
public ClientViewModel? ReadElement(ClientSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement. Surname:{Surname}. Name:{Name}. Patronymic:{Patronymic}. Id:{ Id}", model.Surname, model.Name, model.Patronymic, model.Id);
|
||||
var element = _clientStorage.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<ClientViewModel>? ReadList(ClientSearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. ClientId:{Id}", model?.Id);
|
||||
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;
|
||||
}
|
||||
|
||||
private void CheckModel(ClientBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.Surname))
|
||||
{
|
||||
throw new ArgumentNullException("Нет фамилии пациента", nameof(model.Surname));
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
throw new ArgumentNullException("Нет имени пациента", nameof(model.Name));
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.Patronymic))
|
||||
{
|
||||
throw new ArgumentNullException("Нет отчества пациента", nameof(model.Patronymic));
|
||||
}
|
||||
if (model.Age < 0)
|
||||
{
|
||||
throw new ArgumentNullException("Возраст пациента должен быть больше 0", nameof(model.Patronymic));
|
||||
}
|
||||
_logger.LogInformation("Client. Login:{Login}. PhoneNumber:{PhoneNumber}. Password:{Password}. Age:{Age}. ClerkId:{ClerkId}. Id:{ Id}", model.Surname, model.Name, model.Patronymic, model.Age, model.ClerkId, model.Id);
|
||||
var element = _clientStorage.GetElement(new ClientSearchModel
|
||||
{
|
||||
Surname = model.Surname,
|
||||
Name = model.Name,
|
||||
Patronymic = model.Patronymic,
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new InvalidOperationException("Пациент с такими данными уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
115
Bank/BankBusinessLogic/BusinessLogics/ContributionLogic.cs
Normal file
115
Bank/BankBusinessLogic/BusinessLogics/ContributionLogic.cs
Normal file
@ -0,0 +1,115 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.BusinessLogicsContracts;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.BusinessLogics
|
||||
{
|
||||
public class ContributionLogic : IContributionLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly IContributionStorage _contributionStorage;
|
||||
|
||||
public ContributionLogic(ILogger<ContributionLogic> logger, IContributionStorage contributionStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_contributionStorage = contributionStorage;
|
||||
}
|
||||
|
||||
public bool Create(ContributionBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_contributionStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Update(ContributionBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_contributionStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Delete(ContributionBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
||||
if (_contributionStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public ContributionViewModel? ReadElement(ContributionSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement. Id:{ Id}", model.Id);
|
||||
var element = _contributionStorage.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<ContributionViewModel>? ReadList(ContributionSearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. ContributionId:{Id}", model?.Id);
|
||||
var list = model == null ? _contributionStorage.GetFullList() : _contributionStorage.GetFilteredList(model);
|
||||
if (list == null)
|
||||
{
|
||||
_logger.LogWarning("ReadList return null list");
|
||||
return null;
|
||||
}
|
||||
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
||||
return list;
|
||||
}
|
||||
|
||||
private void CheckModel(ContributionBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (model.ContributionCurrencies == null || model.ContributionCurrencies.Count == 0)
|
||||
{
|
||||
throw new ArgumentNullException("Нет валюты во вкладе", nameof(model.ContributionCurrencies));
|
||||
}
|
||||
_logger.LogInformation("Contribution. Id:{ Id}. DepositsId:{DepositsId}. ClerkId:{ClerkId}", model.Id, model.DepositsId, model.ClerkId);
|
||||
var element = _contributionStorage.GetElement(new ContributionSearchModel
|
||||
{
|
||||
Id = model.Id,
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new InvalidOperationException("Клиент с такими данными уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
115
Bank/BankBusinessLogic/BusinessLogics/CurrencyLogic.cs
Normal file
115
Bank/BankBusinessLogic/BusinessLogics/CurrencyLogic.cs
Normal file
@ -0,0 +1,115 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.BusinessLogicsContracts;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.BusinessLogics
|
||||
{
|
||||
public class CurrencyLogic : ICurrencyLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly ICurrencyStorage _currencyStorage;
|
||||
|
||||
public CurrencyLogic(ILogger<CurrencyLogic> logger, ICurrencyStorage currencyStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_currencyStorage = currencyStorage;
|
||||
}
|
||||
|
||||
public bool Create(CurrencyBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_currencyStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Update(CurrencyBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_currencyStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Delete(CurrencyBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
||||
if (_currencyStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public CurrencyViewModel? ReadElement(CurrencySearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement. Name:{Name}. Id:{ Id}", model.Name, model.Id);
|
||||
var element = _currencyStorage.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<CurrencyViewModel>? ReadList(CurrencySearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. CurrencyId:{Id}", model?.Id);
|
||||
var list = model == null ? _currencyStorage.GetFullList() : _currencyStorage.GetFilteredList(model);
|
||||
if (list == null)
|
||||
{
|
||||
_logger.LogWarning("ReadList return null list");
|
||||
return null;
|
||||
}
|
||||
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
||||
return list;
|
||||
}
|
||||
|
||||
private void CheckModel(CurrencyBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
throw new ArgumentNullException("Нет навзания валюты", nameof(model.Name));
|
||||
}
|
||||
_logger.LogInformation("Currency. Name:{Name}. Id:{ Id}", model.Name, model.Id);
|
||||
var element = _currencyStorage.GetElement(new CurrencySearchModel
|
||||
{
|
||||
Name = model.Name,
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new InvalidOperationException("Валюта с таким названием уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
116
Bank/BankBusinessLogic/BusinessLogics/DepositsLogic.cs
Normal file
116
Bank/BankBusinessLogic/BusinessLogics/DepositsLogic.cs
Normal file
@ -0,0 +1,116 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.BusinessLogicsContracts;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.BusinessLogics
|
||||
{
|
||||
public class DepositsLogic : IDepositsLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly IDepositsStorage _diseaseStorage;
|
||||
|
||||
public DepositsLogic(ILogger<DepositsLogic> logger, IDepositsStorage DepositsStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_diseaseStorage = DepositsStorage;
|
||||
}
|
||||
|
||||
public bool Create(DepositsBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_diseaseStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Update(DepositsBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_diseaseStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Delete(DepositsBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
||||
if (_diseaseStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public DepositsViewModel? ReadElement(DepositsSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement. Name:{Name}. Id:{ Id}", model.Name, model.Id);
|
||||
var element = _diseaseStorage.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<DepositsViewModel>? ReadList(DepositsSearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. DepositsId:{Id}", model?.Id);
|
||||
var list = model == null ? _diseaseStorage.GetFullList() : _diseaseStorage.GetFilteredList(model);
|
||||
if (list == null)
|
||||
{
|
||||
_logger.LogWarning("ReadList return null list");
|
||||
return null;
|
||||
}
|
||||
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
||||
return list;
|
||||
}
|
||||
|
||||
private void CheckModel(DepositsBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
throw new ArgumentNullException("Нет пополнения", nameof(model.Name));
|
||||
}
|
||||
_logger.LogInformation("Deposits. Name:{Name}. Reasons:{Reasons}. ClerkId:{ClerkId}. Id:{ Id}", model.Name, model.Reasons, model.ClerkId, model.Id);
|
||||
var element = _diseaseStorage.GetElement(new DepositsSearchModel
|
||||
{
|
||||
Name = model.Name,
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new InvalidOperationException("Вклад с такими данными уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
115
Bank/BankBusinessLogic/BusinessLogics/ProgramLogic.cs
Normal file
115
Bank/BankBusinessLogic/BusinessLogics/ProgramLogic.cs
Normal file
@ -0,0 +1,115 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.BusinessLogicsContracts;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.BusinessLogics
|
||||
{
|
||||
public class ProgramLogic : IProgramLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly IProgramStorage _programStorage;
|
||||
|
||||
public ProgramLogic(ILogger<ProgramLogic> logger, IProgramStorage programStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_programStorage = programStorage;
|
||||
}
|
||||
|
||||
public bool Create(ProgramBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_programStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Update(ProgramBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_programStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Delete(ProgramBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
||||
if (_programStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public ProgramViewModel? ReadElement(ProgramSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement. Name:{Name}. Id:{ Id}", model.Name, model.Id);
|
||||
var element = _programStorage.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<ProgramViewModel>? ReadList(ProgramSearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. ProgramId:{Id}", model?.Id);
|
||||
var list = model == null ? _programStorage.GetFullList() : _programStorage.GetFilteredList(model);
|
||||
if (list == null)
|
||||
{
|
||||
_logger.LogWarning("ReadList return null list");
|
||||
return null;
|
||||
}
|
||||
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
||||
return list;
|
||||
}
|
||||
|
||||
private void CheckModel(ProgramBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
throw new ArgumentNullException("Нет названия кредитной программы", nameof(model.Name));
|
||||
}
|
||||
_logger.LogInformation("Program. Name:{Name}. Id:{ Id}", model.Name, model.Id);
|
||||
var element = _programStorage.GetElement(new ProgramSearchModel
|
||||
{
|
||||
Name = model.Name,
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new InvalidOperationException("Кредитная программа с таким названием уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
128
Bank/BankBusinessLogic/BusinessLogics/ReportLogic.cs
Normal file
128
Bank/BankBusinessLogic/BusinessLogics/ReportLogic.cs
Normal file
@ -0,0 +1,128 @@
|
||||
using BankBusinessLogic.OfficePackage;
|
||||
using BankBusinessLogic.OfficePackage.HelperModels;
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.BusinessLogicsContracts;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.BusinessLogics
|
||||
{
|
||||
public class ReportLogic : IReportLogic
|
||||
{
|
||||
private readonly IClientStorage _clientStorage;
|
||||
private readonly IContributionStorage _contributionStorage;
|
||||
private readonly ICurrencyStorage _currencyStorage;
|
||||
private readonly AbstractSaveToExcel _saveToExcel;
|
||||
private readonly AbstractSaveToWord _saveToWord;
|
||||
private readonly AbstractSaveToPdf _saveToPdf;
|
||||
public ReportLogic(IClientStorage clientStorage, IContributionStorage contributionStorage, ICurrencyStorage currencyStorage, AbstractSaveToExcel saveToExcel, AbstractSaveToWord saveToWord, AbstractSaveToPdf saveToPdf)
|
||||
{
|
||||
_clientStorage = clientStorage;
|
||||
_contributionStorage = contributionStorage;
|
||||
_currencyStorage = currencyStorage;
|
||||
_saveToExcel = saveToExcel;
|
||||
_saveToWord = saveToWord;
|
||||
_saveToPdf = saveToPdf;
|
||||
}
|
||||
|
||||
public List<ReportClientCurrencyViewModel> GetClientCurrencyViewModel()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public List<ReportClientCurrencyViewModel> GetClientCurrencyModule()
|
||||
{
|
||||
var Currencies = _currencyStorage.GetFullList();
|
||||
var Contributions = _contributionStorage.GetFullList();
|
||||
var Clients = _clientStorage.GetFullList();
|
||||
var list = new List<ReportClientCurrencyViewModel>();
|
||||
|
||||
foreach (var Client in Clients)
|
||||
{
|
||||
var record = new ReportClientCurrencyViewModel
|
||||
{
|
||||
ClientSurname = Client.Surname,
|
||||
ClientName = Client.Name,
|
||||
ClientPatronymic = Client.Patronymic,
|
||||
Currencies = new Dictionary<int, string>(),
|
||||
};
|
||||
foreach (var Contribution in Contributions)
|
||||
{
|
||||
if (Client.ClientContributions.ContainsValue(Contribution))
|
||||
{
|
||||
foreach (var Currency in Currencies)
|
||||
{
|
||||
if (Contribution.ContributionCurrencies.ContainsKey(Currency.Id))
|
||||
{
|
||||
record.Currencies.Add(Currency.Id, Currency.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
list.Add(record);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
public List<ReportClientsViewModel> GetClients(ReportBindingModel model)
|
||||
{
|
||||
var Clients = _clientStorage.GetFilteredList(new ClientSearchModel { DateFrom = model.DateFrom, DateTo = model.DateTo });
|
||||
var Currencies = _currencyStorage.GetFullList();
|
||||
var Contributions = _contributionStorage.GetFullList();
|
||||
var list = new List<ReportClientsViewModel>();
|
||||
|
||||
foreach (var Client in Clients)
|
||||
{
|
||||
var record = new ReportClientsViewModel
|
||||
{
|
||||
Id = Client.Id,
|
||||
ClientSurname = Client.Surname,
|
||||
ClientName = Client.Name,
|
||||
ClientPatronymic = Client.Patronymic,
|
||||
Currencies = new Dictionary<int, string>()
|
||||
};
|
||||
foreach (var Contribution in Contributions)
|
||||
{
|
||||
if (Client.ClientContributions.ContainsValue(Contribution))
|
||||
{
|
||||
foreach (var Currency in Currencies)
|
||||
{
|
||||
if (Contribution.ContributionCurrencies.ContainsKey(Currency.Id))
|
||||
{
|
||||
record.Currencies.Add(Currency.Id, Currency.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
list.Add(record);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
public void SaveClientCurrencyToExcelFile(ReportBindingModel model)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void SaveClientCurrencyToWordFile(ReportBindingModel model)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void SaveClientsToPdfFile(ReportBindingModel model)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
68
Bank/BankBusinessLogic/OfficePackage/AbstractSaveToExcel.cs
Normal file
68
Bank/BankBusinessLogic/OfficePackage/AbstractSaveToExcel.cs
Normal file
@ -0,0 +1,68 @@
|
||||
using BankBusinessLogic.OfficePackage.HelperEnums;
|
||||
using BankBusinessLogic.OfficePackage.HelperModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.OfficePackage
|
||||
{
|
||||
public abstract class AbstractSaveToExcel
|
||||
{
|
||||
|
||||
public void CreateReport(ExcelInfo info)
|
||||
{
|
||||
CreateExcel(info);
|
||||
InsertCellInWorksheet(new ExcelCellParameters
|
||||
{
|
||||
ColumnName = "A",
|
||||
RowIndex = 1,
|
||||
Text = info.Title,
|
||||
StyleInfo = ExcelStyleInfoType.Title
|
||||
});
|
||||
MergeCells(new ExcelMergeParameters
|
||||
{
|
||||
CellFromName = "A1",
|
||||
CellToName = "C1"
|
||||
});
|
||||
uint rowIndex = 2;
|
||||
foreach (var pm in info.ClientCurrenies)
|
||||
{
|
||||
InsertCellInWorksheet(new ExcelCellParameters
|
||||
{
|
||||
ColumnName = "A",
|
||||
RowIndex = rowIndex,
|
||||
Text = pm.CurrencyName,
|
||||
StyleInfo = ExcelStyleInfoType.Text
|
||||
});
|
||||
rowIndex++;
|
||||
InsertCellInWorksheet(new ExcelCellParameters
|
||||
{
|
||||
ColumnName = "A",
|
||||
RowIndex = rowIndex,
|
||||
Text = "Итого",
|
||||
StyleInfo = ExcelStyleInfoType.Text
|
||||
});
|
||||
InsertCellInWorksheet(new ExcelCellParameters
|
||||
{
|
||||
ColumnName = "C",
|
||||
RowIndex = rowIndex,
|
||||
//Text = pm.TotalCount.ToString(),
|
||||
StyleInfo = ExcelStyleInfoType.Text
|
||||
});
|
||||
rowIndex++;
|
||||
}
|
||||
SaveExcel(info);
|
||||
}
|
||||
|
||||
protected abstract void CreateExcel(ExcelInfo info);
|
||||
|
||||
protected abstract void InsertCellInWorksheet(ExcelCellParameters
|
||||
excelParams);
|
||||
|
||||
protected abstract void MergeCells(ExcelMergeParameters excelParams);
|
||||
|
||||
protected abstract void SaveExcel(ExcelInfo info);
|
||||
}
|
||||
}
|
58
Bank/BankBusinessLogic/OfficePackage/AbstractSaveToPdf.cs
Normal file
58
Bank/BankBusinessLogic/OfficePackage/AbstractSaveToPdf.cs
Normal file
@ -0,0 +1,58 @@
|
||||
using BankBusinessLogic.OfficePackage.HelperEnums;
|
||||
using BankBusinessLogic.OfficePackage.HelperModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.OfficePackage
|
||||
{
|
||||
public abstract class AbstractSaveToPdf
|
||||
{
|
||||
public void CreateDoc(PdfInfo info)
|
||||
{
|
||||
CreatePdf(info);
|
||||
CreateParagraph(new PdfParagraph
|
||||
{
|
||||
Text = info.Title,
|
||||
Style =
|
||||
"NormalTitle",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Center
|
||||
});
|
||||
CreateParagraph(new PdfParagraph
|
||||
{
|
||||
Text = $"с { info.DateFrom.ToShortDateString() } по { info.DateTo.ToShortDateString() }", Style = "Normal",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Center
|
||||
});
|
||||
CreateTable(new List<string> { "2cm", "3cm", "6cm", "3cm" });
|
||||
CreateRow(new PdfRowParameters
|
||||
{
|
||||
Texts = new List<string> { "Номер", "Дата", "Клиент","Валюта" },
|
||||
Style = "NormalTitle",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Center
|
||||
});
|
||||
foreach (var Client in info.Clients)
|
||||
{
|
||||
CreateRow(new PdfRowParameters
|
||||
{
|
||||
Texts = new List<string> { Client.Id.ToString(), Client.ClientSurname, Client.ClientName, Client.ClientPatronymic, Client.CurrencyName},
|
||||
Style = "Normal",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||||
});
|
||||
}
|
||||
SavePdf(info);
|
||||
}
|
||||
|
||||
protected abstract void CreatePdf(PdfInfo info);
|
||||
|
||||
protected abstract void CreateParagraph(PdfParagraph paragraph);
|
||||
|
||||
protected abstract void CreateTable(List<string> columns);
|
||||
|
||||
protected abstract void CreateRow(PdfRowParameters rowParameters);
|
||||
|
||||
protected abstract void SavePdf(PdfInfo info);
|
||||
}
|
||||
|
||||
}
|
46
Bank/BankBusinessLogic/OfficePackage/AbstractSaveToWord.cs
Normal file
46
Bank/BankBusinessLogic/OfficePackage/AbstractSaveToWord.cs
Normal file
@ -0,0 +1,46 @@
|
||||
using BankBusinessLogic.OfficePackage.HelperEnums;
|
||||
using BankBusinessLogic.OfficePackage.HelperModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.OfficePackage
|
||||
{
|
||||
public abstract class AbstractSaveToWord
|
||||
{
|
||||
public void CreateDoc(WordInfo info)
|
||||
{
|
||||
CreateWord(info);
|
||||
CreateParagraph(new WordParagraph
|
||||
{
|
||||
Texts = new List<(string, WordTextProperties)> { (info.Title, new WordTextProperties { Bold = true, Size = "24", }) },
|
||||
TextProperties = new WordTextProperties
|
||||
{
|
||||
Size = "24",
|
||||
JustificationType = WordJustificationType.Center
|
||||
}
|
||||
});
|
||||
foreach (var Currency in info.Currencies)
|
||||
{
|
||||
CreateParagraph(new WordParagraph
|
||||
{
|
||||
Texts = new List<(string, WordTextProperties)> {(Currency.Name, new WordTextProperties { Size = "24", }) },
|
||||
TextProperties = new WordTextProperties
|
||||
{
|
||||
Size = "24",
|
||||
JustificationType = WordJustificationType.Both
|
||||
}
|
||||
});
|
||||
}
|
||||
SaveWord(info);
|
||||
}
|
||||
|
||||
protected abstract void CreateWord(WordInfo info);
|
||||
|
||||
protected abstract void CreateParagraph(WordParagraph paragraph);
|
||||
|
||||
protected abstract void SaveWord(WordInfo info);
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.OfficePackage.HelperEnums
|
||||
{
|
||||
public enum ExcelStyleInfoType
|
||||
{
|
||||
Title,
|
||||
Text,
|
||||
TextWithBroder
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.OfficePackage.HelperEnums
|
||||
{
|
||||
public enum PdfParagraphAlignmentType
|
||||
{
|
||||
Center,
|
||||
Left,
|
||||
Rigth
|
||||
}
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.OfficePackage.HelperEnums
|
||||
{
|
||||
public enum WordJustificationType
|
||||
{
|
||||
Center,
|
||||
Both
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
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 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,21 @@
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.OfficePackage.HelperModels
|
||||
{
|
||||
public class ExcelInfo
|
||||
{
|
||||
public string FileName { get; set; } = string.Empty;
|
||||
public string Title { get; set; } = string.Empty;
|
||||
public List<ReportClientCurrencyViewModel> ClientCurrenies
|
||||
{
|
||||
get;
|
||||
set;
|
||||
} = new();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
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}";
|
||||
}
|
||||
}
|
19
Bank/BankBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs
Normal file
19
Bank/BankBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.OfficePackage.HelperModels
|
||||
{
|
||||
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 List<ReportClientsViewModel> Clients { get; set; } = new();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
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 PdfParagraph
|
||||
{
|
||||
public string Text { get; set; } = string.Empty;
|
||||
public string Style { get; set; } = string.Empty;
|
||||
public PdfParagraphAlignmentType ParagraphAlignment { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
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,17 @@
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankBusinessLogic.OfficePackage.HelperModels
|
||||
{
|
||||
public class WordInfo
|
||||
{
|
||||
public string FileName { get; set; } = string.Empty;
|
||||
public string Title { get; set; } = string.Empty;
|
||||
public List<CurrencyViewModel> Currencies { get; set; } = new();
|
||||
public IEnumerable<object> Components { get; internal set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
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; }
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
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 WordTextProperties
|
||||
{
|
||||
public string Size { get; set; } = string.Empty;
|
||||
public bool Bold { get; set; }
|
||||
public WordJustificationType JustificationType { get; set; }
|
||||
}
|
||||
}
|
13
Bank/BankContracts/BankContracts.csproj
Normal file
13
Bank/BankContracts/BankContracts.csproj
Normal file
@ -0,0 +1,13 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\BankDataModels\BankDataModels.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
20
Bank/BankContracts/BindingModels/ClerkBindingModel.cs
Normal file
20
Bank/BankContracts/BindingModels/ClerkBindingModel.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BindingModels
|
||||
{
|
||||
public class ClerkBindingModel : IClerkModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Login { get; set; } = string.Empty;
|
||||
|
||||
public string PhoneNumber { get; set; } = string.Empty;
|
||||
|
||||
public string Password { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
28
Bank/BankContracts/BindingModels/ClientBindingModel.cs
Normal file
28
Bank/BankContracts/BindingModels/ClientBindingModel.cs
Normal file
@ -0,0 +1,28 @@
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BindingModels
|
||||
{
|
||||
public class ClientBindingModel : IClientModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Surname { get; set; } = string.Empty;
|
||||
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
public string Patronymic { get; set; } = string.Empty;
|
||||
|
||||
public int Age { get; set; }
|
||||
|
||||
public int ClerkId { get; set; }
|
||||
|
||||
public Dictionary<int, IProgramModel> ClientPrograms { get; set; } = new();
|
||||
|
||||
public Dictionary<int, IContributionModel> ClientContributions { get; set; } = new();
|
||||
}
|
||||
}
|
22
Bank/BankContracts/BindingModels/ContributionBindingModel.cs
Normal file
22
Bank/BankContracts/BindingModels/ContributionBindingModel.cs
Normal file
@ -0,0 +1,22 @@
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BindingModels
|
||||
{
|
||||
public class ContributionBindingModel : IContributionModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public DateTime IssueDate { get; set; } = DateTime.Now;
|
||||
|
||||
public int DepositsId { get; set; }
|
||||
|
||||
public int ClerkId { get; set; }
|
||||
|
||||
public Dictionary<int, ICurrencyModel> ContributionCurrencies { get; set; } = new();
|
||||
}
|
||||
}
|
16
Bank/BankContracts/BindingModels/CyrrencyBindingModel.cs
Normal file
16
Bank/BankContracts/BindingModels/CyrrencyBindingModel.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BindingModels
|
||||
{
|
||||
public class CurrencyBindingModel : ICurrencyModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Name { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
20
Bank/BankContracts/BindingModels/DepositsBindingModel.cs
Normal file
20
Bank/BankContracts/BindingModels/DepositsBindingModel.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BindingModels
|
||||
{
|
||||
public class DepositsBindingModel : IDepositsModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
public string Reasons { get; set; } = string.Empty;
|
||||
|
||||
public int ClerkId { get; set; }
|
||||
}
|
||||
}
|
18
Bank/BankContracts/BindingModels/ProgramBindingModel.cs
Normal file
18
Bank/BankContracts/BindingModels/ProgramBindingModel.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BindingModels
|
||||
{
|
||||
public class ProgramBindingModel : IProgramModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
public Dictionary<int, ICurrencyModel> ProgramCurrencies { get; set; } = new();
|
||||
}
|
||||
}
|
17
Bank/BankContracts/BindingModels/ReportBindingModel.cs
Normal file
17
Bank/BankContracts/BindingModels/ReportBindingModel.cs
Normal file
@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BindingModels
|
||||
{
|
||||
public class ReportBindingModel
|
||||
{
|
||||
public string FileName { get; set; } = string.Empty;
|
||||
|
||||
public DateTime? DateFrom { get; set; }
|
||||
|
||||
public DateTime? DateTo { get; set; }
|
||||
}
|
||||
}
|
24
Bank/BankContracts/BusinessLogicsContracts/IClerkLogic.cs
Normal file
24
Bank/BankContracts/BusinessLogicsContracts/IClerkLogic.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BusinessLogicsContracts
|
||||
{
|
||||
public interface IClerkLogic
|
||||
{
|
||||
List<ClerkViewModel>? ReadList(ClerkSearchModel? model);
|
||||
|
||||
ClerkViewModel? ReadElement(ClerkSearchModel model);
|
||||
|
||||
bool Create(ClerkBindingModel model);
|
||||
|
||||
bool Update(ClerkBindingModel model);
|
||||
|
||||
bool Delete(ClerkBindingModel model);
|
||||
}
|
||||
}
|
24
Bank/BankContracts/BusinessLogicsContracts/IClientLogic.cs
Normal file
24
Bank/BankContracts/BusinessLogicsContracts/IClientLogic.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BusinessLogicsContracts
|
||||
{
|
||||
public interface IClientLogic
|
||||
{
|
||||
List<ClientViewModel>? ReadList(ClientSearchModel? model);
|
||||
|
||||
ClientViewModel? ReadElement(ClientSearchModel model);
|
||||
|
||||
bool Create(ClientBindingModel model);
|
||||
|
||||
bool Update(ClientBindingModel model);
|
||||
|
||||
bool Delete(ClientBindingModel model);
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BusinessLogicsContracts
|
||||
{
|
||||
public interface IContributionLogic
|
||||
{
|
||||
List<ContributionViewModel>? ReadList(ContributionSearchModel? model);
|
||||
|
||||
ContributionViewModel? ReadElement(ContributionSearchModel model);
|
||||
|
||||
bool Create(ContributionBindingModel model);
|
||||
|
||||
bool Update(ContributionBindingModel model);
|
||||
|
||||
bool Delete(ContributionBindingModel model);
|
||||
}
|
||||
}
|
24
Bank/BankContracts/BusinessLogicsContracts/ICurrencyLogic.cs
Normal file
24
Bank/BankContracts/BusinessLogicsContracts/ICurrencyLogic.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BusinessLogicsContracts
|
||||
{
|
||||
public interface ICurrencyLogic
|
||||
{
|
||||
List<CurrencyViewModel>? ReadList(CurrencySearchModel? model);
|
||||
|
||||
CurrencyViewModel? ReadElement(CurrencySearchModel model);
|
||||
|
||||
bool Create(CurrencyBindingModel model);
|
||||
|
||||
bool Update(CurrencyBindingModel model);
|
||||
|
||||
bool Delete(CurrencyBindingModel model);
|
||||
}
|
||||
}
|
24
Bank/BankContracts/BusinessLogicsContracts/IDepositsLogic.cs
Normal file
24
Bank/BankContracts/BusinessLogicsContracts/IDepositsLogic.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BusinessLogicsContracts
|
||||
{
|
||||
public interface IDepositsLogic
|
||||
{
|
||||
List<DepositsViewModel>? ReadList(DepositsSearchModel? model);
|
||||
|
||||
DepositsViewModel? ReadElement(DepositsSearchModel model);
|
||||
|
||||
bool Create(DepositsBindingModel model);
|
||||
|
||||
bool Update(DepositsBindingModel model);
|
||||
|
||||
bool Delete(DepositsBindingModel model);
|
||||
}
|
||||
}
|
24
Bank/BankContracts/BusinessLogicsContracts/IProgramLogic.cs
Normal file
24
Bank/BankContracts/BusinessLogicsContracts/IProgramLogic.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BusinessLogicsContracts
|
||||
{
|
||||
public interface IProgramLogic
|
||||
{
|
||||
List<ProgramViewModel>? ReadList(ProgramSearchModel? model);
|
||||
|
||||
ProgramViewModel? ReadElement(ProgramSearchModel model);
|
||||
|
||||
bool Create(ProgramBindingModel model);
|
||||
|
||||
bool Update(ProgramBindingModel model);
|
||||
|
||||
bool Delete(ProgramBindingModel model);
|
||||
}
|
||||
}
|
24
Bank/BankContracts/BusinessLogicsContracts/IReportLogic.cs
Normal file
24
Bank/BankContracts/BusinessLogicsContracts/IReportLogic.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.BusinessLogicsContracts
|
||||
{
|
||||
public interface IReportLogic
|
||||
{
|
||||
|
||||
List<ReportClientCurrencyViewModel> GetClientCurrencyViewModel();
|
||||
|
||||
List<ReportClientsViewModel> GetClients(ReportBindingModel model);
|
||||
|
||||
void SaveClientCurrencyToWordFile(ReportBindingModel model);
|
||||
|
||||
void SaveClientCurrencyToExcelFile(ReportBindingModel model);
|
||||
|
||||
void SaveClientsToPdfFile(ReportBindingModel model);
|
||||
}
|
||||
}
|
19
Bank/BankContracts/SearchModels/ClerkSearchModel.cs
Normal file
19
Bank/BankContracts/SearchModels/ClerkSearchModel.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.SearchModels
|
||||
{
|
||||
public class ClerkSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
|
||||
public string? Login { get; set; }
|
||||
|
||||
public string? PhoneNumber { get; set; }
|
||||
|
||||
public string? Password { get; set; }
|
||||
}
|
||||
}
|
23
Bank/BankContracts/SearchModels/ClientSearchModel.cs
Normal file
23
Bank/BankContracts/SearchModels/ClientSearchModel.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.SearchModels
|
||||
{
|
||||
public class ClientSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
|
||||
public string? Surname { get; set; }
|
||||
|
||||
public string? Name { get; set; }
|
||||
|
||||
public string? Patronymic { get; set; }
|
||||
|
||||
public int? ClerkId { get; set; }
|
||||
public DateTime? DateFrom { get; set; }
|
||||
public DateTime? DateTo { get; set; }
|
||||
}
|
||||
}
|
15
Bank/BankContracts/SearchModels/ContributionSearchModel.cs
Normal file
15
Bank/BankContracts/SearchModels/ContributionSearchModel.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.SearchModels
|
||||
{
|
||||
public class ContributionSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
|
||||
public int? ClerkId { get; set; }
|
||||
}
|
||||
}
|
15
Bank/BankContracts/SearchModels/CurrencySearchModel.cs
Normal file
15
Bank/BankContracts/SearchModels/CurrencySearchModel.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.SearchModels
|
||||
{
|
||||
public class CurrencySearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
|
||||
public string? Name { get; set; }
|
||||
}
|
||||
}
|
17
Bank/BankContracts/SearchModels/DepositsSearchModel.cs
Normal file
17
Bank/BankContracts/SearchModels/DepositsSearchModel.cs
Normal file
@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.SearchModels
|
||||
{
|
||||
public class DepositsSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
|
||||
public string? Name { get; set; }
|
||||
|
||||
public int? ClerkId { get; set; }
|
||||
}
|
||||
}
|
15
Bank/BankContracts/SearchModels/ProgramSearchModel.cs
Normal file
15
Bank/BankContracts/SearchModels/ProgramSearchModel.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.SearchModels
|
||||
{
|
||||
public class ProgramSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
|
||||
public string? Name { get; set; }
|
||||
}
|
||||
}
|
26
Bank/BankContracts/StoragesContracts/IClerkStorage.cs
Normal file
26
Bank/BankContracts/StoragesContracts/IClerkStorage.cs
Normal file
@ -0,0 +1,26 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.StoragesContracts
|
||||
{
|
||||
public interface IClerkStorage
|
||||
{
|
||||
List<ClerkViewModel> GetFullList();
|
||||
|
||||
List<ClerkViewModel> GetFilteredList(ClerkSearchModel model);
|
||||
|
||||
ClerkViewModel? GetElement(ClerkSearchModel model);
|
||||
|
||||
ClerkViewModel? Insert(ClerkBindingModel model);
|
||||
|
||||
ClerkViewModel? Update(ClerkBindingModel model);
|
||||
|
||||
ClerkViewModel? Delete(ClerkBindingModel model);
|
||||
}
|
||||
}
|
26
Bank/BankContracts/StoragesContracts/IClientsStorage.cs
Normal file
26
Bank/BankContracts/StoragesContracts/IClientsStorage.cs
Normal file
@ -0,0 +1,26 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.StoragesContracts
|
||||
{
|
||||
public interface IClientStorage
|
||||
{
|
||||
List<ClientViewModel> GetFullList();
|
||||
|
||||
List<ClientViewModel> GetFilteredList(ClientSearchModel model);
|
||||
|
||||
ClientViewModel? GetElement(ClientSearchModel model);
|
||||
|
||||
ClientViewModel? Insert(ClientBindingModel model);
|
||||
|
||||
ClientViewModel? Update(ClientBindingModel model);
|
||||
|
||||
ClientViewModel? Delete(ClientBindingModel model);
|
||||
}
|
||||
}
|
26
Bank/BankContracts/StoragesContracts/IContributionStorage.cs
Normal file
26
Bank/BankContracts/StoragesContracts/IContributionStorage.cs
Normal file
@ -0,0 +1,26 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.StoragesContracts
|
||||
{
|
||||
public interface IContributionStorage
|
||||
{
|
||||
List<ContributionViewModel> GetFullList();
|
||||
|
||||
List<ContributionViewModel> GetFilteredList(ContributionSearchModel model);
|
||||
|
||||
ContributionViewModel? GetElement(ContributionSearchModel model);
|
||||
|
||||
ContributionViewModel? Insert(ContributionBindingModel model);
|
||||
|
||||
ContributionViewModel? Update(ContributionBindingModel model);
|
||||
|
||||
ContributionViewModel? Delete(ContributionBindingModel model);
|
||||
}
|
||||
}
|
26
Bank/BankContracts/StoragesContracts/ICurrencyStorage.cs
Normal file
26
Bank/BankContracts/StoragesContracts/ICurrencyStorage.cs
Normal file
@ -0,0 +1,26 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.StoragesContracts
|
||||
{
|
||||
public interface ICurrencyStorage
|
||||
{
|
||||
List<CurrencyViewModel> GetFullList();
|
||||
|
||||
List<CurrencyViewModel> GetFilteredList(CurrencySearchModel model);
|
||||
|
||||
CurrencyViewModel? GetElement(CurrencySearchModel model);
|
||||
|
||||
CurrencyViewModel? Insert(CurrencyBindingModel model);
|
||||
|
||||
CurrencyViewModel? Update(CurrencyBindingModel model);
|
||||
|
||||
CurrencyViewModel? Delete(CurrencyBindingModel model);
|
||||
}
|
||||
}
|
26
Bank/BankContracts/StoragesContracts/IDepositsStorage.cs
Normal file
26
Bank/BankContracts/StoragesContracts/IDepositsStorage.cs
Normal file
@ -0,0 +1,26 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.StoragesContracts
|
||||
{
|
||||
public interface IDepositsStorage
|
||||
{
|
||||
List<DepositsViewModel> GetFullList();
|
||||
|
||||
List<DepositsViewModel> GetFilteredList(DepositsSearchModel model);
|
||||
|
||||
DepositsViewModel? GetElement(DepositsSearchModel model);
|
||||
|
||||
DepositsViewModel? Insert(DepositsBindingModel model);
|
||||
|
||||
DepositsViewModel? Update(DepositsBindingModel model);
|
||||
|
||||
DepositsViewModel? Delete(DepositsBindingModel model);
|
||||
}
|
||||
}
|
26
Bank/BankContracts/StoragesContracts/IProgramStorage.cs
Normal file
26
Bank/BankContracts/StoragesContracts/IProgramStorage.cs
Normal file
@ -0,0 +1,26 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.StoragesContracts
|
||||
{
|
||||
public interface IProgramStorage
|
||||
{
|
||||
List<ProgramViewModel> GetFullList();
|
||||
|
||||
List<ProgramViewModel> GetFilteredList(ProgramSearchModel model);
|
||||
|
||||
ProgramViewModel? GetElement(ProgramSearchModel model);
|
||||
|
||||
ProgramViewModel? Insert(ProgramBindingModel model);
|
||||
|
||||
ProgramViewModel? Update(ProgramBindingModel model);
|
||||
|
||||
ProgramViewModel? Delete(ProgramBindingModel model);
|
||||
}
|
||||
}
|
24
Bank/BankContracts/ViewModels/ClerkViewModel.cs
Normal file
24
Bank/BankContracts/ViewModels/ClerkViewModel.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels
|
||||
{
|
||||
public class ClerkViewModel : IClerkModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[DisplayName("Логин клерка")]
|
||||
public string Login { get; set; } = string.Empty;
|
||||
|
||||
[DisplayName("Номер телефона клерка")]
|
||||
public string PhoneNumber { get; set; } = string.Empty;
|
||||
|
||||
[DisplayName("Пароль клерка")]
|
||||
public string Password { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
33
Bank/BankContracts/ViewModels/ClientViewModel.cs
Normal file
33
Bank/BankContracts/ViewModels/ClientViewModel.cs
Normal file
@ -0,0 +1,33 @@
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels
|
||||
{
|
||||
public class ClientViewModel : IClientModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[DisplayName("Фамилия клиента")]
|
||||
public string Surname { get; set; } = string.Empty;
|
||||
|
||||
[DisplayName("Имя клиента")]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
[DisplayName("Отчество клиента")]
|
||||
public string Patronymic { get; set; } = string.Empty;
|
||||
|
||||
[DisplayName("Возраст клиента")]
|
||||
public int Age { get; set; }
|
||||
|
||||
public int ClerkId { get; set; }
|
||||
|
||||
public Dictionary<int, IProgramModel> ClientPrograms { get; set; } = new();
|
||||
|
||||
public Dictionary<int, IContributionModel> ClientContributions { get; set; } = new();
|
||||
}
|
||||
}
|
25
Bank/BankContracts/ViewModels/ContributionViewModel.cs
Normal file
25
Bank/BankContracts/ViewModels/ContributionViewModel.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels
|
||||
{
|
||||
public class ContributionViewModel : IContributionModel
|
||||
{
|
||||
[DisplayName("Номер вклада")]
|
||||
public int Id { get; set; }
|
||||
|
||||
[DisplayName("Дата открытия")]
|
||||
public DateTime IssueDate { get; set; } = DateTime.Now;
|
||||
|
||||
public int DepositsId { get; set; }
|
||||
|
||||
public int ClerkId { get; set; }
|
||||
|
||||
public Dictionary<int, ICurrencyModel> ContributionCurrencies { get; set; } = new();
|
||||
}
|
||||
}
|
18
Bank/BankContracts/ViewModels/CurrencyViewModel.cs
Normal file
18
Bank/BankContracts/ViewModels/CurrencyViewModel.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels
|
||||
{
|
||||
public class CurrencyViewModel : ICurrencyModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[DisplayName("Название валюты")]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
23
Bank/BankContracts/ViewModels/DepositsViewModel.cs
Normal file
23
Bank/BankContracts/ViewModels/DepositsViewModel.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels
|
||||
{
|
||||
public class DepositsViewModel : IDepositsModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[DisplayName("Название пополнения")]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
[DisplayName("Причина пополнения")]
|
||||
public string Reasons { get; set; } = string.Empty;
|
||||
|
||||
public int ClerkId { get; set; }
|
||||
}
|
||||
}
|
20
Bank/BankContracts/ViewModels/ProgramViewModel.cs
Normal file
20
Bank/BankContracts/ViewModels/ProgramViewModel.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels
|
||||
{
|
||||
public class ProgramViewModel : IProgramModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[DisplayName("Название кредитной программы")]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
public Dictionary<int, ICurrencyModel> ProgramCurrencies { get; set; } = new();
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels
|
||||
{
|
||||
public class ReportClientCurrencyViewModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string ClientSurname { get; set; } = string.Empty;
|
||||
|
||||
public string ClientName { get; set; } = string.Empty;
|
||||
|
||||
public string ClientPatronymic { get; set; } = string.Empty;
|
||||
|
||||
public int ContributionId { get; set; }
|
||||
|
||||
public int ClerkId { get; set; }
|
||||
|
||||
public Dictionary<int, string> Currencies { get; set; } = new();
|
||||
|
||||
public string CurrencyName { get; set; }
|
||||
}
|
||||
}
|
29
Bank/BankContracts/ViewModels/ReportClientsViewModel.cs
Normal file
29
Bank/BankContracts/ViewModels/ReportClientsViewModel.cs
Normal file
@ -0,0 +1,29 @@
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankContracts.ViewModels
|
||||
{
|
||||
public class ReportClientsViewModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string ClientSurname { get; set; } = string.Empty;
|
||||
|
||||
public string ClientName { get; set; } = string.Empty;
|
||||
|
||||
public string ClientPatronymic { get; set; } = string.Empty;
|
||||
|
||||
public int ContributionId { get; set; }
|
||||
|
||||
public string CurrencyName { get; set; } = string.Empty;
|
||||
|
||||
public List<int> Contributions { get; set; } = new();
|
||||
|
||||
public Dictionary<int, string> Currencies { get; set; } = new();
|
||||
|
||||
}
|
||||
}
|
9
Bank/BankDataModels/BankDataModels.csproj
Normal file
9
Bank/BankDataModels/BankDataModels.csproj
Normal file
@ -0,0 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
13
Bank/BankDataModels/IId.cs
Normal file
13
Bank/BankDataModels/IId.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDataModels
|
||||
{
|
||||
public interface IId
|
||||
{
|
||||
int Id { get; }
|
||||
}
|
||||
}
|
17
Bank/BankDataModels/Models/IClerkModel.cs
Normal file
17
Bank/BankDataModels/Models/IClerkModel.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.Models
|
||||
{
|
||||
public interface IClerkModel : IId
|
||||
{
|
||||
string Login { get; }
|
||||
|
||||
string PhoneNumber { get; }
|
||||
|
||||
string Password { get; }
|
||||
}
|
||||
}
|
25
Bank/BankDataModels/Models/IClientModel.cs
Normal file
25
Bank/BankDataModels/Models/IClientModel.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDataModels.Models
|
||||
{
|
||||
public interface IClientModel : IId
|
||||
{
|
||||
string Surname { get; }
|
||||
|
||||
string Name { get; }
|
||||
|
||||
string Patronymic { get; }
|
||||
|
||||
int Age { get; }
|
||||
|
||||
int ClerkId { get; }
|
||||
|
||||
Dictionary<int, IProgramModel> ClientPrograms { get; }
|
||||
|
||||
Dictionary<int, IContributionModel> ClientContributions { get; }
|
||||
}
|
||||
}
|
20
Bank/BankDataModels/Models/IContributionModel.cs
Normal file
20
Bank/BankDataModels/Models/IContributionModel.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDataModels.Models
|
||||
{
|
||||
public interface IContributionModel : IId
|
||||
{
|
||||
DateTime IssueDate { get; }
|
||||
|
||||
int DepositsId { get; }
|
||||
|
||||
int ClerkId { get; }
|
||||
|
||||
Dictionary<int, ICurrencyModel> ContributionCurrencies { get; }
|
||||
|
||||
}
|
||||
}
|
13
Bank/BankDataModels/Models/ICurrencyModel.cs
Normal file
13
Bank/BankDataModels/Models/ICurrencyModel.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDataModels.Models
|
||||
{
|
||||
public interface ICurrencyModel : IId
|
||||
{
|
||||
string Name { get; }
|
||||
}
|
||||
}
|
17
Bank/BankDataModels/Models/IDepositsModel.cs
Normal file
17
Bank/BankDataModels/Models/IDepositsModel.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.Models
|
||||
{
|
||||
public interface IDepositsModel : IId
|
||||
{
|
||||
string Name { get; }
|
||||
|
||||
string Reasons { get; }
|
||||
|
||||
int ClerkId { get; }
|
||||
}
|
||||
}
|
15
Bank/BankDataModels/Models/IProgramModel.cs
Normal file
15
Bank/BankDataModels/Models/IProgramModel.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.Models
|
||||
{
|
||||
public interface IProgramModel : IId
|
||||
{
|
||||
string Name { get; }
|
||||
|
||||
Dictionary<int, ICurrencyModel> ProgramCurrencies { get; }
|
||||
}
|
||||
}
|
12
Bank/BankDataModels/Properties/launchSettings.json
Normal file
12
Bank/BankDataModels/Properties/launchSettings.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"profiles": {
|
||||
"BankDataModels": {
|
||||
"commandName": "Project",
|
||||
"launchBrowser": true,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
},
|
||||
"applicationUrl": "https://localhost:65343;http://localhost:65344"
|
||||
}
|
||||
}
|
||||
}
|
43
Bank/BankDatabaseImplement/BankDatabase.cs
Normal file
43
Bank/BankDatabaseImplement/BankDatabase.cs
Normal file
@ -0,0 +1,43 @@
|
||||
using BankDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement
|
||||
{
|
||||
public class BankDatabase : DbContext
|
||||
{
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||
{
|
||||
if (optionsBuilder.IsConfigured == false)
|
||||
{
|
||||
optionsBuilder.UseSqlServer(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=BankDatabaseFull1;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True");
|
||||
|
||||
}
|
||||
base.OnConfiguring(optionsBuilder);
|
||||
}
|
||||
public virtual DbSet<Clerk> Clerks { set; get; }
|
||||
|
||||
public virtual DbSet<Client> Clients { set; get; }
|
||||
|
||||
public virtual DbSet<Contribution> Contributions { set; get; }
|
||||
|
||||
public virtual DbSet<Deposits> Deposits { set; get; }
|
||||
|
||||
public virtual DbSet<Currency> Currencies { set; get; }
|
||||
|
||||
public virtual DbSet<Program> Programs { set; get; }
|
||||
|
||||
public virtual DbSet<ClientContribution> ClientContributions { set; get; }
|
||||
|
||||
public virtual DbSet<ClientProgram> ClientPrograms { set; get; }
|
||||
|
||||
public virtual DbSet<ContributionCurrency> ContributionCurrencies { set; get; }
|
||||
|
||||
public virtual DbSet<ProgramCurrency> ProgramCurrencies { set; get; }
|
||||
}
|
||||
}
|
23
Bank/BankDatabaseImplement/BankDatabaseImplement.csproj
Normal file
23
Bank/BankDatabaseImplement/BankDatabaseImplement.csproj
Normal file
@ -0,0 +1,23 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.4" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.4" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.4">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\BankContracts\BankContracts.csproj" />
|
||||
<ProjectReference Include="..\BankDataModels\BankDataModels.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
114
Bank/BankDatabaseImplement/Implements/ClientStorage.cs
Normal file
114
Bank/BankDatabaseImplement/Implements/ClientStorage.cs
Normal file
@ -0,0 +1,114 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement.Implements
|
||||
{
|
||||
public class ClerkStorage : IClerkStorage
|
||||
{
|
||||
public ClerkViewModel? GetElement(ClerkSearchModel model)
|
||||
{
|
||||
if (!model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new BankDatabase();
|
||||
return context.Clerks
|
||||
.Include(x => x.Contributions)
|
||||
.Include(x => x.Deposits)
|
||||
.Include(x => x.Clients)
|
||||
.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id)
|
||||
?.GetViewModel;
|
||||
}
|
||||
|
||||
public List<ClerkViewModel> GetFilteredList(ClerkSearchModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
if (!string.IsNullOrEmpty(model.Login))
|
||||
{
|
||||
return context.Clerks
|
||||
.Include(x => x.Contributions)
|
||||
.Include(x => x.Deposits)
|
||||
.Include(x => x.Clients)
|
||||
.Where(x => x.Login.Contains(model.Login))
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
return new();
|
||||
}
|
||||
|
||||
public List<ClerkViewModel> GetFullList()
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
return context.Clerks
|
||||
.Include(x => x.Contributions)
|
||||
.Include(x => x.Deposits)
|
||||
.Include(x => x.Clients)
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public ClerkViewModel? Insert(ClerkBindingModel model)
|
||||
{
|
||||
var newClerk = Clerk.Create(model);
|
||||
if (newClerk == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new BankDatabase();
|
||||
context.Clerks.Add(newClerk);
|
||||
context.SaveChanges();
|
||||
return context.Clerks
|
||||
.Include(x => x.Contributions)
|
||||
.Include(x => x.Deposits)
|
||||
.Include(x => x.Clients)
|
||||
.FirstOrDefault(x => x.Id == newClerk.Id)
|
||||
?.GetViewModel;
|
||||
}
|
||||
|
||||
public ClerkViewModel? Update(ClerkBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var clerk = context.Clerks.FirstOrDefault(x => x.Id == model.Id);
|
||||
if (clerk == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
clerk.Update(model);
|
||||
context.SaveChanges();
|
||||
return context.Clerks
|
||||
.Include(x => x.Contributions)
|
||||
.Include(x => x.Deposits)
|
||||
.Include(x => x.Clients)
|
||||
.FirstOrDefault(x => x.Id == model.Id)
|
||||
?.GetViewModel;
|
||||
}
|
||||
|
||||
public ClerkViewModel? Delete(ClerkBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var element = context.Clerks.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
var deletedElement = context.Clerks
|
||||
.Include(x => x.Contributions)
|
||||
.Include(x => x.Deposits)
|
||||
.Include(x => x.Clients)
|
||||
.FirstOrDefault(x => x.Id == model.Id)
|
||||
?.GetViewModel;
|
||||
context.Clerks.Remove(element);
|
||||
context.SaveChanges();
|
||||
return deletedElement;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
124
Bank/BankDatabaseImplement/Implements/ClientsStorage.cs
Normal file
124
Bank/BankDatabaseImplement/Implements/ClientsStorage.cs
Normal file
@ -0,0 +1,124 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement.Implements
|
||||
{
|
||||
public class clientStorage : IClientStorage
|
||||
{
|
||||
public ClientViewModel? GetElement(ClientSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Surname) && string.IsNullOrEmpty(model.Name) && string.IsNullOrEmpty(model.Patronymic) && !model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new BankDatabase();
|
||||
return context.Clients
|
||||
.Include(x => x.Clerk)
|
||||
.Include(x => x.Contributions)
|
||||
.ThenInclude(x => x.Contribution)
|
||||
.FirstOrDefault(x => ((!string.IsNullOrEmpty(model.Surname) && x.Surname == model.Surname) &&
|
||||
(!string.IsNullOrEmpty(model.Name) && x.Name == model.Name) &&
|
||||
(!string.IsNullOrEmpty(model.Patronymic) && x.Patronymic == model.Patronymic)) || (model.Id.HasValue && x.Id == model.Id))
|
||||
?.GetViewModel;
|
||||
}
|
||||
|
||||
public List<ClientViewModel> GetFilteredList(ClientSearchModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
if (!string.IsNullOrEmpty(model.Surname) && !string.IsNullOrEmpty(model.Name) && !string.IsNullOrEmpty(model.Patronymic))
|
||||
{
|
||||
return context.Clients
|
||||
.Include(x => x.Clerk)
|
||||
.Include(x => x.Contributions)
|
||||
.ThenInclude(x => x.Contribution)
|
||||
.Where(x => (x.Id == model.Id)).ToList()
|
||||
.Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
else if (model.ClerkId.HasValue)
|
||||
{
|
||||
return context.Clients
|
||||
.Include(x => x.Clerk)
|
||||
.Include(x => x.Contributions)
|
||||
.ThenInclude(x => x.Contribution)
|
||||
.Where(x => x.ClerkId == model.ClerkId)
|
||||
.Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
return new();
|
||||
}
|
||||
}
|
||||
|
||||
public List<ClientViewModel> GetFullList()
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
return context.Clients
|
||||
.Include(x => x.Clerk)
|
||||
.Include(x => x.Contributions)
|
||||
.ThenInclude(x => x.Contribution).ToList()
|
||||
.Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
|
||||
public ClientViewModel? Insert(ClientBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var newClient = Client.Create(context, model);
|
||||
if (newClient == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
context.Clients.Add(newClient);
|
||||
context.SaveChanges();
|
||||
return newClient.GetViewModel;
|
||||
}
|
||||
|
||||
public ClientViewModel? Update(ClientBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
var Client = context.Clients.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (Client == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
Client.Update(model);
|
||||
context.SaveChanges();
|
||||
Client.UpdateContributions(context, model);
|
||||
transaction.Commit();
|
||||
return Client.GetViewModel;
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public ClientViewModel? Delete(ClientBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var element = context.Clients
|
||||
.Include(x => x.Clerk)
|
||||
.Include(x => x.Contributions)
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Clients.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
123
Bank/BankDatabaseImplement/Implements/ContributionStorage.cs
Normal file
123
Bank/BankDatabaseImplement/Implements/ContributionStorage.cs
Normal file
@ -0,0 +1,123 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement.Implements
|
||||
{
|
||||
public class contributionStorage : IContributionStorage
|
||||
{
|
||||
public List<ContributionViewModel> GetFullList()
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
return context.Contributions
|
||||
.Include(x => x.Clerk)
|
||||
.Include(x => x.DepositsId)
|
||||
.Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
|
||||
public List<ContributionViewModel> GetFilteredList(ContributionSearchModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
if (!model.Id.HasValue)
|
||||
{
|
||||
return context.Contributions
|
||||
.Include(x => x.Clerk)
|
||||
.Include(x => x.Currencies)
|
||||
.ThenInclude(x => x.Currency)
|
||||
.Where(x => x.Id == model.Id).ToList()
|
||||
.Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
else if (model.ClerkId.HasValue)
|
||||
{
|
||||
return context.Contributions
|
||||
.Include(x => x.Clerk)
|
||||
.Include(x => x.Currencies)
|
||||
.ThenInclude(x => x.Currency)
|
||||
.Where(x => x.ClerkId == model.ClerkId)
|
||||
.Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
return new();
|
||||
}
|
||||
}
|
||||
|
||||
public ContributionViewModel? GetElement(ContributionSearchModel model)
|
||||
{
|
||||
if (!model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new BankDatabase();
|
||||
return context.Contributions
|
||||
.Include(x => x.Clerk)
|
||||
.Include(x => x.Currencies)
|
||||
.ThenInclude(x => x.Currency)
|
||||
.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id)
|
||||
?.GetViewModel;
|
||||
}
|
||||
|
||||
|
||||
public ContributionViewModel? Insert(ContributionBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var newContribution = Contribution.Create(context, model);
|
||||
if (newContribution == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
context.Contributions.Add(newContribution);
|
||||
context.SaveChanges();
|
||||
return newContribution.GetViewModel;
|
||||
}
|
||||
|
||||
public ContributionViewModel? Update(ContributionBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
var Contribution = context.Contributions
|
||||
.Include(x => x.Clerk)
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (Contribution == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
Contribution.Update(model);
|
||||
context.SaveChanges();
|
||||
Contribution.UpdateCurrency(context, model);
|
||||
transaction.Commit();
|
||||
return Contribution.GetViewModel;
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
public ContributionViewModel? Delete(ContributionBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var element = context.Contributions
|
||||
.Include(x => x.Clerk)
|
||||
.Include(x => x.Currencies)
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Contributions.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
101
Bank/BankDatabaseImplement/Implements/CurrencyStorage.cs
Normal file
101
Bank/BankDatabaseImplement/Implements/CurrencyStorage.cs
Normal file
@ -0,0 +1,101 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement.Implements
|
||||
{
|
||||
public class currencyStorage : ICurrencyStorage
|
||||
{
|
||||
public List<CurrencyViewModel> GetFullList()
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
return context.Currencies
|
||||
.Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
|
||||
public List<CurrencyViewModel> GetFilteredList(CurrencySearchModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
|
||||
{
|
||||
return context.Currencies
|
||||
.Where(x => x.Name.Contains(model.Name)).ToList()
|
||||
.Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
return new();
|
||||
}
|
||||
}
|
||||
|
||||
public CurrencyViewModel? GetElement(CurrencySearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new BankDatabase();
|
||||
return context.Currencies
|
||||
.FirstOrDefault(x => (!string.IsNullOrEmpty(model.Name) && x.Name == model.Name) || (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
|
||||
}
|
||||
|
||||
public CurrencyViewModel? Insert(CurrencyBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var newCurrency = Currency.Create(model);
|
||||
if (newCurrency == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
context.Currencies.Add(newCurrency);
|
||||
context.SaveChanges();
|
||||
return newCurrency.GetViewModel;
|
||||
}
|
||||
|
||||
public CurrencyViewModel? Update(CurrencyBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
var Currency = context.Currencies
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (Currency == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
Currency.Update(model);
|
||||
context.SaveChanges();
|
||||
transaction.Commit();
|
||||
return Currency.GetViewModel;
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public CurrencyViewModel? Delete(CurrencyBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var element = context.Currencies
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Currencies.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
120
Bank/BankDatabaseImplement/Implements/DepositsStorage.cs
Normal file
120
Bank/BankDatabaseImplement/Implements/DepositsStorage.cs
Normal file
@ -0,0 +1,120 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement.Implements
|
||||
{
|
||||
public class DepositsStorage : IDepositsStorage
|
||||
{
|
||||
public DepositsViewModel? GetElement(DepositsSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new BankDatabase();
|
||||
return context.Deposits
|
||||
.Include(x => x.Contributions)
|
||||
.Include(x => x.Clerk)
|
||||
.FirstOrDefault(x => (!string.IsNullOrEmpty(model.Name) && x.Name == model.Name) || (model.Id.HasValue && x.Id == model.Id))
|
||||
?.GetViewModel;
|
||||
}
|
||||
|
||||
public List<DepositsViewModel> GetFilteredList(DepositsSearchModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
|
||||
{
|
||||
return context.Deposits
|
||||
.Include(x => x.Contributions)
|
||||
.Include(x => x.Clerk)
|
||||
.Where(x => x.Id == model.Id)
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
else if (model.ClerkId.HasValue)
|
||||
{
|
||||
return context.Deposits
|
||||
.Include(x => x.Contributions)
|
||||
.Include(x => x.Clerk)
|
||||
.Where(x => x.ClerkId == model.ClerkId)
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
return new();
|
||||
}
|
||||
}
|
||||
|
||||
public List<DepositsViewModel> GetFullList()
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
return context.Deposits
|
||||
.Include(x => x.Contributions)
|
||||
.Include(x => x.Clerk)
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public DepositsViewModel? Insert(DepositsBindingModel model)
|
||||
{
|
||||
var newDeposits = Deposits.Create(model);
|
||||
if (newDeposits == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new BankDatabase();
|
||||
context.Deposits.Add(newDeposits);
|
||||
context.SaveChanges();
|
||||
return context.Deposits
|
||||
.Include(x => x.Contributions)
|
||||
.Include(x => x.Clerk)
|
||||
.FirstOrDefault(x => x.Id == newDeposits.Id)
|
||||
?.GetViewModel;
|
||||
}
|
||||
|
||||
public DepositsViewModel? Update(DepositsBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var Deposits = context.Deposits.FirstOrDefault(x => x.Id == model.Id);
|
||||
if (Deposits == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
Deposits.Update(model);
|
||||
context.SaveChanges();
|
||||
return context.Deposits
|
||||
.Include(x => x.Contributions)
|
||||
.Include(x => x.Clerk)
|
||||
.FirstOrDefault(x => x.Id == model.Id)
|
||||
?.GetViewModel;
|
||||
}
|
||||
|
||||
public DepositsViewModel? Delete(DepositsBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var element = context.Deposits.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
var deletedElement = context.Deposits
|
||||
.Include(x => x.Contributions)
|
||||
.Include(x => x.Clerk)
|
||||
.FirstOrDefault(x => x.Id == model.Id)
|
||||
?.GetViewModel;
|
||||
context.Deposits.Remove(element);
|
||||
context.SaveChanges();
|
||||
return deletedElement;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
108
Bank/BankDatabaseImplement/Implements/ProgrammStorage.cs
Normal file
108
Bank/BankDatabaseImplement/Implements/ProgrammStorage.cs
Normal file
@ -0,0 +1,108 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.SearchModels;
|
||||
using BankContracts.StoragesContracts;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement.Implements
|
||||
{
|
||||
public class ProgramStorage : IProgramStorage
|
||||
{
|
||||
public List<ProgramViewModel> GetFullList()
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
return context.Programs
|
||||
.Include(x => x.Currencies)
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<ProgramViewModel> GetFilteredList(ProgramSearchModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
|
||||
{
|
||||
return context.Programs
|
||||
.Include(x => x.Currencies)
|
||||
.Where(x => x.Name.Contains(model.Name))
|
||||
.Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
return new();
|
||||
}
|
||||
}
|
||||
|
||||
public ProgramViewModel? GetElement(ProgramSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new BankDatabase();
|
||||
return context.Programs
|
||||
.Include(x => x.Currencies)
|
||||
.FirstOrDefault(x => (!string.IsNullOrEmpty(model.Name) && x.Name == model.Name) || (model.Id.HasValue && x.Id == model.Id))
|
||||
?.GetViewModel;
|
||||
}
|
||||
|
||||
public ProgramViewModel? Insert(ProgramBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var newProgram = Program.Create(context, model);
|
||||
if (newProgram == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
context.Programs.Add(newProgram);
|
||||
context.SaveChanges();
|
||||
return newProgram.GetViewModel;
|
||||
}
|
||||
|
||||
public ProgramViewModel? Update(ProgramBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
var program = context.Programs
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (program == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
program.Update(model);
|
||||
context.SaveChanges();
|
||||
program.UpdateCurrency(context, model);
|
||||
transaction.Commit();
|
||||
return program.GetViewModel;
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public ProgramViewModel? Delete(ProgramBindingModel model)
|
||||
{
|
||||
using var context = new BankDatabase();
|
||||
var element = context.Programs
|
||||
.Include(x => x.Currencies)
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Programs.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
83
Bank/BankDatabaseImplement/Models/Clerk.cs
Normal file
83
Bank/BankDatabaseImplement/Models/Clerk.cs
Normal file
@ -0,0 +1,83 @@
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.ViewModels;
|
||||
|
||||
namespace BankDatabaseImplement.Models
|
||||
{
|
||||
public class Clerk : IClerkModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
[MaxLength(25)]
|
||||
public string Login { get; set; } = string.Empty;
|
||||
|
||||
[Required]
|
||||
[MaxLength(11)]
|
||||
public string PhoneNumber { get; set; } = string.Empty;
|
||||
|
||||
[Required]
|
||||
[MaxLength(30)]
|
||||
public string Password { get; set; } = string.Empty;
|
||||
|
||||
[ForeignKey("ClerkId")]
|
||||
public virtual List<Client> Clients { get; set; } = new();
|
||||
|
||||
[ForeignKey("ClerkId")]
|
||||
public virtual List<Contribution> Contributions { get; set; } = new();
|
||||
|
||||
[ForeignKey("ClerkId")]
|
||||
public virtual List<Deposits> Deposits { get; set; } = new();
|
||||
|
||||
public static Clerk? Create(ClerkBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new Clerk()
|
||||
{
|
||||
Id = model.Id,
|
||||
Login = model.Login,
|
||||
PhoneNumber = model.PhoneNumber,
|
||||
Password = model.Password
|
||||
};
|
||||
}
|
||||
public static Clerk Create(ClerkViewModel model)
|
||||
{
|
||||
return new Clerk
|
||||
{
|
||||
Id = model.Id,
|
||||
Login = model.Login,
|
||||
PhoneNumber = model.PhoneNumber,
|
||||
Password = model.Password
|
||||
};
|
||||
}
|
||||
public void Update(ClerkBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Login = model.Login;
|
||||
PhoneNumber = model.PhoneNumber;
|
||||
Password = model.Password;
|
||||
}
|
||||
public ClerkViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
Login = Login,
|
||||
PhoneNumber = PhoneNumber,
|
||||
Password = Password
|
||||
};
|
||||
}
|
||||
}
|
||||
|
136
Bank/BankDatabaseImplement/Models/Client.cs
Normal file
136
Bank/BankDatabaseImplement/Models/Client.cs
Normal file
@ -0,0 +1,136 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace BankDatabaseImplement.Models
|
||||
{
|
||||
public class Client : IClientModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public int ClerkId { get; private set; }
|
||||
|
||||
public virtual Clerk Clerk { get; set; }
|
||||
|
||||
[Required]
|
||||
[MaxLength(50)]
|
||||
public string Surname { get; set; } = string.Empty;
|
||||
|
||||
[Required]
|
||||
[MaxLength(50)]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
[Required]
|
||||
[MaxLength(50)]
|
||||
public string Patronymic { get; set; } = string.Empty;
|
||||
|
||||
[Required]
|
||||
public int Age { get; set; }
|
||||
|
||||
private Dictionary<int, IContributionModel>? _clientContributions = null;
|
||||
|
||||
[NotMapped]
|
||||
public Dictionary<int, IContributionModel> ClientContributions
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_clientContributions == null)
|
||||
{
|
||||
_clientContributions = Contributions.ToDictionary(recPR => recPR.ContributionId, recPR => (recPR.Contribution as IContributionModel));
|
||||
}
|
||||
return _clientContributions;
|
||||
}
|
||||
}
|
||||
|
||||
[ForeignKey("ClientId")]
|
||||
public virtual List<ClientContribution> Contributions { get; set; } = new();
|
||||
|
||||
private Dictionary<int, IProgramModel>? _clientPrograms = null;
|
||||
|
||||
[NotMapped]
|
||||
public Dictionary<int, IProgramModel> ClientPrograms
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_clientPrograms == null)
|
||||
{
|
||||
_clientPrograms = Programs.ToDictionary(recPP => recPP.ProgramId, recPP => (recPP.Program as IProgramModel));
|
||||
}
|
||||
return _clientPrograms;
|
||||
}
|
||||
}
|
||||
|
||||
[ForeignKey("ClientId")]
|
||||
public virtual List<ClientProgram> Programs { get; set; } = new();
|
||||
|
||||
public static Client Create(BankDatabase context, ClientBindingModel model)
|
||||
{
|
||||
return new Client()
|
||||
{
|
||||
Id = model.Id,
|
||||
Surname = model.Surname,
|
||||
Name = model.Name,
|
||||
Patronymic = model.Patronymic,
|
||||
Age = model.Age,
|
||||
ClerkId = model.ClerkId,
|
||||
Clerk = context.Clerks.First(x => x.Id == model.ClerkId),
|
||||
Contributions = model.ClientContributions.Select(x => new ClientContribution
|
||||
{
|
||||
Contribution = context.Contributions.First(y => y.Id == x.Key),
|
||||
}).ToList(),
|
||||
Programs = model.ClientPrograms.Select(x => new ClientProgram
|
||||
{
|
||||
Program = context.Programs.First(y => y.Id == x.Key),
|
||||
}).ToList()
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(ClientBindingModel model)
|
||||
{
|
||||
Surname = model.Surname;
|
||||
Name = model.Name;
|
||||
Patronymic = model.Patronymic;
|
||||
Age = model.Age;
|
||||
}
|
||||
|
||||
public ClientViewModel GetViewModel => new()
|
||||
{
|
||||
Surname = Surname,
|
||||
Name = Name,
|
||||
Patronymic = Patronymic,
|
||||
Age = Age,
|
||||
ClientContributions = ClientContributions,
|
||||
ClientPrograms = ClientPrograms
|
||||
};
|
||||
|
||||
public void UpdateContributions(BankDatabase context, ClientBindingModel model)
|
||||
{
|
||||
var ClientContributions = context.ClientContributions.Where(rec => rec.ClientId == model.Id).ToList();
|
||||
if (ClientContributions != null)
|
||||
{
|
||||
context.ClientContributions.RemoveRange(ClientContributions.Where(rec => !model.ClientContributions.ContainsKey(rec.ContributionId)));
|
||||
context.SaveChanges();
|
||||
}
|
||||
var Client = context.Clients.First(x => x.Id == Id);
|
||||
foreach (var pr in model.ClientContributions)
|
||||
{
|
||||
context.ClientContributions.Add(new ClientContribution
|
||||
{
|
||||
Client = Client,
|
||||
Contribution = context.Contributions.First(x => x.Id == pr.Key),
|
||||
});
|
||||
context.SaveChanges();
|
||||
}
|
||||
_clientContributions = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
26
Bank/BankDatabaseImplement/Models/ClientContribution.cs
Normal file
26
Bank/BankDatabaseImplement/Models/ClientContribution.cs
Normal file
@ -0,0 +1,26 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement.Models
|
||||
{
|
||||
public class ClientContribution
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public int ClientId { get; set; }
|
||||
|
||||
[Required]
|
||||
public int ContributionId { get; set; }
|
||||
|
||||
public virtual Client Client { get; set; } = new();
|
||||
|
||||
public virtual Contribution Contribution { get; set; } = new();
|
||||
|
||||
}
|
||||
}
|
24
Bank/BankDatabaseImplement/Models/ClientProgram.cs
Normal file
24
Bank/BankDatabaseImplement/Models/ClientProgram.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement.Models
|
||||
{
|
||||
public class ClientProgram
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public int ClientId { get; set; }
|
||||
|
||||
[Required]
|
||||
public int ProgramId { get; set; }
|
||||
|
||||
public virtual Client Client { get; set; } = new();
|
||||
|
||||
public virtual Program Program { get; set; } = new();
|
||||
}
|
||||
}
|
97
Bank/BankDatabaseImplement/Models/Contribution.cs
Normal file
97
Bank/BankDatabaseImplement/Models/Contribution.cs
Normal file
@ -0,0 +1,97 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace BankDatabaseImplement.Models
|
||||
{
|
||||
public class Contribution : IContributionModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public int ClerkId { get; private set; }
|
||||
|
||||
public virtual Clerk Clerk { get; set; }
|
||||
|
||||
public int DepositsId { get; private set; }
|
||||
|
||||
public virtual Deposits Deposits { get; set; }
|
||||
|
||||
[Required]
|
||||
public DateTime IssueDate { get; private set; } = DateTime.Now;
|
||||
|
||||
private Dictionary<int, ICurrencyModel>? _contributionCurrency = null;
|
||||
|
||||
[NotMapped]
|
||||
public Dictionary<int, ICurrencyModel> ContributionCurrencies
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_contributionCurrency == null)
|
||||
{
|
||||
_contributionCurrency = Currencies.ToDictionary(recRM => recRM.CurrencyId, recRM => (recRM.Currency as ICurrencyModel));
|
||||
}
|
||||
return _contributionCurrency;
|
||||
}
|
||||
}
|
||||
|
||||
[ForeignKey("ContributionId")]
|
||||
public virtual List<ContributionCurrency> Currencies { get; set; } = new();
|
||||
|
||||
public static Contribution Create(BankDatabase context, ContributionBindingModel model)
|
||||
{
|
||||
return new Contribution()
|
||||
{
|
||||
Id = model.Id,
|
||||
IssueDate = model.IssueDate,
|
||||
DepositsId = model.DepositsId,
|
||||
ClerkId = model.ClerkId,
|
||||
Clerk = context.Clerks.First(x => x.Id == model.ClerkId),
|
||||
Currencies = model.ContributionCurrencies.Select(x => new ContributionCurrency
|
||||
{
|
||||
Currency = context.Currencies.First(y => y.Id == x.Key),
|
||||
}).ToList()
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(ContributionBindingModel model)
|
||||
{
|
||||
IssueDate = model.IssueDate;
|
||||
}
|
||||
|
||||
public ContributionViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
IssueDate = IssueDate,
|
||||
ContributionCurrencies = ContributionCurrencies
|
||||
};
|
||||
|
||||
public void UpdateCurrency(BankDatabase context, ContributionBindingModel model)
|
||||
{
|
||||
var ContributionCurrencies = context.ContributionCurrencies.Where(rec => rec.ContributionId == model.Id).ToList();
|
||||
if (ContributionCurrencies != null)
|
||||
{
|
||||
context.ContributionCurrencies.RemoveRange(ContributionCurrencies.Where(rec => !model.ContributionCurrencies.ContainsKey(rec.CurrencyId)));
|
||||
context.SaveChanges();
|
||||
}
|
||||
var Contribution = context.Contributions.First(x => x.Id == Id);
|
||||
foreach (var pr in model.ContributionCurrencies)
|
||||
{
|
||||
context.ContributionCurrencies.Add(new ContributionCurrency
|
||||
{
|
||||
Contribution = Contribution,
|
||||
Currency = context.Currencies.First(x => x.Id == pr.Key),
|
||||
});
|
||||
context.SaveChanges();
|
||||
}
|
||||
_contributionCurrency = null;
|
||||
}
|
||||
}
|
||||
}
|
24
Bank/BankDatabaseImplement/Models/ContributionCurrency.cs
Normal file
24
Bank/BankDatabaseImplement/Models/ContributionCurrency.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement.Models
|
||||
{
|
||||
public class ContributionCurrency
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public int ContributionId { get; set; }
|
||||
|
||||
[Required]
|
||||
public int CurrencyId { get; set; }
|
||||
|
||||
public virtual Contribution Contribution { get; set; } = new();
|
||||
|
||||
public virtual Currency Currency { get; set; } = new();
|
||||
}
|
||||
}
|
60
Bank/BankDatabaseImplement/Models/Currency.cs
Normal file
60
Bank/BankDatabaseImplement/Models/Currency.cs
Normal file
@ -0,0 +1,60 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace BankDatabaseImplement.Models
|
||||
{
|
||||
public class Currency : ICurrencyModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
[MaxLength(50)]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
[ForeignKey("CurrencyId")]
|
||||
public virtual List<ContributionCurrency> ContributionCurrencies { get; set; } = new();
|
||||
|
||||
public static Currency? Create(CurrencyBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new Currency()
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name
|
||||
};
|
||||
}
|
||||
public static Currency Create(CurrencyViewModel model)
|
||||
{
|
||||
return new Currency
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name
|
||||
};
|
||||
}
|
||||
public void Update(CurrencyBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Name = model.Name;
|
||||
}
|
||||
public CurrencyViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name
|
||||
};
|
||||
}
|
||||
}
|
75
Bank/BankDatabaseImplement/Models/Deposits.cs
Normal file
75
Bank/BankDatabaseImplement/Models/Deposits.cs
Normal file
@ -0,0 +1,75 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement.Models
|
||||
{
|
||||
public class Deposits : IDepositsModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public int ClerkId { get; private set; }
|
||||
|
||||
public virtual Clerk Clerk { get; set; }
|
||||
|
||||
[Required]
|
||||
[MaxLength(50)]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
[Required]
|
||||
[MaxLength(150)]
|
||||
public string Reasons { get; set; } = string.Empty;
|
||||
|
||||
[ForeignKey("DepositsId")]
|
||||
public virtual List<Contribution> Contributions { get; set; } = new();
|
||||
|
||||
public static Deposits? Create(DepositsBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new Deposits()
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
Reasons = model.Reasons,
|
||||
ClerkId = model.ClerkId
|
||||
};
|
||||
}
|
||||
|
||||
public static Deposits Create(DepositsViewModel model)
|
||||
{
|
||||
return new Deposits
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
Reasons = model.Reasons
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(DepositsBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Name = model.Name;
|
||||
Reasons = model.Reasons;
|
||||
}
|
||||
|
||||
public DepositsViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name,
|
||||
Reasons = Reasons
|
||||
};
|
||||
}
|
||||
}
|
91
Bank/BankDatabaseImplement/Models/Program.cs
Normal file
91
Bank/BankDatabaseImplement/Models/Program.cs
Normal file
@ -0,0 +1,91 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.ViewModels;
|
||||
using BankDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace BankDatabaseImplement.Models
|
||||
{
|
||||
public class Program : IProgramModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
[MaxLength(50)]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
[ForeignKey("ProgramId")]
|
||||
public virtual List<ClientProgram> ClientPrograms { get; set; } = new();
|
||||
|
||||
private Dictionary<int, ICurrencyModel>? _programCurrencies = null;
|
||||
|
||||
[NotMapped]
|
||||
public Dictionary<int, ICurrencyModel> ProgramCurrencies
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_programCurrencies == null)
|
||||
{
|
||||
_programCurrencies = Currencies.ToDictionary(recPM => recPM.CurrencyId, recPM =>(recPM.Currency as ICurrencyModel));
|
||||
}
|
||||
return _programCurrencies;
|
||||
}
|
||||
}
|
||||
|
||||
[ForeignKey("ProgramId")]
|
||||
public virtual List<ProgramCurrency> Currencies { get; set; } = new();
|
||||
|
||||
public static Program Create(BankDatabase context, ProgramBindingModel model)
|
||||
{
|
||||
return new Program()
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
Currencies = model.ProgramCurrencies.Select(x => new ProgramCurrency
|
||||
{
|
||||
Currency = context.Currencies.First(y => y.Id == x.Key)
|
||||
}).ToList()
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(ProgramBindingModel model)
|
||||
{
|
||||
Name = model.Name;
|
||||
}
|
||||
|
||||
public ProgramViewModel GetViewModel => new()
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name,
|
||||
ProgramCurrencies = ProgramCurrencies
|
||||
};
|
||||
|
||||
public void UpdateCurrency(BankDatabase context, ProgramBindingModel model)
|
||||
{
|
||||
var ProgramCurrencies = context.ProgramCurrencies.Where(rec => rec.ProgramId == model.Id).ToList();
|
||||
if (ProgramCurrencies != null)
|
||||
{
|
||||
context.ProgramCurrencies.RemoveRange(ProgramCurrencies.Where(rec => !model.ProgramCurrencies.ContainsKey(rec.CurrencyId)));
|
||||
context.SaveChanges();
|
||||
}
|
||||
var Program = context.Programs.First(x => x.Id == Id);
|
||||
foreach (var pm in model.ProgramCurrencies)
|
||||
{
|
||||
context.ProgramCurrencies.Add(new ProgramCurrency
|
||||
{
|
||||
Program = Program,
|
||||
Currency = context.Currencies.First(x => x.Id == pm.Key)
|
||||
});
|
||||
context.SaveChanges();
|
||||
}
|
||||
_programCurrencies = null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
24
Bank/BankDatabaseImplement/Models/ProgramCurrency.cs
Normal file
24
Bank/BankDatabaseImplement/Models/ProgramCurrency.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BankDatabaseImplement.Models
|
||||
{
|
||||
public class ProgramCurrency
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public int ProgramId { get; set; }
|
||||
|
||||
[Required]
|
||||
public int CurrencyId { get; set; }
|
||||
|
||||
public virtual Program Program { get; set; } = new();
|
||||
|
||||
public virtual Currency Currency { get; set; } = new();
|
||||
}
|
||||
}
|
21
Bank/BankWorkerApp/BankWorkerApp.csproj
Normal file
21
Bank/BankWorkerApp/BankWorkerApp.csproj
Normal file
@ -0,0 +1,21 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.29">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\BankDatabaseImplement\BankDatabaseImplement.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
191
Bank/BankWorkerApp/Controllers/HomeController.cs
Normal file
191
Bank/BankWorkerApp/Controllers/HomeController.cs
Normal file
@ -0,0 +1,191 @@
|
||||
using BankContracts.BindingModels;
|
||||
using BankContracts.ViewModels;
|
||||
using BankWorkerApp.Models;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace BankWorkerApp.Controllers
|
||||
{
|
||||
public class HomeController : Controller
|
||||
{
|
||||
private readonly ILogger<HomeController> _logger;
|
||||
|
||||
public HomeController(ILogger<HomeController> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public IActionResult Index()
|
||||
{
|
||||
|
||||
return View();
|
||||
}
|
||||
|
||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
||||
public IActionResult Error()
|
||||
{
|
||||
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public IActionResult Enter()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public IActionResult Register()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public IActionResult Clients()
|
||||
{
|
||||
List<ClientViewModel> clients = new List<ClientViewModel>
|
||||
{
|
||||
new ClientViewModel
|
||||
{
|
||||
Id = 1,
|
||||
|
||||
},
|
||||
new ClientViewModel
|
||||
{
|
||||
Id = 2,
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
return View(clients);
|
||||
}
|
||||
[HttpGet]
|
||||
public IActionResult Client()
|
||||
{
|
||||
var programs = new List<ProgramViewModel>();
|
||||
programs.Add(new ProgramViewModel
|
||||
{
|
||||
Id = 1,
|
||||
|
||||
}) ;
|
||||
programs.Add(new ProgramViewModel
|
||||
{
|
||||
Id = 1,
|
||||
|
||||
});
|
||||
return View(programs);
|
||||
|
||||
}
|
||||
[HttpGet]
|
||||
public IActionResult Contributions()
|
||||
{
|
||||
List<ContributionViewModel> contributions = new List<ContributionViewModel>
|
||||
{
|
||||
new ContributionViewModel
|
||||
{
|
||||
Id = 1,
|
||||
|
||||
},
|
||||
new ContributionViewModel
|
||||
{
|
||||
Id = 2,
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
return View(contributions);
|
||||
}
|
||||
[HttpGet]
|
||||
public IActionResult Contribution()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
[HttpGet]
|
||||
public IActionResult ConnectionContributionClient()
|
||||
{
|
||||
List<ClientViewModel> clients = new List<ClientViewModel>
|
||||
{
|
||||
new ClientViewModel
|
||||
{
|
||||
Id = 1,
|
||||
ClientPrograms= new()
|
||||
},
|
||||
new ClientViewModel
|
||||
{
|
||||
Id = 2,
|
||||
ClientPrograms= new()
|
||||
}
|
||||
};
|
||||
return View(clients);
|
||||
|
||||
}
|
||||
[HttpGet]
|
||||
public IActionResult Reports()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
[HttpGet]
|
||||
public IActionResult ProgramProgramReport()
|
||||
{
|
||||
List<ReportClientCurrencyViewModel> programContributions = new List<ReportClientCurrencyViewModel>
|
||||
{
|
||||
new ReportClientCurrencyViewModel
|
||||
{
|
||||
},
|
||||
new ReportClientCurrencyViewModel
|
||||
{
|
||||
}
|
||||
};
|
||||
return View(programContributions);
|
||||
|
||||
}
|
||||
[HttpGet]
|
||||
public IActionResult ClientDateReport()
|
||||
{
|
||||
List<ReportClientsViewModel> clientTimeReports = new List<ReportClientsViewModel>
|
||||
{
|
||||
new ReportClientsViewModel
|
||||
{
|
||||
},
|
||||
new ReportClientsViewModel
|
||||
{
|
||||
}
|
||||
};
|
||||
return View(clientTimeReports);
|
||||
|
||||
}
|
||||
[HttpGet]
|
||||
public IActionResult Depositss()
|
||||
{
|
||||
List<DepositsViewModel> depositss = new List<DepositsViewModel>
|
||||
{
|
||||
new DepositsViewModel
|
||||
{
|
||||
Id = 1,
|
||||
},
|
||||
new DepositsViewModel
|
||||
{
|
||||
Id = 1,
|
||||
}
|
||||
};
|
||||
|
||||
return View(depositss);
|
||||
}
|
||||
[HttpGet]
|
||||
public IActionResult Deposits()
|
||||
{
|
||||
var contributions = new List<ContributionViewModel>();
|
||||
contributions.Add(new ContributionViewModel
|
||||
{
|
||||
Id = 1,
|
||||
|
||||
});
|
||||
contributions.Add(new ContributionViewModel
|
||||
{
|
||||
Id = 2,
|
||||
|
||||
});
|
||||
return View(contributions);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
9
Bank/BankWorkerApp/Models/ErrorViewModel.cs
Normal file
9
Bank/BankWorkerApp/Models/ErrorViewModel.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace BankWorkerApp.Models
|
||||
{
|
||||
public class ErrorViewModel
|
||||
{
|
||||
public string? RequestId { get; set; }
|
||||
|
||||
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
|
||||
}
|
||||
}
|
29
Bank/BankWorkerApp/Program.cs
Normal file
29
Bank/BankWorkerApp/Program.cs
Normal file
@ -0,0 +1,29 @@
|
||||
using BankWorkerApp;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
// Add services to the container.
|
||||
builder.Services.AddControllersWithViews();
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
// Configure the HTTP request pipeline.
|
||||
if (!app.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseExceptionHandler("/Home/Error");
|
||||
// The default HSTS value is 30 days. You may want to change this for program scenarios, see https://aka.ms/aspnetcore-hsts.
|
||||
app.UseHsts();
|
||||
}
|
||||
|
||||
app.UseHttpsRedirection();
|
||||
app.UseStaticFiles();
|
||||
|
||||
app.UseRouting();
|
||||
|
||||
app.UseAuthorization();
|
||||
|
||||
app.MapControllerRoute(
|
||||
name: "default",
|
||||
pattern: "{controller=Home}/{action=Index}/{id?}");
|
||||
|
||||
app.Run();
|
28
Bank/BankWorkerApp/Properties/launchSettings.json
Normal file
28
Bank/BankWorkerApp/Properties/launchSettings.json
Normal file
@ -0,0 +1,28 @@
|
||||
{
|
||||
"iisSettings": {
|
||||
"windowsAuthentication": false,
|
||||
"anonymousAuthentication": true,
|
||||
"iisExpress": {
|
||||
"applicationUrl": "http://localhost:30752",
|
||||
"sslPort": 44368
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"BankWorkerApp": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "https://localhost:7012;http://localhost:5094",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"IIS Express": {
|
||||
"commandName": "IISExpress",
|
||||
"launchBrowser": true,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Connect plan and clients";
|
||||
}
|
||||
<div class="text-center">
|
||||
<h3 class="display-4">Привязка заготовок к плану производства:</h3>
|
||||
</div>
|
||||
<form method="post">
|
||||
<div class="row">
|
||||
<div class="col-4">План производства:</div>
|
||||
<div class="col-8">
|
||||
<select id="planprogram" name="planprogram" class="form-control"></select>
|
||||
</div>
|
||||
</div>
|
||||
<h3>Список заготовок</h3>
|
||||
<div class="container">
|
||||
<div>Клиент</div>
|
||||
<div class="table-responsive-lg">
|
||||
<table id="detailsTable" class="display">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Выбор </th>
|
||||
<th>Название </th>
|
||||
<th>Количество</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var client in Model)
|
||||
{
|
||||
<tr>
|
||||
<td>
|
||||
<input type="checkbox" name="clients" value="@client.Id" />
|
||||
</td>
|
||||
<td>@client.ClientName</td>
|
||||
<td>
|
||||
<input type="number" name="count" value="0" min="0" class="form-control" />
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-8"></div>
|
||||
<div class="col-4"><input type="submit" value="Сохранить" class="btn btn-primary" /></div>
|
||||
</div>
|
||||
</form>
|
21
Bank/BankWorkerApp/Views/Home/Enter.cshtml
Normal file
21
Bank/BankWorkerApp/Views/Home/Enter.cshtml
Normal file
@ -0,0 +1,21 @@
|
||||
@{
|
||||
ViewData["Title"] = "Enter";
|
||||
}
|
||||
|
||||
<div class="text-center">
|
||||
<h2 class="display-4">Вход в приложение</h2>
|
||||
</div>
|
||||
<form method="post">
|
||||
<div class="row">
|
||||
<div class="col-4">Логин:</div>
|
||||
<div class="col-8"><input type="text" name="login" /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-4">Пароль:</div>
|
||||
<div class="col-8"><input type="password" name="password" /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-8"></div>
|
||||
<div class="col-4"><input type="submit" value="Вход" class="btn btn-primary" /></div>
|
||||
</div>
|
||||
</form>
|
29
Bank/BankWorkerApp/Views/Home/ExecutionPhase.cshtml
Normal file
29
Bank/BankWorkerApp/Views/Home/ExecutionPhase.cshtml
Normal file
@ -0,0 +1,29 @@
|
||||
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Client";
|
||||
}
|
||||
<div class="text-center">
|
||||
<h2 class="display-4">Заготовка</h2>
|
||||
</div>
|
||||
<form method="post">
|
||||
<div class="row">
|
||||
<div class="col-4">План производства:</div>
|
||||
<div class="col-8">
|
||||
<select id="planprogram" name="planprogram" class="form-control"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-4">Название:</div>
|
||||
<div class="col-8"><input type="text" name="name" id="name" /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-4">Статус:</div>
|
||||
<div class="col-8">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-8"></div>
|
||||
<div class="col-4"><input type="submit" value="Создать" class="btn btn-primary" /></div>
|
||||
</div>
|
||||
</form>
|
52
Bank/BankWorkerApp/Views/Home/ExecutionPhases.cshtml
Normal file
52
Bank/BankWorkerApp/Views/Home/ExecutionPhases.cshtml
Normal file
@ -0,0 +1,52 @@
|
||||
@using BankContracts.ViewModels
|
||||
@model List<DepositsViewModel>
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Execution Phases";
|
||||
}
|
||||
<div class="text-center">
|
||||
<h1 class="display-4">Пополнения</h1>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="text-center">
|
||||
@{
|
||||
if (Model == null)
|
||||
{
|
||||
<h3 class="display-4">Авторизируйтесь</h3>
|
||||
return;
|
||||
}
|
||||
|
||||
<p>
|
||||
<a asp-action="Deposits">Создать этап</a>
|
||||
|
||||
</p>
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
Название
|
||||
</th>
|
||||
<th>
|
||||
ФИО исполнителя
|
||||
</th>
|
||||
<th>
|
||||
Статус
|
||||
</th>
|
||||
<th>
|
||||
План производства
|
||||
</th>
|
||||
<th>
|
||||
Изменить этап
|
||||
</th>
|
||||
<th>
|
||||
Удалить этап
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
}
|
||||
</div>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user