public bool GetWageredAndDrop(ref RTOnlineWageredDropDetail WageredDropDetail)
        {
            bool IsSuccessfull = false;
            DataSet TicketHistory = new DataSet();
            TicketHistory = redeemTicketDB.GetTicketHistory(WageredDropDetail);

            foreach (DataRow drTicketHistory in TicketHistory.Tables[0].Rows)
            {
                WageredDropDetail.WageredAmount = WageredDropDetail.WageredAmount + Convert.ToDouble(drTicketHistory["Credits_Wagered"]) / 100;
                WageredDropDetail.DropAmount = WageredDropDetail.DropAmount + (Convert.ToDouble(drTicketHistory["COINS_IN"]) + Convert.ToDouble(drTicketHistory["Notes_IN"]));
                IsSuccessfull = true;
            }
            return IsSuccessfull;
        }
        /// <summary>
        /// Returns the currency symbol.
        /// </summary>
        /// <returns></returns>
        public DataSet GetTicketHistory(RTOnlineWageredDropDetail WagDrop)
        {
            DataSet TicketHistory = new DataSet();

            try
            {

                //DataBaseServiceHandler.ConnectionString = CommonDataAccess.ExchangeConnectionString;
                TicketHistory = DataBaseServiceHandler.Fill(CommonDataAccess.ExchangeConnectionString, CommandType.StoredProcedure, DBConstants.CONST_RSP_GETTICKETHISTORY, TicketHistory,
                    DataBaseServiceHandler.AddParameter<string>(DBConstants.CONST_PARAM_VOUCHER, DbType.String, WagDrop.TicketString));
            }
            catch (Exception exTicketHistory)
            {
                ExceptionManager.Publish(exTicketHistory);
                TicketHistory = null;
            }
            return TicketHistory;
        }
        public bool CheckTicketCage(RTOnlineTicketDetail TicketDetail)
        {

            string LocalTicketorSiteCode;
            string sURL;
            ValidateSiteCode(TicketDetail.TicketString, out LocalTicketorSiteCode, out sURL);

            if (sURL.IsNullOrEmpty() || sURL == "INVALID") //Invalid Site Code or No rights to access other Site
            {
                LogManager.WriteLog("CheckTicketCage:Invalid URL(Site Code Mismatch) " + TicketDetail.TicketString, LogManager.enumLogLevel.Debug);
                TicketDetail.TicketStatus = "Site Code Mismatch";
                TicketDetail.TicketStatusCode = -99;
                TicketDetail.ValidTicket = false;
                //return TicketDetail;
            }
            else if (sURL.StartsWith("http")) // WebService Call in case of Different Site Code 
            {
                LogManager.WriteLog(string.Format("CheckVoucherCage:URL {0} : Voucher {1}  ", sURL, TicketDetail.TicketString), LogManager.enumLogLevel.Debug);
                EndpointAddress objEndpoint = new EndpointAddress(sURL);
                TicketingServiceClient objClient = new TicketingServiceClient(objEndpoint, LocalTicketorSiteCode);

                //EndpointAddress objEndpoint = new EndpointAddress("http://10.2.108.29/TicketingWCFService/TicketingService.svc"); //sURL
                //TicketingServiceClient objClient = new TicketingServiceClient(objEndpoint, "1001"); //LocalTicketorSiteCode);
                TicketDetail.ClientSiteCode = LocalTicketorSiteCode;
                TicketDetail.RedeemedMachine = Environment.MachineName + "_Cage";
                TicketDetail = objClient.RedeemOnlineTicket(TicketDetail);

                if (TicketDetail.ValidTicket)
                {
                    //Cross Ticketing- Insert Local Record 
                    if (!string.IsNullOrEmpty(TicketDetail.VoucherXMLData))
                    {
                        TicketDetail.RedeemedUser = Security.SecurityHelper.CurrentUser.UserName;
                        ImportVoucherDetails(TicketDetail);
                    }
                }
                else
                {
                    LogManager.WriteLog(string.Format("CheckVoucherCage:URL {0} : Voucher {1} STATUS {2}  ", sURL, TicketDetail.TicketString, TicketDetail.TicketStatus), LogManager.enumLogLevel.Debug);

                    string strStatus = string.Empty;
                    switch (TicketDetail.TicketStatus)
                    {
                        case "MessageID211":
                            strStatus = "BLANK VOUCHER";
                            break;
                        case "MessageID212":// Application.Current.FindResource("MessageID212") as string;  
                            strStatus = "NO DB CONNECTION";
                            break;
                        case "MessageID213":
                            strStatus = "VOUCHER NOT FOUND";// Application.Current.FindResource("MessageID213") as string; 

                            if (CheckOfflineRedeemEnabled())
                            {
                                if (OfflineTicket(ref TicketDetail))
                                {
                                    strStatus = "OFFILNE VOUCHER CLAIMED";// Application.Current.FindResource("MessageID214") as string;  
                                    TicketDetail.EnableTickerPrintDetails = true;
                                }
                                else
                                {
                                    TicketDetail.ShowOfflineTicketScreen = true;
                                }
                            }
                            break;
                        case "MessageID215":// Application.Current.FindResource("MessageID215") as string;  
                            strStatus = "ALREADY CLAIMED";
                            TicketDetail.EnableTickerPrintDetails = true;

                            GetTicketDetails(ref TicketDetail);

                            //if (HFXVHTicket.GetTicketDetails(ref TicketString))
                            //{
                            //    TicketDetail.RedeemedMachine = HFXVHTicket.PrintedMachine;
                            //    TicketDetail.RedeemedDevice = HFXVHTicket.RedeemedMachine;
                            //    TicketDetail.RedeemedDate = HFXVHTicket.RedeemedDate;                              
                            //    TicketDetail.RedeemedAmount = CommonUtilities.GetCurrency((Convert.ToDouble(HFXVHTicket.Value) / 100));
                            //}
                            //else
                            //{
                            //    TicketDetail.RedeemedMachine = "";
                            //    TicketDetail.RedeemedDevice = "";
                            //    TicketDetail.RedeemedDate = "";
                            //    TicketDetail.RedeemedAmount = "";
                            //}

                            break;
                        case "MessageID216":// Application.Current.FindResource("MessageID216") as string;  
                            strStatus = "NON PAYOUT TYPE";
                            break;
                        case "MessageID217":// Application.Current.FindResource("MessageID217") as string;  
                            strStatus = "INVALID VOUCHER TYPE";
                            break;
                        case "MessageID218":// Application.Current.FindResource("MessageID218") as string; 
                            strStatus = "INVALID VOUCHER";
                            break;
                        case "MessageID219":// Application.Current.FindResource("MessageID219") as string; 
                            strStatus = "VOUCHER EXPIRED";
                            break;
                        case "MessageID220":// Application.Current.FindResource("MessageID220") as string; 
                            strStatus = "VOUCHER VOIDED";
                            break;
                        case "MessageID221":// Application.Current.FindResource("MessageID221") as string;  
                            strStatus = "VOUCHER EXCEPTION";
                            break;
                        case "MessageID222":// Application.Current.FindResource("MessageID222") as string; 
                            strStatus = "PROMO VOUCHER";
                            break;
                        case "MessageID223": //Application.Current.FindResource("MessageID223") as string;   
                            strStatus = "INVALID - CANCELLED VOUCHER";
                            break;
                        case "MessageID306":// Application.Current.FindResource("MessageID306") as string;
                            strStatus = "NON CASHABLE VOUCHER";
                            break;
                        case "MessageID312":// Application.Current.FindResource("MessageID312") as string;
                            strStatus = "Site Code Mismatch";
                            break;
                        case "MessageID214":
                            CheckTicket(TicketDetail);
                            strStatus = "OFFILNE VOUCHER CLAIMED";// Application.Current.FindResource("MessageID214") as string;
                            break;
                        default:
                            strStatus = "UNSPECIFIED ERROR";// Application.Current.FindResource("MessageID224") as string; 
                            break;

                    }
                    TicketDetail.TicketStatus = strStatus;
                }
                return TicketDetail.ValidTicket;
            }

            int Return = 0;

            bool isValidTicket = false;

            string TicketStatus = "";
            string TicketString = TicketDetail.TicketString;

            //HFXVH.Ticket HFXVHTicket = new HFXVH.Ticket();
            RTOnlineWageredDropDetail WageredDropDetail = new RTOnlineWageredDropDetail();


            TicketDetail.ShowOfflineTicketScreen = false;
            try
            {

                //Return = HFXVHTicket.TicketIsValid(ref TicketString, ref ReturnValue);
                Return = TicketIsValidCage(TicketString, ref TicketDetail);
                //TicketDetail.TicketValue = ReturnValue;

                if (Return > -1)
                {
                    TicketStatus = "VALID VOUCHER" + "(" + CommonUtilities.GetCurrency(Convert.ToDouble(TicketDetail.TicketValue / 100)) + ")";
                    isValidTicket = true;
                }
                else
                {
                    switch (Return)
                    {
                        case -1:
                            TicketStatus = "BLANK VOUCHER";
                            break;
                        case -2:
                            TicketStatus = "NO DB CONNECTION";
                            break;
                        case -3:
                            TicketStatus = "VOUCHER NOT FOUND";

                            if (CheckOfflineRedeemEnabled())
                            {
                                if (OfflineTicket(ref TicketDetail))
                                {
                                    TicketStatus = "OFFILNE VOUCHER CLAIMED";
                                    TicketDetail.EnableTickerPrintDetails = true;
                                }
                                else
                                {
                                    TicketDetail.ShowOfflineTicketScreen = true;
                                }
                            }
                            break;
                        case -4:
                            TicketStatus = "ALREADY CLAIMED";
                            TicketDetail.EnableTickerPrintDetails = true;

                            GetTicketDetails(ref TicketDetail);

                            //if (HFXVHTicket.GetTicketDetails(ref TicketString))
                            //{
                            //    TicketDetail.RedeemedMachine = HFXVHTicket.PrintedMachine;
                            //    TicketDetail.RedeemedDevice = HFXVHTicket.RedeemedMachine;
                            //    TicketDetail.RedeemedDate = HFXVHTicket.RedeemedDate;                              
                            //    TicketDetail.RedeemedAmount = CommonUtilities.GetCurrency((Convert.ToDouble(HFXVHTicket.Value) / 100));
                            //}
                            //else
                            //{
                            //    TicketDetail.RedeemedMachine = "";
                            //    TicketDetail.RedeemedDevice = "";
                            //    TicketDetail.RedeemedDate = "";
                            //    TicketDetail.RedeemedAmount = "";
                            //}

                            break;
                        case -5:
                            TicketStatus = "NON PAYOUT TYPE";
                            break;
                        case -6:
                            TicketStatus = "INVALID VOUCHER TYPE";
                            break;
                        case -7:
                            TicketStatus = "INVALID VOUCHER";
                            break;
                        case -8:
                            TicketStatus = "VOUCHER EXPIRED";
                            break;
                        case -9:
                            TicketStatus = "VOUCHER VOIDED";
                            break;
                        case -10:
                            TicketStatus = "VOUCHER EXCEPTION";
                            break;
                        case -11:
                            TicketStatus = "PROMO VOUCHER";
                            break;
                        case -12:
                            TicketStatus = "INVALID - CANCELLED VOUCHER";
                            break;
                        case -13:
                            TicketStatus = "NON CASHABLE VOUCHER";
                            break;
                        case -14:
                            TicketStatus = "Site Code Mismatch";
                            break;
                        case -98:
                            CheckTicketCage(TicketDetail);
                            TicketStatus = "OFFILNE VOUCHER CLAIMED";
                            break;
                        default:
                            TicketStatus = "UNSPECIFIED ERROR";
                            break;
                    }
                }
                TicketDetail.TicketStatus = TicketStatus;

                if (isValidTicket || Return == -4)
                {
                    TicketDetail.ValidTicket = true;

                    GetTicketDetails(ref TicketDetail);

                    //if (HFXVHTicket.GetTicketDetails(ref TicketString))
                    //{
                    //    TicketDetail.RedeemedMachine = HFXVHTicket.PrintedMachine;
                    //    TicketDetail.RedeemedAmount = CommonUtilities.GetCurrency((Convert.ToDouble(HFXVHTicket.Value) / 100));
                    //}
                    //else
                    //{
                    //    TicketDetail.RedeemedMachine = "";
                    //    TicketDetail.RedeemedAmount = "";
                    //}

                    // Check laundering limits, if amount wagered is not enough of credits in, show warning
                    if (Settings.EnableLaundering)
                    {
                        double Wagered = 0;
                        double Drop = 0;
                        WageredDropDetail.WageredAmount = 0;
                        WageredDropDetail.DropAmount = 0;
                        WageredDropDetail.TicketString = TicketString;

                        bool isSuccess = GetWageredAndDrop(ref WageredDropDetail);

                        if (isSuccess)
                        {
                            Wagered = WageredDropDetail.WageredAmount;
                            Drop = WageredDropDetail.DropAmount;
                        }

                        if (Drop > 0)
                        {
                            if ((100 - (((Drop - Wagered) * 100) / Drop)) <= GetAmberCreditsWageredtoCashIn())
                                TicketDetail.TicketWarning = "Suspect Voucher..";
                        }
                    }
                    //Commecnted for cage
                    //if (CheckTicketValidateVoucherEnabled() && isValidTicket)
                    //{
                    //    BMC.Common.LogManagement.LogManager.WriteLog("Started RTOnlineReceiptDetail", BMC.Common.LogManagement.LogManager.enumLogLevel.Debug);
                    //    RTOnlineReceiptDetail ReceiptDetail = new RTOnlineReceiptDetail();
                    //    TicketRedemptionReceiptCreate((TicketDetail.TicketValue / 100), "", TicketString, 0, ref ReceiptDetail);//HFXVHTicket.CurrentPayoutID);                        
                    //    CommonUtilities oCommonUtilities = new CommonUtilities();
                    //    oCommonUtilities.GetCommonValues(TicketDetail, ReceiptDetail);
                    //    BMC.Common.LogManagement.LogManager.WriteLog("Done RTOnlineReceiptDetail", BMC.Common.LogManagement.LogManager.enumLogLevel.Debug);
                    //}

                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Publish(ex);
            }
            return TicketDetail.ValidTicket;
        }
        /// <summary>
        /// For offline Ticket Check-Durga
        /// </summary>
        /// <param name="TicketDetail"></param>
        /// <returns></returns>
        public RTOnlineTicketDetail CheckTicket(RTOnlineTicketDetail TicketDetail)
        {

            string LocalTicketorSiteCode;
            string sURL;
            int Installation_No = 0;
            int ValidationLength = 0;
            bool OfflineTicketRedemption = false;
            bool isTISPrintedTicket = VoucherHelper.IsTISPrintedTicket(TicketDetail.TicketString);

            if (!isTISPrintedTicket)
            {
                LinqDataAccessDataContext linqDBExchange = new LinqDataAccessDataContext(CommonDataAccess.ExchangeConnectionString);
                IEnumerable<InstallationFromTicket> InstallationTicket = linqDBExchange.GetInstallationNumber(TicketDetail.TicketString);
                foreach (var item in InstallationTicket)
                {
                    Installation_No = item.installation_no.Value;
                }
                DataTable InstallationDetails = (new CommonDataAccess()).GetInstallationDetails(0, Installation_No, false, false);
                if (InstallationDetails.Rows.Count > 0)
                {
                    try
                    {
                        int.TryParse(InstallationDetails.Rows[0]["Validation_length"].ToString(), out ValidationLength);
                        if (ValidationLength == 0) ValidationLength = CONST_DEFAULT_TICKET_LENGTH;
                    }
                    catch { ValidationLength = CONST_DEFAULT_TICKET_LENGTH; }
                }
                if (ValidationLength == CONST_DEFAULT_TICKET_LENGTH)
                {
                    ValidateSiteCode(TicketDetail.TicketString, out LocalTicketorSiteCode, out sURL);

                    if (sURL.IsNullOrEmpty() || sURL == "INVALID") //Invalid Site Code or No rights to access other Site
                    {
                        TicketDetail.TicketStatus = "MessageID312";
                        TicketDetail.TicketStatusCode = -99;
                        TicketDetail.ValidTicket = false;
                        return TicketDetail;
                    }
                    else if (sURL.StartsWith("http")) // WebService Call in case of Different Site Code 
                    {
                        EndpointAddress objEndpoint = new EndpointAddress(sURL);
                        TicketingServiceClient objClient = new TicketingServiceClient(objEndpoint, LocalTicketorSiteCode);

                        //EndpointAddress objEndpoint = new EndpointAddress("http://10.2.108.29/TicketingWCFService/TicketingService.svc"); //sURL
                        //TicketingServiceClient objClient = new TicketingServiceClient(objEndpoint, "1001"); //LocalTicketorSiteCode);
                        return objClient.RedeemOnlineTicket(TicketDetail);

                    }
                }
            }
            else
            {
                if (!VoucherHelper.IsEffectiveDateActivated(TicketDetail.TicketString))
                {
                    TicketDetail.TicketStatus = "MessageID876";
                    TicketDetail.ValidTicket = false;
                    return TicketDetail;
                }
                //else if (VoucherHelper.IsCardRequired(TicketDetail.TicketString))
                //{
                //    TicketDetail.TicketStatus = "MessageID878";
                //    TicketDetail.ValidTicket = false;
                //    return TicketDetail;
                //}
            }

            // Local Site Code (Default)

            int Return = 0;

            bool isValidTicket = false;

            string TicketStatus = "";
            string TicketString = TicketDetail.TicketString;

            //HFXVH.Ticket HFXVHTicket = new HFXVH.Ticket();
            RTOnlineWageredDropDetail WageredDropDetail = new RTOnlineWageredDropDetail();


            TicketDetail.ShowOfflineTicketScreen = false;
            try
            {

                //Return = HFXVHTicket.TicketIsValid(ref TicketString, ref ReturnValue);
                Return = TicketIsValid(TicketString, isTISPrintedTicket, ref TicketDetail);
                //TicketDetail.TicketValue = ReturnValue;

                if (Return > -1)
                {
                    TicketStatus = "MessageID210";

                    //                        "VALID VOUCHER"+
                    //Application.Current.FindResource("MessageID210") as string 
                    //                  "(" + CommonUtilities.GetCurrency(Convert.ToDouble(TicketDetail.TicketValue / 100)) + ")";
                    isValidTicket = true;
                }
                else
                {
                    switch (Return)
                    {
                        case -1:
                            TicketStatus = "MessageID211";// Application.Current.FindResource("MessageID211") as string;
                            break;
                        case -2:
                            TicketStatus = "MessageID212";// Application.Current.FindResource("MessageID212") as string;  
                            break;
                        case -3:
                            TicketStatus = "MessageID213";// Application.Current.FindResource("MessageID213") as string; 

                            if (CheckOfflineRedeemEnabled())
                            {
                                if (OfflineTicket(ref TicketDetail))
                                {
                                    TicketStatus = "MessageID214";// Application.Current.FindResource("MessageID214") as string;  
                                    TicketDetail.EnableTickerPrintDetails = true;
                                }
                                else
                                {
                                    TicketDetail.ShowOfflineTicketScreen = true;
                                }
                            }
                            break;
                        case -4:
                            TicketStatus = "MessageID215";// Application.Current.FindResource("MessageID215") as string;  
                            TicketDetail.EnableTickerPrintDetails = true;

                            GetTicketDetails(ref TicketDetail);

                            //if (HFXVHTicket.GetTicketDetails(ref TicketString))
                            //{
                            //    TicketDetail.RedeemedMachine = HFXVHTicket.PrintedMachine;
                            //    TicketDetail.RedeemedDevice = HFXVHTicket.RedeemedMachine;
                            //    TicketDetail.RedeemedDate = HFXVHTicket.RedeemedDate;                              
                            //    TicketDetail.RedeemedAmount = CommonUtilities.GetCurrency((Convert.ToDouble(HFXVHTicket.Value) / 100));
                            //}
                            //else
                            //{
                            //    TicketDetail.RedeemedMachine = "";
                            //    TicketDetail.RedeemedDevice = "";
                            //    TicketDetail.RedeemedDate = "";
                            //    TicketDetail.RedeemedAmount = "";
                            //}

                            break;
                        case -5:
                            TicketStatus = "MessageID216";// Application.Current.FindResource("MessageID216") as string;  
                            break;
                        case -6:
                            TicketStatus = "MessageID217";// Application.Current.FindResource("MessageID217") as string;  
                            break;
                        case -7:
                            TicketStatus = "MessageID218";// Application.Current.FindResource("MessageID218") as string; 
                            break;
                        case -8:
                            TicketStatus = "MessageID219";// Application.Current.FindResource("MessageID219") as string; 
                            break;
                        case -9:
                            TicketStatus = "MessageID220";// Application.Current.FindResource("MessageID220") as string; 
                            break;
                        case -10:
                            TicketStatus = "MessageID221";// Application.Current.FindResource("MessageID221") as string;  
                            break;
                        case -11:
                            TicketStatus = "MessageID222";// Application.Current.FindResource("MessageID222") as string; 
                            break;
                        case -12:
                            TicketStatus = "MessageID223"; //Application.Current.FindResource("MessageID223") as string;   
                            break;
                        case -13:
                            TicketStatus = "MessageID306";// Application.Current.FindResource("MessageID306") as string;
                            break;
                        case -14:
                            TicketStatus = "MessageID312";// Application.Current.FindResource("MessageID312") as string;
                            break;
                        case -98:
                            CheckTicket(TicketDetail);
                            TicketStatus = "MessageID214";// Application.Current.FindResource("MessageID214") as string;
                            break;
                        default:
                            TicketStatus = "MessageID224";// Application.Current.FindResource("MessageID224") as string; 
                            break;
                    }
                }
                TicketDetail.TicketStatus = TicketStatus;

                if (isValidTicket || Return == -4)
                {
                    TicketDetail.ValidTicket = true;

                    GetTicketDetails(ref TicketDetail);

                    //if (HFXVHTicket.GetTicketDetails(ref TicketString))
                    //{
                    //    TicketDetail.RedeemedMachine = HFXVHTicket.PrintedMachine;
                    //    TicketDetail.RedeemedAmount = CommonUtilities.GetCurrency((Convert.ToDouble(HFXVHTicket.Value) / 100));
                    //}
                    //else
                    //{
                    //    TicketDetail.RedeemedMachine = "";
                    //    TicketDetail.RedeemedAmount = "";
                    //}

                    // Check laundering limits, if amount wagered is not enough of credits in, show warning
                    if (Settings.EnableLaundering)
                    {
                        double Wagered = 0;
                        double Drop = 0;
                        WageredDropDetail.WageredAmount = 0;
                        WageredDropDetail.DropAmount = 0;
                        WageredDropDetail.TicketString = TicketString;

                        bool isSuccess = GetWageredAndDrop(ref WageredDropDetail);

                        if (isSuccess)
                        {
                            Wagered = WageredDropDetail.WageredAmount;
                            Drop = WageredDropDetail.DropAmount;
                        }

                        if (Drop > 0)
                        {
                            if ((100 - (((Drop - Wagered) * 100) / Drop)) <= GetAmberCreditsWageredtoCashIn())
                                TicketDetail.TicketWarning = "Suspect Voucher..";
                        }
                    }

                    if (CheckTicketValidateVoucherEnabled() && isValidTicket)
                    {
                        //Check for Offline
                        if (OfflineTicket(ref TicketDetail))
                            OfflineTicketRedemption = true;


                        BMC.Common.LogManagement.LogManager.WriteLog("Started RTOnlineReceiptDetail", BMC.Common.LogManagement.LogManager.enumLogLevel.Debug);
                        RTOnlineReceiptDetail ReceiptDetail = new RTOnlineReceiptDetail();
                        TicketRedemptionReceiptCreate((TicketDetail.TicketValue / 100), "", TicketString, 0, ref ReceiptDetail);//HFXVHTicket.CurrentPayoutID);                        
                        CommonUtilities oCommonUtilities = new CommonUtilities();
                        if (OfflineTicketRedemption)
                            oCommonUtilities.GetCommonValues(TicketDetail, ReceiptDetail, "OFFLINE VOUCHER REDEMPTION");
                        else
                            oCommonUtilities.GetCommonValues(TicketDetail, ReceiptDetail);
                        BMC.Common.LogManagement.LogManager.WriteLog("Done RTOnlineReceiptDetail", BMC.Common.LogManagement.LogManager.enumLogLevel.Debug);
                    }

                }
                return TicketDetail;
            }
            catch (Exception ex)
            {
                ExceptionManager.Publish(ex);
                return TicketDetail;
            }
        }