public void CancellQueueEntry(TradeCancelQueue tradeCancelQueue, long TrnNo, long DeliverServiceID, decimal PendingBuyQty, decimal DeliverQty, short OrderType,
                               decimal DeliverBidPrice, long UserID)
 {
     try
     {
         tradeCancelQueue = new TradeCancelQueue()
         {
             TrnNo            = TrnNo,
             DeliverServiceID = DeliverServiceID,
             TrnDate          = Helpers.UTC_To_IST(),
             PendingBuyQty    = PendingBuyQty,
             DeliverQty       = DeliverQty,
             OrderType        = OrderType,
             DeliverBidPrice  = DeliverBidPrice,
             Status           = 0,
             OrderID          = 0,
             SettledDate      = Helpers.UTC_To_IST(),
             StatusMsg        = "Cancel Order",
             CreatedBy        = UserID,
             CreatedDate      = Helpers.UTC_To_IST()
         };
     }
     catch (Exception ex)
     {
         HelperForLog.WriteErrorLog("CancellQueueEntry:##TrnNo " + TrnNo, ControllerName, ex);
     }
 }
Exemplo n.º 2
0
        public BizResponseClass TradeRecon(long TranNo, string ActionMessage, long UserId)
        {
            BizResponseClass Response = new BizResponseClass();

            try
            {
                var transactionQueue = _transactionQueueRepository.GetById(TranNo);
                var tradeTranQueue   = _tradeTransactionRepository.GetSingle(x => x.TrnNo == TranNo);
                var tradeBuyRequest  = _tradeBuyRepository.GetSingle(x => x.TrnNo == TranNo);

                if (transactionQueue != null && transactionQueue != null && tradeBuyRequest != null)
                {
                    var datediff = _basePage.UTC_To_IST() - transactionQueue.TrnDate;
                    if (UserId != 1 && datediff.Days > 7)
                    {
                        //After 7 days of transaction you can not take action, Please contact admin
                        Response.ReturnCode = enResponseCode.Fail;
                        Response.ReturnMsg  = EnResponseMessage.TradeRecon_After7DaysTranDontTakeAction;
                        Response.ErrorCode  = enErrorCode.TradeRecon_After7DaysTranDontTakeAction;
                    }
                    else if (transactionQueue.Status != 4)
                    {
                        //Invalid Transaction Status For Trade Recon
                        Response.ReturnCode = enResponseCode.Fail;
                        Response.ReturnMsg  = EnResponseMessage.TradeRecon_InvalidTransactionStatus;
                        Response.ErrorCode  = enErrorCode.TradeRecon_InvalidTransactionStatus;
                    }
                    else if (tradeTranQueue.IsCancelled == 1)
                    {
                        //Transaction Cancellation request is already in processing.
                        Response.ReturnCode = enResponseCode.Fail;
                        Response.ReturnMsg  = EnResponseMessage.TradeRecon_CancelRequestAlreayInProcess;
                        Response.ErrorCode  = enErrorCode.TradeRecon_CancelRequestAlreayInProcess;
                    }
                    else if (tradeBuyRequest.IsProcessing == 1)
                    {
                        //Transaction Already in Process, Please try After Sometime
                        Response.ReturnCode = enResponseCode.Fail;
                        Response.ReturnMsg  = EnResponseMessage.TradeRecon_TransactionAlreadyInProcess;
                        Response.ErrorCode  = enErrorCode.TradeRecon_TransactionAlreadyInProcess;
                    }
                    else if (tradeBuyRequest.PendingQty == 0)
                    {
                        //Can not initiate Cancellation Request.Your order is fully executed
                        Response.ReturnCode = enResponseCode.Fail;
                        Response.ReturnMsg  = EnResponseMessage.TradeRecon_OrderIsFullyExecuted;
                        Response.ErrorCode  = enErrorCode.TradeRecon_OrderIsFullyExecuted;
                    }
                    else
                    {
                        var DeliveryQty = Math.Round((transactionQueue.Amount * tradeBuyRequest.PendingQty) / tradeBuyRequest.Qty, 8);

                        if (DeliveryQty == 0 || DeliveryQty < 0)
                        {
                            //Invalid Delivery Amount
                            Response.ReturnCode = enResponseCode.Fail;
                            Response.ReturnMsg  = EnResponseMessage.TradeRecon_InvalidDeliveryAmount;
                            Response.ErrorCode  = enErrorCode.TradeRecon_InvalidDeliveryAmount;
                        }
                        if (DeliveryQty > transactionQueue.Amount)
                        {
                            //Invalid Delivery Amount
                            Response.ReturnCode = enResponseCode.Fail;
                            Response.ReturnMsg  = EnResponseMessage.TradeRecon_InvalidDeliveryAmount;
                            Response.ErrorCode  = enErrorCode.TradeRecon_InvalidDeliveryAmount;
                        }
                        else
                        {
                            //Add record in Transaction Cancel Queue
                            var tradeCancelQueue = new TradeCancelQueue()
                            {
                                TrnNo            = TranNo,
                                DeliverServiceID = transactionQueue.ServiceID,
                                TrnDate          = _basePage.UTC_To_IST(),
                                PendingBuyQty    = tradeBuyRequest.PendingQty,
                                DeliverQty       = DeliveryQty,
                                Status           = 0,
                                StatusMsg        = "Cancel Order",
                                CreatedBy        = UserId,
                                CreatedDate      = _basePage.UTC_To_IST()
                            };

                            tradeCancelQueue = _tradeCancelQueueRepository.Add(tradeCancelQueue);

                            //Add record in PoolOrder
                            var poolOrder = new PoolOrder()
                            {
                                CreatedDate  = _basePage.UTC_To_IST(),
                                CreatedBy    = UserId,
                                TrnMode      = Convert.ToByte(transactionQueue.TrnMode),
                                PayMode      = Convert.ToInt16(enWebAPIRouteType.TradeServiceLocal),
                                ORemarks     = "Cancellation Initiated",
                                OrderAmt     = DeliveryQty,
                                OMemberID    = transactionQueue.MemberID,
                                DMemberID    = tradeBuyRequest.SellStockID,
                                DiscPer      = 0,
                                DiscRs       = 0,
                                Status       = Convert.ToInt16(enTransactionStatus.Initialize),//txn type status
                                UserWalletID = tradeTranQueue.OrderWalletID,
                                //UserWalletAccID = tradeTranQueue.OrderWalletID,
                                TrnNo       = TranNo,
                                CancelID    = tradeCancelQueue.Id,
                                DeliveryAmt = DeliveryQty,
                                DRemarks    = "Cancel Order",

                                //OrderDate = _basePage.UTC_To_IST(),
                                //TrnMode = Convert.ToByte(transactionQueue.TrnMode),
                                //OMemberID = transactionQueue.MemberID,
                                //PayMode = 2,
                                //OrderAmt = DeliveryQty,
                                //DiscPer = 0,
                                //DiscRs = 0,
                                //OBankID = 0,
                                //OBranchName = "",
                                //OAccountNo = "",
                                //OChequeNo = "",
                                //DMemberID = tradeBuyRequest.SellStockID,
                                //DBankID = 0,
                                //DAccountNo = "",
                                //Status = 0,
                                //ORemarks = "",
                                //AlertRec = 0,
                                //CashChargePer = 0,
                                //CashChargeRs = 0,
                                //WalletAmt = 0,
                                //PGId = 0,
                                //CouponNo = 0,
                                //IsChargeAccepted = false,
                                //WalletID = tradeTranQueue.OrderWalletID,
                                //CreatedBy = UserId,
                                //CreatedDate = _basePage.UTC_To_IST()
                            };

                            poolOrder = _poolOrderRepository.Add(poolOrder);

                            //Update TradeBuyRequest
                            tradeBuyRequest.UpdatedDate = _basePage.UTC_To_IST();
                            tradeBuyRequest.UpdatedBy   = UserId;
                            tradeBuyRequest.IsCancel    = 1;
                            _tradeBuyRepository.Update(tradeBuyRequest);

                            //Update TradeTransaction Queue
                            tradeTranQueue.UpdatedDate = _basePage.UTC_To_IST();
                            tradeTranQueue.UpdatedBy   = UserId;
                            tradeTranQueue.IsCancelled = 1;
                            tradeTranQueue.StatusMsg   = "Cancellation Initiated";
                            _tradeTransactionRepository.Update(tradeTranQueue);

                            //Update OrderID in TransactionCancel Queue
                            tradeCancelQueue.OrderID = poolOrder.Id;
                            _tradeCancelQueueRepository.Update(tradeCancelQueue);

                            var tradePoolMaster = _tradePoolMasterRepository.GetSingle(x => x.Id == tradeBuyRequest.SellStockID && x.IsSleepMode == 1);
                            if (tradePoolMaster != null)
                            {
                                tradePoolMaster.IsSleepMode = 0;
                                _tradePoolMasterRepository.Update(tradePoolMaster);
                            }

                            Response.ReturnCode = enResponseCode.Success;
                            Response.ReturnMsg  = EnResponseMessage.TradeRecon_CencelRequestSuccess;
                            Response.ErrorCode  = enErrorCode.TradeRecon_CencelRequestSuccess;
                        }
                    }
                }
                else
                {
                    Response.ReturnCode = enResponseCode.Fail;
                    Response.ReturnMsg  = EnResponseMessage.TradeRecon_InvalidTransactionNo;
                    Response.ErrorCode  = enErrorCode.TradeRecon_InvalidTransactionNo;
                }

                return(Response);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "An unexpected exception occured,\nMethodName:" + System.Reflection.MethodBase.GetCurrentMethod().Name + "\nClassname=" + this.GetType().Name, LogLevel.Error);
                throw ex;
            }
        }