public async Task <OpenDepositResponseModel> OpenDepositAsync(DepositCreateModel model) { await _depositCreateModelValidator.ValidateAndThrowAsync(model); var regularAccountCreateModel = _mapper.Map <CreateAccountTemplateModel>(model); regularAccountCreateModel.AccountActivity = AccountActivity.Passive; regularAccountCreateModel.AccountType = AccountType.Regular; var(regularAccount, regularAccountPin) = await _accountService.GetAccountTemplateAsync(regularAccountCreateModel); var depositAccountCreateModel = _mapper.Map <CreateAccountTemplateModel>(model); depositAccountCreateModel.AccountActivity = AccountActivity.Passive; depositAccountCreateModel.AccountType = AccountType.Deposit; var(depositAccount, depositAccountPin) = await _accountService.GetAccountTemplateAsync(depositAccountCreateModel); var depositContract = _context.Add(_mapper.Map <DepositContract>(model)).Entity; depositContract.DepositAccount = depositAccount; depositContract.RegularAccount = regularAccount; var bankDevelopmentFundAccount = await _accountService.GetBankDevelopmentFundAccountForCurrencyAsync(model.CurrencyId); var initialTransactions = new[] { new Transaction { ContractNumber = depositContract.ContractNumber, CurrencyId = depositContract.CurrencyId, Amount = depositContract.Amount, CreatedAt = depositContract.ProgramStartDate, SenderAccountNumber = BankConstants.CashDeskAccountNumber, ReceiverAccountNumber = regularAccount.AccountNumber }, new Transaction { ContractNumber = depositContract.ContractNumber, CurrencyId = depositContract.CurrencyId, Amount = depositContract.Amount, CreatedAt = depositContract.ProgramStartDate, SenderAccountNumber = regularAccount.AccountNumber, ReceiverAccountNumber = bankDevelopmentFundAccount.AccountNumber } }; _context.Transactions.AddRange(initialTransactions); await _context.SaveChangesAsync(); return(new OpenDepositResponseModel { RegularAccountPin = regularAccountPin, DepositAccountPin = depositAccountPin }); }
public async Task <int> CreateCustomerAsync(CustomerCreateModel model) { await _customerCreateModelValidator.ValidateAndThrowAsync(model); var newCustomer = _mapper.Map <Customer>(model); _context.Add(newCustomer); await _context.SaveChangesAsync(); return(newCustomer.Id); }
public async Task <CreateLoanResponseModel> CreateLoanAsync(LoanCreateModel model) { await _loanCreateModelValidator.ValidateAndThrowAsync(model); var regularAccountCreateModel = _mapper.Map <CreateAccountTemplateModel>(model); regularAccountCreateModel.AccountActivity = AccountActivity.Active; regularAccountCreateModel.AccountType = AccountType.Regular; var(regularAccount, regularAccountPin) = await _accountService.GetAccountTemplateAsync(regularAccountCreateModel); var loanPaymentAccountCreateModel = _mapper.Map <CreateAccountTemplateModel>(model); loanPaymentAccountCreateModel.AccountActivity = AccountActivity.Active; loanPaymentAccountCreateModel.AccountType = AccountType.LoanPayment; var(loanPaymentAccount, loanPaymentAccountPin) = await _accountService.GetAccountTemplateAsync(loanPaymentAccountCreateModel); var loanContract = _context.Add(_mapper.Map <LoanContract>(model)).Entity; loanContract.LoanPaymentAccount = loanPaymentAccount; loanContract.RegularAccount = regularAccount; var bankDevelopmentFundAccount = await _accountService.GetBankDevelopmentFundAccountForCurrencyAsync(model.CurrencyId); var loanTransaction = new Transaction { ContractNumber = loanContract.ContractNumber, CurrencyId = loanContract.CurrencyId, Amount = loanContract.Amount, CreatedAt = loanContract.ProgramStartDate, SenderAccountNumber = bankDevelopmentFundAccount.AccountNumber, ReceiverAccountNumber = regularAccount.AccountNumber }; _context.Transactions.Add(loanTransaction); await _context.SaveChangesAsync(); return(new CreateLoanResponseModel { RegularAccountPin = regularAccountPin, LoanPaymentAccountPin = loanPaymentAccountPin }); }
// For system emulation purposes it will increment virtual date offset from current date public async Task CloseBankDayAsync(int times) { if (times <= 0) { return; } foreach (var _ in Enumerable.Range(1, times)) { var freshTransactions = await ProcessDepositsAndLoansAsync(); await CommitActiveTransactionsAsync(freshTransactions); await _virtualDateTimeManager.SkipDaysAsync(1); } await _context.SaveChangesAsync(); await _virtualDateTimeManager.CommitAsync(); }
public async Task CommitAsync() { await _context.SaveChangesAsync(); }