public IHttpActionResult TransferFunds(TransferFundsModel transferFundsModel) { var message = new AccountsBl().TransferFunds(transferFundsModel); if (message == "Success") { return(Ok(transferFundsModel)); } return(BadRequest(message)); }
public string TransferFunds(TransferFundsModel transferFundsModel) { var saAccountNumber = transferFundsModel.SaAccountNumber; var daAccountNumber = transferFundsModel.DaAccountNumber; var amount = transferFundsModel.Amount; var accountRepo = new AccountsRepo(); var transactionRepo = new TransactionsRepo { Entity = accountRepo.Entity }; var saBankAccount = accountRepo.GetWhitdrawnAccount(transferFundsModel.Username, saAccountNumber); var daBankAccount = accountRepo.GetAccountByAccountNo(daAccountNumber); if (saBankAccount == null) { return("Invalid Sender Account"); } if (daBankAccount == null || saBankAccount == daBankAccount) { return("Make Sure That Accounts Are Valid"); } if (!IsSufficientFunds(saBankAccount, amount)) { return("Insufficient Funds"); } if (saBankAccount.AccountType_Fk.Equals("Fixed") || daBankAccount.AccountType_Fk.Equals("Fixed")) { return("Cannot Transfer To or From a Fixed Account"); } var saTransaction = new Transaction(); var daTransaction = new Transaction(); //TODO make Transactions cleaner saTransaction.Currency_Fk = saBankAccount.Currency_Fk; saTransaction.AccountNo_Fk = saBankAccount.AccountNumber; saTransaction.Amount = -amount; saTransaction.Details = string.Concat("Transfer To Account ", daBankAccount.AccountNumber); saTransaction.Transaction_Timestamp = DateTime.Now; saBankAccount.Balance -= amount; daTransaction.Currency_Fk = daBankAccount.Currency_Fk; daTransaction.AccountNo_Fk = daBankAccount.AccountNumber; daTransaction.Details = string.Concat("Transfer From Account ", saBankAccount.AccountNumber); daTransaction.Transaction_Timestamp = DateTime.Now; if (IsAccountsSameCurrency(saBankAccount, daBankAccount)) { daTransaction.Amount = amount; daBankAccount.Balance += amount; } if (!IsAccountsSameCurrency(saBankAccount, daBankAccount)) { var convertedAmount = ConvertCurrency(saBankAccount.Currency_Fk, daBankAccount.Currency_Fk, amount); daTransaction.Amount = convertedAmount; daBankAccount.Balance += convertedAmount; } transactionRepo.AddTransaction(saTransaction); transactionRepo.AddTransaction(daTransaction); accountRepo.UpdateAccount(saBankAccount); accountRepo.UpdateAccount(daBankAccount); return("Success"); }