// Add your own data access methods here. If you wish to // expose your public method to a WCF service, marked them with // the attribute [NCPublish], and another T4 template will generate your service contract /// <summary> /// This method adds new fund account request in AdminTransaction table /// </summary> /// <param name="newRequest">newRequest</param> /// <returns></returns> public bool AddNewAdminTransactionRequest(AdminTransaction newRequest) { try { using (var unitOfWork = new EFUnitOfWork()) { var adminTransactionRepo = new AdminTransactionRepository(new EFRepository <AdminTransaction>(), unitOfWork); adminTransactionRepo.Add(newRequest); adminTransactionRepo.Save(); return(true); } } catch (Exception ex) { CommonErrorLogger.CommonErrorLog(ex, System.Reflection.MethodBase.GetCurrentMethod().Name); return(false); } }
/// <summary> /// This method approves a particular outgoing transaction /// </summary> /// <param name="approveTransaction">approveTransaction</param> /// <returns></returns> public bool ApproveOutgoingTransaction(AdminTransaction approveTransaction) { try { using (var unitOfWork = new EFUnitOfWork()) { var adminTransactionRepo = new AdminTransactionRepository(new EFRepository <AdminTransaction>(), unitOfWork); ObjectSet <AdminTransaction> transactionObjSet = ((CurrentDeskClientsEntities)adminTransactionRepo.Repository.UnitOfWork.Context).AdminTransactions; //Get particular transaction var transaction = transactionObjSet.Where(tran => tran.PK_TransactionID == approveTransaction.PK_TransactionID).FirstOrDefault(); //Update its fields if (transaction != null) { transaction.TransactionAmount = approveTransaction.TransactionAmount; transaction.FeeAmount = approveTransaction.FeeAmount; transaction.ApprovedDate = DateTime.UtcNow; transaction.Notes = approveTransaction.Notes; transaction.FK_FundingSourceID = approveTransaction.FK_FundingSourceID; transaction.IsApproved = true; adminTransactionRepo.Save(); return(true); } return(false); } } catch (Exception ex) { CommonErrorLogger.CommonErrorLog(ex, System.Reflection.MethodBase.GetCurrentMethod().Name); throw; } }
public void Delete(AdminTransaction entity) { Repository.Delete(entity); }
public void Add(AdminTransaction entity) { Repository.Add(entity); }
/// <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!" })); } }
/// <summary> /// This action inserts new fund withdraw request in database /// </summary> /// <param name="withdrawData">withdrawData</param> /// <returns></returns> public ActionResult AddWithdrawRequest(FundWithdrawData withdrawData) { try { if (SessionManagement.UserInfo != null) { LoginInformation loginInfo = SessionManagement.UserInfo; var organizationID = (int)SessionManagement.OrganizationID; var currencyID = lCurrValueBO.GetCurrencyIDFromSymbol(withdrawData.Currency); var accountDetails = clientAccBO.GetLandingAccountForCurrencyOfUser(LoginAccountType.PartnerAccount, loginInfo.UserID, currencyID); var availableBalance = accountDetails != null ? (decimal)accountDetails.CurrentBalance : 0; //Check if balance is greater or equal to withdraw request if (availableBalance >= withdrawData.Amount) { //Check if balance greater than pending withdrawal requests if (availableBalance >= (adminTransactionBO.GetPendingWithdrawalAmount(withdrawData.AccountNumber, organizationID) + withdrawData.Amount)) { //Assigning property values var newWithdrawRequest = new AdminTransaction(); newWithdrawRequest.TransactionDate = DateTime.UtcNow; newWithdrawRequest.FK_UserID = loginInfo.UserID; newWithdrawRequest.AccountNumber = withdrawData.AccountNumber; newWithdrawRequest.FK_BankInfoID = withdrawData.BankInfoID; newWithdrawRequest.FK_CurrencyID = currencyID; newWithdrawRequest.TransactionAmount = withdrawData.Amount; newWithdrawRequest.FK_AdminTransactionTypeID = (int)AdminTransactionType.OutgoingFunds; newWithdrawRequest.Notes = withdrawData.Notes; newWithdrawRequest.ClientName = introducingBrokerBO.GetPartnerName(loginInfo.UserID); newWithdrawRequest.IsApproved = false; newWithdrawRequest.IsDeleted = false; newWithdrawRequest.FK_OrganizationID = organizationID; //Call BO method to add if (adminTransactionBO.AddNewAdminTransactionRequest(newWithdrawRequest)) { //Log activity details InsertDepositOrWithdrawActivityDetails(Constants.K_WITHDRAW, currencyID, withdrawData.Amount, withdrawData.AccountNumber, withdrawData.BankInfoID, Constants.K_STATUS_PENDING); return(Json(new { status = true })); } else { return(Json(new { status = false, message = "Some error occurred!" }, JsonRequestBehavior.AllowGet)); } } else { return(Json(new { status = false, message = "Insufficient balance due to pending withdrawal requests!" }, JsonRequestBehavior.AllowGet)); } } else { return(Json(new { status = false, message = "Insufficient account balance!" }, JsonRequestBehavior.AllowGet)); } } else { return(RedirectToAction("Login", "Account")); } } catch (Exception ex) { CurrentDeskLog.Error(ex.Message, ex); return(Json(new { status = false, message = "Some error occurred!" }, JsonRequestBehavior.AllowGet)); } }