public int PaySDGTicketCage(string BarCode, bool RedeemExpiredTicket, ref RTOnlineTicketDetail TicketDetail)
        {
            try
            {
                var iAmount = DataBaseServiceHandler.AddParameter<int>("iAmount", DbType.Int32, 0, ParameterDirection.Output);
                var iResult = DataBaseServiceHandler.AddParameter<int>("iResult", DbType.Int32, 0, ParameterDirection.Output);
                var sBarcode = DataBaseServiceHandler.AddParameter<string>("sBarcode", DbType.String, "", ParameterDirection.Output);
                var iTicketType = DataBaseServiceHandler.AddParameter<int>("iTicketType", DbType.Int32, 0, ParameterDirection.Output);
                var strHashed = DataBaseServiceHandler.AddParameter<byte>("strHashed", DbType.Byte, 0x0000002D, ParameterDirection.Output);
                var dPrinted = DataBaseServiceHandler.AddParameter<DateTime>("dPrinted", DbType.DateTime, DateTime.Now, ParameterDirection.Output);

                DataBaseServiceHandler.ExecuteNonQuery(CommonDataAccess.TicketingConnectionString, CommandType.StoredProcedure, "pPaySDGTicket",
                    DataBaseServiceHandler.AddParameter<string>("strBarcode", DbType.String, BarCode),
                    DataBaseServiceHandler.AddParameter<bool>("RedeemExpiredTicket", DbType.Boolean, RedeemExpiredTicket),
                    DataBaseServiceHandler.AddParameter<string>("strDeviceID", DbType.String, System.Environment.MachineName+"_Cage"),
                    DataBaseServiceHandler.AddParameter<int>("@AuthorizedUser_No", DbType.Int16, TicketDetail.AuthorizedUser_No),
                    DataBaseServiceHandler.AddParameter<DateTime>("@Authorized_Date", DbType.DateTime, TicketDetail.Authorized_Date == DateTime.MinValue ? DateTime.Now.DBMinValue() : TicketDetail.Authorized_Date),
                    DataBaseServiceHandler.AddParameter<Int64>("@Customer_Id", DbType.Int64, TicketDetail.CustomerId),
                    DataBaseServiceHandler.AddParameter<string>("@ClientSiteCode", DbType.String, Settings.SiteCode),
                    iAmount, iResult, sBarcode, iTicketType, strHashed, dPrinted);

                TicketDetail.TicketValue = Convert.ToInt32(iAmount.Value);
                return Convert.ToInt32(iResult.Value);
            }
            catch (Exception Ex)
            {
                ExceptionManager.Publish(Ex);
                return -99;
            }
        }
 public RTOnlineTicketDetail RedeemOnlineTicket(RTOnlineTicketDetail TicketDetailEntity)
 {
     
    return redeemTicket.CheckTicket(TicketDetailEntity);
     //return true;
 }
        public RTOnlineTicketDetail GetVoucherAmountAndStatusForMultipleTicket(RTOnlineTicketDetail TicketDetailEntity)
        {
            try
            {
                LogManager.WriteLog("Inside GetVoucherAmountAndStatusForMultipleTicket", LogManager.enumLogLevel.Info);
                LinqDataAccessDataContext _LinqDB = new LinqDataAccessDataContext(CommonDataAccess.TicketingConnectionString);
                List<rsp_ValidateVoucherForMultipleVoucherRedemptionResult> lstValidatedVoucherDetails = null;
                lstValidatedVoucherDetails = _LinqDB.ValidateVoucherForMultipleVoucherRedemption(TicketDetailEntity.TicketString).ToList();
                if (lstValidatedVoucherDetails != null)
                {
                    TicketDetailEntity.TicketStatusCode = lstValidatedVoucherDetails[0].iStatus;
                    TicketDetailEntity.TicketValue = Convert.ToDouble(lstValidatedVoucherDetails[0].Amount);
                    TicketDetailEntity.RedeemedAmount = lstValidatedVoucherDetails[0].Amount;
                    TicketDetailEntity.PrintedDate = lstValidatedVoucherDetails[0].PrintDate.Value;
                    TicketDetailEntity.iVoucherid = lstValidatedVoucherDetails[0].VoucherID;
                    LogManager.WriteLog("The Ticket details for the barcode :-- " + TicketDetailEntity.TicketString + "are" +
                                        " TicketStatusCode:-" + TicketDetailEntity.TicketStatusCode +
                                        "Ticket Amount :--" + TicketDetailEntity.TicketValue +
                                        "Voucher Id :--" + TicketDetailEntity.iVoucherid, LogManager.enumLogLevel.Info);
                       
                                

                }
                
            }
            catch (Exception ex)
            {

                ExceptionManager.Publish(ex);
            }
            return TicketDetailEntity;
        }
        private void validateVoucher(ReedemTicketInfo ticket)
        {
            LogManager.WriteLog("Inside validateVoucher() Method", LogManager.enumLogLevel.Info);
            int iCustomerID = 0;
            IRedeemOnlineTicket _objRedeemOnlineTicket = RedeemOnlineTicketBusinessObject.CreateInstance();            
            LinqDataAccessDataContext linqDBExchange = new LinqDataAccessDataContext(CommonDataAccess.ExchangeConnectionString);
            RedeemTicket _redeemTicket = new RedeemTicket();            
            string strTableTicketNumber = string.Empty;
            int iInstallationID = 0;
            int iTicketValidationLength = 0;
            
            try
            {
                _objOnlineTicketDetail.RedeemedMachine = System.Environment.MachineName;
                _objOnlineTicketDetail.ClientSiteCode = Settings.SiteCode;


                LogManager.WriteLog("The Voucher Redeem is Validating", LogManager.enumLogLevel.Info);
                if (ticket.Barcode.Length != 18)
                {
                    LogManager.WriteLog("Checking for exact barcode if it is less than 18, The barcode is: " + ticket.Barcode, LogManager.enumLogLevel.Info);
                    
                    InstallationFromTicket _TicketInstallationDetails = linqDBExchange.GetInstallationNumber(ticket.Barcode).SingleOrDefault();
                    
                    if (_TicketInstallationDetails != null)
                    {   
                        strTableTicketNumber = _TicketInstallationDetails.strbarcode;                        
                        iInstallationID = Convert.ToInt32(_TicketInstallationDetails.installation_no);

                        LogManager.WriteLog("Barcode obtained from Table is :" + strTableTicketNumber, LogManager.enumLogLevel.Info);                       

                        //To get the validation length
                        if (iInstallationID > 0)
                        {
                            DataTable InstallationDetails = (new CommonDataAccess()).GetInstallationDetails(0, iInstallationID, false, false);
                            if (InstallationDetails.Rows.Count > 0)
                            {
                                int.TryParse(InstallationDetails.Rows[0]["Validation_length"].ToString(), out iTicketValidationLength);

                                //linqDBExchange.GetValidationLength(iInstallationID, ref iTicketValidationLength);
                                LogManager.WriteLog("The validation length for the entered barcode," + ticket.Barcode + "is:" + iTicketValidationLength, LogManager.enumLogLevel.Info);
                                if (iTicketValidationLength != 0 && ticket.Barcode.Length == iTicketValidationLength)// when validation length does not match with the barcode
                                {
                                    _objOnlineTicketDetail.TicketString = strTableTicketNumber;                                    
                                }
                                else
                                {
                                    LogManager.WriteLog("the validation length mismatch for barcode :->" + ticket.Barcode, LogManager.enumLogLevel.Info);
                                    FindVoucher(ticket);
                                    
                                }
                            }
                            else
                            {
                                LogManager.WriteLog("No installation details found for this Ticket :->" + ticket.Barcode, LogManager.enumLogLevel.Info);
                                FindVoucher(ticket);
                                
                            }
                        }
                        else
                        {

                            LogManager.WriteLog("No installation details found for this Ticket :->" + ticket.Barcode, LogManager.enumLogLevel.Info);
                            FindVoucher(ticket);
                           // _objOnlineTicketDetail.TicketString = ticket.Barcode;
                        }                    
                    }
                    else
                    {
                       
                        LogManager.WriteLog("No installation details found for this Ticket :->" + ticket.Barcode, LogManager.enumLogLevel.Info);
                        FindVoucher(ticket);
                        _objOnlineTicketDetail.TicketString = ticket.Barcode;
                    }
                }
                else               
                  _objOnlineTicketDetail.TicketString = ticket.Barcode;     
                
         
                _objOnlineTicketDetail.HostSiteCode = _objOnlineTicketDetail.TicketString.Substring(0, 4);

                LogManager.WriteLog("Validating the Voucher,Barcode is:" + _objOnlineTicketDetail.TicketString, LogManager.enumLogLevel.Info);

                ticket.Status = Application.Current.Resources["CRedeemMultipleTicketRedemptionValidating"].ToString();                
                
                _objOnlineTicketDetail = _objRedeemOnlineTicket.GetVoucherAmountAndStatusForMultipleTicket(_objOnlineTicketDetail);

                /*****************STATUS FOR VALIDATING VOUCHER*********************************
                 *******************************************************************************
                 * NORMAL VOUCHER                   *                TIS VOUCHER
                 * ******************************************************************************
                -1 Voucher not found                *              -2 TIS ticket not found,pending
                -3  Already paid					*			  -4 Already paid TIS
                -5  partially paid					*			  -6 Partially paid TIS
                -7  void voucher					*			  -8 void voucher for TIS 
                -9  cancelled voucher				*			  -10 cancelled voucher for TIS
                -11 Non cashable voucher			*			  -12 Non cashable voucher for TIS
                -13 Site code mismatch				*			  -15 Expired voucher for TIS
                -14 Expired voucher					*			   1  Valid voucher TIS
                 0  valid voucher                   *             -16 Player card required for TIS voucher
                 *                                  *             -17 TIS expired but player card requried
                 *                                                -18 TIS Effective Date Mismatch  
                 ********************************************************************************************** */

                //_objOnlineTicketDetail = _objRedeemOnlineTicket.GetRedeemTicketAmount(_objOnlineTicketDetail);
                _objOnlineTicketDetail.CustomerId = iCustomerID;
                ticket.TicketStatus = _objOnlineTicketDetail.TicketStatusCode;
                if (_objOnlineTicketDetail.TicketStatusCode == -2)
                {
                   // RTOnlineTicketDetail objTicketDetail = new RTOnlineTicketDetail();
                    IRedeemOnlineTicket objCashDeskOper = RedeemOnlineTicketBusinessObject.CreateInstance();
                    _objOnlineTicketDetail = objCashDeskOper.GetMultiRedeemTicketAmount(_objOnlineTicketDetail);

                    if (_objOnlineTicketDetail != null)
                    {   
                        if (_objOnlineTicketDetail.RedeemedAmount  > 0)
                        {

                            _objOnlineTicketDetail.RedeemedAmount = (_objOnlineTicketDetail.RedeemedAmount)/100;
                            _objOnlineTicketDetail.TicketValue = Convert.ToDouble(_objOnlineTicketDetail.RedeemedAmount);
                            _objOnlineTicketDetail.TicketStatusCode = 1;
                            ticket.TicketStatus = 1; //For making it valid tis voucher 
                            
                        }
                    }
                     
                }
                
                ticket.oRTOnlineTicketDetail = _objOnlineTicketDetail;

                string strRedeemedAmount = _objOnlineTicketDetail.TicketValue.ToString("0.00");
                
                ticket.Amount = Convert.ToDecimal(strRedeemedAmount);
        
                string str_status = "";
               // bool isTISPrintedTicket = VoucherHelper.IsTISPrintedTicketPrefix(_objOnlineTicketDetail.TicketString);

                
                _objOnlineTicketDetail.AuthorizedUser_No = Security.SecurityHelper.CurrentUser.User_No;
                _objOnlineTicketDetail.RedeemedUser = Security.SecurityHelper.CurrentUser.UserName;
               
                if (_objOnlineTicketDetail.TicketStatusCode == -234) //Exception Occured
                {
                    str_status = Application.Current.Resources["CRedeemMultipleTicketRedeemErrorMessage1"].ToString(); 
                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -99) //Invalid ticket 
                {
                    str_status = Application.Current.Resources["CRedeemMultipleTicketRedeemErrorMessage2"].ToString();
                }
                else if (_objOnlineTicketDetail.TicketStatusCode == 0) //Valid Voucher
                {
                    str_status = Application.Current.Resources["CRedeemMultipleTicketRedeemValidVoucher"].ToString();
                }                
                else if (_objOnlineTicketDetail.TicketStatusCode == 1) //Valid TIS Voucher
                {
                    str_status = Application.Current.Resources["CRedeemValidTISVoucher"].ToString();
                }
               
                else if (_objOnlineTicketDetail.TicketStatusCode == -1) //Voucher not found for  normal voucher
                {
                    str_status = Application.Current.Resources["CRedeemMultipleTicketRedeemVoucherNotFound"].ToString();

                    //insert into audit
                    AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                    {

                        AuditModuleName = ModuleName.MultipleVoucherRedeem,
                        Audit_Screen_Name = "Multiple Redeem Voucher",
                        Audit_Desc = "Voucher Number -" + _objOnlineTicketDetail.TicketString,
                        AuditOperationType = OperationType.MODIFY,
                        Audit_Field = "Voucher Status",
                        Audit_New_Vl = str_status,
                        Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                        Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                    });

                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -2) //TIS Voucher not found in local DB
                {
                    str_status = Application.Current.Resources["CRedeemTISMultipleTicketNotFound"].ToString();

                    //insert into audit
                    AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                    {

                        AuditModuleName = ModuleName.MultipleVoucherRedeem,
                        Audit_Screen_Name = "Multiple Redeem Voucher",
                        Audit_Desc = "TIS Voucher Number -" + _objOnlineTicketDetail.TicketString,
                        AuditOperationType = OperationType.MODIFY,
                        Audit_Field = "Voucher Status",
                        Audit_New_Vl = str_status,
                        Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                        Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                    });
                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -3) //Already Paid
                {
                    str_status = Application.Current.Resources["CRedeemMultipleTicketRedeemAlreadyPaid"].ToString();

                    //insert into audit
                    AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                    {

                        AuditModuleName = ModuleName.MultipleVoucherRedeem,
                        Audit_Screen_Name = "Multiple Redeem Voucher",
                        Audit_Desc = "Voucher Number -" + _objOnlineTicketDetail.TicketString,
                        AuditOperationType = OperationType.MODIFY,
                        Audit_Field = "Voucher Status",
                        Audit_New_Vl = str_status,
                        Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                        Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                    });



                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -4) //TIS Already Paid
                {
                    str_status = Application.Current.Resources["CRedeemMultipleVoucherAlreadyPaidTISVoucher"].ToString();

                    //insert into audit
                    AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                    {

                        AuditModuleName = ModuleName.MultipleVoucherRedeem,
                        Audit_Screen_Name = "Multiple Redeem Voucher",
                        Audit_Desc = "TIS Voucher Number -" + _objOnlineTicketDetail.TicketString,
                        AuditOperationType = OperationType.MODIFY,
                        Audit_Field = "Voucher Status",
                        Audit_New_Vl = str_status,
                        Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                        Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                    });

                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -5) //Partially paid
                {
                    str_status = Application.Current.Resources["CRedeemMultipleTicketsPartiallyPaidTickets"].ToString();

                    //insert into audit
                    AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                    {

                        AuditModuleName = ModuleName.MultipleVoucherRedeem,
                        Audit_Screen_Name = "Multiple Redeem Voucher",
                        Audit_Desc = "Voucher Number -" + _objOnlineTicketDetail.TicketString,
                        AuditOperationType = OperationType.MODIFY,
                        Audit_Field = "Voucher Status",
                        Audit_New_Vl = str_status,
                        Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                        Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                    });
                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -6) //TIS Partially paid
                {
                    str_status = Application.Current.Resources["CRedeemMultipleVoucherPartiallyPaidTISVoucher"].ToString();

                    //insert into audit
                    AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                    {

                        AuditModuleName = ModuleName.MultipleVoucherRedeem,
                        Audit_Screen_Name = "Multiple Redeem Voucher",
                        Audit_Desc = "TIS Voucher Number -" + _objOnlineTicketDetail.TicketString,
                        AuditOperationType = OperationType.MODIFY,
                        Audit_Field = "Voucher Status",
                        Audit_New_Vl = str_status,
                        Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                        Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                    });
                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -7) //Voided ticket
                {
                    str_status = Application.Current.Resources["CRedeemMultipleTicketsVoidticket"].ToString();

                    //insert into audit
                    AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                    {

                        AuditModuleName = ModuleName.MultipleVoucherRedeem,
                        Audit_Screen_Name = "Multiple Redeem Voucher",
                        Audit_Desc = "Voucher Number -" + _objOnlineTicketDetail.TicketString,
                        AuditOperationType = OperationType.MODIFY,
                        Audit_Field = "Voucher Status",
                        Audit_New_Vl = str_status,
                        Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                        Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                    });
                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -8) //TIS Voided ticket
                {
                    str_status = Application.Current.Resources["CRedeemMultipleVoucherVoidTISVoucher"].ToString();

                    //insert into audit
                    AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                    {

                        AuditModuleName = ModuleName.MultipleVoucherRedeem,
                        Audit_Screen_Name = "Multiple Redeem Voucher",
                        Audit_Desc = "TIS Voucher Number -" + _objOnlineTicketDetail.TicketString,
                        AuditOperationType = OperationType.MODIFY,
                        Audit_Field = "Voucher Status",
                        Audit_New_Vl = str_status,
                        Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                        Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                    });
                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -9) //Cancelled VOucher
                {
                    str_status = Application.Current.Resources["CRedeemMultipleTicketsCancelledTickets"].ToString();

                    //insert into audit
                    AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                    {

                        AuditModuleName = ModuleName.MultipleVoucherRedeem,
                        Audit_Screen_Name = "Multiple Redeem Voucher",
                        Audit_Desc = "Voucher Number -" + _objOnlineTicketDetail.TicketString,
                        AuditOperationType = OperationType.MODIFY,
                        Audit_Field = "Voucher Status",
                        Audit_New_Vl = str_status,
                        Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                        Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                    });
                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -10) //TIS Cancelled VOucher
                {
                    str_status = Application.Current.Resources["CRedeemMultipleVoucherTISCancelledVoucher"].ToString();

                    //insert into audit
                    AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                    {

                        AuditModuleName = ModuleName.MultipleVoucherRedeem,
                        Audit_Screen_Name = "Multiple Redeem Voucher",
                        Audit_Desc = "Voucher Number -" + _objOnlineTicketDetail.TicketString,
                        AuditOperationType = OperationType.MODIFY,
                        Audit_Field = "Voucher Status",
                        Audit_New_Vl = str_status,
                        Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                        Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                    });
                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -11) //Non Cashable
                {
                    str_status = Application.Current.Resources["CRedeemMultipleTicketsNonCashableTickets"].ToString();

                    //insert into audit
                    AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                    {

                        AuditModuleName = ModuleName.MultipleVoucherRedeem,
                        Audit_Screen_Name = "Multiple Redeem Voucher",
                        Audit_Desc = "Voucher Number -" + _objOnlineTicketDetail.TicketString,
                        AuditOperationType = OperationType.MODIFY,
                        Audit_Field = "Voucher Status",
                        Audit_New_Vl = str_status,
                        Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                        Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                    });
                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -12) // TIS Non Cashable
                {
                    str_status = Application.Current.Resources["CRedeemMultipleVoucherTISNonCashableVoucher"].ToString();

                    //insert into audit
                    AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                    {

                        AuditModuleName = ModuleName.MultipleVoucherRedeem,
                        Audit_Screen_Name = "Multiple Redeem Voucher",
                        Audit_Desc = "Voucher Number -" + _objOnlineTicketDetail.TicketString,
                        AuditOperationType = OperationType.MODIFY,
                        Audit_Field = "Voucher Status",
                        Audit_New_Vl = str_status,
                        Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                        Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                    });
                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -13) //Site Code Mismatch
                {
                    str_status = Application.Current.Resources["CRedeemMultipleTicketsSiteCodeMismatch"].ToString();

                    //insert into audit
                    AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                    {

                        AuditModuleName = ModuleName.MultipleVoucherRedeem,
                        Audit_Screen_Name = "Multiple Redeem Voucher",
                        Audit_Desc = "Voucher Number -" + _objOnlineTicketDetail.TicketString,
                        AuditOperationType = OperationType.MODIFY,
                        Audit_Field = "Voucher Status",
                        Audit_New_Vl = str_status,
                        Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                        Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                    });
                }

                else if (_objOnlineTicketDetail.TicketStatusCode == -14) //Expired
                {
                    if (Security.SecurityHelper.HasAccess("CashdeskOperator.Authorize.cs.MultipleRedeemExpiredTicket"))
                    {
                        str_status = Application.Current.Resources["CRedeemMultipleTicketRedeemExpired"].ToString();
                    }
                    else
                    {
                        str_status = Application.Current.Resources["CRedeemExpireUserAccess"].ToString();

                        AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                        {

                            AuditModuleName = ModuleName.MultipleVoucherRedeem,
                            Audit_Screen_Name = "Multiple Redeem Voucher",
                            Audit_Desc = "Expired Voucher Number -" + _objOnlineTicketDetail.TicketString,
                            AuditOperationType = OperationType.MODIFY,
                            Audit_Field = "Voucher Status",
                            Audit_New_Vl = Application.Current.Resources["CRedeemExpireUserAccess"].ToString(),
                            Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                            Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                        });
                    }
                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -15) //TIS Expired
                {
                    if (Security.SecurityHelper.HasAccess("CashdeskOperator.Authorize.cs.MultipleRedeemExpiredTicket"))
                    {
                        str_status = Application.Current.Resources["CRedeemMultipleVoucherTISExpiredVoucher"].ToString();
                    }
                    else
                    {
                        str_status = Application.Current.Resources["CRedeemTISExpireUserAccess"].ToString();

                        AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                        {

                            AuditModuleName = ModuleName.MultipleVoucherRedeem,
                            Audit_Screen_Name = "Multiple Redeem Voucher",
                            Audit_Desc = "Expired Voucher Number -" + _objOnlineTicketDetail.TicketString,
                            AuditOperationType = OperationType.MODIFY,
                            Audit_Field = "Voucher Status",
                            Audit_New_Vl = Application.Current.Resources["CRedeemExpireUserAccess"].ToString(),
                            Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                            Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                        });
                    }

                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -16)//TIS valid player details required , cannot redeem here
                {
                    str_status = Application.Current.Resources["CRedeemTISMultipleVoucherPlayerDetailsRequired"].ToString();
                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -17)//TIS expired voucher player details required , cannot redeem here-expired
                {
                    str_status = Application.Current.Resources["CRedeemTISMultipleVoucherExpiredPlayerdetailsRequired"].ToString();
                }

                else if (_objOnlineTicketDetail.TicketStatusCode == -18)//TIS Effective date mismatch
                {
                    str_status = Application.Current.Resources["CRedeemsTISEffectiveDateMismatch"].ToString();
                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -990) // When TIS web service hits fails
                {
                    str_status = Application.Current.Resources["CRedeemsTISWebServiceError"].ToString();
                }

               
                #region offlineVoucherHandler-Commented
                    //if (!_objOnlineTicketDetail.ShowOfflineTicketScreen)
                    //{
                    // str_status = Application.Current.Resources["CRedeemMultipleTicketRedeemVoucherNotFound"].ToString();
                    //}
                    //else
                    //{
                    //_iCheckOfflineVoucher = _redeemTicket.CheckSDGOfflineTicket(ticket.Barcode); //checks whether it is offline voucher or not
                    //if (_iCheckOfflineVoucher == -14) //since SP returns -14 if its offline voucher
                    //{
                    //    str_status = Application.Current.Resources["CRedeemMultipleTicketsOfflineTickets"].ToString();
                    //}
                    //else
                    //{
                    //    str_status = Application.Current.Resources["CRedeemMultipleTicketRedeemVoucherNotFound"].ToString();
                    //}
                //} 
                #endregion offlineVoucherHandler-Commented


                Dispatcher.BeginInvoke((Action)(() =>
                     {
                         ticket.Status = str_status;
                         LogManager.WriteLog("the Barcode " + ticket.Barcode + "has returned" + str_status, LogManager.enumLogLevel.Info);
                     }), null);

            }
            catch (Exception Ex)
            {
                ExceptionManager.Publish(Ex);
            }
        }
 //Add method for offline receipt print
 public void GetCommonValues(RTOnlineTicketDetail RTOnlineTicketDetail, RTOnlineReceiptDetail RTOnlineReceiptDetail,string OfflineHeaderText)
 {
     oRTOnlineTicketDetail = RTOnlineTicketDetail;
     oRTOnlineReceiptDetail = RTOnlineReceiptDetail;
     if (Settings.EnableVoucher)
         PrintType = "OFFLINE VOUCHER REDEMPTION";
     BMC.Common.LogManagement.LogManager.WriteLog("Inside CommonUtilites Settings.EnableVoucher=: " +
         Settings.EnableVoucher.ToString() + "object ticketdetail=:" + oRTOnlineTicketDetail.ToString()
         + "object ReceiptDetail=:" + RTOnlineReceiptDetail.ToString(), BMC.Common.LogManagement.LogManager.enumLogLevel.Debug);
     PrintFunction();
 }
        public bool ImportVoucherDetails(RTOnlineTicketDetail TicketDetail)
        {
            bool bSuccess = false;
            try
            {
                SqlParameter[] oSQLParams = new SqlParameter[5];

                SqlParameter objSQLParam = new SqlParameter();
                objSQLParam.ParameterName = "doc";
                objSQLParam.Value = TicketDetail.VoucherXMLData;
                objSQLParam.Direction = ParameterDirection.Input;
                oSQLParams[0] = objSQLParam;

                objSQLParam = new SqlParameter();
                objSQLParam.ParameterName = "DeviceName";
                objSQLParam.Value = System.Environment.MachineName + ((Settings.CAGE_ENABLED)?"_Cage" : string.Empty ) ;
                objSQLParam.Direction = ParameterDirection.Input;
                oSQLParams[1] = objSQLParam;

                objSQLParam = new SqlParameter();
                objSQLParam.ParameterName = "PrintedDeviceName";
                objSQLParam.Value = TicketDetail.PrintedDevice;
                objSQLParam.Direction = ParameterDirection.Input;
                oSQLParams[2] = objSQLParam;

                objSQLParam = new SqlParameter();
                objSQLParam.ParameterName = "RedeemUserName";
                objSQLParam.Value = TicketDetail.RedeemedUser;
                objSQLParam.Direction = ParameterDirection.Input;
                oSQLParams[3] = objSQLParam;

                objSQLParam = new SqlParameter();
                objSQLParam.ParameterName = "IsSuccess";
                objSQLParam.Direction = ParameterDirection.Output;
                objSQLParam.SqlDbType = SqlDbType.Int;
                oSQLParams[4] = objSQLParam;

                LogManager.WriteLog("<CrossTicketing> ImportVoucherDetails XML:" + TicketDetail.VoucherXMLData + "\n Printed Device: " + TicketDetail.PrintedDevice, LogManager.enumLogLevel.Info);

                SqlHelper.ExecuteNonQuery(CommonDataAccess.TicketingConnectionString, CommandType.StoredProcedure, "RSP_IMPORTVOUCHERDETAILS_CAGE", oSQLParams);

                if (int.Parse(oSQLParams[4].Value.ToString()) == 0)
                {
                    bSuccess = true;
                    LogManager.WriteLog("<CrossTicketing>   ImportVoucherDetails Call Success", LogManager.enumLogLevel.Info);
                }
                else
                {
                    bSuccess = false;
                    LogManager.WriteLog("<CrossTicketing>   ImportVoucherDetails Call " + "  failed due to " + oSQLParams[1].Value.ToString(), LogManager.enumLogLevel.Info);
                }
            }

            catch (Exception ex)
            {
                ExceptionManager.Publish(ex);
                bSuccess = false;
            }

            return bSuccess;
        }
        /// <summary>
        /// Gets the exception details.
        /// </summary>
        /// <returns></returns>
        public bool GetExceptionDetails(ref RTOnlineTicketDetail RTOTicketDetail)
        {
            bool bSuccess = false;
            string Currency = "£";

            if (Settings.Region.ToUpper() == "US")
                Currency = "$";

            try
            {
                DataSet ExceptionDetails = new DataSet();
                DateTime date = new DateTime();
                string[] strArray = new string[1];
                strArray[0] = "ExceptionDetails";
                date = DateTime.Now;

                SqlParameter[] objParams = new SqlParameter[1];
                objParams[0] = new SqlParameter(DBConstants.CONST_PARAM_BARCODE, RTOTicketDetail.TicketString);

                SqlHelper.FillDataset(GetExchangeConnectionString(), DBConstants.CONST_RSP_GETEXCEPTIONDETAILS, ExceptionDetails, strArray, objParams);

                if (ExceptionDetails.Tables.Count > 0)
                {
                    if (ExceptionDetails.Tables["ExceptionDetails"].Rows.Count > 0)
                    {
                        RTOTicketDetail.RedeemedMachine = ExceptionDetails.Tables["ExceptionDetails"].Rows[0]["Bar_pos_name"].ToString();
                        RTOTicketDetail.RedeemedDevice = ExceptionDetails.Tables["ExceptionDetails"].Rows[0]["TE_Workstation"].ToString();
                        RTOTicketDetail.RedeemedDate = ExceptionDetails.Tables["ExceptionDetails"].Rows[0]["TE_Date"].ToString();
                        RTOTicketDetail.RedeemedAmount = Currency + " " + (Convert.ToDouble(ExceptionDetails.Tables["ExceptionDetails"].Rows[0]["te_value"]) / 100).ToString("N");
                    }
                    else
                        bSuccess = false;
                }
                else
                    bSuccess = false;

                return bSuccess;
            }
            catch (Exception exGetMachineDetailsFromAsset)
            {
                ExceptionManager.Publish(exGetMachineDetailsFromAsset);
                bSuccess = false;
                return bSuccess;
            }
        }
        public RTOnlineTicketDetail GetRedeemTicketAmountCage(RTOnlineTicketDetail TicketDetailEntity)
        {
            try
            {
                string LocalTicketorSiteCode;
                string sURL;
                ValidateSiteCode(TicketDetailEntity.TicketString, out LocalTicketorSiteCode, out sURL);

                if (sURL.IsNullOrEmpty() || sURL == "INVALID") //Invalid Site Code or No rights to access other Site
                {
                    TicketDetailEntity.TicketStatus = "Site Code Mismatch";
                    TicketDetailEntity.TicketStatusCode = -99;
                    TicketDetailEntity.ValidTicket = false;
                    return TicketDetailEntity;
                }
                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.GetRedeemTicketAmount(TicketDetailEntity);

                }
                //Local Site Code(default)
                return redeemTicketDB.GetRedeemTicketAmount(TicketDetailEntity);
            }
            catch (Exception ex)
            {
                ExceptionManager.Publish(ex);
                TicketDetail.TicketStatusCode = -234;//Exception Case
                return TicketDetail;
            }
        }
 public bool ImportVoucherDetails(RTOnlineTicketDetail TicketDetail)
 {
     return redeemTicketDB.ImportVoucherDetails(TicketDetail);
 }
        public RTOnlineTicketDetail GetMultiRedeemTicketAmount(RTOnlineTicketDetail TicketDetailEntity)
        {
            try
            {
                string LocalTicketorSiteCode;
                string sURL;
                int Installation_No = 0;
                int ValidationLength = 0;
                bool isTISPrintedTicket = true; ;
                bool hasException = false;
                int PlayerCardValidation = 0;
                string PlayerCardID = string.Empty;
                int TicketType = -1;
                int CurrentTickStatus = 0;
                if (!isTISPrintedTicket)
                {
                    LinqDataAccessDataContext linqDBExchange = new LinqDataAccessDataContext(CommonDataAccess.ExchangeConnectionString);
                    IEnumerable<InstallationFromTicket> InstallationTicket = linqDBExchange.GetInstallationNumber(TicketDetailEntity.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(TicketDetailEntity.TicketString, out LocalTicketorSiteCode, out sURL);
                        if (sURL.IsNullOrEmpty() || sURL == "INVALID") //Invalid Site Code or No rights to access other Site
                        {
                            TicketDetailEntity.TicketStatus = "MessageID312";
                            TicketDetailEntity.TicketStatusCode = -99;
                            TicketDetailEntity.ValidTicket = false;
                            return TicketDetailEntity;
                        }
                        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.GetRedeemTicketAmount(TicketDetailEntity);

                        }
                    }
                }
                else
                {
                    // if the tis printed ticket available in local db
                    bool isTISTicketAvailable = VoucherHelper.IsTISPrintedTicket(TicketDetailEntity.TicketString);
                    if (isTISTicketAvailable)
                    {
                        // Success case - ok proceed with redeeming
                    }
                    else
                    {
                        // wait worst case 10 secs to get the response from TIS
                        int count = 10;
                        string message = "Waiting for receiving data from TIS...";
                        WPFExtensions.ShowAsyncDialog(null, message, null, 1, count,
                            (o) =>
                            {
                                IAsyncProgress2 o2 = o as IAsyncProgress2;

                                // failure case - hit the tis communication interface and get the ticket
                                try
                                {
                                    o2.UpdateStatusProgress(5, message);
                                    var resp = VoucherHelper.SendTISRedeemTicketQuery(TicketDetailEntity.TicketString, TicketDetailEntity.AuthorizedUser_No);
                                    o2.UpdateStatusProgress(10, message);
                                    if (resp != null &&
                                        !resp.ErrorMessage.IsNullOrEmpty())
                                    {

                                        var resp2 = VoucherHelper.GetInquiryResponse(TicketDetailEntity.TicketString); 
                                        // TIS Command Service not found or any service error
                                        TicketDetail.TicketStatusCode = -990;
                                        TicketDetail.TicketErrorMessage = resp.ErrorMessage;
                                        TicketDetail.RedeemedAmount = resp2.Amount;                                       
                                        hasException = true;
                                    }
                                }
                                catch (Exception ex)
                                {
                                    ExceptionManager.Publish(ex);
                                    TicketDetail.TicketStatusCode = -234;//Exception Case
                                    hasException = true;
                                }
                            });
                    }


                    TicketType = VoucherHelper.TicketType(TicketDetailEntity.TicketString);

                    CurrentTickStatus = VoucherHelper.CurrentTicketStatus(TicketDetailEntity.TicketString);
                    if (VoucherHelper.IsCardRequired(TicketDetailEntity.TicketString))
                    {
                        PlayerCardValidation = 2;



                    }

                    else if (VoucherHelper.IsSpecificCardRequired(TicketDetailEntity.TicketString))
                    {
                        PlayerCardValidation = 1;

                        PlayerCardID = VoucherHelper.PlayerCardNumber(TicketDetailEntity.TicketString);

                    }

                }

                if (!hasException)
                {
                    //Local Site Code(default)
                    TicketDetail = redeemTicketDB.GetRedeemTicketAmount(TicketDetailEntity);
                    TicketDetail.TicketType = TicketType;
                    TicketDetail.CurrentTicketStatus = CurrentTickStatus;

                    if (CurrentTickStatus == 1)
                    {
                        if (TicketType == 0)
                        {
                            if (PlayerCardValidation != 0)
                            {
                                TicketDetail.TicketStatusCode = 250;
                                TicketDetail.CardRequired = PlayerCardValidation;
                                if (PlayerCardValidation == 1)
                                    TicketDetail.PlayerCardNumber = PlayerCardID;

                            }
                        }
                    }

                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Publish(ex);
                TicketDetail.TicketStatusCode = -234;//Exception Case
            }

            return TicketDetail;
        }
        /// <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;
            }
        }
 public RTOnlineTicketDetail GetRedeemTicketAmountCage(RTOnlineTicketDetail TicketDetailEntity)
 {
     return redeemTicket.GetRedeemTicketAmountCage(TicketDetailEntity);
 }
 public RTOnlineTicketDetail GetMultiRedeemTicketAmount(RTOnlineTicketDetail TicketDetailEntity)
 {
     return redeemTicket.GetMultiRedeemTicketAmount(TicketDetailEntity);
 }
 public bool RedeemOnlineTicketCage(RTOnlineTicketDetail TicketDetailEntity)
 {
     return redeemTicket.CheckTicketCage(TicketDetailEntity);
     
 }
        public int pCloseSDGTicket(string Barcode,RTOnlineTicketDetail TicketDetail)// string BarCode,string sClientSiteCode)
        {
            try
            {
                var iResult = DataBaseServiceHandler.AddParameter<int>("iResult", DbType.Int32, 0, ParameterDirection.Output);
                //New parameter to get the ivoucherid
                var iVoucherID = DataBaseServiceHandler.AddParameter<int>("VoucherID", DbType.Int32, 0, ParameterDirection.Output);

                DataBaseServiceHandler.ExecuteNonQuery(CommonDataAccess.TicketingConnectionString, CommandType.StoredProcedure, "pCloseSDGTicket",
                    DataBaseServiceHandler.AddParameter<string>("strBarcode", DbType.String, Barcode),
                    DataBaseServiceHandler.AddParameter<string>("strDeviceID", DbType.String, TicketDetail.RedeemedMachine),//System.Environment.MachineName),
                    DataBaseServiceHandler.AddParameter<string>("@RedeemedUser", DbType.String, (Security.SecurityHelper.CurrentUser == null) ? "NONE" : Security.SecurityHelper.CurrentUser.UserName),
                    DataBaseServiceHandler.AddParameter<int>("iStatus", DbType.Int32, 1),
                    DataBaseServiceHandler.AddParameter<int>("Error_Code", DbType.Int32, 0),
                    DataBaseServiceHandler.AddParameter<string>("ClientSiteCode", DbType.String, TicketDetail.ClientSiteCode)//sClientSiteCode)
                    , iResult, iVoucherID);


                if (Convert.ToInt32(iResult.Value) == 0)
                    DataBaseServiceHandler.ExecuteNonQuery(CommonDataAccess.ExchangeConnectionString, CommandType.StoredProcedure, "usp_UpdateTicketExceptionOnCloseSDG",
                        DataBaseServiceHandler.AddParameter<string>("TE_TicketNumber", DbType.String, Barcode),
                        DataBaseServiceHandler.AddParameter<int>("TE_ID", DbType.Int32, 0),
                        DataBaseServiceHandler.AddParameter<string>("TE_Status_Final_Actual", DbType.String, "CLAIMED"));
                      
                
                return Convert.ToInt32(iResult.Value);
            }
            catch (Exception Ex)
            {
                ExceptionManager.Publish(Ex);
                return -99;
            }
        }
 public RTOnlineTicketDetail GetVoucherDetailForMultipleTicketRedeem(RTOnlineTicketDetail TicketDetailEntity)
 {
     return redeemTicketDB.GetVoucherAmountAndStatusForMultipleTicket(TicketDetailEntity);
 }
        //public int GetRedeemTicketAmount(string ticketString, out int ticketStatus)
        //{
        //    int ticketAmount = 0;
        //    ticketStatus = 0;

        //    try
        //    {
        //        SqlParameter[] sqlParam = new SqlParameter[4];
        //        sqlParam[0] = new SqlParameter(DBConstants.CONST_PARAM_BARCODE, ticketString);
        //        sqlParam[1] = new SqlParameter(DBConstants.CONST_PARAM_DEVICEID, System.Environment.MachineName);
        //        sqlParam[2] = new SqlParameter(DBConstants.CONST_PARAM_TICKETSTATUS, ticketStatus);
        //        sqlParam[2].Direction = ParameterDirection.Output;
        //        sqlParam[3] = new SqlParameter(DBConstants.CONST_PARAM_TICKETAMOUNT, ticketAmount);
        //        sqlParam[3].Direction = ParameterDirection.Output;

        //        SqlHelper.ExecuteNonQuery(CommonDataAccess.TicketingConnectionString, CommandType.StoredProcedure, DBConstants.CONST_RSP_GETREDEEMTICKETAMOUNT, sqlParam);                
        //        ticketStatus = Convert.ToInt32(sqlParam[2].Value);
        //        ticketAmount = Convert.ToInt32(sqlParam[3].Value);
        //    }
        //    catch (Exception ex)
        //    {
        //        ExceptionManager.Publish(ex);                
        //    }

        //    return ticketAmount;
        //}

        public RTOnlineTicketDetail GetRedeemTicketAmount(RTOnlineTicketDetail TicketDetailEntity)
        {
            int ticketAmount = 0;
            TicketDetailEntity.TicketStatusCode = 0;

            try
            {
                SqlParameter[] sqlParam = new SqlParameter[8];
                sqlParam[0] = new SqlParameter(DBConstants.CONST_PARAM_BARCODE, TicketDetailEntity.TicketString);
                sqlParam[1] = new SqlParameter(DBConstants.CONST_PARAM_DEVICEID, System.Environment.MachineName);
                sqlParam[2] = new SqlParameter("@ClientSiteCode", TicketDetailEntity.ClientSiteCode);
                sqlParam[3] = new SqlParameter(DBConstants.CONST_PARAM_TICKETSTATUS, TicketDetailEntity.TicketStatusCode);
                sqlParam[3].Direction = ParameterDirection.Output;
                sqlParam[4] = new SqlParameter(DBConstants.CONST_PARAM_TICKETAMOUNT, ticketAmount);
                sqlParam[4].Direction = ParameterDirection.Output;
                sqlParam[5] = new SqlParameter("@PrintedDevice", SqlDbType.VarChar,50);
                sqlParam[5].Direction = ParameterDirection.Output;
                sqlParam[6] = new SqlParameter("@PrintedDate", TicketDetailEntity.PrintedDate);
                sqlParam[6].Direction = ParameterDirection.Output;
                sqlParam[7] = new SqlParameter("@iVoucherID", TicketDetailEntity.iVoucherid);
                sqlParam[7].Direction = ParameterDirection.Output;
                

                SqlHelper.ExecuteNonQuery(CommonDataAccess.TicketingConnectionString, CommandType.StoredProcedure, DBConstants.CONST_RSP_GETREDEEMTICKETAMOUNT, sqlParam);
                TicketDetailEntity.TicketStatusCode = Convert.ToInt32(sqlParam[3].Value);
                if (!DBNull.Value.Equals(sqlParam[4].Value))
                {
                    ticketAmount = Convert.ToInt32(sqlParam[4].Value);
                }
                else if (DBNull.Value.Equals(sqlParam[4].Value))
                {
                    ticketAmount = 0;
                }
                TicketDetailEntity.RedeemedAmount = Convert.ToDecimal(ticketAmount);
                TicketDetailEntity.PrintedDevice=Convert.ToString(sqlParam[5].Value);
                if (!DBNull.Value.Equals(sqlParam[6].Value))
                {
                    TicketDetailEntity.PrintedDate = Convert.ToDateTime(sqlParam[6].Value);
                }
                else if (DBNull.Value.Equals(sqlParam[6].Value))
                {
                    TicketDetailEntity.PrintedDate = DateTime.MinValue;
                }
                if (!DBNull.Value.Equals(sqlParam[7].Value))
                {
                    TicketDetailEntity.iVoucherid = Convert.ToInt32(sqlParam[7].Value);
                }
                else if (DBNull.Value.Equals(sqlParam[7].Value))
                {
                    TicketDetailEntity.iVoucherid = 0;
                }
                
              

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

            //return ticketAmount;
            return TicketDetailEntity;
        }
        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>
        /// Checks if offline ticket exists.
        /// </summary>
        /// <returns></returns>
        public bool DoesOfflineTicketExist(ref RTOnlineTicketDetail RTOTicketDetail)
        {
            bool IsSuccess = false;

            try
            {
                DataSet OfflineTicketDetails = new DataSet();
                DateTime date = new DateTime();
                date = DateTime.Now;
                
                SqlParameter[] objParams = new SqlParameter[3];
                objParams[0] = new SqlParameter(DBConstants.CONST_PARAM_sTICKET_NUMBER, RTOTicketDetail.TicketString);
                SqlParameter ReturnValue = new SqlParameter();
                ReturnValue.ParameterName = DBConstants.CONST_SP_PARAM_RETURNVALUE;
                ReturnValue.Direction = ParameterDirection.ReturnValue;
                objParams[1] = ReturnValue;

                SqlHelper.ExecuteNonQuery(GetExchangeConnectionString(), System.Data.CommandType.StoredProcedure, DBConstants.CONST_RSP_DOESOFFLINETICKETEXIST, objParams);

                if (objParams[1].Value.ToString() == "1")
                    IsSuccess = true;
                else
                    IsSuccess = false;

                return IsSuccess;
            }
            catch (Exception exDoesOfflineTicketExist)
            {
                ExceptionManager.Publish(exDoesOfflineTicketExist);
                IsSuccess = false;
                return IsSuccess;
            }
        }
        public int TicketIsValidCage(string TicketString, ref RTOnlineTicketDetail TicketDetail)
        {
            int Return = 0;
            int Installation_No = 0;
            int? Validation_Length = 0;
            int? IsPromotional = 0;
            int PayTicket = 0;
            string BarCode = string.Empty;
            LinqDataAccessDataContext linqDBExchange = new LinqDataAccessDataContext(CommonDataAccess.ExchangeConnectionString);

            try
            {
                IEnumerable<InstallationFromTicket> InstallationTicket = linqDBExchange.GetInstallationNumber(TicketDetail.TicketString);

                foreach (var item in InstallationTicket)
                {
                    Installation_No = item.installation_no.Value;
                    BarCode = item.strbarcode.Trim();
                    //TicketString = item.strbarcode.Trim();
                }

                if (Installation_No > 0)
                {
                    linqDBExchange.GetValidationLength(Installation_No, ref Validation_Length);

                    if (Validation_Length.Value != 0)
                    {
                        if (TicketString.Length != Validation_Length.Value)
                            return -3;
                        else
                            TicketString = BarCode;
                    }
                }

                linqDBExchange.CheckPromotionalTicket(TicketString, ref IsPromotional);

                if (IsPromotional.Value == -1)
                    IsPromotional = 1;

                if (IsPromotional.Value == 0)
                    return -11;
                else if (IsPromotional.Value < 0)
                    return -99;

                PayTicket = redeemTicketDB.PaySDGTicketCage(TicketString, Settings.RedeemExpiredTicket, ref TicketDetail);

                switch (PayTicket)
                {
                    case 0:
                        redeemTicketDB.pCloseSDGTicketCage(TicketString);
                        Return = 0;
                        break;
                    case -1:
                        if (redeemTicketDB.CheckforTicketException(TicketString))
                            Return = -10;
                        else
                            Return = -4;
                        break;
                    case -2:
                        if (redeemTicketDB.CheckforTicketException(TicketString))
                        {
                            bool IsFailed = false;
                            int? result = 0;

                            try
                            {
                                linqDBExchange.CreateTicketComplete(TicketString, Security.SecurityHelper.CurrentUser.User_No.ToString(), Security.SecurityHelper.CurrentUser.User_No.ToString(), ref result);

                                if (result.Value != 0)
                                    IsFailed = true;

                                if (!IsFailed)
                                    linqDBExchange.InsertException(Installation_No, 205,
                                        "Voucher (" + TicketString + ") Activated via Ticketing application when claiming",
                                        TicketString, Security.SecurityHelper.CurrentUser.UserName);

                                //Return = -10;

                                TicketIsValid(TicketString, false, ref TicketDetail);
                            }
                            catch (System.Data.SqlClient.SqlException sqlEx)
                            {
                                ExceptionManager.Publish(sqlEx);
                                Return = -98;
                            }
                        }
                        else
                            Return = -3;
                        break;
                    case -3:
                        Return = -8;
                        break;
                    case -4:
                        Return = -9;
                        break;
                    case -5:
                        Return = -9;
                        break;
                    //case -12:
                    //    Return = -12;
                    //    break;
                    case -15:
                        redeemTicketDB.pCloseSDGTicketCage(TicketString);
                        Return = 0;
                        break;
                    default:
                        Return = PayTicket;
                        break;
                }
            }
            catch (Exception Ex)
            {
                ExceptionManager.Publish(Ex);
                Return = -99;
            }
            return Return;
        }
        private void button_Click(object sender, RoutedEventArgs e)
        {
            bool isValid = false;
            RTOnlineTicketDetail objTicketDetail = null;
           
            double redeemTicketAmount = 0;

            bool IsCashDispenseError = false;
            try
            {

                if (isScannerFired) //check done not to fire the verify event twice while verifying a ticket using scanner
                {
                    isScannerFired = false;
                    return;
                }
                ClearAll(true);
                TextBlock_11.Text = string.Empty;
                txtAmount.Text = string.Empty;               
                btnVerify.IsEnabled = false;
                if ((sender is System.Windows.Controls.TextBox))
                    isScannerFired = true;
                else
                    isScannerFired = false;

                if (this.ucValueCalc.txtDisplay.Text.Trim().Length > 0)
                {
                    if (this.ucValueCalc.txtDisplay.Text.Trim().Length < 4 )
                    {
                        MessageBox.ShowBox("MessageID403", BMC_Icon.Error);
                        this.txtStatus.Visibility = Visibility.Hidden;
                        this.ucValueCalc.txtDisplay.Text = String.Empty;
                        return;
                    }

                    IRedeemOnlineTicket objCashDeskOper = RedeemOnlineTicketBusinessObject.CreateInstance();
                    objTicketDetail = new RTOnlineTicketDetail();

                    objTicketDetail.ClientSiteCode = Settings.SiteCode;
                    objTicketDetail.TicketString = this.ucValueCalc.txtDisplay.Text.Trim();
                    objTicketDetail.HostSiteCode = objTicketDetail.TicketString.Substring(0, 4);
                    objTicketDetail.RedeemedMachine = System.Environment.MachineName;

                    objTicketDetail = objCashDeskOper.GetRedeemTicketAmount(objTicketDetail);

                    if (objTicketDetail.TicketStatusCode == -990) //TIS Error (If any)
                    {
                        MessageBox.ShowBox(objTicketDetail.TicketErrorMessage, BMC_Icon.Error, true);
                        disptimerRedeem.Stop();
                        this.txtStatus.Visibility = Visibility.Hidden;
                        return;
                    }

                    if (objTicketDetail.TicketStatusCode == -234) //Exception Occured
                    {
                        MessageBox.ShowBox("MessageID425", BMC_Icon.Error);
                        disptimerRedeem.Stop();
                        this.txtStatus.Visibility = Visibility.Hidden;
                        return;
                    }

                    if (objTicketDetail.TicketStatusCode == -99) //Included for Cross Ticketing
                    {
                        MessageBox.ShowBox("MessageID403", BMC_Icon.Error);
                        disptimerRedeem.Stop();
                        this.txtStatus.Visibility = Visibility.Hidden;
                        this.ucValueCalc.txtDisplay.Text = String.Empty;
                        return;
                    }

                   
                   
                        if (objTicketDetail.TicketStatusCode == 250) //Any/specific player card required for TIS
                        {
                            bool ValidCard = false;
                            int PlayerCardClose = 0;
                            


                            if (objTicketDetail.CardRequired == 2)
                            {
                                PlayerCardValidation objPlayerCardValidation = new PlayerCardValidation(objTicketDetail.CardRequired);
                                objPlayerCardValidation.ShowDialogEx(this);
                                ValidCard = objPlayerCardValidation.valid;
                                PlayerCardClose = objPlayerCardValidation.Close;

                                if (PlayerCardClose == 1)
                                {
                                    this.ucValueCalc.txtDisplay.Text = String.Empty;
                                    this.ucValueCalc.txtDisplay.Focus();
                                    return;
                                }

                                else if (!ValidCard)
                                {
                                    MessageBox.ShowBox("PlayerCardRedeem6", BMC_Icon.Error);
                                    this.ucValueCalc.txtDisplay.Text = String.Empty;
                                    this.ucValueCalc.txtDisplay.Focus();
                                    return;
                                }

                            }
                            else if (objTicketDetail.CardRequired == 1)
                            {
                                PlayerCardValidation objPlayerCardValidation = new PlayerCardValidation(objTicketDetail.CardRequired, objTicketDetail.PlayerCardNumber);
                                objPlayerCardValidation.ShowDialogEx(this);
                                ValidCard = objPlayerCardValidation.valid;
                                PlayerCardClose = objPlayerCardValidation.Close;
                                if (PlayerCardClose == 1)
                                {
                                    this.ucValueCalc.txtDisplay.Text = String.Empty;
                                    this.ucValueCalc.txtDisplay.Focus();
                                    return;
                                }
                                else if (!ValidCard)
                                {
                                    MessageBox.ShowBox("PlayerCardRedeem6", BMC_Icon.Error);
                                    this.ucValueCalc.txtDisplay.Text = String.Empty;
                                    this.ucValueCalc.txtDisplay.Focus();
                                    return;
                                }
                            }

                            objTicketDetail.TicketStatusCode = 0;
                        }
                    

                    int ticketAmount = Convert.ToInt32(objTicketDetail.RedeemedAmount);

                    redeemTicketAmount = ticketAmount / 100;

                    objTicketDetail.CustomerId = Custid;

                    this.txtStatus.Visibility = Visibility.Visible;
                    this.txtStatus.Text = "VALIDATING.";
                    disptimerRedeem.IsEnabled = true;
                    disptimerRedeem.Start();


                    //if ((objCashDeskOper.CheckSDGTicket(objTicketDetail.TicketString) == 0) && (Settings.RedeemConfirm))
                    if (objTicketDetail.TicketStatusCode == 0 && (Settings.RedeemConfirm))
                    {
                        disptimerRedeem.Stop();
                        if (Convert.ToBoolean(AppSettings.REDEEM_TICKET_POP_UP_ALERT_VISIBILITY))
                        {
                            _diagResult = MessageBox.ShowBox("MessageID225", BMC_Icon.Question, BMC_Button.YesNo);
                        }
                        else
                        {
                            _diagResult = System.Windows.Forms.DialogResult.Yes;
                        }
                        if (_diagResult == System.Windows.Forms.DialogResult.Yes)
                        {
                            #region ITALY CODE COMMENTED
                            //if (Settings.RegulatoryEnabled == true && Settings.RegulatoryType == "AAMS")
                            //{
                            //    ProcessCancelled = false;
                            //    if (ticketStatus == 0)
                            //    {
                            //        if (redeemTicketAmount >= Settings.RedeemTicketCustomer_Min && redeemTicketAmount <= Settings.RedeemTicketCustomer_Max)
                            //        {
                            //            customerDetails = new BMC.Presentation.POS.Views.CustomerDetails();
                            //            customerDetails.delCustomerUpdated += new BMC.Presentation.POS.Views.CustomerDetails.CustomerUpdateHandler(delCustomerUpdated);
                            //            customerDetails.delCustomerCancelled += new BMC.Presentation.POS.Views.CustomerDetails.CustomerCancelHandler(delCustomerCancelled);
                            //            Owner = Window.GetWindow(this);
                            //            customerDetails.ShowDialog();
                            //        }
                            //        else if (redeemTicketAmount >= Settings.RedeemTicketCustomer_BankAcctNo)
                            //        {
                            //            customerDetails = new BMC.Presentation.POS.Views.CustomerDetails(true);
                            //            customerDetails.delCustomerUpdated += new BMC.Presentation.POS.Views.CustomerDetails.CustomerUpdateHandler(delCustomerUpdated);
                            //            customerDetails.delCustomerCancelled += new BMC.Presentation.POS.Views.CustomerDetails.CustomerCancelHandler(delCustomerCancelled);
                            //            Owner = Window.GetWindow(this);
                            //            customerDetails.ShowDialog();
                            //        }

                            //        if (ProcessCancelled)
                            //        {
                            //            MessageBox.ShowBox("MessageID299", BMC_Icon.Information);
                            //            this.ucValueCalc.txtDisplay.Text = string.Empty;
                            //            return;
                            //        }
                            //    }
                            //} 
                            #endregion

                            objTicketDetail = objCashDeskOper.RedeemOnlineTicket(objTicketDetail);
                            isValid = objTicketDetail.ValidTicket;
                        }
                        else
                        {
                            disptimerRedeem.Start();
                            this.txtStatus.Visibility = Visibility.Hidden;
                            return;
                        }
                        disptimerRedeem.Start();
                    }
                    //else if ((objCashDeskOper.CheckSDGTicket(objTicketDetail.TicketString) == -3) && (Settings.RedeemConfirm)
                    else if (objTicketDetail.TicketStatusCode == -3 && (Settings.RedeemConfirm) && Settings.RedeemExpiredTicket)
                    {
                        disptimerRedeem.Stop();

                        CAuthorize objAuthorize = null;
                        //Manoj 26th Aug 2010. CR383384
                        //RedeemExpiredTicket functionality has been implmented for Winchells.
                        //So, in settings RedeemExpiredTicket will be True for Winchells, for rest it will be False.
                        //So we dont need the following if condition.
                        //if (Settings.Client != null && Settings.Client.ToLower() == "winchells")
                        //{
                        objAuthorize = new CAuthorize("CashdeskOperator.Authorize.cs.ReedemExpiredTicket");
                        objAuthorize.User = Security.SecurityHelper.CurrentUser;
                        string Cur_User_Name = Security.SecurityHelper.CurrentUser.Last_Name + ", " + Security.SecurityHelper.CurrentUser.First_Name;
                        objTicketDetail.RedeemedUser = Cur_User_Name;
                        
                        if (!Security.SecurityHelper.HasAccess("CashdeskOperator.Authorize.cs.ReedemExpiredTicket"))
                        {
                            objAuthorize.ShowDialogEx(this);
                            
                            string Auth_User_Name = objAuthorize.User.UserName;
                            if (objAuthorize.User.Last_Name != null && objAuthorize.User.First_Name != null)
                            {
                                Auth_User_Name = objAuthorize.User.Last_Name + ", " + objAuthorize.User.First_Name;
                            }
                            else
                            {
                                Auth_User_Name = objAuthorize.User.UserName;
                            }

                            objTicketDetail.RedeemedUser = Auth_User_Name;
                            
                            if (!objAuthorize.IsAuthorized)
                            {
                                ClearAll(false);
                                return;
                            }
                        }
                        else
                        {
                            objAuthorize.IsAuthorized = true;
                        }
                        //}

                        if (objAuthorize != null && objAuthorize.IsAuthorized)
                        {
                            objTicketDetail.AuthorizedUser_No = objAuthorize.User.SecurityUserID;
                            objTicketDetail.Authorized_Date = DateTime.Now;

                            AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                            {

                                AuditModuleName = ModuleName.Voucher,
                                Audit_Screen_Name = "Vouchers|RedeemVoucher",
                                Audit_Desc = "Voucher Number-" + objTicketDetail.TicketString,
                                AuditOperationType = OperationType.MODIFY,
                                Audit_Field = "AuthorizedUser_No",
                                Audit_New_Vl = Security.SecurityHelper.CurrentUser.SecurityUserID.ToString()
                            });

                        }
                        if (Convert.ToBoolean(AppSettings.REDEEM_TICKET_POP_UP_ALERT_VISIBILITY))
                        {
                            _diagResult = MessageBox.ShowBox("MessageID225", BMC_Icon.Question, BMC_Button.YesNo);
                        }
                        else
                        {
                            _diagResult = System.Windows.Forms.DialogResult.Yes;
                        }
                        if (_diagResult == System.Windows.Forms.DialogResult.Yes)
                        {
                            #region ITALY CODE COMMENTED
                            //if (Settings.RegulatoryEnabled == true && Settings.RegulatoryType == "AAMS")
                            //{
                            //    ProcessCancelled = false;
                            //    if (ticketStatus == 0)
                            //    {
                            //        if (redeemTicketAmount >= Settings.RedeemTicketCustomer_Min && redeemTicketAmount <= Settings.RedeemTicketCustomer_Max)
                            //        {
                            //            customerDetails = new BMC.Presentation.POS.Views.CustomerDetails();
                            //            customerDetails.delCustomerUpdated += new BMC.Presentation.POS.Views.CustomerDetails.CustomerUpdateHandler(delCustomerUpdated);
                            //            customerDetails.delCustomerCancelled += new BMC.Presentation.POS.Views.CustomerDetails.CustomerCancelHandler(delCustomerCancelled);
                            //            Owner = Window.GetWindow(this);
                            //            customerDetails.ShowDialog();
                            //        }
                            //        else if (redeemTicketAmount >= Settings.RedeemTicketCustomer_BankAcctNo)
                            //        {
                            //            customerDetails = new BMC.Presentation.POS.Views.CustomerDetails(true);
                            //            customerDetails.delCustomerUpdated += new BMC.Presentation.POS.Views.CustomerDetails.CustomerUpdateHandler(delCustomerUpdated);
                            //            customerDetails.delCustomerCancelled += new BMC.Presentation.POS.Views.CustomerDetails.CustomerCancelHandler(delCustomerCancelled);
                            //            Owner = Window.GetWindow(this);
                            //            customerDetails.ShowDialog();
                            //        }

                            //        if (ProcessCancelled)
                            //        {
                            //            MessageBox.ShowBox("MessageID299", BMC_Icon.Information);
                            //            this.ucValueCalc.txtDisplay.Text = string.Empty;
                            //            return;
                            //        }
                            //    }
                            //}

                            #endregion
                            objTicketDetail = objCashDeskOper.RedeemOnlineTicket(objTicketDetail);
                            isValid = objTicketDetail.ValidTicket;
                        }
                        else
                        {
                            disptimerRedeem.Start();
                            this.txtStatus.Visibility = Visibility.Hidden;
                            return;
                        }
                        disptimerRedeem.Start();
                    }
                    else
                    {
                        objTicketDetail = objCashDeskOper.RedeemOnlineTicket(objTicketDetail);
                        isValid = objTicketDetail.ValidTicket;
                    }

                    if (objTicketDetail.TicketStatus == "MessageID210")
                        objTicketDetail.TicketStatus = Application.Current.FindResource(objTicketDetail.TicketStatus).ToString() +
                            "(" + CommonUtilities.GetCurrency(Convert.ToDouble(objTicketDetail.TicketValue / 100)) + ")";
                    else
                        objTicketDetail.TicketStatus = Application.Current.FindResource(objTicketDetail.TicketStatus).ToString();

                    IsCashDispenseError = true;
                    if (isValid && objTicketDetail.RedeemedMachine != null && objTicketDetail.RedeemedMachine != string.Empty)
                    {
                        try
                        {
                            //DateTime PrintDate;
                            //string strbar_pos = objCashDeskOper.GetTicketPrintDevice(objTicketDetail.TicketString, out PrintDate);
                            DateTime PrintDate = DateTime.Now;
                            string strbar_pos = objCashDeskOper.GetTicketPrintDevice(objTicketDetail.TicketString, out PrintDate);
                            //TextBlock_11.Text = "#" + strbar_pos + PrintDate.ToString().Replace("/", "").Replace(":", "").Replace("AM", "0").Replace("PM", "1").Replace(" ", "");
                            //TextBlock_11.Text = "#" + objTicketDetail.PrintedDevice + objTicketDetail.PrintedDate.ToString().Replace("/", "").Replace(":", "").Replace("AM", "0").Replace("PM", "1").Replace(" ", "");
                            if (objTicketDetail.RedeemedDate == null || objTicketDetail.RedeemedDate.ToString().Trim().Equals(string.Empty))
                            {
                                TextBlock_11.Text = string.Empty;
                            }
                            else
                            {
                                TextBlock_11.Text = "#" + strbar_pos + objTicketDetail.RedeemedDate.ToString("ddMMyyyyHHmmss");
                            }

                            txtAmount.Text = objTicketDetail.RedeemedAmount.GetUniversalCurrencyFormat();
                            if (!objTicketDetail.TicketStatus.Trim().ToUpper().Equals("ALREADY CLAIMED"))
                            {
                                #region GCD
                                if (Settings.IsGloryCDEnabled && Settings.CashDispenserEnabled)
                                {
                                    LogManager.WriteLog(string.Format("Process Redeem Voucher: {2} for Bar Postion: {0} - Amount: {1} in cents", strbar_pos, ticketAmount, objTicketDetail.TicketString), LogManager.enumLogLevel.Info);

                                    //implement Cash Dispenser
                                    LogManager.WriteLog(string.Format("Amount: {0:0.00} Sending to Cash Dispenser ", ticketAmount), LogManager.enumLogLevel.Info);
                                    LoadingWindow ld = new LoadingWindow(Window.GetWindow(this), ModuleName.Voucher, TextBlock_11.Text , strbar_pos, ticketAmount);
                                    ld.Topmost = true;
                                    ld.ShowDialogEx(this);
                                    Result res = ld.Result;
                                    if (!res.IsSuccess)
                                    {
                                        IsCashDispenseError = false;
                                        this.txtStatus.Text = res.error.Message;
                                        LogManager.WriteLog(string.Format("Unable to Dispense Cash - Amount: {0}", ticketAmount), LogManager.enumLogLevel.Info);
                                        LogManager.WriteLog("Rollback Redeem Voucher Process", LogManager.enumLogLevel.Info);
                                        AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                                        {
                                            AuditModuleName = ModuleName.Voucher,
                                            Audit_Screen_Name = "Vouchers|RedeemVoucher",
                                            Audit_Desc = "Rollback redeem voucher:" + objTicketDetail.TicketString + " due to cash dispenser error",
                                            AuditOperationType = OperationType.MODIFY,
                                            Audit_Old_Vl = "iPayDeviceid:" + objTicketDetail.RedeemedDevice + ";dtPaid:" + objTicketDetail.RedeemedDate.GetUniversalDateTimeFormat() + ";Customerid:" + objTicketDetail.CustomerId.ToString()
                                        });
                                        objCashDeskOper.RollbackRedeemTicket(objTicketDetail.TicketString);
                                        if (Convert.ToBoolean(AppSettings.REDEEM_TICKET_POP_UP_ALERT_VISIBILITY))
                                        {
                                            BMC.Presentation.MessageBox.ShowBox(res.error.Message, res.error.MessageType.Equals("Error") ? BMC_Icon.Error : BMC_Icon.Information, true);
                                        }
                                    }
                                    else
                                    {
                                        LogManager.WriteLog(string.Format("Cash Dispensed Successfully - Amount: {0}", ticketAmount), LogManager.enumLogLevel.Info);

                                        IsCashDispenseError = true;
                                        if (Convert.ToBoolean(AppSettings.REDEEM_TICKET_POP_UP_ALERT_VISIBILITY))
                                        {
                                            BMC.Presentation.MessageBox.ShowBox(res.error.Message, res.error.MessageType.Equals("Error") ? BMC_Icon.Error : BMC_Icon.Information, true);
                                        }

                                    }
                                }
                                #endregion
                            }

                        }
                        catch (Exception Ex)
                        {
                            LogManager.WriteLog("Error showing Voucher Info :" + Ex.Message, LogManager.enumLogLevel.Error);
                        }
                    }

                    if (objTicketDetail.ShowOfflineTicketScreen)
                    {
                        int result;

                        if (objTicketDetail.HostSiteCode == Settings.SiteCode) // Offline Tickets redemption is valid only for local site code
                            result = objCashDeskOper.CheckSDGOfflineTicket(objTicketDetail.TicketString);
                        else
                            result = -14;

                        if (result == -14)// Site Code Mismatch
                        {
                            this.txtStatus.Visibility = Visibility.Visible;
                            this.txtStatus.Text = Application.Current.FindResource("MessageID312") as string;
                            this.txtStatus.Background = System.Windows.Media.Brushes.Red;
                            return;
                        }
                        else
                        {
                            frmRedeemOffline = new BMC.Presentation.POS.Views.CRedeemOfflineTicket();
                            frmRedeemOffline.TicketNumber = ucValueCalc.txtDisplay.Text.Trim();
                            frmRedeemOffline.ShowDialogEx(this);
                            if(frmRedeemOffline.IsSuccessfull)
                            {
                                this.ucValueCalc.txtDisplay.Text = frmRedeemOffline.TicketNumber;
                                button_Click(sender, e);
                            }
                            else
                            {
                                this.ucValueCalc.txtDisplay.Text = string.Empty;
                                this.txtStatus.Clear();
                            }
                        }
                    }
                    else
                    {
                        if (Settings.IsGloryCDEnabled && (!IsCashDispenseError))
                        {
                            disptimerRedeem.Stop();
                            this.txtStatus.Visibility = Visibility.Visible;
                            this.txtStatus.Background = System.Windows.Media.Brushes.Red;
                            TextBlock_11.Text = string.Empty;
                            txtAmount.Text = string.Empty;
                            System.Threading.Thread.Sleep(100);
                            //System.Threading.Thread.CurrentThread
                            disptimerRedeem.Start();
                        }
                        else
                        {
                            this.txtStatus.Text = objTicketDetail.TicketStatus;
                            //"(" + CommonUtilities.GetCurrency(Convert.ToDouble(TicketDetail.TicketValue / 100)) + ")";
                            if (Application.Current.FindResource("MessageID219").ToString() == objTicketDetail.TicketStatus)
                            {
                                bisTicketExpired = true;
                            }
                            this.txtWarning.Text = objTicketDetail.TicketWarning;
                            if (!objTicketDetail.ValidTicket)
                            {
                                this.txtStatus.Background = System.Windows.Media.Brushes.Red;

                                AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                                {

                                    AuditModuleName = ModuleName.Voucher,
                                    Audit_Screen_Name = "Vouchers|RedeemVoucher",
                                    Audit_Desc = "Invalid Voucher Redemption Attempt",
                                    AuditOperationType = OperationType.MODIFY,
                                    Audit_Field = "Voucher Number",
                                    Audit_New_Vl = objTicketDetail.TicketString
                                });

                            }
                            else
                            {
                                this.txtStatus.Background = System.Windows.Media.Brushes.White;

                                AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                                {

                                    AuditModuleName = ModuleName.Voucher,
                                    Audit_Screen_Name = "Vouchers|RedeemVoucher",
                                    Audit_Desc = "Voucher Number-" + objTicketDetail.TicketString,
                                    AuditOperationType = OperationType.ADD,
                                    Audit_Field = "Voucher Status",
                                    Audit_New_Vl = objTicketDetail.TicketStatus
                                });

                                //Cross Ticketing- Insert Local Record 
                                if (!string.IsNullOrEmpty(objTicketDetail.VoucherXMLData))
                                {
                                    objTicketDetail.RedeemedUser = Security.SecurityHelper.CurrentUser.UserName;
                                    objCashDeskOper.ImportVoucherDetails(objTicketDetail);
                                }

                                if (objTicketDetail.TicketStatus.Contains(Application.Current.FindResource("MessageID210").ToString()))
                                {
                                    //disptimerRedeem.Stop();

                                    Action act = new Action(() =>
                                    {
                                        if (Convert.ToBoolean(AppSettings.REDEEM_TICKET_POP_UP_ALERT_VISIBILITY))
                                        {
                                            if (IsCashDispenseError)
                                            {
                                                if (Settings.IsGloryCDEnabled)
                                                {
                                                    disptimerRedeem.Stop();
                                                    this.txtStatus.Visibility = Visibility.Visible;
                                                }
                                                else
                                                {
                                                    this.ClearAll(false);
                                                }
                                                MessageBox.ShowBox("MessageID377", BMC_Icon.Information);
                                            }


                                        }
                                        else
                                        {
                                            this.txtStatus.Text = Application.Current.FindResource("MessageID377").ToString();
                                            txtAmount.Text = Convert.ToDecimal(objTicketDetail.TicketValue / 100).GetUniversalCurrencyFormat();
                                            bisTicketExpired = false;
                                            this.txtStatus.Background = System.Windows.Media.Brushes.GreenYellow;
                                        }
                                        if (!Settings.IsGloryCDEnabled)
                                        {
                                            this.dispenserStatus.LoadItemsAysnc();
                                        }
                                    });

                                    if (!Settings.IsGloryCDEnabled)
                                    {
                                        _worker.Dispense("Voucher Number", objTicketDetail.TicketString, objTicketDetail.RedeemedAmount, act);

                                    }
                                    else
                                    {
                                        act();
                                        disptimerRedeem.Start();
                                    }

                                }
                            }
                            if (objTicketDetail.EnableTickerPrintDetails)
                            {
                                this.gridRedeemedTicket.Visibility = Visibility.Visible;
                                this.txtPrintedMachine.Text = objTicketDetail.RedeemedMachine;
                                this.txtClaimedDevice.Text = objTicketDetail.RedeemedDevice;
                                this.txtTickAmount.Text = objTicketDetail.RedeemedAmount.GetUniversalCurrencyFormatWithSymbol();
                                this.txtClaimedDate.Text = objTicketDetail.RedeemedDate.GetUniversalDateTimeFormat();
                            }
                            else
                            {
                                this.gridRedeemedTicket.Visibility = Visibility.Hidden;
                            }
                            this.ucValueCalc.txtDisplay.Focus();
                        }
                    }
                }
                else
                {
                    MessageBox.ShowBox("MessageID105", BMC_Icon.Warning);
                    this.ucValueCalc.txtDisplay.Focus();
                }
            }
            catch (Exception ex)
            {
                BMC.Common.ExceptionManagement.ExceptionManager.Publish(ex);
            }
            finally
            {
                btnVerify.IsEnabled = true;
            }
        }
        public void GetTicketDetails(ref RTOnlineTicketDetail TicketDetail)
        {
            LinqDataAccessDataContext linqDB = new LinqDataAccessDataContext(CommonDataAccess.ExchangeConnectionString);
            DateTime? dtPaid = DateTime.Now;
            int? Amount = 0;
            string payDevice = string.Empty, printDevice = string.Empty;

            try
            {
                linqDB.GetTicketDetails(TicketDetail.TicketString, ref printDevice, ref payDevice, ref dtPaid, ref Amount);

                TicketDetail.RedeemedDate = (DateTime)dtPaid;
                TicketDetail.RedeemedDevice = payDevice;
                TicketDetail.RedeemedMachine = printDevice;
                TicketDetail.RedeemedAmount = (Convert.ToDecimal(Amount.Value) / 100);


            }
            catch (Exception Ex)
            {
                ExceptionManager.Publish(Ex);
            }
        }
        private string RedeemTicket(ReedemTicketInfo ticket)
        {
            LogManager.WriteLog("Inside RedeemTicket() Method", LogManager.enumLogLevel.Info);
            bool _isValidTicket = false;
            double RedeemTicketAmt = 0;
            int iCustomerID = 0;
            IRedeemOnlineTicket _objRedeemOnlineTicket = RedeemOnlineTicketBusinessObject.CreateInstance();
            RTOnlineTicketDetail _objOnlineTicketDetail = new RTOnlineTicketDetail();

            try
            {
                _objOnlineTicketDetail.RedeemedMachine = System.Environment.MachineName;
                _objOnlineTicketDetail.ClientSiteCode = Settings.SiteCode;               

                LogManager.WriteLog("The Voucher Redeem is Validating", LogManager.enumLogLevel.Info);
                _objOnlineTicketDetail.TicketString = ticket.Barcode;
                _objOnlineTicketDetail.HostSiteCode = _objOnlineTicketDetail.TicketString.Substring(0, 4);

                LogManager.WriteLog("Redeeming the Voucher :" + _objOnlineTicketDetail.TicketString, LogManager.enumLogLevel.Info);
                Dispatcher.BeginInvoke((Action)(() =>
                     {
                         ticket.Status = Application.Current.Resources["CRedeemMultipleTicketRedemptionValidating"].ToString();

                     }), null);

                validateVoucher(ticket);

                _objOnlineTicketDetail = ticket.oRTOnlineTicketDetail;

                ticket.TicketStatus = _objOnlineTicketDetail.TicketStatusCode;
                ticket.oRTOnlineTicketDetail = _objOnlineTicketDetail;


                if (_objOnlineTicketDetail.TicketStatusCode != 0 && _objOnlineTicketDetail.TicketStatusCode != -14 && _objOnlineTicketDetail.TicketStatusCode != -15 && _objOnlineTicketDetail.TicketStatusCode != 1) //Exception Occured
                {
                    return Application.Current.Resources["MessageID425"].ToString();
                }


                int iTicketAmount = Convert.ToInt32(_objOnlineTicketDetail.RedeemedAmount);
                RedeemTicketAmt = iTicketAmount;
                _objOnlineTicketDetail.CustomerId = iCustomerID;
                _objOnlineTicketDetail.AuthorizedUser_No = Security.SecurityHelper.CurrentUser.User_No;
                _objOnlineTicketDetail.RedeemedUser = Security.SecurityHelper.CurrentUser.UserName;

               
                #region ValidVoucher
                //For active voucher
                if ((_objOnlineTicketDetail.TicketStatusCode == 0) && (Settings.RedeemConfirm))
                {
                      LogManager.WriteLog("Processing valid Voucher with status (0) with Barcode" + _objOnlineTicketDetail.TicketString, LogManager.enumLogLevel.Info);
                        Dispatcher.BeginInvoke((Action)(() =>
                        {

                            ticket.Status = Application.Current.Resources["RedeemMultipleTicketProcessingMessage"].ToString();


                        }), null);

                        _objOnlineTicketDetail.TicketString = ticket.Barcode; // to pass the exact barcode entered in the UI to redeem since validation length check is done during redemption also]
                        _objRedeemOnlineTicket.RedeemOnlineTicket(_objOnlineTicketDetail);
                        _isValidTicket = _objOnlineTicketDetail.ValidTicket;
                        //Thread.Sleep(300);
                        LogManager.WriteLog("The Voucher Redeem is Processed", LogManager.enumLogLevel.Info);


                        ticket.Status = Application.Current.Resources[_objOnlineTicketDetail.TicketStatus].ToString();
                        string AuditTicketStatus = ticket.Status;

                        //DB will return as VALID VOUCHER(MessageID210) if the voucher is redeemed successfully, So if the 
                        //ticket is redeemed successfully,by checking the ticket status, the redemption is displayed in the grid
                        if (ticket.Status == Application.Current.Resources["MessageID210"].ToString())
                        {
                            ticket.Status = Application.Current.Resources["CRedeemMultipleTicketRedemptionSuccess"].ToString();

                            AuditTicketStatus = AuditTicketStatus + "(" + CommonUtilities.GetCurrency(Convert.ToDouble(_objOnlineTicketDetail.TicketValue)) + ")";
                            //Audit the redeemed voucher
                            AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                            {

                                AuditModuleName = ModuleName.MultipleVoucherRedeem,
                                Audit_Screen_Name = "Multiple Redeem Voucher",
                                Audit_Desc = "Voucher Number -" + _objOnlineTicketDetail.TicketString,
                                AuditOperationType = OperationType.ADD,
                                Audit_Field = "Voucher Status",
                                Audit_New_Vl = AuditTicketStatus,
                                Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                                Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                            });

                        }
                        else
                        {
                            ticket.Status = Application.Current.Resources["CRedeemMultipleVoucherRedemptionFailed"].ToString();
                            ticket.TicketStatus = -1;

                            //Audit the redemption failed voucher
                            AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                            {

                                AuditModuleName = ModuleName.MultipleVoucherRedeem,
                                Audit_Screen_Name = "Multiple Redeem Voucher",
                                Audit_Desc = "Voucher redemption failed for :-" + _objOnlineTicketDetail.TicketString,
                                AuditOperationType = OperationType.MODIFY,
                                Audit_Field = "Voucher status",
                                Audit_New_Vl = AuditTicketStatus,
                                Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                                Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                            });


                        }
                        ticket.IsVoucherRedeemed = true;
                        return ticket.Status;
                    
                   
                }

                #endregion ValidVoucher

                #region TISVALIDVOUCHER

                //For active voucher
                else if ((_objOnlineTicketDetail.TicketStatusCode == 1) && (Settings.RedeemConfirm))
                {
                    LogManager.WriteLog("Processing valid TIS Voucher with status (1) with Barcode" + _objOnlineTicketDetail.TicketString, LogManager.enumLogLevel.Info);
                    Dispatcher.BeginInvoke((Action)(() =>
                    {
                      ticket.Status = Application.Current.Resources["RedeemMultipleTicketProcessingMessage"].ToString();
                    }), null);

                    _objRedeemOnlineTicket.RedeemOnlineTicket(_objOnlineTicketDetail);
                    _isValidTicket = _objOnlineTicketDetail.ValidTicket;
                    // Thread.Sleep(300);
                    LogManager.WriteLog("The Voucher Redeem is Processed", LogManager.enumLogLevel.Info);
                    
                    ticket.Status = Application.Current.Resources[_objOnlineTicketDetail.TicketStatus].ToString();
                    string TISAuditStatus = ticket.Status;
                    //DB will return as VALID VOUCHER(MessageID210) if the voucher is redeemed successfully, So if the 
                    //ticket is redeemed successfully,by checking the ticket status, the redemption is displayed in the grid
                    if (ticket.Status == Application.Current.Resources["MessageID210"].ToString())
                    {
                        ticket.Status = Application.Current.Resources["CRedeemTISVoucherRedeemSuccess"].ToString();
                        //Audit the redeemed voucher
                        AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                        {
                            AuditModuleName = ModuleName.MultipleVoucherRedeem,
                            Audit_Screen_Name = "Multiple Redeem Voucher",
                            Audit_Desc = "TIS Voucher Number -" + _objOnlineTicketDetail.TicketString,
                            AuditOperationType = OperationType.ADD,
                            Audit_Field = "Voucher Status",
                            Audit_New_Vl = TISAuditStatus+"["+ ticket.Amount + "]",
                            Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                            Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                        });
                    }
                    else if (ticket.Status == Application.Current.Resources["MessageID876"].ToString()) // for TIS Effective date mismatch
                    {
                        ticket.Status = ticket.Status;
                        ticket.TicketStatus = -1;
                        //Audit the redemption failed voucher
                        AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                        {
                            AuditModuleName = ModuleName.MultipleVoucherRedeem,
                            Audit_Screen_Name = "Multiple Redeem Voucher",
                            Audit_Desc = "TIS Voucher redemption failed for :-" + _objOnlineTicketDetail.TicketString,
                            AuditOperationType = OperationType.MODIFY,
                            Audit_Field = "Voucher status",
                            Audit_New_Vl = TISAuditStatus,
                            Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                            Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                        });
                    }
                    else
                    {
                        ticket.Status = Application.Current.Resources["CRedeemTISVoucherRedeemFailed"].ToString();
                        ticket.TicketStatus = -1;
                        //Audit the redemption failed voucher
                        AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                        {
                            AuditModuleName = ModuleName.MultipleVoucherRedeem,
                            Audit_Screen_Name = "Multiple Redeem Voucher",
                            Audit_Desc = "TIS Voucher redemption failed for :-" + _objOnlineTicketDetail.TicketString,
                            AuditOperationType = OperationType.MODIFY,
                            Audit_Field = "Voucher status",
                            Audit_New_Vl = TISAuditStatus,
                            Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                            Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                        });

                    }
                    ticket.IsVoucherRedeemed = true;
                    return ticket.Status;
                }


                #endregion TISVALIDVOUCHER

                #region forExpiredVoucher
                //Expired Voucher

               
                else if (_objOnlineTicketDetail.TicketStatusCode == -14 && (Settings.RedeemConfirm) && Settings.RedeemExpiredTicket)
                {

                    
                        LogManager.WriteLog("Processing expired Voucher with status -14 with Barcode" + _objOnlineTicketDetail.TicketString, LogManager.enumLogLevel.Info);
                        LogManager.WriteLog("The expired Voucher Redeem is Processing", LogManager.enumLogLevel.Info);
                        Dispatcher.BeginInvoke((Action)(() =>
                        {
                            ticket.Status = Application.Current.Resources["RedeemMultipleTicketProcessingMessage"].ToString();
                        }), null);
                        _objOnlineTicketDetail = _objRedeemOnlineTicket.RedeemOnlineTicket(_objOnlineTicketDetail);
                        _isValidTicket = _objOnlineTicketDetail.ValidTicket;
                        Thread.Sleep(300);

                        LogManager.WriteLog("The Voucher:" + ticket.Barcode + "is Redeemed successfully", LogManager.enumLogLevel.Info);

                        ticket.Status = Application.Current.Resources[_objOnlineTicketDetail.TicketStatus].ToString();
                        string AuditExpiredStatus = ticket.Status;
                        //DB will return as VALID VOUCHER(MessageID210) if the voucher is redeemed successfully, So if the 
                        //ticket is redeemed successfully,by checking the ticket status, the redemption is displayed in the grid

                        if (ticket.Status == Application.Current.Resources["MessageID210"].ToString())
                        {
                            ticket.Status = Application.Current.Resources["CRedeemMultipleTicketRedemptionSuccess"].ToString();

                            
                            //Audit the redeemed voucher
                            AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                            {

                                AuditModuleName = ModuleName.MultipleVoucherRedeem,
                                Audit_Screen_Name = "Multiple Redeem Voucher",
                                Audit_Desc = "Expired Voucher Number -" + _objOnlineTicketDetail.TicketString,
                                AuditOperationType = OperationType.ADD,
                                Audit_Field = "Voucher Status",
                                Audit_New_Vl = AuditExpiredStatus + "[" + ticket.Amount + "]",
                                Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                                Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                            });
                        }
                        else
                        {
                            ticket.Status = Application.Current.Resources["CRedeemMultipleVoucherRedemptionFailed"].ToString();
                            ticket.TicketStatus = -1;

                            //Audit the redemption failed voucher
                            AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                            {

                                AuditModuleName = ModuleName.MultipleVoucherRedeem,
                                Audit_Screen_Name = "Multiple Redeem Voucher",
                                Audit_Desc = "Expired Voucher redemption failed for :-" + _objOnlineTicketDetail.TicketString,
                                AuditOperationType = OperationType.MODIFY,
                                Audit_Field = "Voucher status",
                                Audit_New_Vl = AuditExpiredStatus,
                                Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                                Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                            });
                        }

                        ticket.IsVoucherRedeemed = true;

                    }

                   

              
                
                #endregion forExpiredVoucher

                #region forTISExpiredVoucher
                //Expired Voucher
                else if (_objOnlineTicketDetail.TicketStatusCode == -15 && (Settings.RedeemConfirm) && Settings.RedeemExpiredTicket)
                {
                   
                    LogManager.WriteLog("Processing TIS expired Voucher with status -15 with Barcode" + _objOnlineTicketDetail.TicketString, LogManager.enumLogLevel.Info);
                    LogManager.WriteLog("The expired TIS Voucher Redeem is Processing", LogManager.enumLogLevel.Info);
                    Dispatcher.BeginInvoke((Action)(() =>
                    {
                        ticket.Status = Application.Current.Resources["RedeemMultipleTicketProcessingMessage"].ToString();
                    }), null);
                    _objOnlineTicketDetail = _objRedeemOnlineTicket.RedeemOnlineTicket(_objOnlineTicketDetail);
                    _isValidTicket = _objOnlineTicketDetail.ValidTicket;
                    Thread.Sleep(300);                    
                    LogManager.WriteLog("The Voucher:" + ticket.Barcode + "is Redeemed successfully", LogManager.enumLogLevel.Info);

                    ticket.Status = Application.Current.Resources[_objOnlineTicketDetail.TicketStatus].ToString();
                    string TISExpiredAuditStatus = ticket.Status;
                    //DB will return as VALID VOUCHER(MessageID210) if the voucher is redeemed successfully, So if the 
                    //ticket is redeemed successfully,by checking the ticket status, the redemption is displayed in the grid

                    if (ticket.Status == Application.Current.Resources["MessageID210"].ToString())
                    {
                        ticket.Status = Application.Current.Resources["CRedeemTISVoucherRedeemSuccess"].ToString();

                        //Audit the redeemed voucher
                        AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                        {

                            AuditModuleName = ModuleName.MultipleVoucherRedeem,
                            Audit_Screen_Name = "Multiple Redeem Voucher",
                            Audit_Desc = "TIS Voucher Number -" + _objOnlineTicketDetail.TicketString,
                            AuditOperationType = OperationType.ADD,
                            Audit_Field = "Voucher Status",
                            Audit_New_Vl = TISExpiredAuditStatus+ "["+ ticket.Amount + "]",
                            Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                            Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                        });
                    }
                    else if (ticket.Status == Application.Current.Resources["MessageID876"].ToString()) // for TIS Effective date mismatch
                    {
                        ticket.Status = ticket.Status;
                        ticket.TicketStatus = -1;

                        //Audit the redemption failed voucher
                        AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                        {

                            AuditModuleName = ModuleName.MultipleVoucherRedeem,
                            Audit_Screen_Name = "Multiple Redeem Voucher",
                            Audit_Desc = "TIS Voucher redemption failed for :-" + _objOnlineTicketDetail.TicketString,
                            AuditOperationType = OperationType.MODIFY,
                            Audit_Field = "Voucher status",
                            Audit_New_Vl = TISExpiredAuditStatus,
                            Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                            Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                        });
                    }

                    else
                    {
                        ticket.Status = Application.Current.Resources["CRedeemTISVoucherRedeemFailed"].ToString();
                        ticket.TicketStatus = -1;

                        //Audit the redemption failed voucher
                        AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                        {

                            AuditModuleName = ModuleName.MultipleVoucherRedeem,
                            Audit_Screen_Name = "Multiple Redeem Voucher",
                            Audit_Desc = "TIS Voucher redemption failed for :-" + _objOnlineTicketDetail.TicketString,
                            AuditOperationType = OperationType.MODIFY,
                            Audit_Field = "Voucher status",
                            Audit_New_Vl = TISExpiredAuditStatus,
                            Audit_User_ID = _objOnlineTicketDetail.AuthorizedUser_No,
                            Audit_User_Name = _objOnlineTicketDetail.RedeemedUser
                        });
                    }
                    ticket.IsVoucherRedeemed = true;
                }
                    
                
                #endregion forTISExpiredVoucher                

                else if (_objOnlineTicketDetail.TicketStatusCode == -14 && (Settings.RedeemConfirm) && !Settings.RedeemExpiredTicket)
                {
                    LogManager.WriteLog("Processing expired Voucher with status -14 with Barcode with EXPIRED TICKET setting as FALSE" + _objOnlineTicketDetail.TicketString, LogManager.enumLogLevel.Info);
                    ticket.IsVoucherRedeemed = false;                  
                    ticket.Status = Application.Current.Resources["CRedeemMultipleTicketRedeemExpired"].ToString();

                    AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                    {

                        AuditModuleName = ModuleName.Voucher,
                        Audit_Screen_Name = "Vouchers|RedeemVoucher",
                        Audit_Desc = "Invalid Voucher Redemption Attempt",
                        AuditOperationType = OperationType.MODIFY,
                        Audit_Field = "Voucher Number",
                        Audit_New_Vl = _objOnlineTicketDetail.TicketString
                    });			 
                }
                else if (_objOnlineTicketDetail.TicketStatusCode == -15 && (Settings.RedeemConfirm) && !Settings.RedeemExpiredTicket)
                {
                    LogManager.WriteLog("Processing expired Voucher with status -15 with Barcode with EXPIRED TICKET setting as FALSE" + _objOnlineTicketDetail.TicketString, LogManager.enumLogLevel.Info);
                    ticket.IsVoucherRedeemed = false;
                    ticket.Status = Application.Current.Resources["CRedeemMultipleVoucherTISExpiredVoucher"].ToString();

                    AuditViewerBusiness.InsertAuditData(new Audit.Transport.Audit_History
                    {

                        AuditModuleName = ModuleName.Voucher,
                        Audit_Screen_Name = "Vouchers|RedeemVoucher",
                        Audit_Desc = "Invalid Voucher Redemption Attempt",
                        AuditOperationType = OperationType.MODIFY,
                        Audit_Field = "Voucher Number",
                        Audit_New_Vl = _objOnlineTicketDetail.TicketString
                    });			

                }    
            }
            catch (Exception ex)
            {
                ExceptionManager.Publish(ex);
                ticket.Status = Application.Current.Resources["CRedeemMultipleVoucherRedemptionFailed"].ToString();
				ticket.TicketStatus = -1;
            }
            return ticket.Status;
        }
        public bool OfflineTicket(ref RTOnlineTicketDetail TicketDetail)
        {
            bool isSuccess = false;

            try
            {
                if (redeemTicketDB.DoesOfflineTicketExist(ref TicketDetail))
                {
                    TicketDetail.EnableTickerPrintDetails = true;
                    redeemTicketDB.GetExceptionDetails(ref TicketDetail);
                    isSuccess = true;
                }
                else
                    isSuccess = false;
            }
            catch (Exception ex)
            {
                ExceptionManager.Publish(ex);
            }
            return isSuccess;
        }
        public redeemVoucherResponse1 redeemVoucher(redeemVoucherRequest request)
        {
            if (!CheckCageEnabled())
                return null;
            this.SetUser(request.redeemVoucher.arg0.employeeId);
            bool isValid = false;
            RTOnlineTicketDetail objTicketDetail = null;
            double redeemTicketAmount = 0;
            redeemVoucherResponse1 oReponse = new redeemVoucherResponse1();
            oReponse.redeemVoucherResponse = new redeemVoucherResponse();
            oReponse.redeemVoucherResponse.@return = request.redeemVoucher.arg0;
            try
            {
                IRedeemOnlineTicket objCashDeskOper = RedeemOnlineTicketBusinessObject.CreateInstance();
                objTicketDetail = new RTOnlineTicketDetail();
                objTicketDetail.TicketString = request.redeemVoucher.arg0.barcode;
                //int ticketStatus = 0;
                objTicketDetail = objCashDeskOper.GetRedeemTicketAmountCage(objTicketDetail);
                
                redeemTicketAmount = double.Parse ( objTicketDetail.RedeemedAmount.ToString()) / 100;
                objTicketDetail.CustomerId = Custid;

                int iResult = objCashDeskOper.CheckSDGTicketCage(objTicketDetail.TicketString);
                LogManager.WriteLog("redeemVoucher->CheckSDGTicketCage Return Value :" + iResult.ToString() , LogManager.enumLogLevel.Info);
                oReponse.redeemVoucherResponse.@return = objCashDeskOperator.redeemRequestVoucher(request.redeemVoucher.arg0);
                if (iResult == 0)
                {

                    isValid = objCashDeskOper.RedeemOnlineTicketCage(objTicketDetail);
                    if (isValid)
                    {
                        [email protected] = "REDEEMED";
                        [email protected] = 3;
                        [email protected] = 0;
                    }
                    else
                    {
                        [email protected] = objTicketDetail.TicketStatus;
                        [email protected] = -98;
                        [email protected] = -98;
                    }
                    
                }
                else
                {
                    if (iResult == -1)
                    {
                        [email protected] = "VOUCHER_ALREADY_REDEEEMED";
                        [email protected] = -1001;
                        [email protected] = -1001;
                    }
                    else if (iResult == -2)
                    {
                        [email protected] = "VOUCHER_BARCODE_NOT_EXIST";
                        [email protected] = -3;
                        [email protected] = -3;
                    }
                    else if (iResult == -3)
                    {
                        if (Settings.RedeemExpiredTicket)
                        {
                            objTicketDetail = new RTOnlineTicketDetail();
                            objTicketDetail.TicketString = request.redeemVoucher.arg0.barcode;
                            objTicketDetail.CustomerId = Custid;
                           
                            isValid = objCashDeskOper.RedeemOnlineTicketCage(objTicketDetail);
                            LogManager.WriteLog("Redeem Expired Voucher response:" + objTicketDetail.ValidTicket.ToString() + " " + ((objTicketDetail.TicketStatus!= null)?objTicketDetail.TicketStatus:string.Empty), LogManager.enumLogLevel.Info);
                            if (objTicketDetail.ValidTicket == true)
                            {
                                [email protected] = "REDEEMED";
                                [email protected] = 3;
                                [email protected] = 0;
                            }
                            else
                            {
                                
                                [email protected] = "GENERAL_VOUCHER_ERROR";
                                [email protected] = -2;
                                [email protected] = -2;
                            }
                        
                        }
                        else
                        {
                            [email protected] = "VOUCHER_EXPIRED";
                            [email protected] = -1005;
                            [email protected] = -1005;
                        }

                    }
                    else if (iResult == -12)
                    {
                        [email protected] = "REDEEM_REQ_ALREADY_VOIDED";
                        [email protected] = -1031;
                        [email protected] = -1031;
                    }
                    else if (iResult == -99)
                    {
                        [email protected] = "SITE CODE MISMATCH";
                        [email protected] = -99;
                        [email protected] = -99;
                    }
                    else
                    {
                        [email protected] = "GENERAL_VOUCHER_ERROR";
                        [email protected] = -1;
                        [email protected] = -1;
                    }
                }
            }
            catch (Exception ex)
            {
                BMC.Common.ExceptionManagement.ExceptionManager.Publish(ex);
                [email protected] = -1;
                [email protected] = -1;
            }
            return oReponse;
        }
        public voucherDTO redeemRequestVoucher(voucherDTO request)
        {
            voucherDTO ovoucherDTO = null;
            string LocalTicketorSiteCode;
            string sURL;
            RTOnlineTicketDetail TicketDetailEntity = new RTOnlineTicketDetail();
            TicketDetailEntity.TicketString = request.barcode;

            ValidateSiteCode(TicketDetailEntity.TicketString, out LocalTicketorSiteCode, out sURL);

            if (sURL.IsNullOrEmpty() || sURL == "INVALID") //Invalid Site Code or No rights to access other Site
            {
                return ovoucherDTO;
            }
            else if (sURL.StartsWith("http")) // WebService Call in case of Different Site Code 
            {
                System.ServiceModel.EndpointAddress objEndpoint = new System.ServiceModel.EndpointAddress(sURL);
                TicketingClient.TicketingServiceReference.TicketingServiceClient objClient = new TicketingClient.TicketingServiceReference.TicketingServiceClient(objEndpoint, LocalTicketorSiteCode);

                //EndpointAddress objEndpoint = new EndpointAddress("http://10.2.108.29/TicketingWCFService/TicketingService.svc"); //sURL
                //TicketingServiceClient objClient = new TicketingServiceClient(objEndpoint, "1001"); //LocalTicketorSiteCode);
                voucherDTO[] ovoucherDTOarr = objClient.SearchTicketForCage(TicketDetailEntity.TicketString,Settings.SiteCode);
                if (ovoucherDTOarr != null)
                {
                    if (ovoucherDTOarr.Length > 0)
                    {
                        ovoucherDTO = ovoucherDTOarr[0];
                    }
                }
                return ovoucherDTO;
            }
            
            return  issueTicketDB.redeemRequestVoucherForCage(request);
        }