using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using PoswareRMS;
using Microsoft.Win32;
using LLNet.Utils;
using LLNet.GUI;
using OposMSR_1_9_Lib;
using BNCRLaro = LARO.CallWirePos;

namespace LLNet.Tienda.MainForms.Forms
{
    public partial class FrmEmisor2 : Form
    {
        #region Variables

        public decimal NumEmisor = 0;//Número emisor de la tarjeta
        public string Emisor = "";//Emisor de la tarjeta
        public decimal Monto = 0;//Monto a pagar con tarjeta
        private decimal Total = 0;//Total de la factura
        public string NumAutoriz = "";//Número de autorización
        public string NumTarj = "";//Número de tarjeta enmascarado
        public string NumRef = "";//Número de referencia de la transacción
        public string Id_tr_tarj = "";//Id
        public bool ingManual = false;//Ingreso manual voucher
        public bool realizado = false;//Indica si se hizo la transacción
        public bool reversada = false;//Indica si una transacción se reversó

        #endregion

        public FrmEmisor2(decimal total)
        {
            InitializeComponent();

            //Total
            this.Total = total;
        }

        #region RealizarTransaccion
        /// <summary>
        /// Realiza el pago con tarjeta
        /// </summary>
        private void RealizarTransaccion()
        {
            string TipoTrans = "S";//Tipo transacción
            double Impuesto1 = 0;//Impuesto 1
            double Impuesto2 = 0;//Impuesto 2
            double Propina = 0;//Propina
            double CashBackAmount = 0;//Monto cashback transacción
            string NombrTarj = "";//Nombre del tarjeta habiente
            bool Aprobado = false;//Indica si la transacción fue aprobada o no
            double ResponseAmount = 0;//Disponible de la tarjeta en consulta de saldos
            double MontoTrans = double.Parse(this.Monto.ToString());//Monto transacción
            string Merchant = "", MerchantNumber = "", TerminalNumber = "";

            Utils.QueryParams qp = new QueryParams();
            qp.AddReplaceParam("CAJA", Program.Caja.ToString());
            qp.AddReplaceParam("EMISOR", "2");

            //Verifica que la caja tenga en la base de datos, los datos de merchant, merchantnumber, terminalnumber
            if (GUI.CApp.bll.GetSingleValue("HayDatos", qp, "PDV").ToString() != "0")
            {
                //Obtiene el merchant, el merchant number y el terminal number
                DataSet ds_datos = GUI.CApp.bll.getDataSet("PDV", "ObtDatosB", qp);

                if (ds_datos.Tables.Count > 0 && ds_datos.Tables[0].Rows.Count > 0)
                {
                    DataRow dr = ds_datos.Tables[0].Rows[0];
                    Merchant = dr.ItemArray[0].ToString();
                    MerchantNumber = dr.ItemArray[1].ToString();
                    TerminalNumber = dr.ItemArray[2].ToString();
                    //
                    //
                    #region
                    Utils.QueryParams qparams = new QueryParams();
                    this.Id_tr_tarj = GUI.CApp.bll.GetSingleValue("Sig_Id_tr_tarj", "PDV").ToString();
                    qparams.AddReplaceParam("ID_TR_TARJ", this.Id_tr_tarj);
                    qparams.AddReplaceParam("CAJA", Program.Caja.ToString());
                    qparams.AddReplaceParam("TIPO", "Venta");
                    qparams.AddReplaceParam("USUARIO", GUI.CApp.usuario);
                    qparams.AddReplaceParam("MONTO", MontoTrans.ToString());
                    qparams.AddReplaceParam("ESTADO", "Pendiente");
                    qparams.AddReplaceParam("EMISOR", "2");
                    qparams.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                    #endregion
                    //
                    GUI.CApp.bll.ExecuteSql("Ini_Log_Tarjetas", qparams, "PDV");
                    //
                    //Realiza el proceso de autorización de la transacción
                    BNCRGL.BNCR bn = new BNCRGL.BNCR();
                    bn.GenerarTransaccion(Merchant, MerchantNumber, TerminalNumber, TipoTrans,
                    MontoTrans, Impuesto1, Impuesto2, Propina, CashBackAmount, ref
                        NumTarj, ref NombrTarj, ref Aprobado, ref NumRef, ref
                        NumAutoriz, ref ResponseAmount);
                    //
                    #region (NO)Aprobado
                    if (Aprobado)
                    {
                        qparams = new QueryParams();
                        //Datos fin del proceso de pago con tarjeta de crédito
                        qparams.AddReplaceParam("ID_TR_TARJ", this.Id_tr_tarj);
                        qparams.AddReplaceParam("TARJETA", NumTarj);
                        qparams.AddReplaceParam("AUTORIZACION", NumAutoriz);
                        qparams.AddReplaceParam("REFERENCIA", NumRef);
                        qparams.AddReplaceParam("ESTADO", "Aprobada");
                        qparams.AddReplaceParam("ERRORES", "");
                        //
                        GUI.CApp.bll.ExecuteSql("Fin_Log_Tarjetas", qparams, "PDV");
                    }
                    else
                    {
                        qparams = new QueryParams();
                        qparams.AddReplaceParam("ID_TR_TARJ", this.Id_tr_tarj);
                        qparams.AddReplaceParam("TARJETA", NumTarj);
                        qparams.AddReplaceParam("AUTORIZACION", NumAutoriz);
                        qparams.AddReplaceParam("REFERENCIA", NumRef);
                        qparams.AddReplaceParam("ESTADO", "Denegada");
                        qparams.AddReplaceParam("ERRORES", "Transacción denegada/cancelada");
                        //
                        GUI.CApp.bll.ExecuteSql("Fin_Log_Tarjetas", qparams, "PDV");

                        CApp.ShowMessage("Transacción denegada", "Cobros y Facturación", true);
                    }
                    #endregion
                }
            }
            else
                CApp.ShowMessage("Para esta caja, no existe el merchant, merchantnumber y terminalnumber", "Cobros y Facturación", true);
        }
        #endregion

        #region RealizarTransaccionBCR
        /// <summary>
        /// Realiza el pago con tarjeta de BCR
        /// </summary>
        private void RealizarTransaccionBCR()
        {
            double MontoTrans = double.Parse(this.Monto.ToString());//Monto transacción

            #region
            Utils.QueryParams qparams = new QueryParams();
            this.Id_tr_tarj = GUI.CApp.bll.GetSingleValue("Sig_Id_tr_tarj", "PDV").ToString();
            qparams.AddReplaceParam("ID_TR_TARJ", this.Id_tr_tarj);
            qparams.AddReplaceParam("CAJA", Program.Caja.ToString());
            qparams.AddReplaceParam("TIPO", "Venta");
            qparams.AddReplaceParam("USUARIO", GUI.CApp.usuario);
            qparams.AddReplaceParam("MONTO", MontoTrans.ToString());
            qparams.AddReplaceParam("ESTADO", "Pendiente");
            qparams.AddReplaceParam("EMISOR", "3");
            qparams.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            #endregion
            //
            GUI.CApp.bll.ExecuteSql("Ini_Log_Tarjetas", qparams, "PDV");

            FrmBCR fbcr = new FrmBCR(this.Monto, this.Id_tr_tarj);
            fbcr.ShowDialog();
            this.realizado = fbcr.exito;
            this.NumAutoriz = fbcr.NumAutoriz;
            this.NumRef = fbcr.NumRef;
            this.NumTarj = fbcr.NumTarj;

            #region (NO)Aprobado
            if (this.realizado)
            {
                qparams = new QueryParams();
                //Datos fin del proceso de pago con tarjeta de crédito/débito
                qparams.AddReplaceParam("ID_TR_TARJ", this.Id_tr_tarj);
                qparams.AddReplaceParam("TARJETA", this.NumTarj);
                qparams.AddReplaceParam("AUTORIZACION", this.NumAutoriz);
                qparams.AddReplaceParam("REFERENCIA", this.NumRef);
                if (fbcr.reversada)
                    qparams.AddReplaceParam("ESTADO", "Reversada");
                else
                    qparams.AddReplaceParam("ESTADO", "Aprobada");
                qparams.AddReplaceParam("ERRORES", "");
                //
                this.reversada = fbcr.reversada;

                GUI.CApp.bll.ExecuteSql("Fin_Log_Tarjetas", qparams, "PDV");
            }
            else
            {
                qparams = new QueryParams();
                qparams.AddReplaceParam("ID_TR_TARJ", this.Id_tr_tarj);
                qparams.AddReplaceParam("TARJETA", this.NumTarj);
                qparams.AddReplaceParam("AUTORIZACION", this.NumAutoriz);
                qparams.AddReplaceParam("REFERENCIA", this.NumRef);
                qparams.AddReplaceParam("ESTADO", "Denegada");
                qparams.AddReplaceParam("ERRORES", fbcr.Motivo);
                //
                GUI.CApp.bll.ExecuteSql("Fin_Log_Tarjetas", qparams, "PDV");

                CApp.ShowMessage("Transacción denegada", "Cobros y Facturación", true);
            }
            #endregion
        }
        #endregion


        #region RealizarTransaccion LARO
        /// <summary>
        /// Realiza el pago con tarjeta BNCR LARO
        /// </summary>
        private void RealizarTransaccionLARO()
        {
            /*
            string TipoTrans = "S";//Tipo transacción
            double Impuesto1 = 0;//Impuesto 1
            double Impuesto2 = 0;//Impuesto 2
            double Propina = 0;//Propina
            double CashBackAmount = 0;//Monto cashback transacción
            string NombrTarj = "";//Nombre del tarjeta habiente
            bool Aprobado = false;//Indica si la transacción fue aprobada o no
            double ResponseAmount = 0;//Disponible de la tarjeta en consulta de saldos
            double MontoTrans = double.Parse(this.Monto.ToString());//Monto transacción
            string Merchant = "", MerchantNumber = "", TerminalNumber = "";
            */
            bool Aprobado = false;//Indica si la transacción fue aprobada o no
            double PAmountTrans = double.Parse(this.Monto.ToString());//Indica el monto de la transacción. Ej 156.75
            string PInvoice = ""; //Para la implementación con el se envía vacío.
            string PSystemTrace = ""; //Para la implementación con el se envía vacío.
            string PFolio = ""; //Para la implementación con el se envía vacío.
            string PResp = ""; // respuesta de la trama

            /*Utils.QueryParams qp = new QueryParams();
            qp.AddReplaceParam("CAJA", Program.Caja.ToString());
            qp.AddReplaceParam("EMISOR", "2");

            //Verifica que la caja tenga en la base de datos, los datos de merchant, merchantnumber, terminalnumber
            if (GUI.CApp.bll.GetSingleValue("HayDatos", qp, "PDV").ToString() != "0")
            {
                //Obtiene el merchant, el merchant number y el terminal number
                DataSet ds_datos = GUI.CApp.bll.getDataSet("PDV", "ObtDatosB", qp);

                if (ds_datos.Tables.Count > 0 && ds_datos.Tables[0].Rows.Count > 0)
                {
                    DataRow dr = ds_datos.Tables[0].Rows[0];
                    Merchant = dr.ItemArray[0].ToString();
                    MerchantNumber = dr.ItemArray[1].ToString();
                    TerminalNumber = dr.ItemArray[2].ToString();
                    // */
            #region
            Utils.QueryParams qparams = new QueryParams();
            this.Id_tr_tarj = GUI.CApp.bll.GetSingleValue("Sig_Id_tr_tarj", "PDV").ToString();
            qparams.AddReplaceParam("ID_TR_TARJ", this.Id_tr_tarj);
            qparams.AddReplaceParam("CAJA", Program.Caja.ToString());
            qparams.AddReplaceParam("TIPO", "Venta");
            qparams.AddReplaceParam("USUARIO", GUI.CApp.usuario);
            qparams.AddReplaceParam("MONTO", PAmountTrans.ToString());
            qparams.AddReplaceParam("ESTADO", "Pendiente");
            qparams.AddReplaceParam("EMISOR", "2");
            qparams.AddReplaceParam("JORNADA", Program.Jornada.ToString());
            #endregion
            //
            GUI.CApp.bll.ExecuteSql("Ini_Log_Tarjetas", qparams, "PDV");
            //
            //Realiza el proceso de autorización de la transacción
            /* BNCRGL.BNCR bn = new BNCRGL.BNCR();
             bn.GenerarTransaccion(Merchant, MerchantNumber, TerminalNumber, TipoTrans,
             MontoTrans, Impuesto1, Impuesto2, Propina, CashBackAmount, ref
                 NumTarj, ref NombrTarj, ref Aprobado, ref NumRef, ref
                 NumAutoriz, ref ResponseAmount);
             * */
            //

            BNCRLaro.CallWirePos Virtualbn = new BNCRLaro.CallWirePos("C:\\AuthorPos");
            string Tramaresp = Virtualbn.SaleTransaction(PAmountTrans, "", "", "");

            //CApp.ShowMessage(Aprobado.ToString() + " " + realizado.ToString(), "LOG TEMPORAL", true);
            //CApp.ShowMessage(Tramaresp, "LOG TEMPORAL", true);
            LLNet.Controls.LLEventLog EventLogManuales = new LLNet.Controls.LLEventLog(LLNet.DAL.OracleDAL.ExeLogDir);
            EventLogManuales.WriteLog("", Tramaresp);

            string[] TramaCampos = Tramaresp.Split('¶');

            if (TramaCampos[0].ToString() == "00")
            {
                //00 en el campo 0 significa aprobado en el banco
                Aprobado = true;
                realizado = true;

              //CApp.ShowMessage(Aprobado.ToString() + " " + realizado.ToString() + "00", "LOG TEMPORAL", true);
            }

            if (TramaCampos.Length >= 10)
            {
                NumTarj = TramaCampos[2].ToString();
                NumAutoriz = TramaCampos[1].ToString();
                NumRef = TramaCampos[3].ToString();
                PInvoice = TramaCampos[10].ToString();
                PResp = TramaCampos[5].ToString();
            }
            #region (NO)Aprobado
            if (Aprobado)
            {
                qparams = new QueryParams();
                //Datos fin del proceso de pago con tarjeta de crédito
                qparams.AddReplaceParam("ID_TR_TARJ", this.Id_tr_tarj);
                qparams.AddReplaceParam("TARJETA", NumTarj);
                qparams.AddReplaceParam("AUTORIZACION", NumAutoriz);
                qparams.AddReplaceParam("REFERENCIA", NumRef);
                qparams.AddReplaceParam("ESTADO", "Aprobada");
                qparams.AddReplaceParam("ERRORES", "");
                qparams.AddReplaceParam("pINVOICE", PInvoice);
                qparams.AddReplaceParam("pTRAMA", Tramaresp);
                 
                //
                GUI.CApp.bll.ExecuteSql("Fin_Log_TarjetasBNCR", qparams, "PDV");
            }
            else
            {
                qparams = new QueryParams();
                qparams.AddReplaceParam("ID_TR_TARJ", this.Id_tr_tarj);
                qparams.AddReplaceParam("TARJETA", NumTarj);
                qparams.AddReplaceParam("AUTORIZACION", NumAutoriz);
                qparams.AddReplaceParam("REFERENCIA", NumRef);
                qparams.AddReplaceParam("ESTADO", "Denegada");
                qparams.AddReplaceParam("ERRORES", "Transacción denegada/cancelada");
                qparams.AddReplaceParam("pINVOICE", PInvoice);
                qparams.AddReplaceParam("pTRAMA", Tramaresp);
                //
                GUI.CApp.bll.ExecuteSql("Fin_Log_TarjetasBNCR", qparams, "PDV");

                CApp.ShowMessage("Transacción denegada", "Cobros y Facturación", true);
            }
            #endregion


        }
        //}
        //else
        //    CApp.ShowMessage("Para esta caja, no existe el merchant, merchantnumber y terminalnumber", "Cobros y Facturación", true);
        //}

        /*   private void IntegracionDll()
          try {
               int iTotalCountMessage = 0;
               string ttype  = "";

                      ttype = "S " //Venta
                      /*ttype = "AN" 'Anulación
                      ttype = "SE" ''Cierre de POS
                      ttype = "XC" ''TRANSACCIONES POR TIPO;

              If tbMain.SelectedIndex = 1 Then
                  If rbDetallado.Checked Then
                      ttype = "RT" ''REPORTE DETALLADO
                  ElseIf rbResumido.Checked Then
                      ttype = "RR" ''REPORTE RESUMIDO
                  End If
              End If

              If tbMain.SelectedIndex = 2 Then
                  If rbPropina.Checked Then
                      ttype = "TA" ''Propina
                  ElseIf rbCheckIn.Checked Then
                      ttype = "CI" ''CHECK-IN
                  ElseIf rbCheckOut.Checked Then
                      ttype = "CO" ''CHECK-OUT
                  ElseIf rbVentaPropina.Checked Then
                      ttype = "VP" ''Venta con Propina
                  End If
              End If

              double dAmount =  double.Parse(this.Monto.ToString());
            
              double dTipAmount  = 0 ;

            
  /*
              If ttype = "S " AndAlso dAmount <= 0 Then
                  MessageBox.Show("Monto inválido.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                  txtAmountTrans.Focus()
                  Exit Sub
              End If

              If ttype = "XC" AndAlso txtTipo.Text.Trim = "" Then
                  MessageBox.Show("ID Transacción Inválida.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                  txtTipo.Focus()
                  Exit Sub
              End If

              If ttype = "TA" AndAlso (dTipAmount <= 0) Then
                  MessageBox.Show("Propina inválida.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                  txtAmountTrans.Focus()
                  Exit Sub
              End If

              If ttype = "TA" AndAlso String.Equals(txtInvoice.Text.Trim, "") Then
                  MessageBox.Show("Invoice inválido", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                  txtInvoice.Focus()
                  Exit Sub
              End If

              If ttype = "VP" AndAlso (dAmount <= 0 OrElse dTipAmount <= 0) Then
                  MessageBox.Show("Monto o Propina inválido.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                  txtAmountTrans.Focus()
                  Exit Sub
              End If

              If ttype = "CI" AndAlso String.Equals(txtFolio.Text.Trim, "") Then
                  MessageBox.Show("Folio inválido.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                  txtFolio.Focus()
                  Exit Sub
              End If

              If ttype = "CO" AndAlso String.Equals(txtFolio.Text.Trim, "") Then
                  MessageBox.Show("Folio inválido.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                  txtFolio.Focus()
                  Exit Sub
              End If

              If ttype = "CO" AndAlso String.Equals(txtInvoice.Text.Trim, "") Then
                  MessageBox.Show("Invoice inválido.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                  txtInvoice.Focus()
                  Exit Sub
              End If

              If ttype = "CO" AndAlso String.Equals(txtAutorizacion.Text.Trim, "") Then
                  MessageBox.Show("Autorización inválida.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                  txtAutorizacion.Focus()
                  Exit Sub
              End If

              If ttype = "AN" AndAlso String.Equals(txtInvoice.Text.Trim, "") Then
                  MessageBox.Show("Invoice inválido", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                  txtInvoice.Focus()
                  Exit Sub
              End If

              If rbTiquete.Checked AndAlso String.Equals(txtTiquete.Text.Trim, "") Then
                  MessageBox.Show("Número de tiquete inválido", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                  txtTiquete.Focus()
                  Exit Sub
              End If


            btnSolicitar.Enabled = False

              datetime FechaHoraInicio =  Now;
              FechaHoraFinal As Date = Now
              Dim totalDuration As Long

              //Constructor
      //GenesisCnx.Service wsGenesis = new GenesisCnx.Service();


               _CallWirePos As New CallWirePos.CallWirePos(txtUbicacion.Text)

              Dim _TramaCampos As String() = Nothing
              Dim _TramaRespuesta As String = String.Empty

              If tbMain.SelectedIndex = 0 Then

  ********************************************************************************************

                  If rbSale.Checked Then
                      _TramaRespuesta = _CallWirePos.SaleTransaction(dAmount, "", "", "")
                  ElseIf rbVoid.Checked Then
                      _TramaRespuesta = _CallWirePos.VoidTransaction("", 0, txtInvoice.Text, "", "")
                  ElseIf rbSettlement.Checked Then
                      _TramaRespuesta = _CallWirePos.SettlementTransaction()

  ***************************************************************

                  ElseIf rbTipo.Checked Then
                      _TramaRespuesta = _CallWirePos.SaleTransactionByIDTransaction(dAmount, 0, txtTipo.Text.Trim, "ECRSIMULADOR")
                  End If

              ElseIf tbMain.SelectedIndex = 1 Then

                  If rbTiquete.Checked Then
                      _TramaRespuesta = _CallWirePos.Reprint(txtTiquete.Text)
                  ElseIf rbUltimoTiquete.Checked Then
                      _TramaRespuesta = _CallWirePos.PrintLastVoucher("")
                  ElseIf rbDetallado.Checked Then
                      _TramaRespuesta = _CallWirePos.PrintTransactionsReport("")
                  ElseIf rbResumido.Checked Then
                      _TramaRespuesta = _CallWirePos.PrintReportResumed("")
                  End If


              ElseIf tbMain.SelectedIndex = 2 Then

                  If rbPropina.Checked Then
                      _TramaRespuesta = _CallWirePos.TipAdjust(dTipAmount, txtInvoice.Text, "", "")
                  ElseIf rbCheckIn.Checked Then
                      _TramaRespuesta = _CallWirePos.CheckIn(dAmount, txtFolio.Text, "", "ECRSIMULADOR")
                  ElseIf rbCheckOut.Checked Then
                      _TramaRespuesta = _CallWirePos.CheckOut(dAmount, txtFolio.Text, txtAutorizacion.Text, "", "ECRSIMULADOR")
                  ElseIf rbVentaPropina.Checked Then
                      _TramaRespuesta = _CallWirePos.SaleTransactionWithTip(dAmount, dTipAmount, "", "", "")
                  End If

              End If

              If _TramaRespuesta.Trim = "" Then
                  MessageBox.Show("Trama Inválida", "Error")
                  Exit Sub
              End If

              _TramaCampos = _TramaRespuesta.Split(CChar("¶"))
              FechaHoraFinal = Now
              Dim tempTickCount As Long = FechaHoraFinal.Ticks - FechaHoraInicio.Ticks
              totalDuration = CLng((tempTickCount / 10000)) 'convert to milliseconds
              iContador += 1

              Dim Texto As String = String.Empty
              If _TramaCampos(0) = "ERROR" Then
                  Texto &= "" & vbCrLf
                  Texto &= "**************************************************" & vbCrLf
                  Texto &= "TX               : " & iContador & vbCrLf
                  Texto &= "Datos Recibidos  : " & _TramaRespuesta & vbCrLf
                  Texto &= "Fecha/Hora Inicio: " & FechaHoraInicio.ToString("yyyy-MM-dd HH:mm:ss:fff") & vbCrLf
                  Texto &= "Fecha/Hora Final : " & FechaHoraFinal.ToString("yyyy-MM-dd HH:mm:ss:fff") & vbCrLf
                  Texto &= "Duración         : " & totalDuration & " ms" & vbCrLf
                  Texto &= "**************************************************" & vbCrLf
                  Texto &= "Error      : " & _CallWirePos.ErrorCode & vbCrLf
                  Texto &= "Descripción: " & _CallWirePos.ErrorCodeDescription & vbCrLf
                  Texto &= "**************************************************" & vbCrLf
              Else
                  Texto &= "" & vbCrLf
                  Texto &= "**************************************************" & vbCrLf
                  Texto &= "TX               : " & iContador & vbCrLf
                  Texto &= "Datos Recibidos  : " & _TramaRespuesta & vbCrLf
                  Texto &= "Fecha/Hora Inicio: " & FechaHoraInicio.ToString("yyyy-MM-dd HH:mm:ss:fff") & vbCrLf
                  Texto &= "Fecha/Hora Final : " & FechaHoraFinal.ToString("yyyy-MM-dd HH:mm:ss:fff") & vbCrLf
                  Texto &= "Duración         : " & totalDuration & " ms" & vbCrLf
                  Texto &= "**************************************************" & vbCrLf
                  Texto &= "Fecha           : " & _TramaCampos(6) & vbCrLf
                  Texto &= "Hora            : " & _TramaCampos(7) & vbCrLf
                  Texto &= "Comercio        : " & _TramaCampos(8) & vbCrLf
                  Texto &= "Terminal        : " & _TramaCampos(9) & vbCrLf
                  Texto &= "Monto           : " & _TramaCampos(12) & vbCrLf
                  Texto &= "Código Respuesta: " & _TramaCampos(0) & vbCrLf
                  Texto &= "Respuesta       : " & _TramaCampos(5) & vbCrLf
                  Texto &= "Autorización    : " & _TramaCampos(1) & vbCrLf
                  Texto &= "Tarjeta         : " & _TramaCampos(2) & vbCrLf
                  Texto &= "Nombre Tarjeta  : " & _TramaCampos(4) & vbCrLf
                  Texto &= "Referencia      : " & _TramaCampos(3) & vbCrLf
                  Texto &= "Invoice         : " & _TramaCampos(10) & vbCrLf
                  If _TramaCampos(10) <> "000000" Then
                      txtInvoice.Text = _TramaCampos(10)
                      txtTiquete.Text = _TramaCampos(10)
                  End If
                  If _TramaCampos(1) <> "000000" Then
                      txtAutorizacion.Text = _TramaCampos(1)
                  End If
                  Texto &= "Lote            : " & _TramaCampos(14) & vbCrLf

                  Dim BatchData As String = _TramaCampos(11)
                  If BatchData.Trim <> "" Then
                      Texto &= "**************************************************" & vbCrLf
                      Texto &= "BatchData            : " & _TramaCampos(11) & vbCrLf
                      Texto &= "**************************************************" & vbCrLf
                      Texto &= "    Comercio         : " & Mid(_TramaCampos(11), 1, 15) & vbCrLf
                      Texto &= "    Terminal         : " & Mid(_TramaCampos(11), 16, 8) & vbCrLf
                      Texto &= "    Batch            : " & Mid(_TramaCampos(11), 24, 6) & vbCrLf
                      Texto &= "    Sales Count      : " & Mid(_TramaCampos(11), 30, 3) & vbCrLf
                      Texto &= "    Sales Amount     : " & Mid(_TramaCampos(11), 33, 12) & vbCrLf
                      Texto &= "**************************************************" & vbCrLf
                  End If
                  Dim emvData As String = _TramaCampos(13)
                  If emvData.Trim <> "" Then
                      Try
                          Texto &= "EMV Data        : " & emvData & vbCrLf
                          Dim objEMV As String() = emvData.Split(CChar(";"))
                          Texto &= "    AID         : " & objEMV(0) & vbCrLf
                          Texto &= "    TVR         : " & objEMV(1) & vbCrLf
                          Texto &= "    ARQC        : " & objEMV(2) & vbCrLf
                          Texto &= "    TC          : " & objEMV(3) & vbCrLf
                          Texto &= "    TSI         : " & objEMV(4) & vbCrLf
                          Texto &= "    NA          : " & objEMV(5) & vbCrLf
                          Texto &= "    AIDLabel    : " & objEMV(6) & vbCrLf
                      Catch
                      End Try
                  End If
                  If _TramaCampos.Count > 20 Then
                      Texto &= "Campo Adicional : [" & _TramaCampos(20) & "]" & vbCrLf
                  End If
                  If _TramaCampos.Count > 21 Then
                      Texto &= "ID Entrada      : [" & _TramaCampos(21) & "]" & vbCrLf
                  End If
                  If _TramaCampos.Count > 22 Then
                      Texto &= "Ocultar Firma   : [" & _TramaCampos(22) & "]" & vbCrLf
                  End If

                  Texto &= "**************************************************" & vbCrLf
              End If


              txtLog.Text &= Texto
              txtLog.SelectionStart = txtLog.Text.Length
              txtLog.ScrollToCaret()
              InsertSystemLog(Texto)

          Catch ex As Exception
              MessageBox.Show("btnSolicitar_Click: " & ex.Message)
          Finally
              btnSolicitar.Enabled = True
          End Try

      }
  */

        #endregion


        #region btnSalir_Click
        private void btnSalir_Click(object sender, EventArgs e)
        {            
            DialogResult = DialogResult.Cancel;
        }
        #endregion

        #region sbtnVirtual_Click
        private void sbtnVirtual_Click(object sender, EventArgs e)
        {
            string btnVirtact = Helpers.Nvl(CApp.GetParam("TVAC"), "N").ToString(); //valida si el boton virtual esta activo

            if (btnVirtact == "S")
            {
                try
                {
                    string emisor = Helpers.Nvl(CApp.GetParam("EMI"), "").ToString();

                    if (this.Total < Convert.ToDecimal(this.txtMonto.Text))
                    {
                        CApp.ShowMessage("El monto ingresado es mayor al saldo de la factura", "Cobros y Facturación", true);
                        return;
                    }
                    else
                    {
                        if (Convert.ToDecimal(this.txtMonto.Text) <= 0)
                        {
                            CApp.ShowMessage("El monto debe ser mayor a cero", "Cobros y Facturación", true);
                            return;
                        }
                        else
                        {
                            if (emisor.ToUpper() == "BNCR")
                            {
                                this.Emisor = "Banco Nacional de Costa Rica";
                                this.NumEmisor = 2;
                                this.Monto = Convert.ToDecimal(this.txtMonto.Text);
                                this.Hide();
                                //RealizarTransaccion();
                                RealizarTransaccionLARO();
                            }
                            else
                            {
                                this.Emisor = "Banco de Costa Rica";
                                this.NumEmisor = 3;
                                this.Monto = Convert.ToDecimal(this.txtMonto.Text);
                                this.Hide();
                                RealizarTransaccionBCR();
                            }
                        }
                    }
                    //
                    DialogResult = DialogResult.OK;
                }
                catch (FormatException)
                {
                    CApp.ShowMessage("Digite un monto válido", "Cobros y Facturación", true);
                }
                catch (Exception ex)
                {
                    CApp.ShowMessage(ex.Message, "Cobros y Facturación", true);
                }
            }
            else
            {
                CApp.ShowMessage("No se encuentra activo el pago con tarjeta virtual", "Tarjeta pago Virtual", true);
            }
        }
        #endregion

        #region sbtnCredomatic_Click
        private void sbtnCredomatic_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.Total < Convert.ToDecimal(this.txtMonto.Text))
                {
                    CApp.ShowMessage("El monto ingresado es mayor al saldo de la factura", "Cobros y Facturación", true);
                    return;
                }
                else
                {
                    if (Convert.ToDecimal(this.txtMonto.Text) <= 0)
                    {
                        CApp.ShowMessage("El monto debe ser mayor a cero", "Cobros y Facturación", true);
                        return;
                    }
                    else
                    {
                        this.Emisor = "Credomatic";
                        this.Monto = Convert.ToDecimal(this.txtMonto.Text);
                    }
                }
                //
                DialogResult = DialogResult.OK;
            }
            catch (FormatException)
            {
                CApp.ShowMessage("Digite un monto válido", "Cobros y Facturación", true);
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Cobros y Facturación", true);
            }
        }
        #endregion

        #region sbtnManual_Click
        private void sbtnManual_Click(object sender, EventArgs e)
        {
            try
            {
                ingManual = true;
                //
                DialogResult = DialogResult.OK;
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Cobros y Facturación", true);
            }
        }
        #endregion

        #region FrmEmisor2_KeyDown
        private void FrmEmisor2_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.F2:
                    sbtnVirtual_Click(null, null);
                    break;
                case Keys.F4:
                    sbtnCredomatic_Click(null, null);
                    break;
                case Keys.F5:
                    sbtnManual_Click(null, null);
                    break;
                case Keys.Escape:
                    btnSalir_Click(null, null);
                    break;
            }
        }
        #endregion

        #region FrmEmisor2_Load
        private void FrmEmisor2_Load(object sender, EventArgs e)
        {
            try
            {
                this.txtMonto.Text = this.Total.ToString();
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Cobros y Facturación", true);
            }
        }
        #endregion
    }
}