219 lines
9.7 KiB
C#
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;
|
|
}
|
|
} |