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)); }
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); }
/// <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)); }
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); }