Files
Backend-Api/CompanyManagment.Application/ContractingPartyBankAccountsApplication.cs

219 lines
9.7 KiB
C#

using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.Application.UID;
using _0_Framework.Exceptions;
using Company.Domain.ContarctingPartyAgg;
using Company.Domain.ContractingPartyBankAccountsAgg;
using CompanyManagment.App.Contracts.ContractingPartyBankAccounts;
using CompanyManagment.App.Contracts.PersonalContractingParty;
namespace CompanyManagment.Application;
public class ContractingPartyBankAccountsApplication : IContractingPartyBankAccountsApplication
{
private readonly IContractingPartyBankAccountsRepository _contractingPartyBankAccountsRepository;
private readonly IPersonalContractingPartyRepository _personalContractingPartyRepository;
private readonly IUidService _uidService;
public ContractingPartyBankAccountsApplication(
IContractingPartyBankAccountsRepository contractingPartyBankAccountsRepository,
IPersonalContractingPartyRepository personalContractingPartyRepository, IUidService uidService)
{
_contractingPartyBankAccountsRepository = contractingPartyBankAccountsRepository;
_personalContractingPartyRepository = personalContractingPartyRepository;
_uidService = uidService;
}
public async Task<OperationResult> Create(CreateContractingPartyBankAccounts command)
{
var operationResult = new OperationResult();
if (!_personalContractingPartyRepository.Exists(x => x.id == command.ContractingPartyId))
return operationResult.Failed("طرف حساب مورد نظر یافت نشد");
if (string.IsNullOrWhiteSpace(command.CardNumber))
return operationResult.Failed("شماره کارت خود را وارد کنید");
if (string.IsNullOrWhiteSpace(command.AccountNumber))
return operationResult.Failed("شماره حساب خود را وارد کنید");
if (string.IsNullOrWhiteSpace(command.IBan))
return operationResult.Failed("شماره شبا خود را وارد کنید");
if (string.IsNullOrWhiteSpace(command.AccountHolderName))
return operationResult.Failed("نام صاحب حساب را وارد کنید");
var entity = new ContractingPartyBankAccount(command.ContractingPartyId, command.CardNumber,
command.AccountHolderName, command.AccountNumber, command.IBan, command.IsAuth);
await _contractingPartyBankAccountsRepository.CreateAsync(entity);
await _contractingPartyBankAccountsRepository.SaveChangesAsync();
return operationResult.Succcedded();
}
public async Task<OperationResult> Create(List<CreateContractingPartyBankAccounts> commands)
{
var operationResult = new OperationResult();
foreach (var command in commands)
{
if (!_personalContractingPartyRepository.Exists(x => x.id == command.ContractingPartyId))
return operationResult.Failed("طرف حساب مورد نظر یافت نشد");
if (command.IsAuth)
{
if (string.IsNullOrWhiteSpace(command.CardNumber))
return operationResult.Failed("شماره کارت خود را وارد کنید");
if (string.IsNullOrWhiteSpace(command.AccountNumber))
return operationResult.Failed("شماره حساب خود را وارد کنید");
if (string.IsNullOrWhiteSpace(command.IBan))
return operationResult.Failed("شماره شبا خود را وارد کنید");
}
else if (string.IsNullOrWhiteSpace(command.CardNumber) &&
string.IsNullOrWhiteSpace(command.AccountNumber) &&
string.IsNullOrWhiteSpace(command.IBan))
{
return operationResult.Failed(
" حداقل یکی از اطلاعات بانکی را وارد کنید: شماره کارت، شماره حساب یا شماره شبا");
}
if (string.IsNullOrWhiteSpace(command.AccountHolderName))
{
return operationResult.Failed("نام صاحب حساب را وارد کنید");
}
var entity = new ContractingPartyBankAccount(command.ContractingPartyId, command.CardNumber,
command.AccountHolderName, command.AccountNumber, command.IBan, command.IsAuth);
await _contractingPartyBankAccountsRepository.CreateAsync(entity);
}
await _contractingPartyBankAccountsRepository.SaveChangesAsync();
return operationResult.Succcedded();
}
public async Task<GetContractingPartyBankAccountViewModel> GetList(
ContractingPartyBankAccountSearchModel searchModel)
{
return await _contractingPartyBankAccountsRepository.GetList(searchModel);
}
public async Task<List<string>> ContractingPartyOrAccountHolderNameSelectList(string search,
string selected)
{
return await _contractingPartyBankAccountsRepository.ContractingPartyOrAccountHolderNameSelectList(search,
selected);
}
public async Task<List<string>> CardNumberSelectList(string search, string selected)
{
return await _contractingPartyBankAccountsRepository.CardNumberSelectList(search, selected);
}
public async Task<List<string>> IBanSelectList(string search, string selected)
{
return await _contractingPartyBankAccountsRepository.IBanSelectList(search, selected);
}
public async Task<List<string>> AccountNumberSelectList(string search, string selected)
{
return await _contractingPartyBankAccountsRepository.AccountNumberSelectList(search, selected);
}
public async Task<List<string>> GetAccountHolderNameSelectList(string search, string selected)
{
return await _contractingPartyBankAccountsRepository.GetAccountHolderNameSelectList(search, selected);
}
public async Task<List<string>> ContractingPartyNamesSelectList(string search, string selected)
{
return await _contractingPartyBankAccountsRepository.ContractingPartyNamesSelectList(search, selected);
}
public async Task<ContractingPartyBankInquiryResponse> InquiryContractingPartyBankDetails(
InquiryContractingPartyBankDetailsRequest command)
{
var iBan = command.IBan;
var cardNumber = command.CardNumber;
var accountNumber = command.AccountNumber;
var uidBank = command.UidBank;
ContractingPartyBankInquiryResponse result = new ContractingPartyBankInquiryResponse();
if (!string.IsNullOrWhiteSpace(iBan))
{
if (!iBan.IsvalidIban())
{
throw new BadRequestException("شماره شبا وارد شده معتبر نمی باشد");
}
var response = await _uidService.IbanInquiry(iBan);
if (response.ResponseContext.Status.Code != 0)
{
throw new BadRequestException("خطای احراز هویت. کد خطا: " + response.ResponseContext.Status.Code);
}
var owner = response.Owners.FirstOrDefault();
var ownerFirstName = owner != null ? $"{owner.FirstName} {owner.LastName}" : "";
result.FullName = ownerFirstName;
result.AccountNumber = response.AccountBasicInformation.AccountNumber;
result.Iban = response.AccountBasicInformation.Iban;
}
else if (!string.IsNullOrWhiteSpace(cardNumber))
{
if (!cardNumber.IsValidCardNumber())
{
throw new BadRequestException("شماره کارت وارد شده معتبر نمی باشد");
}
var bankCardRes = await _uidService.CardToIban(cardNumber);
if (bankCardRes.ResponseContext.Status.Code != 0)
{
throw new BadRequestException("خطای احراز هویت. کد خطا: " + bankCardRes.ResponseContext.Status.Code);
}
var response = await _uidService.IbanInquiry(bankCardRes.Iban);
if (response.ResponseContext.Status.Code != 0)
{
throw new BadRequestException("خطای احراز هویت. کد خطا: " + response.ResponseContext.Status.Code);
}
var owner = response.Owners.FirstOrDefault();
var ownerFirstName = owner != null ? $"{owner.FirstName} {owner.LastName}" : "";
result.FullName = ownerFirstName;
result.AccountNumber = response.AccountBasicInformation.AccountNumber;
result.CardNumber = cardNumber;
result.Iban = response.AccountBasicInformation.Iban;
}
else if (!string.IsNullOrWhiteSpace(accountNumber))
{
var accountNumberRes = await _uidService.AccountToIban(accountNumber, uidBank.Value);
if (accountNumberRes.ResponseContext.Status.Code != 0)
{
throw new BadRequestException(
"خطای احراز هویت. کد خطا: " + accountNumberRes.ResponseContext.Status.Code);
}
var response = await _uidService.IbanInquiry(accountNumberRes.Iban);
var owner = response.Owners.FirstOrDefault();
var ownerFirstName = owner != null ? $"{owner.FirstName} {owner.LastName}" : "";
result.FullName = ownerFirstName;
result.AccountNumber = response.AccountBasicInformation.AccountNumber;
result.Iban = response.AccountBasicInformation.Iban;
}
else
{
throw new BadRequestException(
"حداقل یکی از اطلاعات بانکی را وارد کنید: شماره کارت، شماره حساب یا شماره شبا");
}
return result;
}
}