public TransaccionesRespuestasEntities Pagar(ref LogServiceFee item, string sNombreTitular, CreditCardInfo dtsTarjeta, int iPaxNumber, int iNumeroIntento)
        {
            TransaccionesRespuestasEntities Respuesta = new TransaccionesRespuestasEntities();

            try
            {
                String sMerchant;
                String sTipoTarjeta;
                TransaccionesTarjetaNPService Tran = new TransaccionesTarjetaNPService();
                String sCurrency = "MXN";

                if (item.sBanco == "CCAC")
                {
                    sTipoTarjeta = "AMEX";
                    sMerchant    = "33828";
                }
                else
                {
                    sTipoTarjeta = "VMC";
                    sMerchant    = "33521";
                }

                if (System.Configuration.ConfigurationManager.AppSettings["Ambiente"] == "PRUEBAS")
                {
                    sMerchant = "07854";
                }

                Respuesta = ChargesPerService.CobroEnLinea(item, sNombreTitular, Respuesta, sMerchant, sTipoTarjeta, Tran, sCurrency, iNumeroIntento, dtsTarjeta, iPaxNumber, recLoc);
            }
            catch (Exception ex)
            {
                Respuesta.EstatusTransaccion = "Error";
                Respuesta.MensajeAmistoso    = ex.Message;
            }
            return(Respuesta);
        }
        public static TransaccionesRespuestasEntities CobroEnLinea(LogServiceFee item, string sNombreTitular, TransaccionesRespuestasEntities Respuesta, String sMerchant, String sTipoTarjeta, TransaccionesTarjetaNPService Tran, String sCurrency, int valor, CreditCardInfo dtsTarjeta, int iPaxNumber, string recLoc)
        {
            try
            {
                decimal MontoConIVA   = Math.Round(Convert.ToDecimal(item.sMonto) * 1.16M, 2);
                string  idTransaccion = item.id + valor;

                string sRespuesta = Tran.Cobro(idTransaccion, sNombreTitular, item.sNumTarjeta, item.sMesVencimiento, item.sAnioVencimiento, item.sCodigoTarjeta, MontoConIVA, sCurrency, sTipoTarjeta, sMerchant, ref Respuesta);
                var    tr         = new MyCTS.Services.PagosMIT.TransaccionesEntities();
                if (Respuesta == null || string.IsNullOrEmpty(Respuesta.NumeroOperacion) || string.IsNullOrEmpty(Respuesta.NumeroAutorizacion))
                {
                    ErrorLogServiceChargeBL.InsertErrorLogServiceCharge("Error", "Error en " + item.id, "", "");
                    tr = new MyCTS.Services.PagosMIT.TransaccionesEntities {
                        sReference = item.id
                    };
                    string m = Tran.ValidatePayment(ref tr, DateTime.Now);
                    Respuesta.NumeroOperacion    = tr.sNoOperacion;
                    Respuesta.NumeroAutorizacion = tr.sAuth;
                }
                else
                {
                    ErrorLogServiceChargeBL.InsertErrorLogServiceCharge(string.IsNullOrEmpty(Respuesta.EstatusTransaccion) ? "" : Respuesta.EstatusTransaccion, string.IsNullOrEmpty(Respuesta.MensajeAmistoso) ? "" : Respuesta.MensajeAmistoso, string.IsNullOrEmpty(Respuesta.NumeroAutorizacion) ? "" : Respuesta.NumeroAutorizacion, string.IsNullOrEmpty(Respuesta.NumeroOperacion) ? "" : Respuesta.NumeroOperacion);
                }
                item.sNumOperacion    = Respuesta.NumeroOperacion;
                item.sNumAutorizacion = Respuesta.NumeroAutorizacion;

                if (dtsTarjeta.OrigenVenta == "H" || dtsTarjeta.OrigenVenta == "D")
                {
                    LogCxSHotelBL logCxSHotelBL = new LogCxSHotelBL();
                    logCxSHotelBL.InserLogCxSHotel(dtsTarjeta.PNR, idTransaccion, 85, Respuesta.NumeroAutorizacion, Respuesta.NumeroOperacion, item.sNumTarjeta, item.sBanco, Convert.ToDecimal(item.sMonto));
                }
                else
                {
                    if (!string.IsNullOrEmpty(Respuesta.NumeroOperacion) && !string.IsNullOrEmpty(Respuesta.NumeroAutorizacion))
                    {
                        try
                        {
                            LogOnlinePayServicesBL.InsertOnlinePayService(dtsTarjeta.TipoTarjeta, iPaxNumber, recLoc, Respuesta.NumeroAutorizacion, Respuesta.NumeroOperacion, item.sNumTarjeta, Convert.ToDecimal(item.sMonto), item.sBoletos, "");
                        }
                        catch (Exception ex)
                        {
                            new EventsManager.EventsManager(ex, EventsManager.EventsManager.OrigenError.CapaDePresentacion);
                        }
                    }
                }
                if (!string.IsNullOrEmpty(Respuesta.NumeroOperacion) && !string.IsNullOrEmpty(Respuesta.NumeroAutorizacion))
                {
                    try
                    {
                        ImprimeTicketBanco(idTransaccion, 85, ConfigurationManager.AppSettings["DatosContacto"].Split('|')[3], "Comprobante de pago referencia No. " + idTransaccion);
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("No se ha podido enviar el comprobante. Por favor contacta a la Mesa de Servicio para levantar el reporte", Resources.Constants.MYCTS, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
            catch (Exception ex)
            {
                try
                {
                    new EventsManager.EventsManager(ex, EventsManager.EventsManager.OrigenError.CapaDePresentacion);
                }
                catch (Exception)
                {
                    new EventsManager.EventsManager(System.Diagnostics.EventLogEntryType.Error, ex);
                }
            }
            return(Respuesta);
        }
        private void PagarHotel(ref List <ListaFiltrada> lstListaFiltrada, ref TransaccionesRespuestasEntities Respuesta)
        {
            if (tarjeta.TipoTarjeta.Equals("CCAC") || tarjeta.TipoTarjeta.Equals("CCPV") || tarjeta.TipoTarjeta.Equals("CCTD"))
            {
                try
                {
                    LogServiceFee item = new LogServiceFee();
                    String        sNombreTransaccion   = string.Empty;
                    TransaccionesTarjetaNPService Tran = new TransaccionesTarjetaNPService();
                    int iNumeroIntento = 0;
                    // Se guarda en LogServiceFee la respuesta
                    item = new LogServiceFee
                    {
                        id               = sNombreTransaccion,
                        sCodigoTarjeta   = tarjeta.CodigoSeguridad,
                        sNumTarjeta      = tarjeta.NumeroTarjeta,
                        sMesVencimiento  = tarjeta.MesVencimiento,
                        sAnioVencimiento = tarjeta.AnioVencimiento,
                        sBanco           = tarjeta.TipoTarjeta,
                        sMonto           = tarjeta.MontoCargo.ToString(),
                        dtDate           = DateTime.Now,
                        sBoletos         = tarjeta.Ticket,
                        sRemarks         = String.Empty,
                        sRecLoc          = recLoc
                    };

                    // se harcodea el valor del orgId al de CTS, cambiar para cuando se integren mas empresas

                    item.id = sNombreTransaccion = "MyCTS-" + tarjeta.OrigenVenta + "-" + recLoc + "_";

                    Respuesta = Pagar(ref item, tarjeta.NombreTitular, tarjeta, 1, iNumeroIntento);
                    ErrorLogServiceChargeBL.InsertErrorLogServiceCharge(Respuesta.EstatusTransaccion, Respuesta.MensajeAmistoso, Respuesta.NumeroAutorizacion, Respuesta.NumeroOperacion);

                    if (Respuesta.EstatusTransaccion == "Error" || Respuesta.EstatusTransaccion == "Denegada")
                    {
                        char[]   caracterSeparador = { '.' };
                        String[] sErrorCorto       = Respuesta.MensajeAmistoso.Split(caracterSeparador, StringSplitOptions.RemoveEmptyEntries);
                        String   sErrorParteDos    = String.Empty;
                        if (sErrorCorto.Length > 1)
                        {
                            sErrorParteDos = "Transacción rechazada. " + sErrorCorto[1].Trim();;
                        }
                        else
                        {
                            sErrorParteDos = Respuesta.MensajeAmistoso;
                        }
                        tarjeta.Pagado       = false;
                        tarjeta.MensajeError = sErrorParteDos;
                        return;
                    }
                    else
                    {
                        tarjeta.Pagado             = true;
                        tarjeta.NumeroAutorizacion = item.sNumAutorizacion;
                        tarjeta.NumeroOperacion    = item.sNumOperacion;
                    }
                }
                catch (Exception ex)
                {
                    tarjeta.Pagado       = false;
                    tarjeta.MensajeError = "Error al intentar conectar con MIT";
                    try
                    {
                        new EventsManager.EventsManager(ex, EventsManager.EventsManager.OrigenError.CapaDePresentacion);
                    }
                    catch (Exception)
                    {
                        new EventsManager.EventsManager(System.Diagnostics.EventLogEntryType.Error, ex);
                    }
                    return;
                }
            }
            else
            {
                LogCxSHotelBL logCxSHotelBL = new LogCxSHotelBL();
                logCxSHotelBL.InserLogCxSHotel(tarjeta.PNR, string.Empty, 85, Respuesta.NumeroAutorizacion, Respuesta.NumeroOperacion, tarjeta.NumeroTarjeta, tarjeta.TipoTarjeta, Convert.ToDecimal(tarjeta.MontoCargo));
            }

            tarjeta.Activo = false;


            /*
             * foreach (var tarjeta in lstDatosTarjeta2)
             * {
             *  if (tarjeta.TipoTarjeta.Equals("CCAC") || tarjeta.TipoTarjeta.Equals("CCPV") || tarjeta.TipoTarjeta.Equals("CCTD"))
             *  {
             *      try
             *      {
             *          LogServiceFee item = new LogServiceFee();
             *          String sNombreTransaccion = string.Empty;
             *          TransaccionesTarjetaNPService Tran = new TransaccionesTarjetaNPService();
             *          int iNumeroIntento = 0;
             *          // Se guarda en LogServiceFee la respuesta
             *          item = new LogServiceFee
             *          {
             *              id = sNombreTransaccion,
             *              sCodigoTarjeta = tarjeta.CodigoSeguridad,
             *              sNumTarjeta = tarjeta.NumeroTarjeta,
             *              sMesVencimiento = tarjeta.MesVencimiento,
             *              sAnioVencimiento = tarjeta.AnioVencimiento,
             *              sBanco = tarjeta.TipoTarjeta,
             *              sMonto = tarjeta.MontoCargo.ToString(),
             *              dtDate = DateTime.Now,
             *              sBoletos = tarjeta.Ticket,
             *              sRemarks = String.Empty,
             *              sRecLoc = recLoc
             *          };
             *
             *          // se harcodea el valor del orgId al de CTS, cambiar para cuando se integren mas empresas
             *
             *          item.id = sNombreTransaccion = "MyCTS-" + tarjeta.OrigenVenta + "-" + tarjeta.PNR + "_";
             *
             *          Respuesta = Pagar(ref item, tarjeta.NombreTitular, tarjeta, 1, iNumeroIntento);
             *
             *          if (Respuesta.EstatusTransaccion == "Error" || Respuesta.EstatusTransaccion == "Denegada")
             *          {
             *              char[] caracterSeparador = { '.' };
             *              String[] sErrorCorto = Respuesta.MensajeAmistoso.Split(caracterSeparador, StringSplitOptions.RemoveEmptyEntries);
             *              String sErrorParteDos = String.Empty;
             *              if (sErrorCorto.Length > 1)
             *              {
             *                  sErrorParteDos = "Transacción rechazada. " + sErrorCorto[1].Trim(); ;
             *              }
             *              else
             *              {
             *                  sErrorParteDos = Respuesta.MensajeAmistoso;
             *              }
             *              tarjeta.Pagado = false;
             *              tarjeta.MensajeError = sErrorParteDos;
             *              return;
             *          }
             *          else
             *          {
             *              tarjeta.Pagado = true;
             *              tarjeta.NumeroAutorizacion = item.sNumAutorizacion;
             *              tarjeta.NumeroOperacion = item.sNumOperacion;
             *          }
             *      }
             *      catch (Exception ex)
             *      {
             *          tarjeta.Pagado = false;
             *          tarjeta.MensajeError = "Error al intentar conectar con MIT";
             *          try
             *          {
             *              new EventsManager.EventsManager(ex, EventsManager.EventsManager.OrigenError.CapaDePresentacion);
             *          }
             *          catch (Exception)
             *          {
             *              new EventsManager.EventsManager(System.Diagnostics.EventLogEntryType.Error, ex);
             *          }
             *          return;
             *      }
             *  }
             *  else
             *  {
             *      LogCxSHotelBL logCxSHotelBL = new LogCxSHotelBL();
             *      logCxSHotelBL.InserLogCxSHotel(tarjeta.PNR, string.Empty, 85, Respuesta.NumeroAutorizacion, Respuesta.NumeroOperacion, tarjeta.NumeroTarjeta, tarjeta.TipoTarjeta, Convert.ToDecimal(tarjeta.MontoCargo));
             *  }
             *
             *  tarjeta.Activo = false;
             * }
             */
            lstListaFiltrada = FiltrarLista(lstDatosTarjeta);
            MandarDin(lstListaFiltrada);

            return;
        }
        private bool PayForItemFormPaymentCS(CreditCardInfo dtsTarjeta, int iPaxNumber, ref string Error)
        {
            int iPaxFrontNumber = iPaxNumber + 1;
            TransaccionesRespuestasEntities Respuesta = new TransaccionesRespuestasEntities();

            if (dtsTarjeta == null)
            {
                return(false);
            }

            if (UsuarioValidoParaCargosPorServicio)
            {
                if (dtsTarjeta.TipoTarjeta.Equals("CCAC") || dtsTarjeta.TipoTarjeta.Equals("CCPV") || dtsTarjeta.TipoTarjeta.Equals("CCTD"))
                {
                    try
                    {
                        LogServiceFee item = new LogServiceFee();
                        String        sNombreTransaccion   = string.Empty;
                        TransaccionesTarjetaNPService Tran = new TransaccionesTarjetaNPService();
                        int iCargoAplicado = 0;
                        int iNumeroIntento = 0;
                        // Se guarda en LogServiceFee la respuesta
                        item = new LogServiceFee
                        {
                            id               = sNombreTransaccion,
                            sCodigoTarjeta   = dtsTarjeta.CodigoSeguridad,
                            sNumTarjeta      = dtsTarjeta.NumeroTarjeta,
                            sMesVencimiento  = dtsTarjeta.MesVencimiento,
                            sAnioVencimiento = dtsTarjeta.AnioVencimiento,
                            sBanco           = dtsTarjeta.TipoTarjeta,
                            sMonto           = dtsTarjeta.MontoCargo.ToString(),
                            dtDate           = DateTime.Now,
                            sBoletos         = dtsTarjeta.Ticket,
                            sRemarks         = String.Empty,
                            sRecLoc          = recLoc
                        };

                        // se harcodea el valor del orgId al de CTS, cambiar para cuando se integren mas empresas
                        iNumeroIntento = Tran.GetNumeroIntentos(recLoc, 85);
                        iCargoAplicado = Tran.GetNumeroTransacciones(recLoc, 85);

                        item.id = sNombreTransaccion = "MyCTS-" + dtsTarjeta.OrigenVenta + "-" + recLoc + "-" + iCargoAplicado + "-" + iPaxFrontNumber + "_";

                        Respuesta = Pagar(ref item, dtsTarjeta.NombreTitular, dtsTarjeta, iPaxFrontNumber, iNumeroIntento);

                        ErrorLogServiceChargeBL.InsertErrorLogServiceCharge(Respuesta.EstatusTransaccion, Respuesta.MensajeAmistoso, Respuesta.NumeroAutorizacion, Respuesta.NumeroOperacion);

                        if (Respuesta.EstatusTransaccion == "Error" || Respuesta.EstatusTransaccion == "Denegada")
                        {
                            char[]   caracterSeparador = { '.' };
                            String[] sErrorCorto       = Respuesta.MensajeAmistoso.Split(caracterSeparador, StringSplitOptions.RemoveEmptyEntries);
                            String   sErrorParteDos    = String.Empty;
                            if (sErrorCorto.Length > 1)
                            {
                                sErrorParteDos = "Transacción rechazada. " + sErrorCorto[1].Trim();;
                            }
                            else
                            {
                                sErrorParteDos = Respuesta.MensajeAmistoso;
                            }
                            Error                   = Respuesta.MensajeAmistoso;
                            dtsTarjeta.Pagado       = false;
                            dtsTarjeta.MensajeError = sErrorParteDos;
                            return(false);
                        }
                        if (string.IsNullOrEmpty(Respuesta.EstatusTransaccion))
                        {
                            Error                   = "Error al intentar realizar el cargo";
                            dtsTarjeta.Pagado       = false;
                            dtsTarjeta.MensajeError = Error;
                            return(false);
                        }
                        else
                        {
                            dtsTarjeta.Pagado             = true;
                            dtsTarjeta.NumeroAutorizacion = item.sNumAutorizacion;
                            dtsTarjeta.NumeroOperacion    = item.sNumOperacion;
                        }
                    }
                    catch (Exception ex)
                    {
                        Error                   = "Error al intentar conectar con MIT";
                        dtsTarjeta.Pagado       = false;
                        dtsTarjeta.MensajeError = "Error al intentar conectar con MIT";
                        try
                        {
                            new EventsManager.EventsManager(ex, EventsManager.EventsManager.OrigenError.CapaDePresentacion);
                        }
                        catch (Exception)
                        {
                            new EventsManager.EventsManager(System.Diagnostics.EventLogEntryType.Error, ex);
                        }
                        return(false);
                    }
                }
                ChargesPerService.BuilCommandToSend(Respuesta.NumeroOperacion, Respuesta.NumeroAutorizacion, iPaxNumber, dtsTarjeta, OrigenTipo, recLoc);
                dtsTarjeta.Activo = false;
            }
            else
            {
                if (OrigenTipo == ChargesPerService.OrigenTipoCargo.Independiente)
                {
                    ChargesPerService.BuilCommandToSendOld(iPaxNumber, dtsTarjeta);
                    dtsTarjeta.Pagado = true;
                }
            }

            return(true);
        }
        public void PayServiceFee()
        {
            frmPreloading frm2 = new frmPreloading(this);

            frm2.Show();
            List <ListaFiltrada> lstListaFiltrada = new List <ListaFiltrada>();

            UsuarioValidoParaCargosPorServicio = ChargesPerService.ValidateTestingUsers(OrigenTipo);
            if ((OrigenTipo != ChargesPerService.OrigenTipoCargo.Independiente) && !UsuarioValidoParaCargosPorServicio)
            {
                Loader.AddToPanel(Loader.Zone.Middle, this, Resources.Constants.UCWELCOME);
            }
            else
            {
                if (OrigenTipo == ChargesPerService.OrigenTipoCargo.BajoCosto)
                {
                    if (String.IsNullOrEmpty(PNRBajoCostoSabre))
                    {
                        MessageBox.Show("No ha sido posible generar la factura para el servicio aéreo,\n por tal motivo los cargos por servicio en linea\n no pudieron ser completados", Resources.Constants.MYCTS, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }
                    else
                    {
                        using (CommandsAPI objCommand = new CommandsAPI())
                        {
                            string sabreAnswer = objCommand.SendReceive("*" + PNRBajoCostoSabre);
                        }
                        recLoc = PNRBajoCostoSabre;
                    }
                }
                else if (OrigenTipo == ChargesPerService.OrigenTipoCargo.Hoteles || OrigenTipo == ChargesPerService.OrigenTipoCargo.Autos)
                {
                    TransaccionesRespuestasEntities Respuesta = new TransaccionesRespuestasEntities();
                    PagarHotel(ref lstListaFiltrada, ref Respuesta);
                    using (CommandsAPI objCommand = new CommandsAPI())
                    {
                        objCommand.SendReceive(ChargesPerService.PreguntasASabre.VERIFICAR_RESERVA);
                    }
                }
                else
                {
                    RecuperarPNR();
                }

                if (tarjeta != null)
                {
                    lstDatosTarjeta.Add(tarjeta);
                }

                if (!string.IsNullOrEmpty(recLoc) && recLoc.Length == 6 && ValidateRegularExpression.ValidatePNR(recLoc) &&
                    OrigenTipo != ChargesPerService.OrigenTipoCargo.Hoteles && OrigenTipo != ChargesPerService.OrigenTipoCargo.Autos)
                {
                    FlujoPagos();
                }

                lstListaFiltrada = FiltrarLista(lstDatosTarjeta);
                if (!string.IsNullOrEmpty(recLoc) && recLoc.Length == 6 && ValidateRegularExpression.ValidatePNR(recLoc) &&
                    OrigenTipo != ChargesPerService.OrigenTipoCargo.Hoteles && OrigenTipo != ChargesPerService.OrigenTipoCargo.Autos)
                {
                    MandarDin(lstListaFiltrada);
                }
            }
        }