/// <summary> /// This action returns AgentDetails view /// with required data passed as model /// </summary> /// <returns></returns> public ActionResult AgentDetails(int agentID) { try { if (SessionManagement.UserInfo != null) { LoginInformation loginInfo = SessionManagement.UserInfo; AccountNumberRuleInfo ruleInfo = SessionManagement.AccountRuleInfo; var agentDetail = agentBO.GetAgentDetails(agentID, loginInfo.UserID); var model = new AgentDetailsModel(); if (agentDetail != null) { model.FirstName = agentDetail.FirstName; model.LastName = agentDetail.LastName; model.BirthDate = Convert.ToDateTime(agentDetail.BirthDate).ToString("dd/MM/yyyy"); model.PhoneNumber = agentDetail.PhoneNumber; model.EmailAddress = agentDetail.EmailAddress; model.PhoneID = agentDetail.PhoneID; model.Password = agentDetail.Password; model.AgentAddress = agentDetail.AgentAddress; model.AgentCity = agentDetail.City; model.AgentCountry = countryBO.GetSelectedCountry((int)agentDetail.FK_CountryID); model.AgentPostalCode = agentDetail.PostalCode; model.BankName = agentDetail.BankName; model.AccountNumber = agentDetail.AccountNumber; model.BicOrSwiftCode = agentDetail.BicOrSwiftCode; model.ReceivingBankInfo = agentDetail.FK_ReceivingBankInfoID != null?receivingBankInfoBO.GetSelectedRecievingBankInfo((int)agentDetail.FK_ReceivingBankInfoID) : null; model.ReceivingBankInfoDetail = agentDetail.ReceivingBankInfo; model.BankAddress = agentDetail.BankAddress; model.BankCity = agentDetail.BankCity; model.BankCountry = agentDetail.FK_BankCountryID != null?countryBO.GetSelectedCountry((int)agentDetail.FK_BankCountryID) : null; model.BankPostalCode = agentDetail.BankPostalCode; model.AgentID = (int)agentDetail.AgentIntroducingBrokerCode; } //For referral links ViewData["CustomizedLink"] = introducingBrokerBO.GetCustomizedLinkOfIB(loginInfo.UserID); ViewData["AccountNumber"] = clientAccBO.GetAccountNumberOfUser(loginInfo.LogAccountType, loginInfo.UserID).Split('-')[ruleInfo.AccountNumberPosition - 1]; return(View(model)); } else { return(RedirectToAction("Login", "Account", new { Area = "" })); } } catch (Exception ex) { CurrentDeskLog.Error(ex.Message, ex); return(View("ErrorMessage")); } }
/// <summary> /// This action returns WithdrawFunds view with required /// data passed as model /// </summary> /// <param name="accountNumber">accountNumber</param> /// <returns></returns> public ActionResult WithdrawFunds(string accountNumber) { try { if (SessionManagement.UserInfo != null) { LoginInformation loginInfo = SessionManagement.UserInfo; AccountNumberRuleInfo ruleInfo = SessionManagement.AccountRuleInfo; ViewData["Country"] = new SelectList(countryBO.GetCountries(), "PK_CountryID", "CountryName"); ViewData["ReceivingBankInfo"] = new SelectList(receivingBankInfoBO.GetReceivingBankInfo((int)SessionManagement.OrganizationID), "PK_RecievingBankID", "RecievingBankName"); var model = new TransfersModel(); model.BankInformation = new List <BankInformation>(); model.LandingAccInformation = new List <LandingAccInformation>(); model.AccountNumber = accountNumber; //Get all bank accounts var userBankInfos = bankBO.GetAllBankInfosForUser(loginInfo.LogAccountType, loginInfo.UserID); foreach (var bank in userBankInfos) { var bankInfo = new BankInformation(); bankInfo.BankID = bank.PK_BankAccountInformationID; bankInfo.BankName = bank.BankName; bankInfo.BankAccNumber = bank.AccountNumber; model.BankInformation.Add(bankInfo); } //Get all landing accounts var landingAccs = clientAccBo.GetAllLandingAccountForUser(loginInfo.LogAccountType, loginInfo.UserID); foreach (var lAcc in landingAccs) { var lAccInfo = new LandingAccInformation(); lAccInfo.LCurrencyName = lCurrValueBO.GetCurrencySymbolFromCurrencyAccountCode(lAcc.LandingAccount.Split('-')[ruleInfo.CurrencyPosition - 1]); lAccInfo.LAccNumber = lAcc.LandingAccount; lAccInfo.LAccBalance = Utility.FormatCurrencyValue((decimal)lAcc.CurrentBalance, ""); model.LandingAccInformation.Add(lAccInfo); } return(View("WithdrawFunds", model)); } else { return(RedirectToAction("Login", "Account", new { Area = "" })); } } catch (Exception ex) { CurrentDeskLog.Error(ex.Message, ex); return(View("ErrorMessage")); } }
/// <summary> /// This action does internal conversion transfer between accounts and logs in Transactions table /// </summary> /// <param name="fromAcc">fromAcc</param> /// <param name="toAcc">toAcc</param> /// <param name="amount">amount</param> /// <param name="exchangeRate">exchangeRate</param> /// <param name="notes">notes</param> /// <returns></returns> public ActionResult ConversionFundTransfer(string fromAcc, string toAcc, double amount, double exchangeRate, string notes) { try { if (SessionManagement.UserInfo != null) { LoginInformation loginInfo = SessionManagement.UserInfo; AccountNumberRuleInfo ruleInfo = SessionManagement.AccountRuleInfo; var organizationID = (int)SessionManagement.OrganizationID; var fromCurrID = lCurrValueBO.GetCurrencyIDFromAccountCode(fromAcc.Split('-')[ruleInfo.CurrencyPosition - 1]); var toCurrID = lCurrValueBO.GetCurrencyIDFromAccountCode(toAcc.Split('-')[ruleInfo.CurrencyPosition - 1]); var clientName = introducingBrokerBO.GetPartnerName(loginInfo.UserID); var fromAccDetails = clientAccBO.GetAnyAccountDetails(fromAcc, organizationID); var toAccDetails = clientAccBO.GetAnyAccountDetails(toAcc, organizationID); //Get from acc balance var balance = (decimal)fromAccDetails.CurrentBalance; var pendingAmount = adminTransactionBO.GetPendingTransferAmount(fromAcc, organizationID); var isToSucessful = true; var isFromSucessful = true; //Get transaction settings from database var transacSett = transactionSettingBO.GetTransactionSetting((int)AdminTransactionType.ConversionsRequests, organizationID); if (transacSett != null) { //If approval settings is immediate or approval settings is limited //and transfer amount less than limit, do immediate transfer if (transacSett.InternalTransferApprovalOptions == (int)TransferApprovalOptions.Immediate || (transacSett.InternalTransferApprovalOptions == (int)TransferApprovalOptions.Limited && amount <= (double)transacSett.InternalTransferLimitedAmount)) { //Check balance if (balance >= (decimal)amount) { //Check pending request balance if (balance >= (pendingAmount + (decimal)amount)) { if (fromAccDetails.PlatformLogin != null) { isFromSucessful = DoPlatformTransaction((int)fromAccDetails.PlatformLogin, -amount, "Debit"); } if (toAccDetails.PlatformLogin != null && isFromSucessful) { isToSucessful = DoPlatformTransaction((int)toAccDetails.PlatformLogin, (amount * exchangeRate), "Credit"); } //If platform transactions are successful if (isToSucessful && isFromSucessful) { //If transaction is successful, then log in Transactions table if (clientAccBO.TransferFundInternal(fromAcc, toAcc, amount, exchangeRate, organizationID)) { var pkTransactionId = transactionBO.InternalFundTransfer(fromAcc, toAcc, fromCurrID, toCurrID, amount, exchangeRate, notes, organizationID); //Logs fund transfers details(Withdrawal/Deposit) in TransferLogs table transferLogBO.AddTransferLogForTransaction(pkTransactionId, fromAcc, toAcc, fromCurrID, toCurrID, amount, exchangeRate, organizationID); //Log activity details InsertConversionActivityDetails(fromCurrID, toCurrID, amount, exchangeRate, fromAcc, toAcc, Constants.K_STATUS_TRANSFERRED); //Insert into admin transaction table for records var convTransac = new AdminTransaction(); convTransac.TransactionDate = DateTime.UtcNow; convTransac.FK_UserID = loginInfo.UserID; convTransac.AccountNumber = fromAcc; convTransac.FK_CurrencyID = fromCurrID; convTransac.TransactionAmount = (decimal)amount; convTransac.FK_AdminTransactionTypeID = (int)AdminTransactionType.ConversionsRequests; convTransac.IsApproved = true; convTransac.IsDeleted = false; convTransac.Notes = notes; convTransac.ClientName = clientName; convTransac.ApprovedDate = DateTime.UtcNow; convTransac.ToAccountNumber = toAcc; convTransac.ToClientName = clientName; convTransac.FK_ToUserID = loginInfo.UserID; convTransac.ExchangeRate = exchangeRate; convTransac.FK_ToCurrencyID = toCurrID; convTransac.FK_OrganizationID = organizationID; //Add conv transaction to Admin Transaction adminTransactionBO.AddNewAdminTransactionRequest(convTransac); return (Json( new { status = true, message = "Conversion transfer has been successfully completed." })); } } else { return(Json(new { status = false, message = "Some error occurred in platform!" })); } } else { return (Json( new { status = false, message = "Insufficient balance due to pending transfer requests!" })); } } else { return (Json(new { status = false, message = "Transfer failed due to insufficient balance." })); } } //Make admin conversion request else { //Check balance if (balance >= (decimal)amount) { //Check pending request balance if (balance >= (pendingAmount + (decimal)amount)) { //Register transfer request var convTransac = new AdminTransaction(); convTransac.TransactionDate = DateTime.UtcNow; convTransac.FK_UserID = loginInfo.UserID; convTransac.AccountNumber = fromAcc; convTransac.FK_CurrencyID = fromCurrID; convTransac.TransactionAmount = (decimal)amount; convTransac.FK_AdminTransactionTypeID = (int)AdminTransactionType.ConversionsRequests; convTransac.Notes = notes; convTransac.ClientName = clientName; convTransac.FeeAmount = transacSett.TransferFee; convTransac.ToAccountNumber = toAcc; convTransac.ToClientName = clientName; convTransac.FK_ToUserID = loginInfo.UserID; convTransac.ExchangeRate = exchangeRate; convTransac.FK_ToCurrencyID = toCurrID; convTransac.IsApproved = false; convTransac.IsDeleted = false; convTransac.FK_OrganizationID = organizationID; //Add request to Admin Transaction adminTransactionBO.AddNewAdminTransactionRequest(convTransac); //Log activity details for pending transaction InsertConversionActivityDetails(fromCurrID, toCurrID, amount, exchangeRate, fromAcc, toAcc, Constants.K_STATUS_PENDING); return (Json( new { status = true, message = "Internal transfer request has been submitted." })); } else { return (Json( new { status = false, message = "Insufficient balance due to pending transfer requests!" })); } } else { return (Json(new { status = false, message = "Transfer failed due to insufficient balance." })); } } } return(Json(new { status = false, message = "No transaction settings found!" })); } else { return(RedirectToAction("Login", "Account", new { Area = "" })); } } catch (Exception ex) { CurrentDeskLog.Error(ex.Message, ex); return(Json(new { status = false, message = "Some error occurred!" })); } }