public async Task <IActionResult> Create([Bind("ID,AccNo,AvailableBal,Narration,AccNo2,TransferAmount")] InterBankTransfer interBankTransfer)
        {
            if (ModelState.IsValid)
            {
                var bDel = (from a in _context.BankAccount
                            where a.AccNo == interBankTransfer.AccNo
                            select a).FirstOrDefault();
                if (interBankTransfer.TransferAmount < bDel.AvailableBal)
                {
                    var bTran = (from a in _context.BankAccount
                                 where a.AccNo == interBankTransfer.AccNo2
                                 select a).FirstOrDefault();

                    bTran.AvailableBal         += interBankTransfer.TransferAmount;
                    _context.Entry(bTran).State = EntityState.Modified;
                    await DeductionAsync(interBankTransfer.AccNo, interBankTransfer.TransferAmount);



                    await _context.SaveChangesAsync();

                    return(RedirectToAction("Index", "BankAccounts", null));
                }
                //addition to another account
                else
                {
                    ViewBag.Message = string.Format("Hello {0}.\nthe current transfer amount {1} is higher than {2}, \ninsufficient funds", DateTime.Now.ToString(), interBankTransfer.TransferAmount, bDel.AvailableBal);
                    return(View(interBankTransfer));
                }
            }
            return(View(interBankTransfer));
        }
        public async Task <IActionResult> Edit(int id, [Bind("ID,AccNo,AvailableBal,Narration,AccNo2,TransferAmount")] InterBankTransfer interBankTransfer)
        {
            if (id != interBankTransfer.ID)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(interBankTransfer);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!InterBankTransferExists(interBankTransfer.ID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(interBankTransfer));
        }
Exemplo n.º 3
0
        public Template SaveTemplateInterTransfer(InterBankTransfer transfer, User user)
        {
            UserInfo     userInfo = context.UserInfo.FirstOrDefault(u => u.UserId == user.Id);
            EmployeeInfo employee =
                context.EmployeeInfos.Include(c => c.Company).FirstOrDefault(e => e.UserId == user.Id);
            TypeOfTransfer type     = context.TypeOfTransfers.FirstOrDefault(n => n.IsEqual(TypeOfTransfersEnum.InterBankTransfer));
            Template       template = new Template
            {
                AccountSenderId   = transfer.Transfer.AccountSenderId,
                AccountReceiverId = transfer.Transfer.AccountReceiverId,
                Amount            = transfer.Transfer.Amount,
                Comment           = transfer.Transfer.Comment,
                BankId            = transfer.BankId,
                PaymentCodeId     = transfer.PaymentCodeId,
                AccountNumber     = transfer.AccountNumber,
                ReciverName       = transfer.ReciverName,
                Type = type
            };

            AddUserIdTemplate(template, userInfo, employee);

            context.Templates.Add(template);
            context.SaveChanges();
            return(template);
        }
 public InterBankTransfer CreateInterBankTransfer(InterBankTransferViewModel model, InnerTransfer innerTransfer)
 {
     if (!innerTransfer.AccountSender.Locked)
     {
         InterBankTransfer transfer = new InterBankTransfer
         {
             AccountNumber   = model.Transfer.ReceiverAccountNumber,
             ReciverName     = model.ReciverName,
             BankId          = model.BankId,
             PaymentCodeId   = model.PaymentCodeId,
             InnerTransferId = innerTransfer.Id
         };
         context.Add(transfer);
         context.SaveChanges();
         return(transfer);
     }
     return(null);
 }
Exemplo n.º 5
0
        /// <summary>
        /// Transfer called by Soap service.
        /// Performs inner bank transfer when both account are from this bank or
        /// inter bank transfer when receiver is from other (listed) bank.
        /// When transfer fails - throws FaultException
        /// </summary>
        /// <param name="transferData">data needed to perform transfer</param>
        /// <returns>response status</returns>
        public PaymentResponse SoapTransfer(SoapTransferData transferData)
        {
            var            amount = DecimalParser.Parse(transferData.Amount);
            AccountNumber  receiverAccountNumber;
            IAccount       sender;
            IPublicAccount receiver;

            try
            {
                sender = GetAccount(transferData.AccessToken, transferData.SenderAccountNumber);
                receiverAccountNumber = _accountNumberFactory.GetAccountNumber(transferData.ReceiverAccountNumber);
            }
            catch (BankException exception)
            {
                //not my account, access denied, or wrong receiver account number
                throw new FaultException(exception.ResponseStatus.Message());
            }
            try
            {
                receiver = GetAccount(transferData.ReceiverAccountNumber);
            }
            catch (BankException exception)
            {
                if (exception.ResponseStatus != ResponseStatus.OtherBankAccount)
                {
                    throw new FaultException(exception.ResponseStatus.Message());
                }

                //receiver ot from this bank - INTER BANK TRANSFER
                var interTransfer = new InterBankTransfer(sender, receiverAccountNumber, amount,
                                                          transferData.Title);
                _executor.ExecuteAndSave(interTransfer, sender);
                return(PrepareResponse(interTransfer.ResponseStatus));
            }
            //sender and receiver from this bank - INNER TRANSFER

            var innerTransfer = new InnerBankTransfer(sender, receiver, amount, transferData.Title);

            _executor.ExecuteAndSave(innerTransfer, sender, receiver);
            return(PrepareResponse(innerTransfer.ResponseStatus));
        }
        // GET: InterBankTransfers/Create
        public async Task <IActionResult> Create(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var bankAccount = await _context.BankAccount.FindAsync(id);

            if (bankAccount == null)
            {
                return(NotFound());
            }
            var BcK = new InterBankTransfer()
            {
                AccNo        = bankAccount.AccNo,
                AvailableBal = bankAccount.AvailableBal
            };

            return(View(BcK));
        }
Exemplo n.º 7
0
        public void CreateInterTransfer()
        {
            ElixirSessionInterBank.AddToInterBank(MBank);
            ElixirSessionInterBank.AddToInterBank(WBK);

            List <Bank> listOfBanks = new List <Bank>();

            listOfBanks.Add(MBank);
            listOfBanks.Add(WBK);

            createAccount(MBank, 1, "Lukasz");
            createAccount(WBK, 2, "Tomasz");

            getAccount(MBank, 1).Deposit(100);
            getAccount(WBK, 2).Deposit(100);


            InterBankTransfer interBankTransfer = new InterBankTransfer(MBank, 1, WBK, 2, 100);

            MBank.sendInterBankTransfer(interBankTransfer);

            Assert.AreEqual(getAccount(MBank, 1).GetBalance(), 0);
            Assert.AreEqual(getAccount(WBK, 2).GetBalance(), 200);
        }
        public async Task <IActionResult> InterTransfer(InterBankTransferViewModel model)
        {
            decimal         amount   = 0;
            Account         receiver = accountService.OurBankAccount();
            Account         sender   = accountService.FindAccountById((int)model.Transfer.AccountSenderId).Result;
            User            user     = userService.FindUserByName(HttpContext.User.Identity.Name);
            EmployeeAccount Limit    = new EmployeeAccount();
            string          comment  = "Межбанковский платеж - " + model.Transfer.Comment;

            model.Transfer.Comment = comment;
            if (model.Transfer.AccountSenderId == null)
            {
                ModelState.AddModelError("Transfer.AccountSenderId", localizer["AccountSenderIdValidation"]);
            }
            else
            {
                Limit = accountService.FindEmployeeAccountByUserIdAndAccountId(user.Id, model.Transfer.AccountSenderId.Value);
                if (sender.Locked)
                {
                    ModelState.AddModelError("Transfer.AccountSenderId", "*Счет заблокирован");
                }
                else if (!await accountService.IsUserHaveRightsOnAccount(user, model.Transfer.AccountSenderId.Value))
                {
                    ModelState.AddModelError("Transfer.AccountSenderId", "У вас нет прав на совершение данного перевода.");
                }
                else if (await accountService.IsAccountExist(receiver.Number) && await accountService.CompareAccountsCurrencies(receiver.Number, (int)model.Transfer.AccountSenderId))
                {
                    ModelState.AddModelError("Transfer.AccountSenderId", localizer["*Межбанковский перевод провидиться в национальной валюте"]);
                }
                if (!accountService.AmountTryParse(model.Transfer.Amount, out amount))
                {
                    ModelState.AddModelError("Transfer.Amount", localizer["AmountFormatValidation"]);
                }
                else if (amount <= 0)
                {
                    ModelState.AddModelError("Transfer.Amount", localizer["AmountNotNull"]);
                }
                else if (!await accountService.IsBalanceEnough((int)model.Transfer.AccountSenderId, amount))
                {
                    ModelState.AddModelError("Transfer.Amount", localizer["IsBalanceEnoughValidation"]);
                }
                else if (Limit.limit.LimitAmount < amount)
                {
                    ModelState.AddModelError("Transfer.Amount", string.Format("{0} {1}", localizer["ExceededTheLimit"], Limit.limit.LimitAmount));
                }
            }
            if (ModelState.IsValid)
            {
                InnerTransfer transfer = await
                                         transferService.CreateInnerTransfer(sender, receiver, amount, model.Transfer.Comment, null, null, null);

                transferService.AddTransfer(transfer);
                InterBankTransfer interTransfer = transferService.CreateInterBankTransfer(model, transfer);

                if (model.Transfer.SaveInTempalte)
                {
                    Template template = _templateServiceService.SaveTemplateInterTransfer(interTransfer, user);
                    return(RedirectToAction("TemplateSave", "Template", new { tempalteId = template.Id }));
                }
                return(RedirectToAction("Transfer", "Transfer"));
            }

            Template templates = _templateServiceService.FindTemplateById(model.Transfer.TemplateId);

            if (templates != null)
            {
                model.Transfer.Template = templates;
            }
            model.Banks       = selectListService.GetBankList();
            model.PaymentCode = selectListService.GetPayemntCodeList();
            model.Transfer    = transferService.GetMethodInnerTransfer(user, model.Transfer);
            return(View(model));
        }
        public InterBankTransfer FindInterBankTransferById(int transferId)
        {
            InterBankTransfer transfer = context.InterBankTransfers.Include(it => it.Transfer).FirstOrDefault(t => t.Id == transferId);

            return(transfer);
        }
        public async Task <List <StatementObjectViewModel> > GetAccountTransfers(int accountId)
        {
            //IQueryable<StatementObjectViewModel> transfers = context.InnerTransfers
            //    .Where(t => t.AccountReceiverId == accountId || t.AccountSenderId == accountId)


            List <InnerTransfer> transfers = await context.InnerTransfers
                                             .Include(t => t.AccountReceiver).ThenInclude(a => a.Currency)
                                             .Include(t => t.ExchangeRate).ThenInclude(r => r.Currency)
                                             .Include(t => t.ExchangeSecond).ThenInclude(r => r.Currency)
                                             .Include(t => t.AccountSender).ThenInclude(a => a.Currency)
                                             .Where(t => t.AccountReceiverId == accountId || t.AccountSenderId == accountId && t.TransferState.StateName == TransferStatesEnum.Confirmed.ToString()).OrderByDescending(t => t.TransferDate).ToListAsync();

            List <StatementObjectViewModel> models = new List <StatementObjectViewModel>();

            foreach (var innerTransfer in transfers)
            {
                InterBankTransfer interTranfer =
                    await context.InterBankTransfers.FirstOrDefaultAsync(it => it.InnerTransferId == innerTransfer.Id);

                if (interTranfer != null)
                {
                    StatementObjectViewModel statementObjectViewModel = new StatementObjectViewModel
                    {
                        AccountNumber = interTranfer.AccountNumber + innerTransfer.AccountSender.Currency.Name,
                        Comment       = innerTransfer.Comment,
                        CreditAmount  = innerTransfer.Amount.ToString(),
                        TransferDate  = innerTransfer.TransferDate,
                    };
                    models.Add(statementObjectViewModel);
                }
                else
                {
                    if (innerTransfer.AccountReceiverId == accountId)
                    {
                        if (innerTransfer.ExchangeRateId != null)
                        {
                            StatementObjectViewModel statementObjectViewModel = new StatementObjectViewModel
                            {
                                AccountNumber = innerTransfer.AccountSender.Number + innerTransfer.AccountSender.Currency.Name,
                                Comment       = innerTransfer.Comment,
                                DebitAmount   = innerTransfer.AmountReceive.ToString(),
                                TransferDate  = innerTransfer.TransferDate
                            };
                            if (innerTransfer.AccountReceiver.Currency.IsNativeCurrency)
                            {
                                statementObjectViewModel.Rate =
                                    innerTransfer.ExchangeRate.Currency.Name + " " +
                                    innerTransfer.ExchangeRate.RateForPurchaise + "/" +
                                    innerTransfer.ExchangeRate.RateForSale;
                            }
                            else
                            {
                                statementObjectViewModel.Rate =
                                    innerTransfer.ExchangeRate.Currency.Name + " " +
                                    innerTransfer.ExchangeRate.RateForPurchaise + "/" +
                                    innerTransfer.ExchangeRate.RateForSale;
                            }
                            models.Add(statementObjectViewModel);
                        }

                        else
                        {
                            if (innerTransfer.AccountSender != null)
                            {
                                StatementObjectViewModel statementObjectViewModel = new StatementObjectViewModel
                                {
                                    AccountNumber = innerTransfer.AccountSender.Number + innerTransfer.AccountSender.Currency.Name,
                                    TransferDate  = innerTransfer.TransferDate,
                                    Comment       = innerTransfer.Comment,
                                    DebitAmount   = innerTransfer.Amount.ToString(),
                                };
                                models.Add(statementObjectViewModel);
                            }
                            else
                            {
                                StatementObjectViewModel statementObjectViewModel = new StatementObjectViewModel
                                {
                                    AccountNumber = "",
                                    TransferDate  = innerTransfer.TransferDate,
                                    Comment       = innerTransfer.Comment,
                                    DebitAmount   = innerTransfer.Amount.ToString(),
                                };
                                models.Add(statementObjectViewModel);
                            }
                        }
                    }
                    else
                    {
                        StatementObjectViewModel statementObjectViewModel = new StatementObjectViewModel
                        {
                            AccountNumber = innerTransfer.AccountSender.Number + innerTransfer.AccountSender.Currency.Name,
                            Comment       = innerTransfer.Comment,
                            CreditAmount  = innerTransfer.Amount.ToString(),
                            TransferDate  = innerTransfer.TransferDate
                        };
                        if (innerTransfer.ExchangeRateId != null)
                        {
                            if (innerTransfer.AccountSender.Currency.IsNativeCurrency != true && innerTransfer.ExchangeSecond != null)
                            {
                                statementObjectViewModel.Rate =
                                    innerTransfer.ExchangeSecond.Currency.Name + " " +
                                    innerTransfer.ExchangeSecond.RateForPurchaise + "/" +
                                    innerTransfer.ExchangeSecond.RateForSale;
                            }
                            else
                            {
                                statementObjectViewModel.Rate =
                                    innerTransfer.ExchangeRate.Currency.Name + " " +
                                    innerTransfer.ExchangeRate.RateForPurchaise + "/" +
                                    innerTransfer.ExchangeRate.RateForSale;
                            }
                            models.Add(statementObjectViewModel);
                        }
                        else
                        {
                            models.Add(statementObjectViewModel);
                        }
                    }
                }
            }


            return(models);
        }