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); } }
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; } }