// 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;
            }
        }
예제 #3
0
 public void Delete(AdminTransaction entity)
 {
     Repository.Delete(entity);
 }
예제 #4
0
 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));
            }
        }