/// <summary>
        /// To desirealizeObject_On_TypeBase
        /// </summary>
        /// <param name="type"></param>
        /// <param name="response"></param>
        /// <returns></returns>
        private object desirealizeObject_On_TypeBase(int type, object response)
        {
            try
            {
                switch (type)
                {
                case 1:
                {
                    FareEnquiry_Response_Type1 Response = (FareEnquiry_Response_Type1)response;
                    return(Response);
                }

                case 2:
                {
                    FareEnquiry_Response_Type2 Response = (FareEnquiry_Response_Type2)response;
                    return(Response);
                }

                default:
                {
                    FareEnquiry_Response_Type3 Response = (FareEnquiry_Response_Type3)response;
                    return(Response);
                }
                }
            }
            catch
            {
                return(response);
            }
        }
        private long addPassenger(long Icardno, long ordrId, passengerList p, FareEnquiry_Response_Type3 Response, TransactionalTrainFareRequest Request)
        {
            ITicketPassengersRepository _passenger = new TicketPassengersRepository(_applicationDbContext);
            TicketPassengers            psngr      = _passenger.AddPassenger(new TicketPassengers()
            {
                ticketOrderId   = ordrId,
                name            = p.passengerName,
                sex             = p.passengerGender,
                age             = Convert.ToInt32(p.passengerAge),
                berthPreference = Request.berthPreference,
                foodPreference  = "",
                concessionCode  = "",
                idCardType      = Convert.ToInt32(Icardno),
                idCardNumber    = p.passengerCardNumber,
                firstChildName  = Request.firstChildName,
                firstChildAge   = Request.firstChildAge,
                firstChildSex   = Request.firstChildSex,
                secondChildName = Request.secondChildName,
                secondChildAge  = Request.secondChildAge,
                secondChildSex  = Request.secondChildSex,
                bedRoll         = Request.bedRoll,
                bookingStatus   = "",
                coach           = "",
                seat            = "",
                berth           = "",
                currentStatus   = ""
            });

            _passenger.Commit();
            return(psngr.Id);
        }
        private long Order(passengerList p, FareEnquiry_Response_Type3 Response, TransactionalTrainFareRequest Request, passengerList[] psngerArray)
        {
            IIDCardTypeRepository       _card         = new IDCardTypeRepository(_applicationDbContext);
            IQuotaRepository            _quota        = new QuotaRepository(_applicationDbContext);
            IUserRegistrationRepository _user         = new UserRegistrationRepository(_applicationDbContext);
            ITicketStatusRepository     _status       = new TicketStatusRepository(_applicationDbContext);
            IMerchantTypeRepository     _merchantType = new MerchantTypeRepository(_applicationDbContext);
            var Status       = _status.FindBy(x => x.fullName == "ORDERD").FirstOrDefault().Id;
            var QuotaId      = _quota.FindBy(x => x.shortName == Request.quota).FirstOrDefault().Id;
            var Icardno      = _card.FindBy(x => x.name == p.passengerCardType).FirstOrDefault().Id;
            var User         = _user.FindBy(x => x.merchantAccount == Request.loginAccountNo).SingleOrDefault();
            var merchantType = _merchantType.FindBy(x => x.merchantId == User.merchantId).SingleOrDefault();
            // Dynamic Pgcharges
            decimal PgCharge = merchantType.conditionalAmount >= Convert.ToDecimal(Response.totalFare) ?decimal.Divide(decimal.Multiply(Convert.ToDecimal(Response.totalFare), Convert.ToDecimal(merchantType.pgChargeUnderCondition)), 100)
            :decimal.Divide(decimal.Multiply(Convert.ToDecimal(Response.totalFare), Convert.ToDecimal(merchantType.pgChargeBeyondCondition)), 100);

            TicketOrders Order = _order.AddTicketOrder(new TicketOrders()
            {
                sourceStation = Request.trainFrom,
                destStation   = Request.trainTo,
                trainNumber   = Request.trainNo,
                trainName     = Response.trainName,
                Class         = Request.trainClass,
                reserveUpto   = Request.trainTo,
                bordingPoint  = Request.request.boardingStation,
                ticketAmt     = Convert.ToDecimal(Response.totalFare),
                totalAmt      = Convert.ToDecimal(Response.totalFare) + merchantType.oxigenServiceCharge - merchantType.merchantCommission, //from database from --
                //merchantConfigTable(totalfare+oxigenServiceCharge-MerchantCommission)
                journeyDay            = Convert.ToInt32(Request.journyDate.Substring(6)),
                journeyMonth          = Convert.ToInt32(Request.journyDate.Substring(4, 2)),
                journeyYear           = Convert.ToInt32(Request.journyDate.Substring(0, 4)),
                quota                 = Convert.ToInt32(QuotaId), //from data base based on quota id
                pmtGatewayName        = merchantType.pgName,
                pmtCardType           = Request.pmtCardType,
                accountNumber         = Request.accountNumber,
                irctcServiceCharge    = Convert.ToDecimal(Response.wpServiceCharge) + Convert.ToDecimal(Response.wpServiceTax),
                operatorCode          = Request.operatorCode,
                mobileNo              = Request.request.mobileNumber,
                idCardNumber          = p.passengerCardNumber,
                idCardType            = Convert.ToInt32(Icardno), //will get by p.passengerCardType from database
                ticketStatus          = Convert.ToInt32(Status),  //ticketstatus from database
                paymentGateway        = (long)(PgCharge),         //payment gateway charges from database in percent
                session               = Request.userSession,
                bookingDate           = DateTime.Now,
                oxigenServiceCharge   = merchantType.oxigenServiceCharge, //from database from merchantConfigTable
                email                 = Request.PassengerEmail,           //from database using login account no
                loginAccountNo        = Request.loginAccountNo,
                bookingSource         = HttpContext.Connection.RemoteIpAddress.ToString(),
                reservationChoice     = (Request.request.reservationChoice) == "FALSE" ? "N" : "Y",
                isTatkal              = Request.isTatkal,
                ticketVerificationKey = Request.loginAccountNo + ":" + Request.trainNo + ":" + Request.trainFrom + ":" + Request.trainTo + ":" + Request.userSession + ":" + Request.journyDate + ":" + Request.request.mobileNumber,
                psgAddress            = Request.psgAddress,
                irctcTxnNumber        = Request.request.clientTransactionId
            });

            _order.Commit();
            if (psngerArray != null)
            {
                foreach (passengerList p1 in psngerArray)
                {
                    long NewpsngrId = addPassenger(Icardno, Order.Id, p1, Response, Request);
                }
            }
            else
            {
                long NewpsngrId = addPassenger(Icardno, Order.Id, p, Response, Request);
            }
            return(Order.Id);
        }
        public IActionResult Fetch_NonTransact_TrainFare([FromBody] TrainFareRequest Request) //parameter will be as like /N
        {
            object        response = "";
            ErrorResponse error    = new ErrorResponse();

            if (!ModelState.IsValid || string.IsNullOrEmpty(Request.trainNo) || string.IsNullOrEmpty(Request.journyDate) || string.IsNullOrEmpty(Request.trainFrom) || string.IsNullOrEmpty(Request.trainTo) || string.IsNullOrEmpty(Request.trainClass) || string.IsNullOrEmpty(Request.quota))
            {
                return(Ok(new Application_ResponseWrapper()
                {
                    ResponseCode = "1000", ResponseMessage = "Invalid model", Status = "failed", ResponseResult = ""
                }));
            }
            if (string.IsNullOrEmpty(_irctcUrl) || string.IsNullOrEmpty(_irctc_userName) || string.IsNullOrEmpty(_irctc_password))
            {
                return(Ok(new Application_ResponseWrapper()
                {
                    ResponseCode = "1001", ResponseMessage = "No IRCTC configuration found", Status = "failed"
                }));
            }
            _irctcUrl = _irctcUrl + "taenqservices/avlFareenquiry/" + Request.trainNo + "/" + Request.journyDate + "/" + Request.trainFrom + "/" + Request.trainTo + "/" + Request.trainClass + "/" + Request.quota + "/N";
            try
            {
                CommunicationLog("OxiRail", "availableFareenquiry OUT->>" + JsonConvert.SerializeObject(Request.request).ToString(), Request.userSession);
                switch (Convert.ToInt32(Request.request.enquiryType))
                {
                case 1:
                {
                    FareEnquiry_Response_Type1 Response = new FareEnquiry_Response_Type1();
                    response = _booking.FindFareEnquiry(_irctcUrl, Request.request, Request.userSession, _authInfo);
                    Response = (FareEnquiry_Response_Type1)JsonConvert.DeserializeObject(response.ToString(), typeof(FareEnquiry_Response_Type1));
                    if (Response.bkgCfg != null)
                    {
                        error.Dispose();
                        CommunicationLog("OxiRail", "availableFareenquiry IN->>" + JsonConvert.SerializeObject(response).ToString(), Request.userSession);
                        return(Ok(new Application_ResponseWrapper()
                            {
                                ResponseCode = "0", ResponseMessage = "success", Status = "success", ResponseResult = Response
                            }));
                    }
                    else
                    {
                        error = (ErrorResponse)JsonConvert.DeserializeObject(response.ToString(), typeof(ErrorResponse));
                        CommunicationLog("OxiRail", "availableFareenquiry IN->>" + JsonConvert.SerializeObject(error).ToString(), Request.userSession);
                        return(Ok(new Application_ResponseWrapper()
                            {
                                ResponseCode = "1000", ResponseMessage = error.errorMessage, Status = "Error", ResponseResult = ""
                            }));
                    }
                }

                case 2:
                {
                    FareEnquiry_Response_Type2 Response = new FareEnquiry_Response_Type2();
                    response = _booking.FindFareEnquiry(_irctcUrl, Request.request, Request.userSession, _authInfo);
                    Response = (FareEnquiry_Response_Type2)JsonConvert.DeserializeObject(response.ToString(), typeof(FareEnquiry_Response_Type2));
                    if (Response.bkgCfg != null)
                    {
                        error.Dispose();
                        CommunicationLog("OxiRail", "availableFareenquiry IN->>" + JsonConvert.SerializeObject(Response).ToString(), Request.userSession);
                        return(Ok(new Application_ResponseWrapper()
                            {
                                ResponseCode = "0", ResponseMessage = "success", Status = "success", ResponseResult = Response
                            }));
                    }
                    else
                    {
                        error = (ErrorResponse)JsonConvert.DeserializeObject(response.ToString(), typeof(ErrorResponse));
                        CommunicationLog("OxiRail", "availableFareenquiry IN->>" + JsonConvert.SerializeObject(error).ToString(), Request.userSession);
                        return(Ok(new Application_ResponseWrapper()
                            {
                                ResponseCode = "1000", ResponseMessage = error.errorMessage, Status = "Error", ResponseResult = ""
                            }));
                    }
                }

                default:
                {
                    FareEnquiry_Response_Type3 Response = new FareEnquiry_Response_Type3();
                    response = _booking.FindFareEnquiry(_irctcUrl, Request.request, Request.userSession, _authInfo);
                    Response = (FareEnquiry_Response_Type3)JsonConvert.DeserializeObject(response.ToString(), typeof(FareEnquiry_Response_Type3));
                    if (Response.bkgCfg != null)
                    {
                        error.Dispose();
                        CommunicationLog("OxiRail", "availableFareenquiry IN->>" + JsonConvert.SerializeObject(Response).ToString(), Request.userSession);
                        return(Ok(new Application_ResponseWrapper()
                            {
                                ResponseCode = "0", ResponseMessage = "success", Status = "success", ResponseResult = Response
                            }));
                    }
                    else
                    {
                        error = (ErrorResponse)JsonConvert.DeserializeObject(response.ToString(), typeof(ErrorResponse));
                        CommunicationLog("OxiRail", "availableFareenquiry IN->>" + JsonConvert.SerializeObject(error).ToString(), Request.userSession);
                        return(Ok(new Application_ResponseWrapper()
                            {
                                ResponseCode = "1000", ResponseMessage = error.errorMessage, Status = "Error", ResponseResult = ""
                            }));
                    }
                }
                }
            }
            catch (Exception e)
            {
                CommunicationLog("OxiRail", e.ToString(), Request.userSession);
                error.Dispose();
                return(Ok(new Application_ResponseWrapper()
                {
                    ResponseCode = "1000", ResponseMessage = "Api_Error or IRCTC Service Down", Status = "Error", ResponseResult = e
                }));
            }
        }