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
            });
        }
Example #2
0
 public bool CreateDeposit(DepositCreateModel model)
 {
     using (var ctx = new BankEntities())
     {
         var entity = new Deposit
         {
             TransactionID = model.TransactionID,
             Amount        = model.Amount
         };
         ctx.Deposits.Add(entity);
         return(ctx.SaveChanges() == 1);
     }
 }
Example #3
0
        public static void ProcessDeposit(string accountNumber, int transactionType)
        {
            int     transactionId = TransactionATMController.CreateTransactionConsole(accountNumber, transactionType);
            decimal amount        = GetDepositAmountFromUser();

            DepositCreateModel newDeposit = new DepositCreateModel
            {
                Amount        = amount,
                TransactionID = transactionId
            };

            depositService.CreateDeposit(newDeposit);

            decimal deposit    = newDeposit.Amount;
            decimal newBalance = accountService.AddDepositToBalance(accountNumber, deposit);

            accountService.SaveNewBalanceToDatabase(accountNumber, newBalance);
        }
        public async Task <ActionResult <Guid> > OpenDepositAsync(DepositCreateModel model)
        {
            var openDepositResponseModel = await _depositService.OpenDepositAsync(model);

            return(Ok(openDepositResponseModel));
        }