using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Web.Services.Protocols;
using Conectividad = LLNet.Tienda.com.comercialdigitalcr.pruebas;
using ConectQcarg = LLNet.Tienda.WSQCARGA;
using ConectQPAGOOL = LLNet.Tienda.WSPAGOOL;
using ConectAlo = LLNet.Tienda.com.aloprepago.www;
using ConectBN = LLNet.Tienda.cr.fi.bncr.wservices;
using CntHablaMas = LLNet.Tienda.HablaMas;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.Text.RegularExpressions;
using System.Collections;
using Microsoft.Win32;
using System.Threading;
using LLNet.Utils;
using LLNet.GUI;
using System.Xml.Serialization;
using System.IO;
using System.Net;
using APSSeller.Security;
//using WSPRIDES = TiendasPrides.APSSellerWS;

namespace LLNet.Tienda.MainForms.Forms
{
    /*************************DLQG***********************************/
    public partial class frmPagoServicios : LLNet.GUI.FormBases.frmBase
    {
        #region Variables

        private string varCanton, varProvincia, varDistrito, varCod, varCodQ, varCodP;
        private string varCBanco, varCAgencia, varCCanal, varCLlave, varCEmpresa, varLlave, varInstit, varCConvenio, varConvenio, varComprob; //Variables de BNSERVICIOS
        private string varAloClav, varAloUsr, varAloEnt, varAloSucr, varPridesUsr, varPSemilla, varPcompanyID;
        private string varRangoQ, varMinMov, VarMaxMov, varMinICE, varMaxICE, varMinFM, varMaxFM;
        private string varBNUsr, varBNpwd, varHMasUsr, varHMasSuc, varHMasPwd, varHMasMin, varHMasDolarCompra, varHMasDolarVenta;
        private string varUsrSist;//Usuario q utiliza el sistema sin caracteres especiales
        private static string subTipoDocumentoPreimpreso;
        private static long documentoPreimpreso;
        private string terminalId;//= "51033169";
        private string user;// = "51033169";
        private string password;// = "159951";
        private string host = "172.24.0.2";//190.25.181.56"; 
        private string port = "7001";//8041";
        private string timeout = "30000"; //30000
        private string NumSec; //Número de Secuencia
        private string RefExt; //Referencia Externa
        private string CodTienda;// = "00151"; //Código de la Tienda
        private string CodTercero;
        public int contSald = 3;
        public static string testMessage = "VENTARECARGA";
        private DataSet dsP;
        private string id;
        private emAccion AccionBNServ = emAccion.N;

        #endregion

        public frmPagoServicios()
        {
            InitializeComponent();
        }

        /// <summary>
        /// La acción que se está haciendo sobre el pago (consulta, reversión)
        /// </summary>
        private enum emAccion
        {
            /// <summary>
            /// Consulta
            /// </summary>
            [Description("Consulta")]
            C,
            /// <summary>
            /// Ninguno
            /// </summary>
            [Description("Ninguno")]
            N,
            /// <summary>
            /// Pago
            /// </summary>
            [Description("Pago")]
            P,
            /// <summary>
            /// Reversion
            /// </summary>
            [Description("Reversion")]
            R,
            /// <summary>
            /// ReversionAutomatica
            /// </summary>
            [Description("ReversionAutomatica")]
            RA,
            /// <summary>
            /// Revisión Reversión
            /// </summary>
            [Description("RevisionReversion")]
            RR
        }

        private void frmPagoServicios_Load(object sender, EventArgs e)
        {
            try
            {
                Limpiar2();
                txteNumTel.Focus();
                LlenarParametros();
                btnTelefonia.PerformClick();
                LlenarCombBox();
                if (iCBoxServ.Properties.Items.Count > 0)
                    iCBoxServ.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message, "ERROR", true);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Limpiar();
            AccionBNServ = emAccion.N;
            btnTelefonia.PerformClick();
            btnArqRecarga.PerformClick();
            btnTelefonia.PerformClick();

            this.Close();
            //DialogResult = DialogResult.Cancel;
        }

        private void btnTeclado_Click(object sender, EventArgs e)
        {
            object cmpnt = layoutControl1.FocusHelper.SelectedComponent;
            if (cmpnt.GetType() != typeof(DevExpress.XtraLayout.LayoutControlItem))
            {
                return;
            }
            else
            {
                Control ctl = ((DevExpress.XtraLayout.LayoutControlItem)layoutControl1.FocusHelper.SelectedComponent).Control;
                MainForms.FrmKeyboard kbd = new FrmKeyboard();
                kbd.Texto.Text = ctl.Text;
                kbd.ShowDialog(this);
                if (kbd.DialogResult == DialogResult.OK)
                {
                    ctl.Text = kbd.Texto.Text;
                    layoutControl1.GetNextControl(ctl, true).Focus();
                }
            }
        }

        //Almacena cada intento de recargar - crea la bitacora
        private void BitacoraIntentos(string monto, string telef, string oper, string prov)
        {
            id = "";
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            id = Convert.ToString(GUI.CApp.bll.GetSingleValue("C_SEC_LOG_PAG_SERV", qp, "PDV"));

            qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);
            qp.AddReplaceParam("pTotal", monto);
            qp.AddReplaceParam("pTelefono", telef);
            qp.AddReplaceParam("pProveedor", prov);
            qp.AddReplaceParam("pOperador", oper);
            qp.AddReplaceParam("pID_INT", id);
            // Llama el procedimiento que almacena los datos del intento de recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_BITAC_INT", qp, "PDV");
        }

        //Almacena cada intento de recargar - crea la bitacora - para recargas Prides
        private void BitacoraIntentos(string monto, string telef, string oper, string prov, string TransactionSequent)
        {
            id = "";
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            id = Convert.ToString(GUI.CApp.bll.GetSingleValue("C_SEC_LOG_PAG_SERV", qp, "PDV"));

            qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);
            qp.AddReplaceParam("pTotal", monto);
            qp.AddReplaceParam("pTelefono", telef);
            qp.AddReplaceParam("pProveedor", prov);
            qp.AddReplaceParam("pOperador", oper);
            qp.AddReplaceParam("pID_INT", id);
            qp.AddReplaceParam("pTRANSACTIONSEQUENT", TransactionSequent);
            // Llama el procedimiento que almacena los datos del intento de recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_BITAC_INTP", qp, "PDV");
        }

        //Actualiza el intento de recarga como correcto
        private void BitacoraIntentosC(string ID)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pID_INT", ID);
            // Llama el procedimiento que almacena el estado de correcto de la recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_BITAC_INT_C", qp, "PDV");
        }

        //Actualiza el intento de recarga como correcto
        private void BitacoraErroresBN(string estado, string ID, string error, string tipo,
            string jornada, string usuario)
        {
            try
            {
                //Verifica que se haya enviado un número de comprobante
                if (String.IsNullOrEmpty(ID.Trim()))
                    ID = "0";

                error = error.Replace("'", " ");
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("pEstado", estado);
                qp.AddReplaceParam("pComprobante", ID);
                qp.AddReplaceParam("pError", error);
                qp.AddReplaceParam("pTipo", tipo);
                qp.AddReplaceParam("pJornada", jornada);
                qp.AddReplaceParam("pUsuario", usuario);
                // Llama el procedimiento que almacena el estado de correcto de la recarga en la BD
                GUI.CApp.bll.ExecuteSql("WMS_P_BITAC_ERRORBN", qp, "PDV");
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message, "ERROR", true);
            }
        }

        //Actualiza el intento de recarga como correcto
        //private void BitacoraReversionBN( string ID, string estado, string error)
        //{
        //    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
        //    qp.AddReplaceParam("pComp", ID);
        //    qp.AddReplaceParam("pEstado", estado);
        //    qp.AddReplaceParam("pError", error);
        //    // Llama el procedimiento que almacena el estado de correcto de la recarga en la BD
        //    GUI.CApp.bll.ExecuteSql("WMS_P_BITAC_REVBN", qp, "PDV");
        //}

        //Actualiza el intento de recarga con el error
        private void BitacoraIntentosE(string ID, string ERROR)
        {
            ERROR = ERROR.Replace("'", " ");
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pError", ERROR);
            qp.AddReplaceParam("pID_INT", ID);
            // Llama el procedimiento que almacena el error de la recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_BITAC_INT_E", qp, "PDV");
        }

        private void btnRecargar_Click(object sender, EventArgs e)
        {
            if (iCBoxProveedor.SelectedIndex == -1)
            {
                GUI.CApp.ShowMessage("Seleccione el Proveedor", "Datos de Recarga", true);
                btnRecargar.Enabled = true;
            }
            else
            {
                if (iCBoxProveedor.SelectedIndex == -1)
                {
                    GUI.CApp.ShowMessage("Seleccione el Operador", "Datos de Recarga", true);
                    btnRecargar.Enabled = true;
                }
                else
                {
                    switch (iCBoxProveedor.Properties.Items[iCBoxProveedor.SelectedIndex].Value.ToString())
                    {
                        case "01": //Aló Prepago

                            #region Aló Prepago

                            btnRecargar.Enabled = false;
                            if (txteMonto.Text == string.Empty || txteMonto.Text == "0")
                            {
                                GUI.CApp.ShowMessage("Digite el Monto", "Datos de Recarga", true);
                                btnRecargar.Enabled = true;
                            }
                            else
                            {
                                if (txteNumTel.Text == string.Empty)
                                {
                                    GUI.CApp.ShowMessage("Digite el número telefónico", "Datos de Recarga", true);
                                    btnRecargar.Enabled = true;
                                }
                                else
                                {

                                    //determina cual operador está seleccionado
                                    switch (iCBoxServ.Properties.Items[iCBoxServ.SelectedIndex].Value.ToString())
                                    {
                                        case "01": //"ICE-KOLBIMOVIL";
                                            //ALMACENA EL LOG O EL INTENTO                                            
                                            BitacoraIntentos(txteMonto.Text, txteNumTel.Text, "01", "01");
                                            RecargarAlo(varCod, varUsrSist, varAloSucr, "ICE", txteNumTel.Text, txteMonto.Text, varCanton, varProvincia, varDistrito);
                                            Limpiar();
                                            break;
                                        case "02":// "FULLMOVIL"; 
                                            //ALMACENA EL LOG O EL INTENTO
                                            BitacoraIntentos(txteMonto.Text, txteNumTel.Text, "02", "01");
                                            RecargarAlo(varCod, varUsrSist, varAloSucr, "FMOVIL", txteNumTel.Text, txteMonto.Text, varCanton, varProvincia, varDistrito);
                                            Limpiar();
                                            break;
                                        case "03":// "TUYOMOVIL"; 
                                            //ALMACENA EL LOG O EL INTENTO
                                            BitacoraIntentos(txteMonto.Text, txteNumTel.Text, "03", "01");
                                            RecargarAlo(varCod, varUsrSist, varAloSucr, "TMOVIL", txteNumTel.Text, txteMonto.Text, varCanton, varProvincia, varDistrito);
                                            Limpiar();
                                            break;
                                    }
                                    btnRecargar.Enabled = true;
                                }
                            }

                            #endregion
                            break;
                        case "03": //QCarga

                            #region QCarga

                            btnRecargar.Enabled = false;
                            if (txteMonto.Text == string.Empty || txteMonto.Text == "0")
                            {
                                GUI.CApp.ShowMessage("Digite el Monto", "Datos de Recarga", true);
                                btnRecargar.Enabled = true;
                            }
                            else
                            {
                                if (txteNumTel.Text == string.Empty)
                                {
                                    GUI.CApp.ShowMessage("Digite el número telefónico", "Datos de Recarga", true);
                                    btnRecargar.Enabled = true;
                                }
                                else
                                {
                                    //determina cual operador está seleccionado
                                    switch (iCBoxServ.Properties.Items[iCBoxServ.SelectedIndex].Value.ToString())
                                    {
                                        case "01": //"ICE-KOLBIMOVIL";
                                            if (float.Parse(txteMonto.Text) >= float.Parse(varMinICE) && float.Parse(txteMonto.Text) <= float.Parse(varMaxICE))
                                            {
                                                //ALMACENA EL LOG O EL INTENTO
                                                BitacoraIntentos(txteMonto.Text, txteNumTel.Text, "01", "03");
                                                RecargarQCarga(varCodQ, varUsrSist, "EKONO", "ICE", txteNumTel.Text, txteMonto.Text, varCanton, varProvincia, varDistrito);
                                                Limpiar();
                                            }
                                            else
                                            {
                                                GUI.CApp.ShowMessage("Monto no permitido", "Datos de Recarga", true);
                                                btnRecargar.Enabled = true;
                                            }
                                            break;
                                        case "02"://"FULLMOVIL";                    
                                            if (float.Parse(txteMonto.Text) >= float.Parse(varMinFM) && float.Parse(txteMonto.Text) <= float.Parse(varMaxFM))
                                            {
                                                BitacoraIntentos(txteMonto.Text, txteNumTel.Text, "02", "03");
                                                RecargarQCarga(varCodQ, varUsrSist, "EKONO", "VIR", txteNumTel.Text, txteMonto.Text, varCanton, varProvincia, varDistrito);
                                                Limpiar();
                                            }
                                            else
                                            {
                                                GUI.CApp.ShowMessage("Monto no permitido", "Datos de Recarga", true);
                                                btnRecargar.Enabled = true;
                                            }
                                            break;
                                        case "04"://"CLARO";
                                            string[] rang = varRangoQ.Split(';');
                                            bool correct = false;
                                            foreach (string val in rang)
                                            {
                                                if (txteMonto.Text == val)
                                                {
                                                    correct = true;
                                                    break;
                                                }
                                            }
                                            if (correct)
                                            {
                                                BitacoraIntentos(txteMonto.Text, txteNumTel.Text, "04", "03");
                                                RecargarQCarga(varCodQ, varUsrSist, "EKONO", "CLA", txteNumTel.Text, txteMonto.Text, varCanton, varProvincia, varDistrito);
                                                Limpiar();
                                            }
                                            else
                                            {
                                                GUI.CApp.ShowMessage("Monto no permitido", "Datos de Recarga", true);
                                                btnRecargar.Enabled = true;
                                            }
                                            break;
                                        case "05"://"MOVISTAR";
                                            if (float.Parse(txteMonto.Text) >= float.Parse(varMinMov) && float.Parse(txteMonto.Text) <= float.Parse(VarMaxMov))
                                            {
                                                BitacoraIntentos(txteMonto.Text, txteNumTel.Text, "05", "03");
                                                RecargarQCarga(varCodQ, varUsrSist, "EKONO", "MOV", txteNumTel.Text, txteMonto.Text, varCanton, varProvincia, varDistrito);
                                                Limpiar();
                                            }
                                            else
                                            {
                                                GUI.CApp.ShowMessage("Monto no permitido", "Datos de Recarga", true);
                                                btnRecargar.Enabled = true;
                                            }
                                            break;
                                    }
                                    btnRecargar.Enabled = true;
                                }
                            }

                            #endregion
                            break;

                        case "02": //Puntos Naranja

                            #region Puntos Naranja

                            btnRecargar.Enabled = false;
                            if (txteMonto.Text == string.Empty || txteMonto.Text == "0")
                            {
                                GUI.CApp.ShowMessage("Digite el Monto", "Datos de Recarga", true);
                                btnRecargar.Enabled = true;
                            }
                            else
                            {
                                if (txteNumTel.Text == string.Empty)
                                {
                                    GUI.CApp.ShowMessage("Digite el número telefónico", "Datos de Recarga", true);
                                    btnRecargar.Enabled = true;
                                }
                                else
                                {
                                    //determina cual operador está seleccionado
                                    switch (iCBoxServ.Properties.Items[iCBoxServ.SelectedIndex].Value.ToString())
                                    {
                                        case "01": //"ICE-KOLBIMOVIL";
                                            BitacoraIntentos(txteMonto.Text, txteNumTel.Text, "01", "02");
                                            RecargarPN(varCod, varUsrSist, "EKONO", "ICE", txteNumTel.Text, txteMonto.Text);
                                            Limpiar();
                                            break;
                                        case "03"://"TUYOMOVIL";
                                            BitacoraIntentos(txteMonto.Text, txteNumTel.Text, "03", "02");
                                            RecargarPN(varCod, varUsrSist, "EKONO", "TUYO", txteNumTel.Text, txteMonto.Text);
                                            Limpiar();
                                            break;
                                    }
                                    btnRecargar.Enabled = true;
                                }
                            }
                            #endregion
                            break;

                        case "04": //Teledolar

                            #region TeleDolar

                            btnRecargar.Enabled = false;
                            if (txteMonto.Text == string.Empty || txteMonto.Text == "0")
                            {
                                GUI.CApp.ShowMessage("Digite el Monto", "Datos de Recarga", true);
                                btnRecargar.Enabled = true;
                            }
                            else
                            {
                                if (txteNumTel.Text == string.Empty)
                                {
                                    GUI.CApp.ShowMessage("Digite el número telefónico", "Datos de Recarga", true);
                                    btnRecargar.Enabled = true;
                                }
                                else
                                {
                                    //determina cual operador está seleccionado
                                    switch (iCBoxServ.Properties.Items[iCBoxServ.SelectedIndex].Value.ToString())
                                    {
                                        case "01": //"ICE-KOLBIMOVIL";
                                            if (float.Parse(txteMonto.Text) >= float.Parse(varMinICE) || float.Parse(txteMonto.Text) <= float.Parse(varMaxICE))
                                            {
                                                BitacoraIntentos(txteMonto.Text, txteNumTel.Text, "01", "04");
                                                RecargarPagool(varCodP, varUsrSist, "EKONO", "ICE", txteNumTel.Text, txteMonto.Text, varCanton, varProvincia, varDistrito);
                                                Limpiar();
                                            }
                                            else
                                            {
                                                GUI.CApp.ShowMessage("Monto no permitido", "Datos de Recarga", true);
                                                btnRecargar.Enabled = true;
                                            }
                                            break;
                                    }
                                    btnRecargar.Enabled = true;
                                }
                            }
                            #endregion
                            break;
                        case "05": //Prides

                            #region Prides

                            btnRecargar.Enabled = false;
                            if (txteMonto.Text == string.Empty || txteMonto.Text == "0")
                            {
                                GUI.CApp.ShowMessage("Digite el Monto", "Datos de Recarga", true);
                                btnRecargar.Enabled = true;
                            }
                            else
                            {
                                if (txteNumTel.Text == string.Empty)
                                {
                                    GUI.CApp.ShowMessage("Digite el número telefónico", "Datos de Recarga", true);
                                    btnRecargar.Enabled = true;
                                }
                                else
                                {

                                    //determina cual operador está seleccionado
                                    switch (iCBoxServ.Properties.Items[iCBoxServ.SelectedIndex].Value.ToString())
                                    {

                                        case "01": //"ICE-KOLBIMOVIL";


                                            if (float.Parse(txteMonto.Text) >= float.Parse(varMinICE) && float.Parse(txteMonto.Text) <= float.Parse(varMaxICE))
                                            {
                                                RecargarPrides(40, int.Parse(varPridesUsr), varPSemilla, varPcompanyID, txteNumTel.Text, txteMonto.Text);
                                                Limpiar();
                                            }
                                            else
                                            {
                                                GUI.CApp.ShowMessage("Monto no permitido", "Datos de Recarga", true);
                                                btnRecargar.Enabled = true;
                                            }
                                            break;

                                    }
                                    btnRecargar.Enabled = true;
                                }
                            }

                            #endregion
                            break;
                    }
                }
            }
            GridCRepJorn.DataSource = null;
            GridCRepJorn.Refresh();
            ArqJornada();
        }

        private void frmPagoServicios_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Modifiers == Keys.Alt)
            {
                switch (e.KeyCode)
                {
                    case Keys.T:
                        btnTelefonia.PerformClick();
                        break;
                    case Keys.R:
                        btnInforme.PerformClick();
                        break;
                    case Keys.C:
                        btnArqRecarga.PerformClick();
                        break;
                    case Keys.E:
                        btnAgua.PerformClick();
                        break;
                    case Keys.N:
                        btnClaroNic.PerformClick();
                        break;
                    case Keys.W:
                        btnWestUnion.PerformClick();
                        break;
                    case Keys.B:
                        btnRapiBAC.PerformClick();
                        break;
                    case Keys.Q:
                        sBtnRecNic.PerformClick();
                        break;
                    case Keys.K:
                        btnDavivienda.PerformClick();
                        break;
                }
            }
            if (e.Modifiers == Keys.None)
            {
                switch (e.KeyCode)
                {
                    case Keys.F1:
                        if (this.btnConsAgua.Visible)
                            btnConsAgua.PerformClick();
                        break;
                    //case Keys.F8:
                    //    if (this.btnmcolns.Visible)
                    //        btnmcolns.PerformClick();
                    //    break;
                    case Keys.F9:
                        if (this.sBtnRecNic.Visible)
                            sBtnRecNic.PerformClick();
                        break;
                    case Keys.F10:
                        if (this.sbtnPagar.Visible)
                            sbtnPagar.PerformClick();
                        break;
                    case Keys.F11:
                        if (this.sbtnImprimir.Visible)
                            sbtnImprimir.PerformClick();
                        break;
                    case Keys.F12:
                        if (btnRecargar.Enabled == true)
                            btnRecargar.PerformClick();
                        break;
                    case Keys.Escape:
                        btnCancelar.PerformClick();
                        break;
                }
            }
        }

        #region Procedimientos

        private void CargarReporte2(string doc)
        {
            printInvoice(long.Parse(doc));

            QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("DOCUMENTO", doc);
            CApp.bll.ExecuteSql("WMS_P_RECARGIMPRESIONES", qp, "PDV");
        }


        /// <summary>Limpia los campos
        /// </summary>
        private void Limpiar()
        {
            txteMonto.Text = string.Empty;
            txteNumTel.Text = string.Empty;
            txteNumTel.Focus();
        }

        /// <summary>Realiza una conexion con el Web Service para verificar que exista la conexion con el servidor
        /// </summary>
        /// <returns>---True:Correcto ---False:Error en la Conexion</returns>
        public bool HayConexion()
        {
            string Datos;

            //Declarando el WebService
            try
            {
                Conectividad.consultasocket Cnt = new Conectividad.consultasocket();

                //CONSUMIENDO EL WEB SERVICE
                Datos = Convert.ToString(Cnt.Fechaprueba("01").fechayhora);
                return true;
            }
            catch (Exception err)
            {
                return false;
            }
        }

        /// <summary>Requerido para comprobar si hay conexion con Puntos Naranja
        /// </summary>
        /// <param name="args"></param>
        private bool HayConexionPN()
        {
            try
            {
                ///Canal XML indicando el host, puerto y timeout
                CanalTCP channel = new CanalTCP(host, port, timeout);
                ///objeto ISOMsg que almacena el requerimiento
                ISOMsg m = new ISOMsg();
                //objeto ISOMsg que almacena la respuesta
                ISOMsg r = new ISOMsg();
                m.setString(0, "0800"); //Tipo de Msj
                m.setString(3, "990000"); //Código del Proceso
                m.setString(11, "000001"); //# de secuencia 
                m.setString(41, terminalId); //Identif de Terminal                
                r = channel.Send(m);
                if (r != null)
                {
                    //Obtener valores individuales
                    if (r.getString(39) == "00")
                        return true;
                    else
                        return false;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        /// <summary>Realiza una conexion con el Web Service para verificar que exista conexion con el servidor QCarga - Claro</summary>
        /// <returns></returns>
        public bool HayConexionQCarga()
        {
            string Datos;

            //Declarando el WebService
            try
            {
                ConectQcarg.ws_consultasocket Cnt = new ConectQcarg.ws_consultasocket();

                //CONSUMIENDO EL WEB SERVICE
                //Datos = Convert.ToString(Cnt.FechaPrueba("01").fechayhora);
                return true;
            }
            catch (Exception err)
            {
                return false;
            }
        }

        /// <summary>Permitir la venta de recargas automáticas conocidas como Tiempo Libre vía Web Service con Aló Prepago</summary>
        /// <param name="varCodPrepago">Código del prepago que está utilizando</param>
        /// <param name="varUsuario">Nombre de la persona que realiza la venta</param>
        /// <param name="varSucursal">Nombre de la sucursal desde donde se realiza la consulta</param>
        /// <param name="varCompania">Código de la Compañia que provee el producto (ICE,)</param>
        /// <param name="varNumPhone">Nùmero telefonico al que se hará la recarga</param>
        /// <param name="varMontoRecarga">Valor de la recarga</param>
        /// <param name="varProvincia">Còdigo de la provincia donde se realiza la Venta</param>
        /// <param name="varCanton">Código del cantón asociado a la provincia</param>
        /// <param name="varDistrito">Código del distrito asociado al Cantón</param>
        /// <param name="Datos"></param>
        private void Recargar(string varCodPrepago, string varUsuario, string varSucursal,
                              string varCompania, string varNumPhone, string varMontoRecarga,
                              string varProvincia, string varCanton, string varDistrito)
        {
            try
            {
                //bool varConexion;
                //varConexion = HayConexion();

                //if (varConexion == false)
                //{
                //    GUI.CApp.ShowMessage("No hay Conexion con el Servidor de Alo Prepago en este Momento", "ERROR", true);
                //    BitacoraIntentosE(id, "No hay Conexion con el Servidor de Alo Prepago en este Momento");
                //}
                //else
                //{
                //Realiza la venta de tiempo al aire o recarga
                if (varCompania == "ICE")
                {//KOLBI ICE
                    Conectividad.Respuestavendertiempoaire RespTiempoAire = new Conectividad.Respuestavendertiempoaire();
                    Conectividad.consultasocket TiempoAire = new Conectividad.consultasocket();
                    RespTiempoAire = TiempoAire.Vendertiempoaire(varCodPrepago, varUsuario, varSucursal, varCompania, varNumPhone, varMontoRecarga, varProvincia, varCanton, varDistrito);
                    BitacoraIntentosC(id);
                    RegistroBD(RespTiempoAire, varMontoRecarga, varNumPhone, "01", "01");
                }
                else
                {//FULL MOVIL
                    Conectividad.Respuestavendertiempoairefmovil RespTiempoAireFM = new Conectividad.Respuestavendertiempoairefmovil();
                    Conectividad.consultasocket TiempoAire = new Conectividad.consultasocket();
                    RespTiempoAireFM = TiempoAire.Vendertiempoairefmovil(varCodPrepago, varUsuario, varSucursal, varCompania, varNumPhone, varMontoRecarga, varProvincia, varCanton, varDistrito);
                    BitacoraIntentosC(id);
                    RegistroBD(RespTiempoAireFM, varMontoRecarga, varNumPhone, "02", "01");
                }
                // }
            }
            catch (SoapException err)
            {
                GUI.CApp.ShowMessage(Convert.ToString(err.Detail.FirstChild.Value), "ERROR", true);
                BitacoraIntentosE(id, "Soap:" + Convert.ToString(err.Detail.FirstChild.Value));
            }
            catch (Exception er)
            {
                GUI.CApp.ShowMessage(er.Message, "ERROR", true);
                BitacoraIntentosE(id, Convert.ToString(er.Message));
            }
        }

        private void RecargarAlo(string varCodPrepago, string varUsuario, string varSucursal,
                             string varCompania, string varNumPhone, string varMontoRecarga,
                             string varProvincia, string varCanton, string varDistrito)
        {
            try
            {

                //Realiza la venta de tiempo al aire o recarga
                if (varCompania == "ICE")
                {//KOLBI ICE
                    long varSECALO = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("SEC_ALO", "PDV"));

                    com.aloprepago.www.AloIntegraINTEGRACION WSAlo = new LLNet.Tienda.com.aloprepago.www.AloIntegraINTEGRACION();
                    com.aloprepago.www.TransaccionOutput RespAlo = new LLNet.Tienda.com.aloprepago.www.TransaccionOutput();
                    com.aloprepago.www.tipoTransaccion Trans = new LLNet.Tienda.com.aloprepago.www.tipoTransaccion();
                    com.aloprepago.www.tipoSeguridad Seg = new LLNet.Tienda.com.aloprepago.www.tipoSeguridad();
                    com.aloprepago.www.ProcesoGeneral ProcGen = new LLNet.Tienda.com.aloprepago.www.ProcesoGeneral();

                    Seg.Entidad = varAloEnt;
                    Seg.Usuario = varAloUsr;
                    Seg.Clave = varAloClav;

                    Trans.Documento = varSECALO.ToString();
                    Trans.Fecha = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                    Trans.Monto = varMontoRecarga;
                    Trans.Operacion = "recarga";
                    Trans.Servicio = "1";
                    Trans.Vendedor = varUsuario;
                    Trans.Sucursal = varSucursal;
                    Trans.Telefono = varNumPhone;

                    ProcGen.Transaccion = Trans;
                    ProcGen.Seguridad = Seg;
                    RespAlo = WSAlo.ProcesoGeneral(ProcGen);
                    BitacoraIntentosC(id);
                    RegistroBD(RespAlo, varMontoRecarga, varNumPhone, "01", "01");
                }
                else
                {
                    if (varCompania == "FMOVIL")
                    {//FULL MOVIL
                        long varSECALO = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("SEC_ALO", "PDV"));

                        com.aloprepago.www.AloIntegraINTEGRACION WSAlo = new LLNet.Tienda.com.aloprepago.www.AloIntegraINTEGRACION();
                        com.aloprepago.www.TransaccionOutput RespAlo = new LLNet.Tienda.com.aloprepago.www.TransaccionOutput();
                        com.aloprepago.www.tipoTransaccion Trans = new LLNet.Tienda.com.aloprepago.www.tipoTransaccion();
                        com.aloprepago.www.tipoSeguridad Seg = new LLNet.Tienda.com.aloprepago.www.tipoSeguridad();
                        com.aloprepago.www.ProcesoGeneral ProcGen = new LLNet.Tienda.com.aloprepago.www.ProcesoGeneral();

                        Seg.Entidad = varAloEnt;
                        Seg.Usuario = varAloUsr;
                        Seg.Clave = varAloClav;

                        Trans.Documento = varSECALO.ToString();
                        Trans.Fecha = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                        Trans.Monto = varMontoRecarga;
                        Trans.Operacion = "recarga";
                        Trans.Servicio = "3";
                        Trans.Vendedor = varUsuario;
                        Trans.Sucursal = varSucursal;
                        Trans.Telefono = varNumPhone;

                        ProcGen.Transaccion = Trans;
                        ProcGen.Seguridad = Seg;
                        RespAlo = WSAlo.ProcesoGeneral(ProcGen);
                        BitacoraIntentosC(id);
                        RegistroBD(RespAlo, varMontoRecarga, varNumPhone, "02", "01");
                    }
                    else
                    {//TUYO MOVIL
                        long varSECALO = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("SEC_ALO", "PDV"));

                        com.aloprepago.www.AloIntegraINTEGRACION WSAlo = new LLNet.Tienda.com.aloprepago.www.AloIntegraINTEGRACION();
                        com.aloprepago.www.TransaccionOutput RespAlo = new LLNet.Tienda.com.aloprepago.www.TransaccionOutput();
                        com.aloprepago.www.tipoTransaccion Trans = new LLNet.Tienda.com.aloprepago.www.tipoTransaccion();
                        com.aloprepago.www.tipoSeguridad Seg = new LLNet.Tienda.com.aloprepago.www.tipoSeguridad();
                        com.aloprepago.www.ProcesoGeneral ProcGen = new LLNet.Tienda.com.aloprepago.www.ProcesoGeneral();

                        Seg.Entidad = varAloEnt;
                        Seg.Usuario = varAloUsr;
                        Seg.Clave = varAloClav;

                        Trans.Documento = varSECALO.ToString();
                        Trans.Fecha = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                        Trans.Monto = varMontoRecarga;
                        Trans.Operacion = "recarga";
                        Trans.Servicio = "2";
                        Trans.Vendedor = varUsuario;
                        Trans.Sucursal = varSucursal;
                        Trans.Telefono = varNumPhone;

                        ProcGen.Transaccion = Trans;
                        ProcGen.Seguridad = Seg;
                        RespAlo = WSAlo.ProcesoGeneral(ProcGen);
                        BitacoraIntentosC(id);
                        RegistroBD(RespAlo, varMontoRecarga, varNumPhone, "03", "01");
                    }
                }
                // }
            }
            catch (SoapException err)
            {
                GUI.CApp.ShowMessage(Convert.ToString(err.Detail.FirstChild.Value), "ERROR", true);
                BitacoraIntentosE(id, "Soap:" + Convert.ToString(err.Detail.FirstChild.Value));
            }
            catch (Exception er)
            {
                GUI.CApp.ShowMessage(er.Message, "ERROR", true);
                BitacoraIntentosE(id, Convert.ToString(er.Message));
            }
        }

        private void RecargarPrides(int varProductTypeId, int varUsuario, string varSemilla,
                             string varcompanyID, string varNumPhone, string varMontoRecarga)
        {
            try
            {
                //Realiza la venta de tiempo al aire o recarga
                if (varProductTypeId == 40) // Producto Kolbi = 40
                {//KOLBI ICE
                    long varSECPrides = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("SEC_Prides", "PDV")); //Identificador Interno de la recarga

                    //ALMACENA EL LOG O EL INTENTO                                            
                    BitacoraIntentos(txteMonto.Text, txteNumTel.Text, "01", "05", varSECPrides.ToString());


                    APSSellerWS.APSSellerWS PRIDESWS = new APSSellerWS.APSSellerWS();

                    APSSellerWS.BuyProductRequest buyProduct = new APSSellerWS.BuyProductRequest();
                    //APSSeller.BuyProductRequest buyProduct = new APSSeller.BuyProductRequest();

                    buyProduct.Product = new APSSellerWS.ProductToBuy();
                    buyProduct.Product.ProductTypeId = varProductTypeId; // Producto Kolbi = 40
                    buyProduct.Product.Quantity = decimal.Parse(varMontoRecarga); //Número entero ejm: 100, 2000, 10000. Enviar igual a la 
                    buyProduct.Product.ReloadId = varNumPhone;
                    buyProduct.companyID = varcompanyID;
                    buyProduct.UserId = varUsuario;
                    buyProduct.TransactionSequent = varSECPrides;
                    //Construcción del token
                    string Time = string.Empty;
                    TokenValidation.BuyTokenObject buyObject = new TokenValidation.BuyTokenObject() { Amount = varMontoRecarga, ReloadID = varNumPhone, Seed = varSemilla };
                    buyProduct.Token = TokenValidation.BuyToken(buyObject, ref Time); //Creacion del Token
                    buyProduct.Time = Time;

                    APSSellerWS.APSSellerWS invocacionWS = new APSSellerWS.APSSellerWS();
                    APSSellerWS.PayTransactionResponse RespWS = invocacionWS.Buy(buyProduct); //Llamada al WS para la recarga

                    BitacoraIntentosC(id);
                    RegistroBDPrides(RespWS, varMontoRecarga, varNumPhone, "01", "05");
                }
            }
            catch (SoapException err)
            {
                GUI.CApp.ShowMessage(Convert.ToString(err.Detail.FirstChild.Value), "ERROR", true);
                BitacoraIntentosE(id, "Soap:" + Convert.ToString(err.Detail.FirstChild.Value));
            }
            catch (Exception er)
            {
                GUI.CApp.ShowMessage(er.Message, "ERROR", true);
                BitacoraIntentosE(id, Convert.ToString(er.Message));
            }
        }


        /// <summary>Completa con 0 a la izquieda el texto para dar formato</summary>
        /// <param name="txt">Texto</param>
        /// <param name="tam">Longitud Requerida</param>
        /// <returns></returns>
        private string Formato(string txt, short tam)
        {
            string ceros = String.Empty;
            for (int cont = txt.Length; cont < tam; cont++)
            {
                ceros += "0";
            }
            return ceros + txt;
        }

        /// <summary>Permitir la venta de recargas automáticas conocidas como Recarga de tiempo aire vía Servicio TCP con Puntos Naranja </summary>
        /// <param name="varCodPrepago"></param>
        /// <param name="varUsuario"></param>
        /// <param name="varSucursal"></param>
        /// <param name="varCompania"></param>
        /// <param name="varNumPhone"></param>
        /// <param name="varMontoRecarga"></param>
        private void RecargarPN(string varCodPrepago, string varUsuario, string varSucursal,
                             string varCompania, string varNumPhone, string varMontoRecarga)
        {
            try
            {
                //bool varConexion;
                //varConexion = HayConexionPN();

                //if (varConexion == false)   
                //{
                //    GUI.CApp.ShowMessage("No hay Conexion con el Servidor de Puntos Naranja en este Momento", "ERROR", true);
                //}
                //else
                //{
                LlenarSecuencias();
                //Realiza la venta de tiempo al aire o recarga
                if (varCompania == "ICE")
                {//KOLBI ICE
                    ///Canal XML indicando el host, puerto y timeout
                    CanalTCP channel = new CanalTCP(host, port, timeout);

                    ///objeto ISOMsg que almacena el requerimiento
                    ISOMsg m = new ISOMsg();
                    //objeto ISOMsg que almacena la respuesta
                    ISOMsg r = new ISOMsg();

                    m.setString(0, "0200"); //->tipo de mensaje
                    m.setString(3, "680000"); //->codigo del proceso
                    m.setString(4, Formato(varMontoRecarga + "00", 12)); //->Monto
                    m.setString(11, Formato(NumSec, 6)); //->Numero de secuencia, debe incrementar en 1

                    DateTime fec = System.DateTime.Now;
                    int hor = int.Parse(fec.Hour.ToString().PadLeft(2, '0'));
                    if (fec.ToString().Substring(19, 1) == "p" && fec.Hour.ToString().PadLeft(2, '0') != "12")
                    { //convierte la hora a formato de 24 horas
                        hor = int.Parse(fec.Hour.ToString().PadLeft(2, '0')) + 12;
                    }

                    //Calculo time
                    string time = hor.ToString() +
                                  fec.Minute.ToString().PadLeft(2, '0') +
                                  fec.Second.ToString().PadLeft(2, '0');
                    m.setString(12, time); //->Hora
                    //Calculo date 
                    string date = fec.Month.ToString().PadLeft(2, '0') +
                                  fec.Day.ToString().PadLeft(2, '0') +
                                  fec.Year.ToString().PadLeft(4, '0');
                    m.setString(13, date); //->Fecha

                    m.setString(37, Formato(RefExt, 12));//->Referencia Externa, debe incrementar en 1
                    m.setString(41, terminalId);//->Identificador de Terminal
                    m.setString(60, "200" + "," + //-> Codigo del Operador
                                    "11" + "," + //-> Codigo del Producto
                                    txteNumTel.Text + "," + //-> Celular                            
                                    user + "," + //->Usuario
                                    Hash.get(user, password) + "," + //->Valor de dispersion calculado con HASH 1
                                    CodTienda); //-> Codigo de Tienda
                    m.setString(61, "H2H" + "|" +
                                    "IP CLIENT" + "|" +
                                    "MAC CLIENT" + "|" +
                                    "NA" + "|" +
                                    "HARDWARE ID CLIENT" + "|" +
                                    "OS CLIENT" + "|" +
                                    "NA");
                    r = channel.Send(m);
                    //if (r == null)
                    if (r != null) //Correcto
                    {
                        //Obtener valores individuales
                        if (r.getString(39) == "00")//Transacción realizada con éxito
                        {
                            BitacoraIntentosC(id);
                            RegistroBDPN(r, varMontoRecarga, varNumPhone, "01", "02", fec);
                        }
                        else
                        {
                            GUI.CApp.ShowMessage("No fue posible realizar la transacción: " + r.getString(39), "ERROR", true);
                            BitacoraIntentosE(id, Convert.ToString(r.getString(39)));
                        }
                    }//No se recibe la respuesta de PN posiblemente por TimeOut
                    else
                    {
                        BitacoraIntentosE(id, "No se recibe la respuesta de PN posiblemente por TimeOut");
                        RegistroConcilPN(m, varMontoRecarga, varNumPhone, "200", "02", "01", "11");
                    }
                }
                else
                {//TUYO MOVIL
                    ///Canal XML indicando el host, puerto y timeout
                    CanalTCP channel = new CanalTCP(host, port, timeout);
                    ///objeto ISOMsg que almacena el requerimiento
                    ISOMsg m = new ISOMsg();
                    //objeto ISOMsg que almacena la respuesta
                    ISOMsg r = new ISOMsg();

                    m.setString(0, "0200"); //->tipo de mensaje
                    m.setString(3, "690000"); //->codigo del proceso
                    m.setString(4, Formato(varMontoRecarga + "00", 12)); //->Monto
                    m.setString(11, Formato(NumSec, 6)); //->Numero de secuencia, debe incrementar en 1

                    DateTime fec = System.DateTime.Now;
                    int hor = int.Parse(fec.Hour.ToString().PadLeft(2, '0'));
                    if (fec.ToString().Substring(19, 1) == "p")
                    { //convierte la hora a formato de 24 horas
                        hor = int.Parse(fec.Hour.ToString().PadLeft(2, '0')) + 12;
                    }

                    //Calculo time
                    string time = hor.ToString() +
                                  fec.Minute.ToString().PadLeft(2, '0') +
                                  fec.Second.ToString().PadLeft(2, '0');
                    m.setString(12, time); //->Hora
                    //Calculo date 
                    string date = fec.Month.ToString().PadLeft(2, '0') +
                                  fec.Day.ToString().PadLeft(2, '0') +
                                  fec.Year.ToString().PadLeft(4, '0');
                    m.setString(13, date); //->Fecha

                    m.setString(37, Formato(RefExt, 12));//->Referencia Externa, debe incrementar en 1
                    m.setString(41, terminalId);//->Identificador de Terminal
                    m.setString(60, "18" + "," + //-> Codigo del Operador
                                    "12" + "," + //-> Codigo del Producto
                                    txteNumTel.Text + "," + //-> Celular                            
                                    user + "," + //->Usuario
                                    Hash.get(user, password) + "," + //->Valor de dispersion calculado con HASH 1
                                    CodTienda); //-> Codigo de Tienda
                    m.setString(61, "H2H" + "|" +
                                    "IP CLIENT" + "|" +
                                    "MAC CLIENT" + "|" +
                                    "NA" + "|" +
                                    "HARDWARE ID CLIENT" + "|" +
                                    "OS CLIENT" + "|" +
                                    "NA");
                    r = channel.Send(m);
                    //if (r == null)
                    if (r != null) //Correcto
                    {
                        //Obtener valores individuales
                        if (r.getString(39) == "00")//Transacción realizada con éxito
                        {
                            BitacoraIntentosC(id);
                            RegistroBDPN(r, varMontoRecarga, varNumPhone, "03", "02", fec);
                        }
                        else
                        {
                            GUI.CApp.ShowMessage("No fue posible realizar la transacción: " + r.getString(39), "ERROR", true);
                            BitacoraIntentosE(id, Convert.ToString(r.getString(39))); ;
                        }
                    } //No se recibe la respuesta de PN posiblemente por TimeOut
                    else
                    {
                        BitacoraIntentosE(id, Convert.ToString("No se recibe la respuesta de PN posiblemente por TimeOut"));
                        RegistroConcilPN(m, varMontoRecarga, varNumPhone, "18", "02", "03", "12");
                    }
                }
                //}
            }
            catch (Exception er)
            {
                GUI.CApp.ShowMessage(er.Message, "ERROR", true);
                BitacoraIntentosE(id, Convert.ToString(er.Message));
            }
        }

        /// <summary>Permite la venta de recargas automáticas conocidas como Recarga de tiempo aire vía Web Service </summary>
        /// <param name="varCodPrepago"></param>
        /// <param name="varUsuario"></param>
        /// <param name="varSucursal"></param>
        /// <param name="varCompania"></param>
        /// <param name="varNumPhone"></param>
        /// <param name="varMontoRecarga"></param>
        /// <param name="varProvincia"></param>
        /// <param name="varCanton"></param>
        /// <param name="varDistrito"></param>
        private void RecargarQCarga(string varCodPrepago, string varUsuario, string varSucursal,
                              string varCompania, string varNumPhone, string varMontoRecarga,
                              string varProvincia, string varCanton, string varDistrito)
        {
            try
            {
                //bool varConexion;
                //varConexion = HayConexionQCarga();

                //if (varConexion == false)
                //{
                //    GUI.CApp.ShowMessage("No hay Conexion con el Servidor de QCarga en este Momento", "ERROR", true);
                //}
                //else
                //{
                //Realiza la venta de tiempo al aire o recarga
                ConectQcarg.RespuestaVentaTiempoAire RespTiempoAire = new ConectQcarg.RespuestaVentaTiempoAire();
                ConectQcarg.ws_consultasocket TiempoAire = new ConectQcarg.ws_consultasocket();
                TiempoAire.Timeout = 120000;
                RespTiempoAire = TiempoAire.Vendertiempoaire(varCodQ, varUsuario, varSucursal, varCompania, varNumPhone, varMontoRecarga, varProvincia, varCanton, varDistrito);
                BitacoraIntentosC(id);
                switch (varCompania)
                {
                    case "CLA": //CLARO                       
                        RegistroBDQCarga(RespTiempoAire, varMontoRecarga, varNumPhone, "04", "03");
                        break;
                    case "MOV"://MOVISTAR                       
                        RegistroBDQCarga(RespTiempoAire, varMontoRecarga, varNumPhone, "05", "03");
                        break;
                    case "ICE"://ICE                       
                        RegistroBDQCarga(RespTiempoAire, varMontoRecarga, varNumPhone, "01", "03");
                        break;
                    case "VIR"://FULL MOVIL                       
                        RegistroBDQCarga(RespTiempoAire, varMontoRecarga, varNumPhone, "02", "03");
                        break;
                }
                //}
            }
            catch (SoapException err)
            {
                ////GUI.CApp.ShowMessage(Convert.ToString(err.Detail.FirstChild.Value), "ERROR", true);
                //GUI.CApp.ShowMessage(err.Message, "ERROR", true);              

                LLNet.Controls.LLEventLog EventLog;
                string ExeDir = Application.StartupPath + "\\";
                EventLog = new LLNet.Controls.LLEventLog(ExeDir);
                EventLog.WriteLog(LLNet.Utils.Types.ErrorTypes.MESSAGES, "BnServ catch SoapException");
                EventLog.WriteLog(LLNet.Utils.Types.ErrorTypes.MESSAGES, err.ToString());


                GUI.CApp.ShowMessage("Error en el servicio, sentimos los inconvenientes " + Convert.ToString(err.Detail.FirstChild.Value), "ERROR", false);
                BitacoraIntentosE(id, "Soap:" + Convert.ToString(err.Detail.FirstChild.Value));
            }
            catch (Exception er)
            {
                GUI.CApp.ShowMessage(er.Message, "ERROR", false);

                LLNet.Controls.LLEventLog EventLog;
                string ExeDir = Application.StartupPath + "\\";
                EventLog = new LLNet.Controls.LLEventLog(ExeDir);
                EventLog.WriteLog(LLNet.Utils.Types.ErrorTypes.MESSAGES, "BnServ catch SoapException");
                EventLog.WriteLog(LLNet.Utils.Types.ErrorTypes.MESSAGES, er.Message);


                BitacoraIntentosE(id, er.Message);
            }
        }


        private void RecargarPagool(string varCodPrepago, string varUsuario, string varSucursal,
                              string varCompania, string varNumPhone, string varMontoRecarga,
                              string varProvincia, string varCanton, string varDistrito)
        {
            try
            {
                WSPAGOOL.RecargasLN ws = new WSPAGOOL.RecargasLN();
                WSPAGOOL.VentaTiempoAire respTiempoAire = new LLNet.Tienda.WSPAGOOL.VentaTiempoAire();
                ws.Timeout = 120000;
                respTiempoAire = ws.Vendertiempoaire(varCodP, varUsuario, varSucursal, varCompania, varNumPhone, varMontoRecarga, varProvincia, varCanton, varDistrito);
                //bool varConexion;
                //varConexion = HayConexionQCarga();

                //if (varConexion == false)
                //{
                //    GUI.CApp.ShowMessage("No hay Conexion con el Servidor de Pagool en este Momento", "ERROR", true);
                //}
                //else
                //{

                //Realiza la venta de tiempo al aire o recarga
                //ConectQcarg.RespuestaVentaTiempoAire RespTiempoAire = new ConectQcarg.RespuestaVentaTiempoAire();
                //ConectQcarg.ws_consultasocket TiempoAire = new ConectQcarg.ws_consultasocket();
                //TiempoAire.Timeout = 120000;
                //RespTiempoAire = TiempoAire.Vendertiempoaire(varCodQ, varUsuario, varSucursal, varCompania, varNumPhone, varMontoRecarga, varProvincia, varCanton, varDistrito);
                BitacoraIntentosC(id);
                switch (varCompania)
                {
                    case "ICE"://ICE                       
                        RegistroBDPagool(respTiempoAire, varMontoRecarga, varNumPhone, "01", "04");
                        break;
                }
                // }
            }
            catch (SoapException err)
            {
                ////GUI.CApp.ShowMessage(Convert.ToString(err.Detail.FirstChild.Value), "ERROR", true);
                //GUI.CApp.ShowMessage(err.Message, "ERROR", true);
                GUI.CApp.ShowMessage("Error en el servicio, sentimos los inconvenientes", "ERROR", true);
                BitacoraIntentosE(id, "Soap:" + Convert.ToString(err.Detail.FirstChild.Value));
            }
            catch (Exception er)
            {
                GUI.CApp.ShowMessage(er.Message, "ERROR", true);
                BitacoraIntentosE(id, er.Message);
            }
        }



        /// <summary>Permitir la venta de recargas automáticas conocidas como Recarga de tiempo aire vía Servicio TCP con Claro </summary>
        /// <param name="varCodPrepago"></param>
        /// <param name="varUsuario"></param>
        /// <param name="varSucursal"></param>
        /// <param name="varCompania"></param>
        /// <param name="varNumPhone"></param>
        /// <param name="varMontoRecarga"></param>
        private void RecargarClaro(string varCodPrepago, string varUsuario, string varSucursal,
                             string varCompania, string varNumPhone, string varMontoRecarga)
        {

        }


        #region Impresion y Abrir el cajón de Dinero

        private static int EsDeCredito(long pDocumento)
        {
            QueryParams qp = new QueryParams();
            qp.AddReplaceParam("DOCUMENTO", Convert.ToString(pDocumento));
            int Credito = Convert.ToInt16(CApp.bll.GetSingleValue("ImpresionesCredito", qp, "PDV"));
            return Credito;
        }

        /*Imprimir abrir cajón*/
        private static void imprimirDocumentoDOS(long documento, string Impresora, long formato, string prefijo, string BatName)
        {
            if (BatName == "")
                BatName = "imprimir.bat";
            string Ruta = Application.StartupPath;
            QueryParams qp = new QueryParams();
            if (Ruta != string.Empty)
            {
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(Ruta + "\\" + BatName);
                startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                string Args = "";

                string varTipoTxt = Helpers.ObjToStr(CApp.GetParam("TTXT"));

                if (varTipoTxt == "U") // SI EL TIPO DE GENERACION DE ARCHIVO ES POR USUARIO O DOCUMENTO
                {
                    if (prefijo != "")
                        Args = prefijo + CApp.usuario + ".txt ";
                    else
                        Args = CApp.usuario + ".txt ";
                }
                else
                {
                    long pDocumento = documento;
                    if (prefijo != "")
                        Args = prefijo + pDocumento + ".txt ";
                    else
                        Args = pDocumento + ".txt ";
                }
                startInfo.Arguments = Args;

                try
                {
                    qp.AddReplaceParam("DOCUMENTO", documento.ToString());
                    qp.AddReplaceParam("FORMATO", formato.ToString());
                    qp.AddReplaceParam("USUARIO", CApp.usuario.ToString());
                    CApp.bll.ExecuteSql("GENERAR_IMPRESION_POS", qp, "PDV");
                    Thread.Sleep(3000); // SE LE DA TIEMPO A LA BD DE GENERAR EL ARCHIVO DE TEXTO
                    System.Diagnostics.Process.Start(startInfo);
                }
                catch (Exception ex)
                {
                    CApp.ShowMessage(ex.Message, "Impresion de Documentos", true);
                }
            }
            else
            {
                throw new Exception("No esta Definido el Parametro UATI");
            }
            //startInfo.UseShellExecute = false; 
        }
        private static void imprimirDocumentoDOS(long documento, string Impresora, long formato)
        {
            imprimirDocumentoDOS(documento, Impresora, formato, "", "");
        }
        private static void imprimirDocumentoDOS(long documento, string Impresora, long formato, string batName)
        {
            imprimirDocumentoDOS(documento, Impresora, formato, "", batName);
        }
        private static void imprimirFacturaPreimpresa(long documento, string codigoReporte)
        {
            //System.Diagnostics.Process.Start("START", "/min notepad /P" + " C:\\" + GUI.CApp.usuario + ".txt");            
            string PreimpresaXvariables = Helpers.ObjToStr(CApp.GetParam("PIXV"));

            if (PreimpresaXvariables == "NO")
            {
                Hashtable ht = new Hashtable();
                QueryParams QueryParams = new QueryParams();
                QueryParams.AddReplaceParam("DOCUMENTO", documento.ToString());
                ht.Add("TDA_V_REP_DOCUMENTOS", QueryParams);
                ht.Add("TDA_V_REP_DET_DOCUMENTOS", QueryParams);

                LLNet.Reports.BaseReports.XRInfo Info;
                Info = Reports.BaseReports.XRBase.SetInfo(codigoReporte);

                RegistryKey key = Registry.CurrentUser;
                key = key.OpenSubKey(@"Software\Logistika\POS Retail 8.0.0\Impresoras\Preimpresos", true);

                string printerFactura = "";

                if (key != null)
                    printerFactura = Helpers.ObjToStr(key.GetValue("Factura", ""));


                if (printerFactura != string.Empty)
                    Info.PrinterName = printerFactura;

                LLNet.Reports.BaseReports.XRBase xrBase = new LLNet.Reports.BaseReports.XRBase(Info.BaseReport, Info.CodeReport);
                xrBase.Parametros = Info;
                xrBase.BllInstance = CApp.bll;
                xrBase.ExePath = CApp.ExeDir;

                xrBase.ExecuteReport(LLNet.Reports.BaseReports.XRExecution.XRPrint, false, ht);

                //xrBase.Report.ExportToText("c:/logistika/factura.txt");
            }
            else
            {
                //Impresion.Impresion imp = new Impresion.Impresion();
                //imp.ImprimirFacturaMedianteVariables();
                int Formato = 2;
                int numImpresiones = 1;
                // int EsCredito = 0;
                QueryParams qp = new QueryParams();
                switch (subTipoDocumentoPreimpreso)
                {
                    case "C":
                        qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'CF");
                        break;
                    case "T":
                        qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'TKT");
                        break;
                    case "E":
                        qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'EX");
                        break;
                    case "L":
                        qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'LI");
                        break;
                    case "S":
                        qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'SI");
                        break;
                    default:
                        qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'FAP");
                        break;
                }


                Model.General.CgRefCodes dsDocTienda = new LLNet.Model.General.CgRefCodes();
                Helpers.Merge(CApp.bll.getTypedDataSet(dsDocTienda.GetType(), dsDocTienda.DOMAINS.TableName, qp), dsDocTienda);

                if (dsDocTienda.DOMAINS.Count > 0)
                {
                    // imprimirTicketPreimpresa(documentoPreimpreso, dsDocTienda.DOMAINS[0].RV_MPCC00, Convert.ToInt32(dsDocTienda.DOMAINS[0].RV_MPNC02), Convert.ToInt64(dsDocTienda.DOMAINS[0].RV_MPCC02));
                    imprimirTicketPreimpresa(documentoPreimpreso, dsDocTienda.DOMAINS[0].RV_MPCC00, Convert.ToInt32(dsDocTienda.DOMAINS[0].RV_MPNC02), Convert.ToInt64(dsDocTienda.DOMAINS[0].RV_MPCC02));
                }
            }
        }
        private static void imprimirDocumentoPreimpresaDOS(long documento, string Impresora, string codigoReporte, string formato)
        {
            imprimirDocumentoPreimpresaDOS(documento, Impresora, codigoReporte, formato, "", "");
        }
        private static void imprimirDocumentoPreimpresaDOS(long documento, string Impresora, string codigoReporte, string batName, string formato)
        {
            imprimirDocumentoPreimpresaDOS(documento, Impresora, codigoReporte, formato, batName, "");
        }
        private static void imprimirDocumentoPreimpresaDOS(long documento, string Impresora, string codigoReporte, string formato, string batName, string prefijo)
        {
            //System.Diagnostics.Process.Start("START", "/min notepad /P" + " C:\\" + GUI.CApp.usuario + ".txt");            
            string PreimpresaXvariables = Helpers.ObjToStr(CApp.GetParam("PIXV"));

            if (PreimpresaXvariables == "NO")
            {
                Hashtable ht = new Hashtable();
                QueryParams QueryParams = new QueryParams();
                QueryParams.AddReplaceParam("DOCUMENTO", documento.ToString());
                ht.Add("TDA_V_REP_DOCUMENTOS", QueryParams);
                ht.Add("TDA_V_REP_DET_DOCUMENTOS", QueryParams);

                LLNet.Reports.BaseReports.XRInfo Info;
                Info = Reports.BaseReports.XRBase.SetInfo(codigoReporte);

                RegistryKey key = Registry.CurrentUser;
                key = key.OpenSubKey(@"Software\Logistika\POS Retail 8.0.0\Impresoras\Preimpresos", true);

                string printerFactura = "";

                if (key != null)
                    printerFactura = Helpers.ObjToStr(key.GetValue("Factura", ""));


                if (printerFactura != string.Empty)
                    Info.PrinterName = printerFactura;

                LLNet.Reports.BaseReports.XRBase xrBase = new LLNet.Reports.BaseReports.XRBase(Info.BaseReport, Info.CodeReport);
                xrBase.Parametros = Info;
                xrBase.BllInstance = CApp.bll;
                xrBase.ExePath = CApp.ExeDir;

                xrBase.ExecuteReport(LLNet.Reports.BaseReports.XRExecution.XRPrint, false, ht);

                //xrBase.Report.ExportToText("c:/logistika/factura.txt");
            }
            else
            {
                //Impresion.Impresion imp = new Impresion.Impresion();
                //imp.ImprimirFacturaMedianteVariables();                
                int numImpresiones = 1;
                // int EsCredito = 0;
                QueryParams qp = new QueryParams();
                switch (subTipoDocumentoPreimpreso)
                {
                    case "C":
                        qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'CF");
                        break;
                    case "T":
                        qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'TKT");
                        break;
                    case "E":
                        qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'EX");
                        break;
                    case "L":
                        qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'LI");
                        break;
                    case "S":
                        qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'SI");
                        break;
                    default:
                        qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'RR");
                        break;
                }


                Model.General.CgRefCodes dsDocTienda = new LLNet.Model.General.CgRefCodes();
                Helpers.Merge(CApp.bll.getTypedDataSet(dsDocTienda.GetType(), dsDocTienda.DOMAINS.TableName, qp), dsDocTienda);

                if (dsDocTienda.DOMAINS.Count > 0)
                {

                    imprimirDocumentoDOS(documento, Impresora, Convert.ToInt32(formato), prefijo, batName);
                }
            }
        }

        private static void imprimirTicket(long documento, string impresora, int copias, long formato)
        {
            Impresion.Impresion imp = new Impresion.Impresion();
            imp.Conexion = CApp.bll.ConnectionString;

            Impresion.MensajeImpresion prntMess = new Impresion.MensajeImpresion();
            RegistryKey key = Registry.CurrentUser;

            key = key.OpenSubKey(@"Software\Logistika\POS Retail 8.0.0\Impresoras\Ticket", true);

            string printerFactura = "";

            if (key != null)
                printerFactura = Helpers.ObjToStr(key.GetValue("Factura", ""));

            if (printerFactura != string.Empty)
                prntMess.Impresora = printerFactura;
            else
                prntMess.Impresora = impresora;

            prntMess.TipoFormato = Impresion.TipoFormato.Documentos;
            prntMess.Llave1 = documento;
            prntMess.Copias = copias;
            prntMess.Formato = formato;
            imp.SetMensajeImpresion(prntMess);

            try
            {
                imp.ImprimirDocumento();
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Impresion de Documentos", true);
            }
        }
        private static void imprimirTicketPreimpresa(long documento, string impresora, int copias, long formato)
        {
            Impresion.Impresion imp = new Impresion.Impresion();
            imp.Conexion = CApp.bll.ConnectionString;

            Impresion.MensajeImpresion prntMess = new Impresion.MensajeImpresion();
            RegistryKey key = Registry.CurrentUser;

            key = key.OpenSubKey(@"Software\Logistika\POS Retail 8.0.0\Impresoras\Preimpresos", true);

            string printerFactura = "";

            if (key != null)
                printerFactura = Helpers.ObjToStr(key.GetValue("Factura", ""));

            if (printerFactura != string.Empty)
                prntMess.Impresora = printerFactura;
            else
                prntMess.Impresora = impresora;

            prntMess.TipoFormato = Impresion.TipoFormato.Documentos;
            prntMess.Llave1 = documento;
            prntMess.Copias = copias;
            prntMess.Formato = formato;
            imp.SetMensajeImpresion(prntMess);

            try
            {
                imp.ImprimirDocumento();
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Impresion de Documentos", true);
            }
        }


        /// <summary> Imprime la factura
        /// </summary>
        /// <param name="documento"></param>
        public static void printInvoice(long documento)
        {
            string subtipodocumento = "";
            int Formato = 2;
            int numImpresiones = 1;
            object FormatoTipoImpresion = null;
            // int EsCredito = 0;
            QueryParams qp = new QueryParams();
            switch (Helpers.ObjToStr(subtipodocumento))
            {
                case "C":
                    qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'CF");
                    break;
                case "T":
                    qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'TKT");
                    break;
                case "E":
                    qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'EX");
                    break;
                case "L":
                    qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'LI");
                    break;
                case "S":
                    qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'SI");
                    break;
                default:
                    qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'RR");
                    break;
            }


            Model.General.CgRefCodes dsDocTienda = new LLNet.Model.General.CgRefCodes();
            Helpers.Merge(CApp.bll.getTypedDataSet(dsDocTienda.GetType(), dsDocTienda.DOMAINS.TableName, qp), dsDocTienda);



            RegistryKey key = Registry.CurrentUser; // GUSTAVO MIRANDA
            key = key.OpenSubKey(@"Software\Logistika\POS Retail 8.0.0", true);
            if (key != null)
            {
                if (Convert.ToString(key.GetValue("FormatoImpresion", null)) != "")
                {
                    Formato = Convert.ToInt16(key.GetValue("FormatoImpresion", 2));
                }
            }

            RegistryKey keyImp = Registry.CurrentUser;

            keyImp = keyImp.OpenSubKey(@"Software\Logistika\POS Retail 8.0.0", true);
            if (keyImp != null)
            {
                if (Convert.ToString(keyImp.GetValue("FormatoTipoImpresion", null)) != "")
                {
                    FormatoTipoImpresion = keyImp.GetValue("FormatoTipoImpresion");
                }
            }
            if (Formato != 1)
            {
                if (Formato != 0)
                {
                    Formato = Convert.ToInt16(dsDocTienda.DOMAINS[0]["RV_MPNC03"]);
                }
            }

            // POR ALGUNA RAZON EL CODIGO NO SE EJECUTA BIEN POR ESO DE DEJAN LOS 2 IF ANIDADOS ARRIBA
            //  if (Formato != 0 || Formato != 1)
            //  {
            //     Formato = Convert.ToInt16(dsDocTienda.DOMAINS[0]["RV_MPNC03"]);
            // }

            if (dsDocTienda.DOMAINS.Count > 0)
            {
                // GUSTAVO MIRANDA  switch (Convert.ToInt16(dsDocTienda.DOMAINS[0].RV_MPNC03))
                numImpresiones = EsDeCredito(documento);

                switch (Formato)
                {
                    case 1:
                        for (int i = 0; i < numImpresiones; i++)
                        {
                            imprimirFacturaPreimpresa(documento, dsDocTienda.DOMAINS[0].RV_MPCC03);
                            ActualizaImpresiones(documento);
                        }

                        break;
                    case 3:
                        RegistryKey Printer = Registry.CurrentUser;
                        Printer = Printer.OpenSubKey(@"Software\Logistika\POS Retail 8.0.0\Impresoras\Preimpresos", true);

                        string printerFactura = "";

                        if (Printer != null)
                            printerFactura = Helpers.ObjToStr(Printer.GetValue("Factura", ""));
                        if (printerFactura == "")
                            printerFactura = dsDocTienda.DOMAINS[0].RV_MPCC00;
                        for (int i = 0; i < numImpresiones; i++)
                        {
                            imprimirDocumentoPreimpresaDOS(documento, printerFactura, dsDocTienda.DOMAINS[0].RV_MPCC03, Helpers.Nvl(FormatoTipoImpresion, dsDocTienda.DOMAINS[0].RV_MPCC02).ToString());
                            if (numImpresiones > 1)
                            {
                                Thread.Sleep(4000);  // SE DEJA ESTE TIEMPO PARA QUE NO SE LEA EL TXT ADECUADO
                            }
                            ActualizaImpresiones(documento);

                        }

                        break;

                    default:
                        for (int i = 0; i < numImpresiones; i++)
                        {
                            imprimirTicket(documento, dsDocTienda.DOMAINS[0].RV_MPCC00, Convert.ToInt32(dsDocTienda.DOMAINS[0].RV_MPNC02), Convert.ToInt64(dsDocTienda.DOMAINS[0].RV_MPCC02));
                        }
                        break;

                }
            }
        }

        private static void ActualizaImpresiones(long pDocumento)
        {
            QueryParams qp = new QueryParams();
            qp.AddReplaceParam("DOCUMENTO", Convert.ToString(pDocumento));
            CApp.bll.ExecuteSql("ActImpresiones", qp, "PDV");
        }

        #endregion

        #region Registra la transacción en la BD

        private void RegistroBD(com.aloprepago.www.TransaccionOutput Resp, string total, string telef, string oper, string prov)
        {
            if (Resp.RecargaEstado != "2")
            {
                GUI.CApp.ShowMessage("No se registro ninguna transacción", "ERROR", true);
                BitacoraIntentosE(id, "No se registro ninguna transacción Resp.RecargaEstado = " + Resp.RecargaEstado + " Resp.ErrorCodigo " + Resp.ErrorCodigo);
            }
            else
            {
                long varDocumento = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("SEC_DOCUMENTO", "PDV"));

                //Parámetros:pDocumento number, pCaja number, pUsuario varchar2, pTotal number, pJornada number, pComision number, pIdTRans varchar2, pTelefono varchar2
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("pDocumento", varDocumento.ToString());
                qp.AddReplaceParam("pCaja", Program.Caja.ToString());
                qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);
                qp.AddReplaceParam("pTotal", total);
                qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
                if (Resp.Comision == "")
                {
                    qp.AddReplaceParam("pComision", "0");
                }
                else
                {
                    qp.AddReplaceParam("pComision", Resp.Comision.Replace(',', '.'));
                }
                if (Resp.TransProveedor == "")
                {
                    qp.AddReplaceParam("pIdTRans", "BLANCO");
                }
                else
                {
                    qp.AddReplaceParam("pIdTRans", Resp.TransProveedor);
                }
                qp.AddReplaceParam("pTelefono", telef);
                qp.AddReplaceParam("pProveedor", prov);
                qp.AddReplaceParam("pOperador", oper);
                // Llama el procedimiento que almacena los datos de la recarga en la BD
                GUI.CApp.bll.ExecuteSql("WMS_P_RECARGA_CELULAR", qp, "PDV");

                switch (oper)
                {
                    case "01":
                        CargarReporte2(varDocumento.ToString());
                        break;
                    case "02":
                        CargarReporte2(varDocumento.ToString());
                        break;
                    case "03":
                        CargarReporte2(varDocumento.ToString());
                        break;
                }

                //AQUI
                Int32 cantidadImpreciones = Convert.ToInt32(LLNet.Tienda.MainForms.Forms.BacTasa0.Logica.GET_CG_PARAMETERS_VALUE("BNCI"));
                Int32 tiempoEntreImpresiones = Convert.ToInt32(LLNet.Tienda.MainForms.Forms.BacTasa0.Logica.GET_CG_PARAMETERS_VALUE("BNCT"));

                for (int i = 0; i < cantidadImpreciones; i++)
                {
                    System.Threading.Thread.Sleep(tiempoEntreImpresiones);
                    switch (oper)
                    {
                        case "01":
                            CargarReporte2(varDocumento.ToString());
                            break;
                        case "02":
                            CargarReporte2(varDocumento.ToString());
                            break;
                        case "03":
                            CargarReporte2(varDocumento.ToString());
                            break;
                    }
                }
            }
        }

        /// <summary>Almacena en la Base de Datos el registro de la Transacción realizada </summary>
        /// <param name="Resp">Respuesta Obtenida por el Web Service del método Vendertiempoaire</param>
        /// <param name="total">Monto total de la recarga</param>
        /// <param name="telef">Número de Teléfono a recargar</param>
        /// <param name="oper">Número de operador del servicio</param>
        /// <param name="prov">Número de proveedor del servicio</param>
        private void RegistroBD(Conectividad.Respuestavendertiempoaire Resp, string total, string telef, string oper, string prov)
        {
            if (Resp.idtrans == null)
            {
                GUI.CApp.ShowMessage("No se registro ninguna transacción", "ERROR", true);
                BitacoraIntentosE(id, "No se registro ninguna transacción Resp.RecargaEstado = " + Resp.idtrans);
            }
            else
            {
                long varDocumento = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("SEC_DOCUMENTO", "PDV"));

                //Parámetros:pDocumento number, pCaja number, pUsuario varchar2, pTotal number, pJornada number, pComision number, pIdTRans varchar2, pTelefono varchar2
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("pDocumento", varDocumento.ToString());
                qp.AddReplaceParam("pCaja", Program.Caja.ToString());
                qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);
                qp.AddReplaceParam("pTotal", total);
                qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
                qp.AddReplaceParam("pComision", Resp.comision.Replace(',', '.'));
                qp.AddReplaceParam("pIdTRans", Resp.idtrans);
                qp.AddReplaceParam("pTelefono", telef);
                qp.AddReplaceParam("pProveedor", prov);
                qp.AddReplaceParam("pOperador", oper);
                // Llama el procedimiento que almacena los datos de la recarga en la BD
                GUI.CApp.bll.ExecuteSql("WMS_P_RECARGA_CELULAR", qp, "PDV");

                CargarReporte2(varDocumento.ToString());
            }
        }

        /// <summary>Almacena en la Base de Datos el registro de la Transacción realizada </summary>
        /// <param name="Resp">Respuesta Obtenida por el Web Service del método Vendertiempoairefmovil</param>
        /// <param name="total">Monto total de la recarga</param>
        /// <param name="telef">Número de Teléfono a recargar</param>
        /// <param name="oper">Número de operador del servicio</param>
        /// <param name="prov">Número de proveedor del servicio</param>
        private void RegistroBD(Conectividad.Respuestavendertiempoairefmovil Resp, string total, string telef, string oper, string prov)
        {
            if (Resp.idtrans == null)
            {
                GUI.CApp.ShowMessage("No se registro ninguna transacción", "ERROR", true);
            }
            else
            {
                long varDocumento = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("SEC_DOCUMENTO", "PDV"));

                //Parámetros:pDocumento number, pCaja number, pUsuario varchar2, pTotal number, pJornada number, pComision number, pIdTRans varchar2, pTelefono varchar2
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("pDocumento", varDocumento.ToString());
                qp.AddReplaceParam("pCaja", Program.Caja.ToString());
                qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);
                qp.AddReplaceParam("pTotal", total);
                qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
                qp.AddReplaceParam("pComision", Resp.comision.Replace(',', '.'));
                qp.AddReplaceParam("pIdTRans", Resp.idtrans);
                qp.AddReplaceParam("pTelefono", telef);
                qp.AddReplaceParam("pProveedor", prov);
                qp.AddReplaceParam("pOperador", oper);
                // Llama el procedimiento que almacena los datos de la recarga en la BD
                GUI.CApp.bll.ExecuteSql("WMS_P_RECARGA_CELULAR", qp, "PDV");

                CargarReporte2(varDocumento.ToString());
            }
        }

        /// <summary>Almacena en la Base de Datos el registro de la Transacción realizada </summary>
        /// <param name="Resp">Respuesta Obtenida por el Servicio TCP de la Transacción Recargar Tiempo Aire</param>
        /// <param name="total">Monto total de la recarga</param>
        /// <param name="telef">Número de Teléfono a recargar</param>
        /// <param name="oper">Número de operador del servicio</param>
        /// <param name="prov">Número de proveedor del servicio</param>
        private void RegistroBDPN(ISOMsg Resp, string total, string telef, string oper, string prov, DateTime fecha)
        {
            long varDocumento = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("SEC_DOCUMENTO", "PDV"));
            string comis = Resp.getString(60); //Identificador,Ganancia 
            string[] C60 = comis.Split(',');  //Ganancia  
            float gan = float.Parse(C60[1]) / 100; //100 colones se representan con 10000 por eso se divide entre 100

            //Parámetros:pDocumento number, pCaja number, pUsuario varchar2, pTotal number, pJornada number, pComision number, pIdTRans varchar2, pTelefono varchar2
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pDocumento", varDocumento.ToString());
            qp.AddReplaceParam("pCaja", Program.Caja.ToString());
            qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);
            qp.AddReplaceParam("pTotal", total);
            qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
            qp.AddReplaceParam("pComision", gan.ToString().Replace(',', '.')); //string comis = Resp.comision.Replace(',','.');
            qp.AddReplaceParam("pIdTRans", Resp.getString(37));
            qp.AddReplaceParam("pTelefono", telef);
            qp.AddReplaceParam("pProveedor", prov);
            qp.AddReplaceParam("pOperador", oper);
            qp.AddReplaceParam("pFecha", fecha.ToString());
            // Llama el procedimiento que almacena los datos de la recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_RECARGA_CELULAR2", qp, "PDV");

            switch (oper)
            {
                case "01":
                    CargarReporte2(varDocumento.ToString());
                    break;
                case "02":
                    CargarReporte2(varDocumento.ToString());
                    break;
                case "03":
                    CargarReporte2(varDocumento.ToString());
                    break;
            }
        }

        /// <summary>Almacena en la Base de Datos el registro de la transaccion enviada a Puntos Naranja y que no se obtuvo respuesta (posiblemente TimeOut) </summary>
        /// <param name="Req"></param>
        /// <param name="total"></param>
        /// <param name="telef"></param>
        /// <param name="oper"></param>
        /// <param name="prov"></param>
        /// <param name="operi"></param>
        /// <param name="prod"></param>
        private void RegistroConcilPN(ISOMsg Req, string total, string telef, string oper, string prov, string operi, string prod)
        {
            //Parámetros:pOperadori varchar2,pProveedor varchar2, pOperador varchar2, pProducto varchar2, pRef_Externa varchar2, pTotal number, pFecha Date, pTiempoResp varchar2, pInf_Partic varchar2
            //Parámetros: pFecha Date, pTiempoResp varchar2, pInf_Partic varchar2
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pOperadori", operi);
            qp.AddReplaceParam("pProveedor", prov);
            qp.AddReplaceParam("pOperador", oper);
            qp.AddReplaceParam("pProducto", prod);
            qp.AddReplaceParam("pRef_Externa", Req.getString(37));
            qp.AddReplaceParam("pTotal", total);
            qp.AddReplaceParam("pFecha", Req.getString(13) + Req.getString(12));
            qp.AddReplaceParam("pTiempoResp", "30001");
            qp.AddReplaceParam("pInf_Partic", telef);
            // Llama el procedimiento que almacena los datos del timeOut en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_TELEF_CONCILIACION", qp, "PDV");
        }

        /// <summary>Almacena en la Base de datos el registro de la transaccion realizada </summary>
        /// <param name="Resp"></param>
        /// <param name="total"></param>
        /// <param name="telef"></param>
        /// <param name="oper"></param>
        /// <param name="prov"></param>
        private void RegistroBDQCarga(ConectQcarg.RespuestaVentaTiempoAire Resp, string total, string telef, string oper, string prov)
        {
            if (Resp.idTrans == null)
            {
                GUI.CApp.ShowMessage("No se registro ninguna transacción", "ERROR", true);
                BitacoraIntentosE(id, "No se registro ninguna transacción Resp.idTrans == null");
            }
            else
            {
                long varDocumento = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("SEC_DOCUMENTO", "PDV"));
                string comis = Resp.comision.Replace(',', '.');

                //Parámetros:pDocumento number, pCaja number, pUsuario varchar2, pTotal number, pJornada number, pComision number, pIdTRans varchar2, pTelefono varchar2
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("pDocumento", varDocumento.ToString());
                qp.AddReplaceParam("pCaja", Program.Caja.ToString());
                qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);
                qp.AddReplaceParam("pTotal", total);
                qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
                qp.AddReplaceParam("pComision", comis.Replace(',', '.'));
                qp.AddReplaceParam("pIdTRans", Resp.idTrans);
                qp.AddReplaceParam("pTelefono", telef);
                qp.AddReplaceParam("pProveedor", prov);
                qp.AddReplaceParam("pOperador", oper);
                // Llama el procedimiento que almacena los datos de la recarga en la BD
                GUI.CApp.bll.ExecuteSql("WMS_P_RECARGA_CELULAR", qp, "PDV");

                //IMPRIME LA FACTURA
                switch (oper)
                {
                    case "01":
                        CargarReporte2(varDocumento.ToString());
                        break;
                    case "02":
                        CargarReporte2(varDocumento.ToString());
                        break;
                    case "04":
                        CargarReporte2(varDocumento.ToString());
                        break;
                    case "05":
                        CargarReporte2(varDocumento.ToString());
                        break;
                }

                //AQUI
                Int32 cantidadImpreciones = Convert.ToInt32(LLNet.Tienda.MainForms.Forms.BacTasa0.Logica.GET_CG_PARAMETERS_VALUE("BNCI"));
                Int32 tiempoEntreImpresiones = Convert.ToInt32(LLNet.Tienda.MainForms.Forms.BacTasa0.Logica.GET_CG_PARAMETERS_VALUE("BNCT"));

                for (int i = 0; i < cantidadImpreciones; i++)
                {
                    System.Threading.Thread.Sleep(tiempoEntreImpresiones);
                    switch (oper)
                    {
                        case "01":
                            CargarReporte2(varDocumento.ToString());
                            break;
                        case "02":
                            CargarReporte2(varDocumento.ToString());
                            break;
                        case "04":
                            CargarReporte2(varDocumento.ToString());
                            break;
                        case "05":
                            CargarReporte2(varDocumento.ToString());
                            break;
                    }
                }

            }
        }

        private void RegistroBDPagool(WSPAGOOL.VentaTiempoAire Resp, string total, string telef, string oper, string prov)
        {
            if (Resp.idTrans == null)
            {
                GUI.CApp.ShowMessage("No se registro ninguna transacción", "ERROR", true);
            }
            else
            {
                long varDocumento = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("SEC_DOCUMENTO", "PDV"));
                string comis = Resp.comision.Replace(',', '.');


                //Parámetros:pDocumento number, pCaja number, pUsuario varchar2, pTotal number, pJornada number, pComision number, pIdTRans varchar2, pTelefono varchar2
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("pDocumento", varDocumento.ToString());
                qp.AddReplaceParam("pCaja", Program.Caja.ToString());
                qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);
                qp.AddReplaceParam("pTotal", total);
                qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
                qp.AddReplaceParam("pComision", comis.Replace(',', '.'));
                qp.AddReplaceParam("pIdTRans", Resp.idTrans);
                qp.AddReplaceParam("pTelefono", telef);
                qp.AddReplaceParam("pProveedor", prov);
                qp.AddReplaceParam("pOperador", oper);
                // Llama el procedimiento que almacena los datos de la recarga en la BD
                GUI.CApp.bll.ExecuteSql("WMS_P_RECARGA_CELULAR", qp, "PDV");

                switch (oper)
                {
                    case "01":
                        CargarReporte2(varDocumento.ToString());
                        break;
                }
            }
        }

        private void RegistroBDPrides(APSSellerWS.PayTransactionResponse Resp, string total, string telef, string oper, string prov)
        {
            if (Resp.ResultCode != 0)
            {
                GUI.CApp.ShowMessage("No se registro ninguna transacción " + Resp.ResultCode, "ERROR", true);
                string errorbd = "No se registro ninguna transacción Resp.ResultCode = " + Resp.ResultCode + " Resp.Description = " + Resp.Description;
                if (errorbd.Length > 249)
                {//trunca la respuesta para que pueda almacenarse en la BD
                    errorbd = errorbd.Substring(0, 249);
                }
                BitacoraIntentosE(id, errorbd); //almacena el error
            }
            else
            {
                long varDocumento = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("SEC_DOCUMENTO", "PDV"));

                //Parámetros:pDocumento number, pCaja number, pUsuario varchar2, pTotal number, pJornada number, pComision number, pIdTRans varchar2, pTelefono varchar2
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("pDocumento", varDocumento.ToString());
                qp.AddReplaceParam("pCaja", Program.Caja.ToString());
                qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);
                qp.AddReplaceParam("pTotal", total);
                qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
                qp.AddReplaceParam("pComision", "0"); // No muestra la comisión
                if (Resp.Comission == null)
                {
                    qp.AddReplaceParam("pComision", "0");
                }
                else
                {
                    qp.AddReplaceParam("pComision", Resp.Comission.ToString().Replace(',', '.'));
                }
                if (Resp.TransactionId == 0)
                {
                    qp.AddReplaceParam("pIdTRans", "BLANCO");
                }
                else
                {
                    qp.AddReplaceParam("pIdTRans", Resp.TransactionId.ToString());
                }
                qp.AddReplaceParam("pTelefono", telef);
                qp.AddReplaceParam("pProveedor", prov);
                qp.AddReplaceParam("pOperador", oper);
                // Llama el procedimiento que almacena los datos de la recarga en la BD
                GUI.CApp.bll.ExecuteSql("WMS_P_RECARGA_CELULAR", qp, "PDV");

                //CargarReporte2(varDocumento.ToString());
                //AQUI
                Int32 cantidadImpreciones = Convert.ToInt32(LLNet.Tienda.MainForms.Forms.BacTasa0.Logica.GET_CG_PARAMETERS_VALUE("BNCI"));
                Int32 tiempoEntreImpresiones = Convert.ToInt32(LLNet.Tienda.MainForms.Forms.BacTasa0.Logica.GET_CG_PARAMETERS_VALUE("BNCT"));
                //IMPRIME LA FACTURA
                CargarReporte2(varDocumento.ToString());
                for (int i = 0; i < cantidadImpreciones; i++)
                {
                    System.Threading.Thread.Sleep(tiempoEntreImpresiones);
                    CargarReporte2(varDocumento.ToString());
                }
            }
        }


        #endregion

        /// <summary>Verifica la venta de recargas automáticas conocidas como Tiempo Aire vía Web Service 
        /// </summary>
        /// <param name="varCodPrepago"></param>
        /// <param name="varUsuario"></param>
        /// <param name="varSucursal"></param>
        /// <param name="varCompania"></param>
        /// <param name="varIdTrans"></param>
        private void VerifRecarga(string varCodPrepago, string varUsuario, string varSucursal,
                              string varCompania, string varIdTrans)
        {
            try
            {
                bool varConexion;
                varConexion = HayConexion();

                if (varConexion == false)
                {
                    GUI.CApp.ShowMessage("No hay Conexion con el Servidor de Alo Prepago en este Momento", "ERROR", true);
                }
                else
                {
                    Conectividad.Respuestaverificatiempoaire RespVerTiempoAire = new Conectividad.Respuestaverificatiempoaire();
                    Conectividad.consultasocket TiempoAire = new Conectividad.consultasocket();
                    //Verifica la venta de recarga
                    RespVerTiempoAire = TiempoAire.Verificatiempoaire(varCodPrepago, varUsuario, varSucursal, varCompania, varIdTrans);
                    GUI.CApp.ShowMessage(RespVerTiempoAire.detallerecarga + " " + RespVerTiempoAire.estadorecarga, "VERIFICAR RECARGA", true);
                }
            }
            catch (SoapException err)
            {
                GUI.CApp.ShowMessage(Convert.ToString(err.Detail.FirstChild.Value), "ERROR", true);
            }
            catch (Exception er)
            {
                GUI.CApp.ShowMessage(er.Message, "ERROR", true);
            }
        }

        private void VerifRecargaPN(string varCodPrepago, string varUsuario, string varSucursal,
                              string varCompania, string varIdTrans)
        {
            try
            {
                bool varConexion;
                varConexion = HayConexionPN();

                if (varConexion == false)
                {
                    GUI.CApp.ShowMessage("No hay Conexion con el Servidor de Puntos Naranja en este Momento", "ERROR", true);
                }
                else
                {
                    //Realiza la venta de tiempo al aire o recarga
                    if (varCompania == "ICE")
                    {//KOLBI ICE
                        ///Canal XML indicando el host, puerto y timeout
                        CanalTCP channel = new CanalTCP(host, port, timeout);
                        ///objeto ISOMsg que almacena el requerimiento
                        ISOMsg m = new ISOMsg();
                        //objeto ISOMsg que almacena la respuesta
                        ISOMsg r = new ISOMsg();

                        m.setString(0, "0100"); //->tipo de mensaje
                        m.setString(3, "200400"); //->codigo del proceso                        
                        //m.setString(11, Formato(NumSec, 6)); //->Numero de secuencia, debe incrementar en 1
                        m.setString(11, "000001");
                        m.setString(41, terminalId);//->Identificador de Terminal
                        m.setString(60, "200"); //-> Codigo del Operador  
                        m.setString(61, RefExt);//->Referencia Externa

                        r = channel.Send(m);
                        if (r != null)
                        {
                            //Obtener valores individuales
                            if (r.getString(39) == "00")//Transacción realizada con éxito
                            {
                                //INVOCA AL EVENTO IMPRIMIR PARA ABRIR EL CAJON DEL DINERO
                                // printInvoice(0, "F");
                                // RegistroBDPN(r, varMontoRecarga, varNumPhone, "01", "02");
                            }
                            else
                            {
                                GUI.CApp.ShowMessage("No fue posible realizar la transacción", "ERROR", true);
                            }
                        }

                    }
                    else
                    {//TUYO MOVIL
                        ///Canal XML indicando el host, puerto y timeout
                        CanalTCP channel = new CanalTCP(host, port, timeout);
                        ///objeto ISOMsg que almacena el requerimiento
                        ISOMsg m = new ISOMsg();
                        //objeto ISOMsg que almacena la respuesta
                        ISOMsg r = new ISOMsg();

                        m.setString(0, "0100"); //->tipo de mensaje
                        m.setString(3, "200400"); //->codigo del proceso                        
                        m.setString(11, Formato(NumSec, 6)); //->Numero de secuencia, debe incrementar en 1
                        m.setString(41, terminalId);//->Identificador de Terminal
                        m.setString(60, "200"); //-> Codigo del Operador  
                        m.setString(61, RefExt);//->Referencia Externa


                        r = channel.Send(m);
                        if (r != null)
                        {
                            //Obtener valores individuales
                            if (r.getString(39) == "00")//Transacción realizada con éxito
                            {
                                //INVOCA AL EVENTO IMPRIMIR PARA ABRIR EL CAJON DEL DINERO
                                //printInvoice(0, "F");
                                //RegistroBDPN(r, varMontoRecarga, varNumPhone, "03", "02");
                            }
                            else
                            {
                                GUI.CApp.ShowMessage("No fue posible realizar la transacción", "ERROR", true);
                            }
                        }
                    }
                }
            }
            catch (Exception er)
            {
                GUI.CApp.ShowMessage(er.Message, "ERROR", true);
            }
        }

        /// <summary>Obtiene los parámetros necesarios de cada tienda </summary>
        private void LlenarParametros()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);// pUsuario
            //CONSULTA LOS PARÁMETROS DE LA BD
            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "C_PCD", qp);

            object[] datos = new object[35];
            datos = dsB.Tables[0].Rows[0].ItemArray;

            varCanton = datos[1].ToString();
            varProvincia = datos[0].ToString();
            varDistrito = datos[2].ToString();
            varCod = datos[3].ToString();
            terminalId = datos[4].ToString();
            user = datos[5].ToString();
            password = datos[6].ToString();
            CodTienda = datos[7].ToString();
            CodTercero = datos[8].ToString();
            varCodQ = datos[9].ToString();
            varRangoQ = datos[10].ToString();
            varMinMov = datos[11].ToString();
            VarMaxMov = datos[12].ToString();
            varMinICE = datos[13].ToString();
            varMaxICE = datos[14].ToString();
            varMinFM = datos[15].ToString();
            varMaxFM = datos[16].ToString();
            varUsrSist = datos[17].ToString();
            varAloUsr = datos[18].ToString();
            varAloEnt = datos[19].ToString();
            varAloClav = datos[20].ToString();
            varCodP = datos[21].ToString();
            varCBanco = datos[22].ToString();
            varCAgencia = datos[23].ToString();
            varCCanal = datos[24].ToString();
            varAloSucr = datos[25].ToString();
            varHMasUsr = datos[26].ToString();
            varHMasPwd = datos[27].ToString();
            varHMasMin = datos[28].ToString();
            varHMasDolarVenta = datos[29].ToString();
            varHMasDolarCompra = datos[30].ToString();
            varPridesUsr = datos[31].ToString();
            varPSemilla = datos[32].ToString();
            varPcompanyID = datos[33].ToString();
            varHMasSuc = datos[34].ToString();
        }

        /// <summary>Obtiene las secuencias para la transacción</summary>
        private void LlenarSecuencias()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            //CONSULTA LAS SECUENCIAS DE LA BD
            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "SEC_PN", qp);

            object[] datos = new object[2];
            datos = dsB.Tables[0].Rows[0].ItemArray;

            NumSec = datos[0].ToString();
            RefExt = datos[1].ToString();
        }

        /// <summary>Obtiene los operadores </summary>
        private void LlenarCombBox()
        {
            iCBoxServ.Properties.Items.Clear();
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            //CONSULTA Los operadores DE LA BD
            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "OPER_TEL", qp);
            foreach (DataRow Fila in dsB.Tables[0].Rows)
            {
                DevExpress.XtraEditors.Controls.ComboBoxItem item;
                switch (Convert.ToString(Fila[1]))
                {
                    case "01": //"ICE-KOLBIMOVIL";
                        item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "01", 3);
                        iCBoxServ.Properties.Items.Add(item);
                        break;
                    case "02":// "FULLMOVIL";
                        item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "02", 4);
                        iCBoxServ.Properties.Items.Add(item);
                        break;
                    case "03"://"TUYOMOVIL";
                        item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "03", 2);
                        iCBoxServ.Properties.Items.Add(item);
                        break;
                    case "04"://"CLARO";
                        item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "04", 5);
                        iCBoxServ.Properties.Items.Add(item);
                        break;
                    case "05"://"MOVISTAR";
                        item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "05", 6);
                        iCBoxServ.Properties.Items.Add(item);
                        break;
                }
            }
            dsP = GUI.CApp.bll.getDataSet("PDV", "PROV_OPER_TEL", qp);

        }

        private void ReporteJornada()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
            qp.AddReplaceParam("pCaja", Program.Caja.ToString());

            //  DataSet ds = GUI.CApp.bll.getDataSet("PDV", "GetOfferNx1", qp);

            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "C_REPORTE_RECIBOS", qp);
            //dsB.Tables[0].Columns[0].DataType = System.Type.GetType("System.String");

            GridCRepJorn.DataSource = dsB.Tables[0];
            gridView1.Columns[6].Visible = false;
            gridView1.Columns[7].Visible = false;
            GridCRepJorn.Refresh();
        }

        /// <summary>Arqueo de la Jornada Actual </summary>
        private void ArqJornada()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
            qp.AddReplaceParam("pCaja", Program.Caja.ToString());

            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "C_REPORTE_RECIBOS_ARQ", qp);
            LLNet.Tienda.Reportes.CR_ArqRecarga2 objRpt = new LLNet.Tienda.Reportes.CR_ArqRecarga2();
            LLNet.Tienda.Reportes.dsArqRecarga2 dsdatos = new LLNet.Tienda.Reportes.dsArqRecarga2();

            objRpt.Load("C\\ekono\\POS Retail 8.0.0\\CR_ArqRecarga2.rpt");

            long total = 0; //monto total de la suma de los montos de cada recibo

            foreach (DataRow Fila in dsB.Tables[0].Rows)
            {
                object[] datos = new object[6];

                datos[0] = Convert.ToString(Fila[0]); //FECHA
                datos[1] = Convert.ToString(Fila[1]); //NUMERO 
                datos[2] = Convert.ToString(Fila[2]); //RECIBO
                datos[3] = Convert.ToDouble(Fila[3]); //MONTO          
                datos[4] = Convert.ToString(Fila[4]); //OPERADOR          
                datos[5] = Convert.ToString(Fila[5]); //PROVEEDOR          
                total += Convert.ToInt64(Fila[2]);
                dsdatos.Tables[0].Rows.Add(datos);
            }

            string[] totales = new string[5];
            totales[0] = Program.Jornada.ToString(); //JORNADA
            totales[1] = Program.Caja.ToString(); //CAJA
            totales[2] = total.ToString(); //MONTO TOTAL
            totales[3] = string.Empty; //SUB TOTAL ALO PREPAGO
            totales[4] = string.Empty; //SUB TOTAL PUNTOS NARANJA                

            dsdatos.Tables[1].Rows.Add(totales);

            objRpt.SetDataSource((DataSet)dsdatos);

            crystalReportViewer1.ReportSource = objRpt;
            crystalReportViewer1.Refresh();

            GridCRepJorn.Refresh();
        }

        #endregion

        private void btnTelefonia_Click(object sender, EventArgs e)
        {
            pnlTelefonia.Visible = true;
            pnlAgua.Visible = false;

            this.sbtnImprimir.Visible = false;//IGF

            sbtnPagar.Visible = false;
            btnRecargar.Visible = true;
            btnRecargar.Enabled = true;
            sBtnRecNic.Visible = false;
            sBtnRecNic.Enabled = false;
            pnArea.Visible = true;
            pnCReportes.Visible = false;
            pnlClaroNic.Visible = false;
            pnlWesternUnion.Visible = false;
        }

        private void btnReportes_Click(object sender, EventArgs e)
        {
            this.sbtnImprimir.Visible = true;//IGF

            btnRecargar.Enabled = false;
            pnCReportes.Visible = true;
            pnArea.Visible = false;
            ReporteJornada();
        }

        private void simpleButton1_Click(object sender, EventArgs e)
        {
            pnArea.Visible = true;
            foreach (int handle in gridView1.GetSelectedRows())
            {
                // CargarReporte2(Convert.ToString(gridView1.GetRowCellValue(handle, gridView1.Columns[5])), 1);
            }
        }

        private void btnArqRecarga_Click(object sender, EventArgs e)
        {
            btnRecargar.Enabled = false;
            GridCRepJorn.DataSource = null;
            GridCRepJorn.Refresh();
            pnCReportes.Visible = true;
            pnArea.Visible = false;
            ArqJornada();
        }

        private void iCBoxProveedor_SelectedIndexChanged(object sender, EventArgs e)
        {
            //iCBoxServ.Properties.Items.Clear();
            //if (iCBoxProveedor.SelectedIndex == 0) //Aló Prepago
            //{
            //    iCBoxServ.Properties.Items.AddRange(new DevExpress.XtraEditors.Controls.ImageComboBoxItem[] {
            //        new DevExpress.XtraEditors.Controls.ImageComboBoxItem("FULL MOVIL", 2, 4),
            //        new DevExpress.XtraEditors.Controls.ImageComboBoxItem("KOLBI ICE", 1, 3)});
            //}
            //else
            //{
            //    if (iCBoxProveedor.SelectedIndex == 1) //Q'Carga
            //    {
            //         iCBoxServ.Properties.Items.AddRange(new DevExpress.XtraEditors.Controls.ImageComboBoxItem[] {
            //             new DevExpress.XtraEditors.Controls.ImageComboBoxItem("CLARO",4, 5),
            //             new DevExpress.XtraEditors.Controls.ImageComboBoxItem("MOVISTAR", 5, 6),
            //             new DevExpress.XtraEditors.Controls.ImageComboBoxItem("KOLBI ICE", 1, 3),
            //             new DevExpress.XtraEditors.Controls.ImageComboBoxItem("FULL MOVIL", 2, 4)});
            //    }
            //    else
            //    {
            //        if (iCBoxProveedor.SelectedIndex == 2) //Puntos Naranja
            //        {

            //            iCBoxServ.Properties.Items.AddRange(new DevExpress.XtraEditors.Controls.ImageComboBoxItem[] {
            //                new DevExpress.XtraEditors.Controls.ImageComboBoxItem("KOLBI ICE", 1, 3),
            //                new DevExpress.XtraEditors.Controls.ImageComboBoxItem("TUYO", 3, 2)});
            //        }
            //    }
            //}
            //if(iCBoxServ.Properties.Items.Count > 0)
            //iCBoxServ.SelectedIndex = 0;            
        }

        private void iCBoxServ_SelectedIndexChanged(object sender, EventArgs e)
        {
            iCBoxProveedor.Properties.Items.Clear();
            //determina cual operador está seleccionado
            switch (iCBoxServ.Properties.Items[iCBoxServ.SelectedIndex].Value.ToString())
            {
                case "01": //"ICE-KOLBIMOVIL";
                    foreach (DataRow Fila in dsP.Tables[0].Rows)
                    {
                        //si es un proveedor de ICE
                        if (Fila[3].ToString() == "PROV_ICE")
                        {
                            DevExpress.XtraEditors.Controls.ComboBoxItem item;
                            switch (Convert.ToString(Fila[1]))
                            {
                                case "01": //"Aló Prepago";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "01", 1);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                                case "02"://"Puntos Naranja";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "02", 0);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                                case "03"://"QCarga";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "03", 7);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                                case "04"://"TeleDolar";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "04", 8);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                                case "05"://"Prides";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "05", 3);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                            }
                        }
                    }
                    break;
                case "02":// "FULLMOVIL";
                    foreach (DataRow Fila in dsP.Tables[0].Rows)
                    {
                        //si es un proveedor de Full Movil
                        if (Fila[3].ToString() == "PROV_FULL")
                        {
                            DevExpress.XtraEditors.Controls.ComboBoxItem item;
                            switch (Convert.ToString(Fila[1]))
                            {
                                case "01": //"Aló Prepago";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "01", 1);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                                case "02"://"Puntos Naranja";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "02", 0);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                                case "03"://"QCarga";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "03", 7);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                            }
                        }
                    }
                    break;
                case "03"://"TUYOMOVIL";
                    foreach (DataRow Fila in dsP.Tables[0].Rows)
                    {
                        //si es un proveedor de TuyoMovil
                        if (Fila[3].ToString() == "PROV_TUYO")
                        {
                            DevExpress.XtraEditors.Controls.ComboBoxItem item;
                            switch (Convert.ToString(Fila[1]))
                            {
                                case "01": //"Aló Prepago";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "01", 1);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                                case "02"://"Puntos Naranja";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "02", 0);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                                case "03"://"QCarga";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "03", 7);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                            }
                        }
                    }
                    break;
                case "04"://"CLARO";
                    foreach (DataRow Fila in dsP.Tables[0].Rows)
                    {
                        //si es un proveedor de CLARO
                        if (Fila[3].ToString() == "PROV_CLARO")
                        {
                            DevExpress.XtraEditors.Controls.ComboBoxItem item;
                            switch (Convert.ToString(Fila[1]))
                            {
                                case "01": //"Aló Prepago";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "01", 1);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                                case "02"://"Puntos Naranja";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "02", 0);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                                case "03"://"QCarga";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "03", 7);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                            }
                        }
                    }
                    break;
                case "05"://"MOVISTAR";
                    foreach (DataRow Fila in dsP.Tables[0].Rows)
                    {
                        //si es un proveedor de MOVISTAR
                        if (Fila[3].ToString() == "PROV_MOVISTAR")
                        {
                            DevExpress.XtraEditors.Controls.ComboBoxItem item;
                            switch (Convert.ToString(Fila[1]))
                            {
                                case "01": //"Aló Prepago";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "01", 1);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                                case "02"://"Puntos Naranja";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "02", 0);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                                case "03"://"QCarga";
                                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Convert.ToString(Fila[0]), "03", 7);
                                    iCBoxProveedor.Properties.Items.Add(item);
                                    break;
                            }
                        }
                    }
                    break;
            }
            if (iCBoxProveedor.Properties.Items.Count > 0)
                iCBoxProveedor.SelectedIndex = 0;
        }

        //IGF
        #region sbtnImprimir_Click
        private void sbtnImprimir_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("Reimprimir", "Reimpresion"))
            {
                if (pnlWesternUnion.Visible == true)
                {
                    foreach (int handle in gridView9.GetSelectedRows())
                    {
                        //documento de la transaccion 
                        string Docum = Convert.ToString(gridView9.GetRowCellValue(handle, gridView9.Columns[0]));
                        long doc = long.Parse(Docum);
                        //tipo de la transaccion 
                        string tipo = Convert.ToString(gridView9.GetRowCellValue(handle, gridView9.Columns[0]));
                        if (tipo == "ENVIO")
                        {
                            ImpFactWesternUnion(doc, 1);
                        }
                        else
                        {
                            ImpFactWesternUnion(doc, 2);
                        }
                    }
                }
                else
                {
                    foreach (int handle in gridView1.GetSelectedRows())
                    {
                        string DOC = Convert.ToString(gridView1.GetRowCellValue(handle, gridView1.Columns[5]));
                        string TIPO = Convert.ToString(gridView1.GetRowCellValue(handle, gridView1.Columns[7]));
                        if (DOC != string.Empty && DOC != "DOCUMENTO")
                        {
                            if (TIPO == "01")
                                CargarReporte2(DOC);
                            if (TIPO == "02")
                                CargarReporteBN(DOC);
                            if (TIPO == "04")
                                ImpFactRecNic(long.Parse(DOC));
                        }
                    }
                }
            }
        }
        #endregion

        #region BNSERVICIOS
        //DLQG

        private void Empresa()
        {
            try
            {
                DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "C_INST_BNSERV");

                foreach (DataRow Fila in dsB.Tables[0].Rows)
                {
                    DevExpress.XtraEditors.Controls.ComboBoxItem item;
                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Fila[1].ToString(), Fila[0].ToString());
                    iCBoxAgua_Inst.Properties.Items.Add(item);
                }
            }
            catch (Exception er)
            {
                GUI.CApp.ShowMessage(er.Message, "ERROR", true);
                //BitacoraIntentosE(id, Convert.ToString(er.Message));
            }
        }

        ArrayList Lconvenios = new ArrayList();

        private void Convenios(string pcod_Empresa)
        {
            try
            {
                //Limpiar variables
                Lconvenios.Clear();
                iCBoxAgua_Conv.Properties.Items.Clear();

                //selecciona los datos para imprimir
                QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("pEmpresa", pcod_Empresa);
                DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "C_CONV_BNSERV", qp);

                foreach (DataRow Fila in dsB.Tables[0].Rows)
                {
                    //CREAR UN ARRAY DE CONVENIOS
                    ConectBN.Convenios1 CONV = new ConectBN.Convenios1();
                    //W.NCONVENIO, W.NEMPRESA, W.STRNOMBCONV, W.STRMONEDA, W.NPERIODO, W.STRTIPOPAGO, W.STRCOBROTARDIO, W.STRVALANTIG FROM EKONO.WMS_BNSERV_CONVENIOS
                    CONV.nConvenio = int.Parse(Fila[0].ToString());
                    CONV.nPeriodo = int.Parse(Fila[4].ToString());
                    CONV.strCobroTardio = Fila[6].ToString();
                    CONV.strMoneda = Fila[3].ToString();
                    CONV.strNombreConvenio = Fila[2].ToString();
                    CONV.strTipoPago = Fila[5].ToString();
                    CONV.strValidarAntiguedad = Fila[7].ToString();
                    Lconvenios.Add(CONV);
                    //Llenar el ComboBox
                    DevExpress.XtraEditors.Controls.ComboBoxItem item;
                    item = new DevExpress.XtraEditors.Controls.ImageComboBoxItem(Fila[2].ToString(), Fila[0].ToString());
                    iCBoxAgua_Conv.Properties.Items.Add(item);
                }
            }
            catch (Exception er)
            {
                GUI.CApp.ShowMessage(er.Message, "ERROR", true);
                //BitacoraIntentosE(id, Convert.ToString(er.Message));
            }
        }

        ArrayList LLlaves = new ArrayList();

        private void Llaves(string pcod_Empresa, string pCodConvenio)
        {
            try
            {
                //selecciona los datos para imprimir
                QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("pEmpresa", pcod_Empresa);
                qp.AddReplaceParam("pConvenio", pCodConvenio);
                DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "C_LLAVE_BNSERV", qp);
                LLlaves.Clear();
                foreach (DataRow Fila in dsB.Tables[0].Rows)
                {
                    //CREAR UN ARRAY DE CONVENIOS
                    ConectBN.Llaves llave = new ConectBN.Llaves();
                    //W.NCONVENIO, W.NEMPRESA, W.STRNOMBCONV, W.STRMONEDA, W.NPERIODO, W.STRTIPOPAGO, W.STRCOBROTARDIO, W.STRVALANTIG FROM EKONO.WMS_BNSERV_CONVENIOS
                    llave.nTipoLlave = int.Parse(Fila[2].ToString());
                    llave.strDescripcion = Fila[3].ToString();
                    LLlaves.Add(llave);
                }

                cBoxAgua_Llave.DataSource = LLlaves;
                cBoxAgua_Llave.DisplayMember = "strDescripcion";
                cBoxAgua_Llave.ValueMember = "nTipoLlave";

                if (cBoxAgua_Llave.SelectedIndex >= 0)
                {
                    varLlave = cBoxAgua_Llave.Text;
                }
            }
            catch (Exception er)
            {
                GUI.CApp.ShowMessage(er.Message, "ERROR", true);
                //BitacoraIntentosE(id, Convert.ToString(er.Message));
            }
        }

        ArrayList LComision;

        //private void Comision(string pcod_Banco, string pcod_Empresa, string pCodConvenio)
        //{
        //    try
        //    {
        //        //WEB SERVICE CON SUS MÉTODOS
        //        ConectBN.Convenios WSBNServicios = new ConectBN.Convenios();

        //        //Convenios
        //        ConectBN.ConsultarComisionReq CComReq = new ConectBN.ConsultarComisionReq();
        //        ConectBN.ConsultarComisionRes CComRes = new ConectBN.ConsultarComisionRes();

        //        CComReq.nCodBanco = int.Parse(pcod_Banco);
        //        CComReq.nCodConvenio = int.Parse(pCodConvenio);
        //        CComReq.nCodEmpresa = int.Parse(pcod_Empresa);

        //        CComRes = WSBNServicios.ConsultarComisiones(CComReq);

        //        LComision = new ArrayList(CComRes.arrComisiones);               

        //    }
        //    catch (SoapException err)
        //    {
        //        GUI.CApp.ShowMessage(Convert.ToString(err.Detail.FirstChild.Value), "ERROR", true);
        //        //BitacoraIntentosE(id, Convert.ToString(err.Detail.FirstChild.Value));
        //    }
        //    catch (Exception er)
        //    {
        //        GUI.CApp.ShowMessage(er.Message, "ERROR", true);
        //        //BitacoraIntentosE(id, Convert.ToString(er.Message));
        //    }
        //}


        string idBNServTiemp = "";

        //Almacena cada intento de recargar - crea la bitacora TIEMPOS
        private void BitacoraTiempoBNServiNICIO(string empresa, string convenio, string llave, string valrllave)
        {
            idBNServTiemp = "";
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            idBNServTiemp = Convert.ToString(GUI.CApp.bll.GetSingleValue("C_SEC_PAG_SERV_TIME", qp, "PDV"));

            qp.AddReplaceParam("pempresa", empresa);
            qp.AddReplaceParam("pconvenio", convenio);
            qp.AddReplaceParam("pllave", llave);
            qp.AddReplaceParam("pvalrllave", valrllave);
            qp.AddReplaceParam("pidBNServTiemp", idBNServTiemp);
            // Llama el procedimiento que almacena los datos del intento de recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_BITAC_TIME_BNSERV", qp, "PDV");
        }

        //Almacena cada intento de recargar - crea la bitacora TIEMPOS
        private void BitacoraTiempoBNServFIN(string ID)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();

            qp.AddReplaceParam("pidBNServTiemp", idBNServTiemp);
            // Llama el procedimiento que almacena los datos del intento de recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_BITAC_TIME_BNSERVFIN", qp, "PDV");
        }


        ConectBN.ConsultarRecibosPendientesRes CRecRes = new ConectBN.ConsultarRecibosPendientesRes();

        private void CPendientes(string Llaveacceso, string Llave, string pcod_Banco, string pcod_Empresa, string pCodConvenio, string pCodAgencia, string pCodCanal)
        {
            try
            {
                gridCtrlAguaPend.DataSource = null;
                gridCtrlAguaPend.Refresh();

                //WEB SERVICE CON SUS MÉTODOS
                ConectBN.Convenios WSBNServicios = new ConectBN.Convenios();

                WSBNServicios.Credentials = new NetworkCredential("ekono", "ekonobncr2014");

                //Convenios
                ConectBN.ConsultarRecibosPendientesReq CRecReq = new ConectBN.ConsultarRecibosPendientesReq();
                //ConectBN.ConsultarRecibosPendientesRes CRecRes = new ConectBN.ConsultarRecibosPendientesRes();

                CRecReq.nCodBanco = int.Parse(pcod_Banco);
                CRecReq.nCodConvenio = int.Parse(pCodConvenio);
                CRecReq.nCodEmpresa = int.Parse(pcod_Empresa);
                CRecReq.nCodAgencia = int.Parse(pCodAgencia);
                CRecReq.strTipoCanal = pCodCanal;
                CRecReq.nTipoLlave = int.Parse(Llave);
                CRecReq.strLlaveAcceso = Llaveacceso;
                //BitacoraTiempoBNServiNICIO(pcod_Empresa, pCodConvenio, Llave, Llaveacceso);
                CRecRes = WSBNServicios.ConsultarRecibosPendientes(CRecReq);
                //BitacoraTiempoBNServFIN(idBNServTiemp);
                //Crear un objeto serializado para la clase contactos
                XmlSerializer objWriter = new XmlSerializer(typeof(ConectBN.ConsultarRecibosPendientesReq));
                //Crear un objeto file de tipo StremWriter para almacenar el documento xml
                StreamWriter objfile = new StreamWriter("C://ConsultarRecibosPendientesRequest.xml");
                //Serializar y crear el documento XML
                objWriter.Serialize(objfile, CRecReq);
                //Cerrar el archivo
                objfile.Close();

                //Crear un objeto serializado para la clase contactos
                XmlSerializer objWriter2 = new XmlSerializer(typeof(ConectBN.ConsultarRecibosPendientesRes));
                //Crear un objeto file de tipo StremWriter para almacenar el documento xml
                StreamWriter objfile2 = new StreamWriter("C://ConsultarRecibosPendientesResponse.xml");
                //Serializar y crear el documento XML
                objWriter2.Serialize(objfile2, CRecRes);
                //Cerrar el archivo
                objfile2.Close();
                if (CRecRes.arrServicios != null)
                {
                    ArrayList LRecPend = new ArrayList(CRecRes.arrServicios);
                    txtNombClient.Text = CRecRes.strNombreCliente;
                    txtmoneda.Text = CRecRes.strCodMoneda;
                    gridCtrlAguaPend.DataSource = LRecPend;
                    gridCtrlAguaPend.Refresh();
                }
                else
                {
                    if (CRecRes.strCodRespuesta == "00")
                    {
                        GUI.CApp.ShowMessage("No tiene recibos pendientes", "Recibos", false);
                    }
                    else
                    {
                        GUI.CApp.ShowMessage(CRecRes.strDescripcionRespuesta, "Recibos", false);

                        BitacoraErroresBN(CRecRes.strCodRespuesta, " ", "Consulta recibos. " + " "
                         + CRecRes.strDescripcionRespuesta,
                        emAccion.C.ToString(), Program.Jornada.ToString(), GUI.CApp.usuario);
                    }
                }
                //ConectBN.Recibos rc = new LLNet.Tienda.cr.fi.bncr.wservices.Recibos():


                //cBoxAgua_Llave.DataSource = LLlaves;
                //cBoxAgua_Llave.ValueMember = "nTipoLlave";
                //cBoxAgua_Llave.DisplayMember = "strDescripcion";
                //foreach (ConectBN.Llaves Llave in LLlaves)
                //{
                //    ComboBox.it ;
                //    cBoxAgua_Llave.Items.Add(new KeyValuePair<string, string>(Llave.nTipoLlave.ToString(),Llave.strDescripcion));
                //}
            }
            catch (SoapException err)
            {
                GUI.CApp.ShowMessage(Convert.ToString(err.Detail.FirstChild.Value), "ERROR", true);
                // BitacoraIntentosE(id, Convert.ToString(err.Detail.FirstChild.Value));
            }
            catch (Exception er)
            {
                GUI.CApp.ShowMessage(er.Message, "ERROR", true);
                //BitacoraIntentosE(id, Convert.ToString(er.Message));
            }
        }


        private void btnAgua_Click(object sender, EventArgs e)
        {
            try
            {
                if (GUI.CApp.ValidateAccess("IBNServ", "Integracion BN Servicios"))
                {
                    AccionBNServ = emAccion.N;
                    sbtnPagar.Visible = true;
                    btnRecargar.Visible = false;
                    sBtnRecNic.Visible = false;
                    sBtnRecNic.Enabled = false;
                    pnlTelefonia.Visible = false;
                    pnlAgua.Visible = true;
                    panel3.Visible = true;
                    pnlClaroNic.Visible = false;
                    pnlWesternUnion.Visible = false;
                    Empresa();
                }
            }
            catch (Exception er)
            {
                GUI.CApp.ShowMessage(er.Message, "ERROR", true);
            }
        }

        private void iCBoxAgua_Inst_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                iCBoxAgua_Conv.Properties.Items.Clear();
                varCEmpresa = iCBoxAgua_Inst.Properties.Items[iCBoxAgua_Inst.SelectedIndex].Value.ToString();
                varInstit = iCBoxAgua_Inst.Properties.Items[iCBoxAgua_Inst.SelectedIndex].Description.ToString();
                iCBoxAgua_Conv.Properties.Items.Clear();
                iCBoxAgua_Conv.SelectedIndex = -1;
                if (cBoxAgua_Llave.Items.Count > 0)
                    cBoxAgua_Llave.DataSource = null;
                //cBoxAgua_Llave.Items.Clear();
                cBoxAgua_Llave.DataSource = null;
                Convenios(varCEmpresa);
                Limpiar2();
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message, "ERROR", true);
            }
        }

        private void iCBoxAgua_Conv_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                Limpiar2();
                //cBoxAgua_Llave.Items.Clear();
                cBoxAgua_Llave.DataSource = null;
                if (iCBoxAgua_Conv.SelectedIndex >= 0)
                {
                    varCConvenio = iCBoxAgua_Conv.Properties.Items[iCBoxAgua_Conv.SelectedIndex].Value.ToString();
                    varConvenio = iCBoxAgua_Conv.Properties.Items[iCBoxAgua_Conv.SelectedIndex].Description.ToString();
                    Llaves(varCEmpresa, varCConvenio);
                    //Comision(varCBanco, varCEmpresa, varCConvenio);
                }
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message, "ERROR", true);
            }
        }

        private void mesICE(string fech)
        {
            txtICEMES.Text = "";
            string dato = "";
            if (varCEmpresa == "2") //2 -> ICE
            {
                switch (fech.Substring(4, 2))
                {
                    case "01": //
                        dato = "ENERO ";
                        break;
                    case "02"://
                        dato = "FEBRERO ";
                        break;
                    case "03"://
                        dato = "MARZO ";
                        break;
                    case "04": //
                        dato = "ABRIL ";
                        break;
                    case "05": //
                        dato = "MAYO ";
                        break;
                    case "06": //
                        dato = "JUNIO ";
                        break;
                    case "07": //
                        dato = "JULIO ";
                        break;
                    case "08": //
                        dato = "AGOSTO ";
                        break;
                    case "09": //
                        dato = "SETIEMBRE ";
                        break;
                    case "10": //
                        dato = "OCTUBRE ";
                        break;
                    case "11": //
                        dato = "NOVIEMBRE ";
                        break;
                    case "12": //
                        dato = "DICIEMBRE ";
                        break;
                }
                txtICEMES.Text = dato + fech.Substring(0, 4);
            }
        }



        private void btnConsAgua_Click(object sender, EventArgs e)
        {
            try
            {
                varCLlave = cBoxAgua_Llave.SelectedValue.ToString();
                CPendientes(txtLlave.Text, varCLlave, varCBanco, varCEmpresa, varCConvenio, varCAgencia, varCCanal);
                foreach (int handle in gridView3.GetSelectedRows())
                {
                    if (gridView3.RowCount > 0 && gridView3.Columns.Count > 0 && handle == 0)
                    {
                        txtmonto.Text = Convert.ToString(gridView3.GetRowCellValue(handle, gridView3.Columns[3]));
                        string mes = Convert.ToString(gridView3.GetRowCellValue(handle, gridView3.Columns[2]));
                        mesICE(mes);
                    }
                }
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message, "ERROR", true);
            }
        }

        private void gridCtrlAguaPend_Click(object sender, EventArgs e)
        {
            foreach (int handle in gridView3.GetSelectedRows())
            {
                string DOC = Convert.ToString(gridView3.GetRowCellValue(handle, gridView3.Columns[1]));
                //if (DOC != string.Empty && DOC != "DOCUMENTO")
                //{
                //    MessageBox.Show(DOC);
                //}
            }
        }

        private void gridView1_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e)
        {
            foreach (int handle in gridView3.GetSelectedRows())
            {
                string DOC = Convert.ToString(gridView3.GetRowCellValue(handle, gridView3.Columns[1]));
                if (DOC != string.Empty && DOC != "DOCUMENTO")
                {
                    // MessageBox.Show(DOC);
                }
            }
        }

        private void gridView3_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e)
        {
            foreach (int handle in gridView3.GetSelectedRows())
            {
                string DOC = Convert.ToString(gridView3.GetRowCellValue(handle, gridView3.Columns[1]));
                if (DOC != string.Empty && DOC != "DOCUMENTO")
                {
                    // MessageBox.Show(DOC);
                }
            }
        }

        private void Limpiar2()
        {
            gridCtrlAguaPend.DataSource = null;
            gridCtrlAguaPend.Refresh();
            txtNombClient.Text = "";
            //TXTMONTOCOL.Text = "";
            txtmoneda.Text = "";
            txtLlave.Text = "";
            txtmonto.Text = "";
            txtICEMES.Text = "";
        }

        private void sbtnPagar_Click(object sender, EventArgs e)
        {
            // CODIGO PRUEBA QUE IMPRIME N VECES UN VOUCHER DE BN SERVICIOS, PONER DONDE SE LLAMA EL METODO CargarReporteBN NORMALMENTE 
            //Int32 cantidadImpreciones = Convert.ToInt32(LLNet.Tienda.MainForms.Forms.BacTasa0.Logica.GET_CG_PARAMETERS_VALUE("BNCI"));
            //Int32 tiempoEntreImpresiones = Convert.ToInt32(LLNet.Tienda.MainForms.Forms.BacTasa0.Logica.GET_CG_PARAMETERS_VALUE("BNCT"));
            //CargarReporteBN("420017166");
            //for (int i = 0; i < cantidadImpreciones; i++)
            //{
            //    System.Threading.Thread.Sleep(tiempoEntreImpresiones);
            //    CargarReporteBN("420017166");
            //}
            try
            {
                if (ValidaTPago() == true)
                {
                    if (ValidaOAntiguedad() == true)
                    {
                        //Secuencia de Comprobante
                        int varSECComp = Convert.ToInt32(GUI.CApp.bll.GetSingleValue("SEC_BNCOMPR", "PDV"));

                        //WEB SERVICE CON SUS MÉTODOS
                        ConectBN.Convenios WSBNServicios = new ConectBN.Convenios();
                        WSBNServicios.Credentials = new NetworkCredential("ekono", "ekonobncr2014");

                        //Pago de Servicios
                        ConectBN.EjecutarPagoServicioReq EPServReq = new ConectBN.EjecutarPagoServicioReq();
                        ConectBN.EjecutarPagoServicioRes EPServRes = new ConectBN.EjecutarPagoServicioRes();

                        try
                        {
                            if (txtmoneda.Text == "COL")
                            {
                                #region "COL"

                                //Tipo de Pago
                                ConectBN.TiposPago atp = new ConectBN.TiposPago();
                                atp.strTipoPago = "1";
                                atp.nCodBanco = 0;
                                atp.nNumCheque = 0;
                                atp.nNumCuenta = 0;
                                foreach (int celda in gridView3.GetSelectedRows())
                                {
                                    //atp.nMontoTotal = Convert.ToDecimal(gridView3.GetRowCellValue(celda, gridView3.Columns[3]));
                                    atp.nMontoTotal = Convert.ToDecimal(txtmonto.Text);
                                    EPServReq.dtFechaVto = Convert.ToDateTime(gridView3.GetRowCellValue(celda, gridView3.Columns[4]));
                                    //EPServReq.nMontoTotal = Convert.ToDecimal(gridView3.GetRowCellValue(celda, gridView3.Columns[3]));
                                    EPServReq.nMontoTotal = Convert.ToDecimal(txtmonto.Text);
                                    EPServReq.strNumFactura = Convert.ToString(gridView3.GetRowCellValue(celda, gridView3.Columns[5]));
                                    EPServReq.strPeriodo = Convert.ToString((gridView3.GetRowCellValue(celda, gridView3.Columns[2])));
                                    EPServReq.strRecibo = Convert.ToString((gridView3.GetRowCellValue(celda, gridView3.Columns[7])));
                                    EPServReq.strValorServicio = Convert.ToString((gridView3.GetRowCellValue(celda, gridView3.Columns[0])));
                                    if (Convert.ToString(gridView3.GetRowCellValue(celda, gridView3.Columns[6])) != "")
                                    {
                                        EPServReq.nSelfVerificacion = Convert.ToInt32(gridView3.GetRowCellValue(celda, gridView3.Columns[6]));
                                    }
                                    else
                                    {
                                        EPServReq.nSelfVerificacion = 0;
                                    }
                                }
                                ConectBN.TiposPago[] arrTP = new ConectBN.TiposPago[1];
                                arrTP[0] = atp;
                                EPServReq.arrTiposPago = arrTP;
                                EPServReq.nCodAgencia = int.Parse(varCAgencia);
                                EPServReq.nCodBanco = int.Parse(varCBanco);
                                EPServReq.nCodConvenio = int.Parse(varCConvenio);
                                EPServReq.nCodEmpresa = int.Parse(varCEmpresa);
                                EPServReq.nNumComprobante = varSECComp;
                                EPServReq.nNumCuotas = 0;
                                EPServReq.nTipoLlave = int.Parse(varCLlave);
                                EPServReq.strCodMoneda = CRecRes.strCodMoneda;
                                EPServReq.strTipoCanal = CRecRes.strTipoCanal;
                                //EPServReq.strValorServicio = CRecRes.nNumServicio.ToString();

                                RegistroBDBNRequest(EPServReq, txtNombClient.Text);


                                EPServRes = WSBNServicios.EjecutarPagoServicio(EPServReq);

                                //Crear un objeto serializado para la clase contactos
                                XmlSerializer objWriter = new XmlSerializer(typeof(ConectBN.EjecutarPagoServicioReq));
                                //Crear un objeto file de tipo StremWriter para almacenar el documento xml
                                StreamWriter objfile = new StreamWriter("C://ekono//PagoServicioReq.xml");
                                //Serializar y crear el documento XML
                                objWriter.Serialize(objfile, EPServReq);
                                //Cerrar el archivo
                                objfile.Close();

                                //Crear un objeto serializado para la clase contactos
                                XmlSerializer objWriter2 = new XmlSerializer(typeof(ConectBN.EjecutarPagoServicioRes));
                                //Crear un objeto file de tipo StremWriter para almacenar el documento xml
                                StreamWriter objfile2 = new StreamWriter("C://ekono//PagoServicioRes.xml");
                                //Serializar y crear el documento XML
                                objWriter2.Serialize(objfile2, EPServRes);
                                //Cerrar el archivo
                                objfile2.Close();


                                if (EPServRes.strCodRespuesta == "00")
                                {
                                    string total = EPServReq.nMontoTotal.ToString();

                                    RegistroBDBNResponse(EPServRes, EPServReq.nNumComprobante.ToString());

                                    RegistroBDBNServicios(EPServRes, total, varCEmpresa, EPServReq.nCodConvenio.ToString(), EPServReq.nNumComprobante.ToString());
                                }
                                else
                                {
                                    //BitacoraReversionBN(Req.nNumComprobante.ToString(), "Error al reversar", CTRes.strCodRespuesta + " " + CTRes.strDescripcionRespuesta);
                                    GUI.CApp.ShowMessage(Convert.ToString(EPServRes.strCodRespuesta + " " + EPServRes.strDescripcionRespuesta), "ERROR", true);
                                    BitacoraErroresBN(EPServRes.strCodRespuesta, varSECComp.ToString(), EPServRes.strCodRespuesta + " " + EPServRes.strDescripcionRespuesta,
                                        emAccion.P.ToString(), Program.Jornada.ToString(), CApp.usuario);
                                }

                                Limpiar2();

                                #endregion
                            }
                            else
                            {
                                if (txtmoneda.Text == "DOL")
                                {
                                    #region "DOL"

                                    //Tipo de Pago
                                    ConectBN.TiposPago atp = new ConectBN.TiposPago();
                                    atp.strTipoPago = "1";
                                    atp.nCodBanco = 0;
                                    atp.nNumCheque = 0;
                                    atp.nNumCuenta = 0;
                                    foreach (int celda in gridView3.GetSelectedRows())
                                    {
                                        //atp.nMontoTotal = Convert.ToDecimal(gridView3.GetRowCellValue(celda, gridView3.Columns[3]));
                                        atp.nMontoTotal = Convert.ToDecimal(txtmonto.Text);
                                        EPServReq.dtFechaVto = Convert.ToDateTime(gridView3.GetRowCellValue(celda, gridView3.Columns[4]));
                                        //EPServReq.nMontoTotal = Convert.ToDecimal(gridView3.GetRowCellValue(celda, gridView3.Columns[3]));
                                        EPServReq.nMontoTotal = Convert.ToDecimal(txtmonto.Text);
                                        EPServReq.strNumFactura = Convert.ToString(gridView3.GetRowCellValue(celda, gridView3.Columns[5]));
                                        EPServReq.strPeriodo = Convert.ToString((gridView3.GetRowCellValue(celda, gridView3.Columns[2])));
                                        EPServReq.strRecibo = Convert.ToString((gridView3.GetRowCellValue(celda, gridView3.Columns[7])));
                                        EPServReq.strValorServicio = Convert.ToString((gridView3.GetRowCellValue(celda, gridView3.Columns[0])));
                                        if (Convert.ToString(gridView3.GetRowCellValue(celda, gridView3.Columns[6])) != "")
                                        {
                                            EPServReq.nSelfVerificacion = Convert.ToInt32(gridView3.GetRowCellValue(celda, gridView3.Columns[6]));
                                        }
                                        else
                                        {
                                            EPServReq.nSelfVerificacion = 0;
                                        }
                                    }
                                    ConectBN.TiposPago[] arrTP = new ConectBN.TiposPago[1];
                                    arrTP[0] = atp;
                                    EPServReq.arrTiposPago = arrTP;
                                    EPServReq.nCodAgencia = int.Parse(varCAgencia);
                                    EPServReq.nCodBanco = int.Parse(varCBanco);
                                    EPServReq.nCodConvenio = int.Parse(varCConvenio);
                                    EPServReq.nCodEmpresa = int.Parse(varCEmpresa);
                                    EPServReq.nNumComprobante = varSECComp;
                                    EPServReq.nNumCuotas = 0;
                                    EPServReq.nTipoLlave = int.Parse(varCLlave);
                                    EPServReq.strCodMoneda = CRecRes.strCodMoneda;
                                    EPServReq.strTipoCanal = CRecRes.strTipoCanal;
                                    //EPServReq.strValorServicio = CRecRes.nNumServicio.ToString();

                                    EPServRes = WSBNServicios.EjecutarPagoServicio(EPServReq);

                                    if (EPServRes.strCodRespuesta == "00")
                                    {

                                        //Valor del Doloar en colones
                                        decimal varDOLAR = Convert.ToDecimal(GUI.CApp.bll.GetSingleValue("DOLAR", "PDV"));

                                        string total = Convert.ToString(EPServReq.nMontoTotal * varDOLAR);

                                        //  RegistroBDBNRequest(EPServReq, txtNombClient.Text);

                                        RegistroBDBNResponse(EPServRes, EPServReq.nNumComprobante.ToString());

                                        RegistroBDBNServicios(EPServRes, total, varCEmpresa, EPServReq.nCodConvenio.ToString(), EPServReq.nNumComprobante.ToString());
                                    }
                                    else
                                    {
                                        GUI.CApp.ShowMessage(Convert.ToString(EPServRes.strCodRespuesta + " " + EPServRes.strDescripcionRespuesta), "ERROR", true);
                                        //BitacoraReversionBN(Req.nNumComprobante.ToString(), "Error al reversar", CTRes.strCodRespuesta + " " + CTRes.strDescripcionRespuesta);
                                        BitacoraErroresBN(EPServRes.strCodRespuesta, varSECComp.ToString(), EPServRes.strCodRespuesta + " " + EPServRes.strDescripcionRespuesta,
                                            emAccion.P.ToString(), Program.Jornada.ToString(), CApp.usuario);
                                    }
                                    Limpiar2();

                                    #endregion
                                }
                                else
                                {
                                    GUI.CApp.ShowMessage("No se puede cancelar recibos en otras monedas", "ERROR", true);
                                }
                            }
                        }
                        catch (SoapException err)
                        {
                            LLNet.Controls.LLEventLog EventLog;
                            string ExeDir = Application.StartupPath + "\\";
                            EventLog = new LLNet.Controls.LLEventLog(ExeDir);
                            EventLog.WriteLog(LLNet.Utils.Types.ErrorTypes.MESSAGES, "BnServ catch SoapException");
                            EventLog.WriteLog(LLNet.Utils.Types.ErrorTypes.MESSAGES, err.ToString());

                            GUI.CApp.ShowMessage(Convert.ToString(err.Detail.FirstChild.Value), "ERROR", false);
                            BitacoraErroresBN("", varSECComp.ToString(), "Soap:" + Convert.ToString(err.Detail.FirstChild.Value),
                                emAccion.P.ToString(), Program.Jornada.ToString(), CApp.usuario);
                            RegistroBDBNRequest(EPServReq, txtNombClient.Text);
                            ConsultaPago(EPServReq);

                        }
                        catch (Exception er)
                        {
                            GUI.CApp.ShowMessage(er.Message, "ERROR", false);

                            LLNet.Controls.LLEventLog EventLog;
                            string ExeDir = Application.StartupPath + "\\";
                            EventLog = new LLNet.Controls.LLEventLog(ExeDir);
                            EventLog.WriteLog(LLNet.Utils.Types.ErrorTypes.MESSAGES, "BnServ catch Exception");
                            EventLog.WriteLog(LLNet.Utils.Types.ErrorTypes.MESSAGES, er.Message);

                            BitacoraErroresBN("", varSECComp.ToString(), er.Message,
                                emAccion.P.ToString(), Program.Jornada.ToString(), CApp.usuario);
                            //RegistroBDBNRequest(EPServReq, txtNombClient.Text);
                            ConsultaPago(EPServReq);

                        }

                        GridCRepJorn.DataSource = null;
                        GridCRepJorn.Refresh();
                        ArqJornada();

                        //QUITAR SOLO PRUEBA
                        //ConsultaPago(EPServReq);
                    }
                    else
                    {
                        GUI.CApp.ShowMessage("No puedes pagar este recibo ya que tienes otro pendiente", "ERROR", true);
                    }
                }
                else
                {
                    GUI.CApp.ShowMessage("El monto no es permitido", "ERROR", true);
                }
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message, "ERROR", true);
            }
        }


        /// <summary>Imprime la factura </summary>
        /// <param name="doc"></param>
        private void CargarReporteBN(string doc)
        {
            //selecciona los datos para imprimir
            QueryParams qp1 = new LLNet.Utils.QueryParams();
            qp1.AddReplaceParam("pDoc", doc);
            //CONSULTA LOS PARÁMETROS DE LA BD
            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "DATOIMP", qp1);
            if (dsB.Tables.Count > 0)
            {
                if (dsB.Tables[0].Rows.Count > 0)
                {
                    object[] datos = new object[5];
                    datos = dsB.Tables[0].Rows[0].ItemArray;
                    imprimirDocumentoDOS(long.Parse(datos[0].ToString()), datos[1].ToString(), long.Parse(datos[2].ToString()), datos[3].ToString(), datos[4].ToString());

                    //Cantidad de impresiones
                    QueryParams qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("DOCUMENTO", doc);
                    CApp.bll.ExecuteSql("WMS_P_RECARGIMPRESIONES", qp, "PDV");
                }
                else
                {
                    GUI.CApp.ShowMessage("Problemas al imprimir", "ERROR", true);
                }
            }
            else
            {
                GUI.CApp.ShowMessage("Problemas al imprimir", "ERROR", true);
            }
        }

        private void RegistroBDBNRequest(ConectBN.EjecutarPagoServicioReq EPServReq, string cliente)
        {

            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            if (EPServReq.nNumComprobante.ToString() == "")
            {
                qp.AddReplaceParam("pNNUMCOMPROBANTE", DBNull.Value.ToString().ToString());
            }
            else
            {
                qp.AddReplaceParam("pNNUMCOMPROBANTE", EPServReq.nNumComprobante.ToString());
            }
            if (EPServReq.nCodBanco.ToString() == "")
            {
                qp.AddReplaceParam("pNCODBANCO", DBNull.Value.ToString().ToString());
            }
            else
            {
                qp.AddReplaceParam("pNCODBANCO", EPServReq.nCodBanco.ToString());
            }
            if (EPServReq.nCodAgencia.ToString() == "")
            {
                qp.AddReplaceParam("pNCODAGENCIA", DBNull.Value.ToString().ToString());
            }
            else
            {
                qp.AddReplaceParam("pNCODAGENCIA", EPServReq.nCodAgencia.ToString());
            }
            if (EPServReq.strTipoCanal == "")
            {
                qp.AddReplaceParam("pSTRTIPOCANAL", DBNull.Value.ToString().ToString());
            }
            else
            {
                qp.AddReplaceParam("pSTRTIPOCANAL", EPServReq.strTipoCanal);
            }
            if (EPServReq.nCodEmpresa.ToString() == "")
            {
                qp.AddReplaceParam("pNCODEMPRESA", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNCODEMPRESA", EPServReq.nCodEmpresa.ToString());
            }
            if (EPServReq.nCodConvenio.ToString() == "")
            {
                qp.AddReplaceParam("pNCODCONVENIO", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNCODCONVENIO", EPServReq.nCodConvenio.ToString());
            }
            if (EPServReq.strValorServicio == "")
            {
                qp.AddReplaceParam("pSTRVALORSERV", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pSTRVALORSERV", EPServReq.strValorServicio);
            }
            if (EPServReq.strPeriodo == "")
            {
                qp.AddReplaceParam("pSTRPERIODO", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pSTRPERIODO", EPServReq.strPeriodo);
            }
            if (EPServReq.nMontoTotal.ToString() == "")
            {
                qp.AddReplaceParam("pNMONTOTOTAL", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNMONTOTOTAL", EPServReq.nMontoTotal.ToString());
            }
            if (EPServReq.dtFechaVto.ToString() == "")
            {
                qp.AddReplaceParam("pDTFECHAVTO", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pDTFECHAVTO", EPServReq.dtFechaVto.ToString());
            }
            if (EPServReq.strNumFactura == "")
            {
                qp.AddReplaceParam("pSTRNUMFACTURA", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pSTRNUMFACTURA", EPServReq.strNumFactura);
            }
            if (EPServReq.nSelfVerificacion.ToString() == "")
            {
                qp.AddReplaceParam("pNSELFVERIFIC", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNSELFVERIFIC", EPServReq.nSelfVerificacion.ToString());
            }
            if (EPServReq.strCodMoneda == "")
            {
                qp.AddReplaceParam("pSTRCODMONEDA", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pSTRCODMONEDA", EPServReq.strCodMoneda);
            }
            if (EPServReq.nNumCuotas.ToString() == "")
            {
                qp.AddReplaceParam("pNNUMCUOTAS", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNNUMCUOTAS", EPServReq.nNumCuotas.ToString());
            }
            if (EPServReq.arrTiposPago[0].nMontoTotal.ToString() == "")
            {
                qp.AddReplaceParam("pARRTPAGO_NMONTOT", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pARRTPAGO_NMONTOT", EPServReq.arrTiposPago[0].nMontoTotal.ToString());
            }
            if (EPServReq.strRecibo == "")
            {
                qp.AddReplaceParam("pSTRRECIBO", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pSTRRECIBO", EPServReq.strRecibo);
            }
            if (EPServReq.nTipoLlave.ToString() == "")
            {
                qp.AddReplaceParam("pNTIPOLLAVE", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNTIPOLLAVE", EPServReq.nTipoLlave.ToString());
            }
            if (varInstit == "")
            {
                qp.AddReplaceParam("pINSTITUCION", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pINSTITUCION", varInstit);
            }
            if (varConvenio == "")
            {
                qp.AddReplaceParam("pCONVENIO", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pCONVENIO", varConvenio);
            }
            if (varLlave == "")
            {
                qp.AddReplaceParam("pLLAVE", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pLLAVE", varLlave);
            }
            if (cliente == "")
            {
                qp.AddReplaceParam("pCLIENTE", DBNull.Value.ToString().ToString());
            }
            else
            {
                qp.AddReplaceParam("pCLIENTE", cliente);
            }

            qp.AddReplaceParam("pJORNADA", Program.Jornada.ToString());

            // Llama el procedimiento que almacena los datos de la recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_IBNSERVREQ", qp, "PDV");
        }

        private void RegistroBDBNResponse(ConectBN.EjecutarPagoServicioRes EPServRes, string nNumComprobante)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            if (nNumComprobante == "")
            {
                qp.AddReplaceParam("pNNUMCOMPROBANTE", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNNUMCOMPROBANTE", nNumComprobante);
            }
            if (EPServRes.nCodBanco.ToString() == "")
            {
                qp.AddReplaceParam("pNCODBANCO", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNCODBANCO", EPServRes.nCodBanco.ToString());
            }
            if (EPServRes.nCodAgencia.ToString() == "")
            {
                qp.AddReplaceParam("pNCODAGENCIA", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNCODAGENCIA", EPServRes.nCodAgencia.ToString());
            }
            if (EPServRes.strTipoCanal == "")
            {
                qp.AddReplaceParam("pSTRTIPOCANAL", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pSTRTIPOCANAL", EPServRes.strTipoCanal);
            }
            if (EPServRes.strCodRespuesta == "")
            {
                qp.AddReplaceParam("pSTRCODRES", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pSTRCODRES", EPServRes.strCodRespuesta);
            }
            if (EPServRes.strDescripcionRespuesta == "")
            {
                qp.AddReplaceParam("pSTRDESCRESP", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pSTRDESCRESP", EPServRes.strDescripcionRespuesta);
            }
            if (EPServRes.dtFecha.ToString() == "")
            {
                qp.AddReplaceParam("pDTFECHA", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pDTFECHA", EPServRes.dtFecha.ToString());
            }
            // &&pNCANTCONCEPINF&&, &&pNCANTCONCEPPAGO&& 
            if (EPServRes.nCantConceptosInformativos.ToString() == "")
            {
                qp.AddReplaceParam("pNCANTCONCEPINF", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNCANTCONCEPINF", EPServRes.nCantConceptosInformativos.ToString());
            }
            if (EPServRes.nCantConceptosPago.ToString() == "")
            {
                qp.AddReplaceParam("pNCANTCONCEPPAGO", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNCANTCONCEPPAGO", EPServRes.nCantConceptosPago.ToString());
            }

            // Llama el procedimiento que almacena los datos de la recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_IBNSERVRES", qp, "PDV");

            foreach (ConectBN.ConceptosInformativos ci in EPServRes.arrConceptosInformativos)
            {
                RegistroBDBNResponseCI(ci, nNumComprobante);
            }

            foreach (ConectBN.ConceptosPago cp in EPServRes.arrConceptosPago)
            {
                RegistroBDBNResponseCP(cp, nNumComprobante);
            }
        }

        private void RegistroBDBNResponseCI(ConectBN.ConceptosInformativos CI, string nNumComprobante)
        {

            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            if (nNumComprobante == "")
            {
                qp.AddReplaceParam("pNNUMCOMPROBANTE", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNNUMCOMPROBANTE", nNumComprobante);
            }
            if (CI.nCodConcepto.ToString() == "")
            {
                qp.AddReplaceParam("pNCODCONCEPTO", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNCODCONCEPTO", CI.nCodConcepto.ToString());
            }
            if (CI.strDescripcionConcepto == "")
            {
                qp.AddReplaceParam("pSTRDESCCONCEP", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pSTRDESCCONCEP", CI.strDescripcionConcepto);
            }
            if (CI.strValorConcepto == "")
            {
                qp.AddReplaceParam("pSTRVALORCONCEP", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pSTRVALORCONCEP", CI.strValorConcepto);
            }
            qp.AddReplaceParam("pTIPO", "CI");

            // Llama el procedimiento que almacena los datos de la recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_IBNSERVRA", qp, "PDV");
        }

        private void RegistroBDBNResponseCP(ConectBN.ConceptosPago CP, string nNumComprobante)
        {

            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            if (nNumComprobante == "")
            {
                qp.AddReplaceParam("pNNUMCOMPROBANTE", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNNUMCOMPROBANTE", nNumComprobante);
            }
            if (CP.nCodConcepto.ToString() == "")
            {
                qp.AddReplaceParam("pNCODCONCEPTO", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNCODCONCEPTO", CP.nCodConcepto.ToString());
            }
            if (CP.strDescripcionConcepto == "")
            {
                qp.AddReplaceParam("pSTRDESCCONCEP", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pSTRDESCCONCEP", CP.strDescripcionConcepto);
            }
            if (CP.nMontoConcepto.ToString() == "")
            {
                qp.AddReplaceParam("pSTRVALORCONCEP", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pSTRVALORCONCEP", CP.nMontoConcepto.ToString());
            }
            qp.AddReplaceParam("pTIPO", "CP");

            // Llama el procedimiento que almacena los datos de la recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_IBNSERVRA", qp, "PDV");
        }

        private void RegistroBDBNServicios(ConectBN.EjecutarPagoServicioRes Resp, string total, string oper, string prov, string numcomprob)
        {
            if (Resp.strCodRespuesta != "00")
            {
                GUI.CApp.ShowMessage("No se registro ninguna transacción", "ERROR", true);
            }
            else
            {
                long varDocumento = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("SEC_DOCUMENTO", "PDV"));

                //Parámetros:pDocumento number, pCaja number, pUsuario varchar2, pTotal number, pJornada number, pComision number, pIdTRans varchar2, pTelefono varchar2
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("pDocumento", varDocumento.ToString());
                qp.AddReplaceParam("pCaja", Program.Caja.ToString());
                qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);
                qp.AddReplaceParam("pTotal", total);
                qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
                if (numcomprob == "")
                {
                    qp.AddReplaceParam("pIdTRans", "BLANCO");
                }
                else
                {
                    qp.AddReplaceParam("pIdTRans", numcomprob);
                }
                qp.AddReplaceParam("pProveedor", prov);
                qp.AddReplaceParam("pOperador", oper);
                // Llama el procedimiento que almacena los datos de la recarga en la BD
                GUI.CApp.bll.ExecuteSql("WMS_P_RECIBOBNSERV", qp, "PDV");
                //AQUI
                Int32 cantidadImpreciones = Convert.ToInt32(LLNet.Tienda.MainForms.Forms.BacTasa0.Logica.GET_CG_PARAMETERS_VALUE("BNCI"));
                Int32 tiempoEntreImpresiones = Convert.ToInt32(LLNet.Tienda.MainForms.Forms.BacTasa0.Logica.GET_CG_PARAMETERS_VALUE("BNCT"));
                //IMPRIME LA FACTURA
                CargarReporteBN(varDocumento.ToString());
                for (int i = 0; i < cantidadImpreciones; i++)
                {
                    System.Threading.Thread.Sleep(tiempoEntreImpresiones);
                    CargarReporteBN(varDocumento.ToString());
                }

            }
        }

        private void reversionBNservicios(ConectBN.ConsultarTransaccionRes Res, ConectBN.EjecutarPagoServicioReq Req)
        {
            //Obtiene el usuario que dio autorización para realizar la consulta y reversión del pago
            string usuario = GUI.CApp.Sup != null ? GUI.CApp.Sup : GUI.CApp.usuario;
            try
            {
                //WEB SERVICE CON SUS MÉTODOS
                ConectBN.Convenios WSBNServicios = new ConectBN.Convenios();
                WSBNServicios.Credentials = new NetworkCredential("ekono", "ekonobncr2014");

                //Pago de Servicios
                ConectBN.ReversarPagoServicioReq CTReq = new ConectBN.ReversarPagoServicioReq();
                ConectBN.ReversarPagoServicioRes CTRes = new ConectBN.ReversarPagoServicioRes();

                CTReq.nCodConvenio = Req.nCodConvenio;
                CTReq.dtFecha = Res.dtFecha;
                CTReq.nCodAgencia = Res.nCodAgencia;
                CTReq.nCodBanco = Res.nCodBanco;
                CTReq.nCodEmpresa = Req.nCodEmpresa;
                CTReq.nMonto = Res.nMonto;
                CTReq.nNumComprobante = Req.nNumComprobante;
                if (Req.strNumFactura.Length < 11)
                {
                    if (Req.strNumFactura.Length == 0)
                    {
                        CTReq.nNumFactura = 0;
                    }
                    else
                    {
                        CTReq.nNumFactura = int.Parse(Req.strNumFactura);
                    }
                }
                CTReq.strCodMoneda = Req.strCodMoneda;
                CTReq.strNumTransaccionPago = "";
                CTReq.strRecibo = Req.strRecibo;
                CTReq.strTipoCanal = Req.strTipoCanal;
                CTReq.strTipoLlave = Req.nTipoLlave.ToString();
                CTReq.strValorServicio = Req.strValorServicio;

                CTRes = WSBNServicios.ReversarPagoServicio(CTReq);

                ////Crear un objeto serializado para la clase contactos
                //XmlSerializer objWriter = new XmlSerializer(typeof(ConectBN.ReversarPagoServicioReq));
                ////Crear un objeto file de tipo StremWriter para almacenar el documento xml
                //StreamWriter objfile = new StreamWriter("C://ReversionRequest.xml");
                ////Serializar y crear el documento XML
                //objWriter.Serialize(objfile, CTReq);
                ////Cerrar el archivo
                //objfile.Close();

                ////Crear un objeto serializado para la clase contactos
                //XmlSerializer objWriter2 = new XmlSerializer(typeof(ConectBN.ReversarPagoServicioRes));
                ////Crear un objeto file de tipo StremWriter para almacenar el documento xml
                //StreamWriter objfile2 = new StreamWriter("C://ReversionResponse.xml");
                ////Serializar y crear el documento XML
                //objWriter2.Serialize(objfile2, CTRes);
                ////Cerrar el archivo
                //objfile2.Close();


                if (CTRes.strCodRespuesta == "00")
                {//REVERSION EXITOSA
                    GUI.CApp.ShowMessage("Reversión realizada con éxito", "Reversion correcta", false);

                    Utils.QueryParams qp1 = new LLNet.Utils.QueryParams();
                    qp1.AddReplaceParam("pCOMPR", Convert.ToString(CTReq.nNumComprobante));
                    qp1.AddReplaceParam("pREVX", GUI.CApp.usuario);
                    // Llama el procedimiento que almacena los datos de la recarga en la BD
                    GUI.CApp.bll.ExecuteSql("WMS_P_REVBNSERV", qp1, "PDV");
                    //Almacenar el estado de la reversion BD
                    BitacoraErroresBN(CTRes.strCodRespuesta, Req.nNumComprobante.ToString(), "Reversion correcta",
                                    AccionBNServ.ToString(), Program.Jornada.ToString(), usuario);
                    ArqJornadaBNHR();
                }
                else
                {//ERROR EN REVERSION
                    //Almacenar el estado de la reversion BD
                    BitacoraErroresBN(CTRes.strCodRespuesta, Req.nNumComprobante.ToString(),
                        "Error al reversar " + CTRes.strDescripcionRespuesta,
                                    AccionBNServ.ToString(), Program.Jornada.ToString(), usuario);
                    //BitacoraReversionBN(Req.nNumComprobante.ToString(), "Error al reversar", CTRes.strCodRespuesta + " " + CTRes.strDescripcionRespuesta);
                    GUI.CApp.ShowMessage("Error al reversar " + CTRes.strCodRespuesta + " " + CTRes.strDescripcionRespuesta, "ERROR", false);
                }
            }
            catch (SoapException err)
            {
                //Almacenar el estado de la reversion BD
                BitacoraErroresBN("", Req.nNumComprobante.ToString(),
                    "Error al reversar " + Convert.ToString(err.Detail.FirstChild.Value), AccionBNServ.ToString(), Program.Jornada.ToString(), usuario);
                //BitacoraReversionBN(Req.nNumComprobante.ToString(), "Error al reversar", Convert.ToString(err.Detail.FirstChild.Value));
                GUI.CApp.ShowMessage("Error al reversar " + Convert.ToString(err.Detail.FirstChild.Value), "ERROR", false);
            }
            catch (Exception er)
            {
                //Almacenar el estado de la reversion BD
                BitacoraErroresBN("", Req.nNumComprobante.ToString(),
                    "Error al reversar " + er.Message, AccionBNServ.ToString(), Program.Jornada.ToString(), usuario);
                GUI.CApp.ShowMessage("Error al reversar " + er.Message, "ERROR", false);
            }
        }

        private void ConsultaPago(ConectBN.EjecutarPagoServicioReq Req)
        {
            //Obtiene el usuario que dio autorización para realizar la consulta y reversión del pago
            string usuario = GUI.CApp.Sup != null ? GUI.CApp.Sup : GUI.CApp.usuario;
            //WEB SERVICE CON SUS MÉTODOS
            ConectBN.Convenios WSBNServicios = new ConectBN.Convenios();
            WSBNServicios.Credentials = new NetworkCredential("ekono", "ekonobncr2014");

            //Pago de Servicios
            ConectBN.ConsultarTransaccionReq CTReq = new ConectBN.ConsultarTransaccionReq();
            ConectBN.ConsultarTransaccionRes CTRes = new ConectBN.ConsultarTransaccionRes();

            CTReq.dtFecha = DateTime.Now;
            CTReq.nCodAgencia = Req.nCodAgencia;
            CTReq.nCodBanco = Req.nCodBanco;
            CTReq.nCodEmpresa = Req.nCodEmpresa;
            CTReq.strComprobante = Req.nNumComprobante.ToString();
            CTReq.strTipoCanal = Req.strTipoCanal;
            CTReq.nCodConvenio = Req.nCodConvenio;

            CTRes = WSBNServicios.ConsultarTransaccion(CTReq);

            ////Crear un objeto serializado para la clase contactos
            //XmlSerializer objWriter = new XmlSerializer(typeof(ConectBN.ConsultarTransaccionReq));
            ////Crear un objeto file de tipo StremWriter para almacenar el documento xml
            //StreamWriter objfile = new StreamWriter("C://CONSULTTRANSRequest.xml");
            ////Serializar y crear el documento XML
            //objWriter.Serialize(objfile, CTReq);
            ////Cerrar el archivo
            //objfile.Close();

            ////Crear un objeto serializado para la clase contactos
            //XmlSerializer objWriter2 = new XmlSerializer(typeof(ConectBN.ConsultarTransaccionRes));
            ////Crear un objeto file de tipo StremWriter para almacenar el documento xml
            //StreamWriter objfile2 = new StreamWriter("C://CONSULTATRANSResponse.xml");
            ////Serializar y crear el documento XML
            //objWriter2.Serialize(objfile2, CTRes);
            ////Cerrar el archivo
            //objfile2.Close();

            if (CTRes.strCodRespuesta == "00")//Correcto
            {
                if (CTRes.strEstado == "1")//Procesado
                {
                    BitacoraErroresBN(CTRes.strEstado, CTReq.strComprobante, "Consulta éxitosa",
                        emAccion.C.ToString(), Program.Jornada.ToString(), usuario);

                    reversionBNservicios(CTRes, Req);
                }
                else
                {
                    BitacoraErroresBN(CTRes.strEstado, CTReq.strComprobante, "Estado transacción diferente de 1, " + CTRes.strCodRespuesta + " "
                         + CTRes.strDescripcionRespuesta,
                        emAccion.C.ToString(), Program.Jornada.ToString(), usuario);
                }
            }
            else
            {
                GUI.CApp.ShowMessage("Error al consultar la transaccion " + CTRes.strCodRespuesta + " " + CTRes.strDescripcionRespuesta,
                    "ERROR", true);
                BitacoraErroresBN(CTRes.strCodRespuesta, CTReq.strComprobante,
                    "Error al consultar la transaccion " + CTRes.strCodRespuesta + " " + CTRes.strDescripcionRespuesta,
                                    emAccion.C.ToString(), Program.Jornada.ToString(), usuario);
            }
        }

        /// <summary>Arqueo de la Jornada Actual </summary>
        private void ArqJornadaBN()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
            qp.AddReplaceParam("pCaja", Program.Caja.ToString());

            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "C_REPORTE_BNSERV_ARQ", qp);
            LLNet.Tienda.Reportes.CR_ArqServicios objRpt = new LLNet.Tienda.Reportes.CR_ArqServicios();
            LLNet.Tienda.Reportes.dsArqServicios dsdatos = new LLNet.Tienda.Reportes.dsArqServicios();

            objRpt.Load("C\\ekono\\POS Retail 8.0.0\\CR_ArqServicios.rpt");

            long total = 0; //monto total de la suma de los montos de cada recibo

            foreach (DataRow Fila in dsB.Tables[0].Rows)
            {
                object[] datos = new object[6];

                datos[0] = Convert.ToString(Fila[0]); //FECHA
                datos[2] = Convert.ToString(Fila[1]); //NUMERO 
                datos[3] = Convert.ToString(Fila[2]); //RECIBO
                datos[1] = Convert.ToDouble(Fila[3]); //MONTO          
                datos[4] = Convert.ToString(Fila[4]); //OPERADOR          
                datos[5] = Convert.ToString(Fila[5]); //PROVEEDOR          
                total += Convert.ToInt64(Fila[2]);
                dsdatos.Tables[0].Rows.Add(datos);
            }

            string[] totales = new string[5];
            totales[0] = Program.Jornada.ToString(); //JORNADA
            totales[1] = Program.Caja.ToString(); //CAJA
            totales[2] = total.ToString(); //MONTO TOTAL
            totales[3] = string.Empty; //SUB TOTAL ALO PREPAGO
            totales[4] = string.Empty; //SUB TOTAL PUNTOS NARANJA                

            dsdatos.Tables[1].Rows.Add(totales);

            objRpt.SetDataSource((DataSet)dsdatos);

            crystalReportViewer1.ReportSource = objRpt;
            crystalReportViewer1.Refresh();

            GridCRepJorn.Refresh();
        }

        private void sBtnRepAgua_Click(object sender, EventArgs e)
        {
            btnRecargar.Enabled = false;
            GridCRepJorn.DataSource = null;
            GridCRepJorn.Refresh();
            pnCReportes.Visible = true;
            ArqJornadaBN();
            pnlTelefonia.Visible = true;
            pnArea.Visible = false;
            pnlAgua.Visible = false;
        }

        /* 
        private void btnmcolns_Click(object sender, EventArgs e)
        {
            if (txtmoneda.Text == "COL")
            {
                foreach (int celda in gridView3.GetSelectedRows())
                {
                    TXTMONTOCOL.Text = Convert.ToString(Convert.ToDecimal(gridView3.GetRowCellValue(celda, gridView3.Columns[3])));
                }
            }
            else
            {
                if (txtmoneda.Text == "DOL")
                {
                    foreach (int celda in gridView3.GetSelectedRows())
                    {
                        decimal varDOLAR = Convert.ToDecimal(GUI.CApp.bll.GetSingleValue("DOLAR", "PDV"));
                        TXTMONTOCOL.Text = Convert.ToString(Convert.ToDecimal(gridView3.GetRowCellValue(celda, gridView3.Columns[3])) * varDOLAR);
                    }
                }
            }
        }*/

        private void cBoxAgua_Llave_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (cBoxAgua_Llave.SelectedIndex >= 0)
                {
                    varLlave = cBoxAgua_Llave.Text;
                }
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message, "ERROR", true);
            }
        }

        private void sBtnAgua_Reimp_Click(object sender, EventArgs e)
        {
            btnTelefonia.PerformClick();

            this.sbtnImprimir.Visible = true;//IGF

            btnRecargar.Enabled = false;
            pnCReportes.Visible = true;
            pnArea.Visible = false;
            ReporteJornada();
        }

        private void gridView3_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            if (gridView3.RowCount > 0 && gridView3.Columns.Count > 0)
            {
                txtmonto.Text = Convert.ToString(gridView3.GetRowCellValue(e.FocusedRowHandle, gridView3.Columns[3]));
                string mes = Convert.ToString(gridView3.GetRowCellValue(e.FocusedRowHandle, gridView3.Columns[2]));
                mesICE(mes);
            }
        }

        private bool ValidaTPago()
        {
            bool val = false;
            /*
             E - monto exacto
             C - cualquier monto
             M - puede pagar montos mayores
             N - puede pagar montos menores
             */
            ConectBN.Convenios1 cv = (ConectBN.Convenios1)Lconvenios[iCBoxAgua_Conv.SelectedIndex];
            switch (cv.strTipoPago)
            {
                case "E": //"eXACTO";
                    foreach (int handle in gridView3.GetSelectedRows())
                    {
                        if (decimal.Parse(txtmonto.Text) == decimal.Parse(Convert.ToString(gridView3.GetRowCellValue(handle, gridView3.Columns[3]))))
                            val = true;
                    }
                    break;
                case "C"://"CUALQUIERA";                    
                    val = true;
                    break;
                case "M"://"puede pagar montos mayores";
                    foreach (int handle in gridView3.GetSelectedRows())
                    {
                        if (decimal.Parse(txtmonto.Text) >= decimal.Parse(Convert.ToString(gridView3.GetRowCellValue(handle, gridView3.Columns[3]))))
                            val = true;
                    }
                    break;
                case "N"://"puede pagar montos menores";
                    foreach (int handle in gridView3.GetSelectedRows())
                    {
                        if (decimal.Parse(txtmonto.Text) <= decimal.Parse(Convert.ToString(gridView3.GetRowCellValue(handle, gridView3.Columns[3]))))
                            val = true;
                    }
                    break;
            }
            return val;
        }


        private bool ValidaOAntiguedad()
        {
            bool val = false;
            /*
             S - Si
             N - No
             */
            ConectBN.Convenios1 cv = (ConectBN.Convenios1)Lconvenios[iCBoxAgua_Conv.SelectedIndex];
            switch (cv.strValidarAntiguedad)
            {
                case "S": //SI
                    DateTime FEC;
                    val = true;
                    foreach (int handle in gridView3.GetSelectedRows())
                    {
                        FEC = Convert.ToDateTime(Convert.ToString(gridView3.GetRowCellValue(handle, gridView3.Columns[4])));
                        for (int fils = 0; fils < gridView3.RowCount; fils++)
                        {
                            DateTime FEC2 = Convert.ToDateTime(Convert.ToString(gridView3.GetRowCellValue(fils, gridView3.Columns[4])));
                            if (FEC > FEC2)
                                val = false;
                        }
                    }
                    break;
                case "N"://NO
                    val = true;
                    break;
            }
            return val;
        }


        private void sBtnRev_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("RevBNServ", "Reversion BN Servicios"))
            {
                sbtnPagar.Visible = false;
                btnRecargar.Enabled = false;
                panel4.Visible = true;
                panel3.Visible = false;
                ArqJornadaBNHR();
                AccionBNServ = emAccion.R;
                //pnlTelefonia.Visible = true;
                //pnArea.Visible = false;
                //pnlAgua.Visible = false;
                //pnAgua_Area.Visible = true;
            }
        }

        /// <summary>Arqueo de la Jornada Actual </summary>
        private void ArqJornadaBNHR()
        {
            gCtrlHRev.DataSource = null;
            gCtrlHRev.Refresh();

            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
            qp.AddReplaceParam("pCaja", Program.Caja.ToString());

            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "C_REPORTE_BNSERV_ARQ", qp);
            gCtrlHRev.DataSource = dsB.Tables[0];
            gCtrlHRev.Refresh();
        }

        #region PagosIncompletos

        //IGF
        /// <summary>
        /// Obtiene y carga la lista de pagos que se procesaron
        /// en el banco, pero no en la caja
        /// </summary>
        private void PagosIncompletos()
        {
            //Fecha de consulta de pagos incompletos
            DateTime fechaCons =
                Convert.ToDateTime(
                    Helpers.Nvl(GUI.CApp.bll.GetSingleValue("fecha", "General"),
                    DateTime.Now.ToShortDateString()).ToString());

            //Limpia el grid
            gCtrlHRev.DataSource = null;
            gCtrlHRev.Refresh();

            //Agrega el parámetro de la consulta
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            //Obtiene la fecha del servidor, en caso que la función no devuelva datos,
            //se obtiene la fecha de la caja para hacer la consulta
            qp.AddReplaceParam("pFECHA", fechaCons.ToShortDateString());

            //Llama y llena el DataSet con el resultado de la consulta
            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "C_REPORTE_PAGOS_INCOMPLETOS", qp);
            //Verifica que tenga datos
            if (dsB.Tables.Count > 0 && dsB.Tables[0].Rows.Count > 0)
            {
                //Carga los datos en el grid
                gCtrlHRev.DataSource = dsB.Tables[0];
                gCtrlHRev.Refresh();
            }
        }

        #endregion

        private void sBtnRevP_Click(object sender, EventArgs e)
        {
            try
            {
                foreach (int handle in gridView4.GetSelectedRows())
                {
                    Utils.QueryParams qp2 = new LLNet.Utils.QueryParams();
                    qp2.AddReplaceParam("pCOMPR", Convert.ToString(gridView4.GetRowCellValue(handle, gridView4.Columns["COMPROBANTE"])));
                    DataSet dsB2 = GUI.CApp.bll.getDataSet("PDV", "REQ_X_COMPR", qp2);
                    foreach (DataRow Fila in dsB2.Tables[0].Rows)
                    {
                        ConectBN.EjecutarPagoServicioReq PagoReq = new ConectBN.EjecutarPagoServicioReq();
                        /*
                                0               1           2                   
                       W.NNUMCOMPROBANTE, W.NCODBANCO, W.NCODAGENCIA, 
                         *      3           4           5
                       W.STRTIPOCANAL, W.NCODEMPRESA, W.NCODCONVENIO, 
                         *      6           7               8
                       W.STRVALORSERV, W.STRPERIODO, W.NMONTOTOTAL, 
                         *      9           10              11
                       W.DTFECHAVTO, W.STRNUMFACTURA, W.NSELFVERIFIC, 
                         *      12          13              14  
                       W.STRCODMONEDA, W.NNUMCUOTAS, W.ARRTPAGO_NMONTOT, 
                         *      15          16          17
                       W.STRRECIBO, W.NTIPOLLAVE, W.CREADO_EL, 
                         *      18          19          20
                       W.INSTITUCION, W.CONVENIO, W.CLIENTE, 
                         * 21
                       W.LLAVE 
                         */
                        PagoReq.dtFechaVto = Convert.ToDateTime(Fila[9]); //FECHA
                        PagoReq.nCodAgencia = Convert.ToInt16(Fila[2]); //NUMERO 
                        PagoReq.nCodBanco = Convert.ToInt16(Fila[1]); //RECIBO
                        PagoReq.nCodConvenio = Convert.ToInt16(Fila[5]); //MONTO          
                        PagoReq.nCodEmpresa = Convert.ToInt16(Fila[4]); //OPERADOR          
                        PagoReq.nMontoTotal = Convert.ToDecimal(Fila[8]); //PROVEEDOR          
                        PagoReq.nNumComprobante = Convert.ToInt32(Fila[0]);
                        PagoReq.nNumCuotas = Convert.ToInt16(Fila[13]);
                        PagoReq.nSelfVerificacion = Convert.ToInt32(Fila[11]);
                        PagoReq.nTipoLlave = Convert.ToInt16(Fila[16]);
                        PagoReq.strCodMoneda = Convert.ToString(Fila[12]);
                        PagoReq.strNumFactura = Convert.ToString(Fila[10]);
                        PagoReq.strPeriodo = Convert.ToString(Fila[7]);
                        PagoReq.strRecibo = Convert.ToString(Fila[15]);
                        PagoReq.strTipoCanal = Convert.ToString(Fila[3]);
                        PagoReq.strValorServicio = Convert.ToString(Fila[6]);
                        ConsultaPago(PagoReq);

                        if (AccionBNServ == emAccion.RR)
                            PagosIncompletos();
                    }
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Error", true);
            }
        }

        #region sbtnRevisarPago_Click
        //IGF
        // Para reversar un pago incorrecto
        private void sbtnRevisarPago_Click(object sender, EventArgs e)
        {
            try
            {
                //Valida que el usuario tenga permisos para revisar la transacción,
                //de lo contrario solicita el usuario y clave de un usuario autorizado
                if (GUI.CApp.ValidateAccess("RevBNServ", "Reversion BN Servicios"))
                {
                    //Muestra la pantalla con la imagen de cargando
                    using (frmCargando frmC = new frmCargando())
                    {
                        frmC.Intervalo = 60000;//1 minuto
                        frmC.Mensaje = "Conectando...";
                        frmC.ShowDialog();
                    }

                    AccionBNServ = emAccion.RR;
                    sbtnPagar.Visible = false;
                    btnRecargar.Enabled = false;
                    panel4.Visible = true;
                    panel3.Visible = false;
                    //Carga los datos de los pagos en el grid
                    PagosIncompletos();
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Error", true);
            }
        }
        #endregion

        #endregion

        #region Recargas Claro Nicaragua DLQG

        private void btnClaroNic_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("IRECNIC", "Integracion Recargas Nicaragua"))
            {
                pnlTelefonia.Visible = false;
                pnlAgua.Visible = false;

                this.sbtnImprimir.Visible = false;//IGF

                sBtnRecNic.Visible = true;
                sBtnRecNic.Enabled = true;
                sbtnPagar.Visible = false;
                btnRecargar.Visible = false;
                btnRecargar.Enabled = false;
                pnArea.Visible = false;
                pnCReportes.Visible = false;
                pnlClaroNic.Visible = true;
                pnlWesternUnion.Visible = false;
                txttelNicCol.Focus();
            }
        }



        private void txtMontDolNic_TextChanged(object sender, EventArgs e)
        {

        }

        private void sBtnNic_Click(object sender, EventArgs e)
        {
            try
            {
                //Revisa el tipo de pago segun el tab
                if (tabCtrlRecNic.SelectedTab.Name == "tabPagColones")
                {//pago en colones
                    if (float.Parse(txtMontDoldispNic.Text) < float.Parse(txtMontRecDolNic.Text))
                    {
                        GUI.CApp.ShowMessage("El monto a recargar no puede ser mayor al disponible", "ERROR", true);
                        return;
                    }

                    if (txttelNicCol.Text.Trim() == string.Empty)
                    {
                        GUI.CApp.ShowMessage("Digite el número de teléfono en Nicaragua", "Datos de Recarga Nicaragua", false);
                        return;
                    }

                    //MONTO MÍNIMO DE LA RECARGA
                    if (int.Parse(txtMontRecDolNic.Text.Trim()) < int.Parse(varHMasMin))
                    {
                        GUI.CApp.ShowMessage("El monto mínimo de la recarga es de: " + varHMasMin, "Datos de Recarga Nicaragua", false);
                        return;
                    }

                }
                else
                {//pago en dolares
                    if (float.Parse(txtpagDolNic.Text) < float.Parse(txtrecDolDolNic.Text))
                    {
                        GUI.CApp.ShowMessage("El monto a recargar no puede ser mayor al disponible", "ERROR", true);
                        return;
                    }

                    if (txttelnicdol.Text.Trim() == string.Empty)
                    {
                        GUI.CApp.ShowMessage("Digite el número de teléfono en Nicaragua", "Datos de Recarga Nicaragua", false);
                        return;
                    }

                    //MONTO MÍNIMO DE LA RECARGA
                    if (int.Parse(txtrecDolDolNic.Text.Trim()) < int.Parse(varHMasMin))
                    {
                        GUI.CApp.ShowMessage("El monto mínimo de la recarga es de: " + varHMasMin, "Datos de Recarga Nicaragua", false);
                        return;
                    }

                }


                bool estado = false;
                bool UsrNic = false, suscptrNic = false;
                decimal saldo = 0;
                //UsrNic = ExisteUserNic();
                //suscptrNic = ExisteSuscriptorNic("505" + txttelNic.Text.Trim());
                //saldo = SaldoNic();

                if (tabCtrlRecNic.SelectedTab.Name == "tabPagColones")
                {//pago en colones
                    //Almacena el Intento
                    BitacoraIntentosNIC(txtMontDoldispNic.Text.Trim(), txtMontRecDolNic.Text.Trim(), txttelNicCol.Text.Trim(), txtnumCliNic.Text.Trim(), txtPagaCnCol.Text, txtvueltoColNic.Text, "1");
                    estado = SetRechargeNic("505" + txttelNicCol.Text.Trim(), txtnumCliNic.Text.Trim(), txtMontRecDolNic.Text.Trim());

                }
                else
                {//pago en dolares
                    //Almacena el Intento
                    BitacoraIntentosNIC(txtpagDolNic.Text.Trim(), txtrecDolDolNic.Text.Trim(), txttelnicdol.Text.Trim(), txtnumClidolNic.Text.Trim(), txtpagDolNic.Text, txtVueltColDolNic.Text, "2");
                    estado = SetRechargeNic("505" + txttelnicdol.Text.Trim(), txtnumClidolNic.Text.Trim(), txtrecDolDolNic.Text.Trim());

                }
                LimpiartxtNic();

            }
            catch (SoapException err)
            {
                GUI.CApp.ShowMessage(Convert.ToString(err.Detail.FirstChild.Value), "ERROR", true);
                BitacoraIntentosENic(id, "Soap:" + Convert.ToString(err.Detail.FirstChild.Value));
            }
            catch (Exception er)
            {
                GUI.CApp.ShowMessage(er.Message, "ERROR", true);
                BitacoraIntentosENic(id, Convert.ToString(er.Message));
            }
        }

        private bool ExisteUserNic()
        {
            bool existe = false;
            //WEB SERVICE CON SUS MÉTODOS
            CntHablaMas.WSgenericRT WSHablaMas = new CntHablaMas.WSgenericRT();
            // WSBNServicios.Credentials = new NetworkCredential("ekono", "ekonobncr2014");

            //Consulta de usuarios
            CntHablaMas.EsisteUserReq EUReq = new CntHablaMas.EsisteUserReq();
            CntHablaMas.ExisteUserRes EURes = new CntHablaMas.ExisteUserRes();

            EUReq.UserCode = varHMasUsr;
            EUReq.UserAccessKey = varHMasPwd;

            EURes = WSHablaMas.GetExisteUser(EUReq);
            MessageBox.Show(EURes.Value.ToString());
            existe = EURes.Value;

            return existe;
        }

        private bool ExisteSuscriptorNic(string NumNic)
        {
            bool existe = false;
            //WEB SERVICE CON SUS MÉTODOS
            CntHablaMas.WSgenericRT WSHablaMas = new CntHablaMas.WSgenericRT();
            // WSBNServicios.Credentials = new NetworkCredential("ekono", "ekonobncr2014");

            //Consulta de usuarios
            CntHablaMas.ExisteSubscriptorReq ESReq = new CntHablaMas.ExisteSubscriptorReq();
            CntHablaMas.ExisteSubscriptorRes ESRes = new CntHablaMas.ExisteSubscriptorRes();

            ESReq.UserCode = varHMasUsr;
            ESReq.UserAccessKey = varHMasPwd;
            ESReq.NumberPhone = NumNic;

            ESRes = WSHablaMas.GetExisteSubscriptor(ESReq);
            MessageBox.Show(ESRes.Value.ToString());
            existe = ESRes.Value;

            return existe;
        }

        private decimal SaldoNic()
        {
            decimal saldo = 0;
            //WEB SERVICE CON SUS MÉTODOS
            CntHablaMas.WSgenericRT WSHablaMas = new CntHablaMas.WSgenericRT();
            // WSBNServicios.Credentials = new NetworkCredential("ekono", "ekonobncr2014");

            //Consulta de usuarios
            CntHablaMas.SaldoReq SReq = new CntHablaMas.SaldoReq();
            CntHablaMas.SaldoRes SRes = new CntHablaMas.SaldoRes();

            SReq.UserCode = varHMasUsr;
            SReq.UserAccessKey = varHMasPwd;

            SRes = WSHablaMas.GetSaldo(SReq);
            MessageBox.Show(SRes.Value.ToString());
            saldo = SRes.Value;

            return saldo;
        }

        private bool SetRechargeNic(string NumNic, string NumCli, string MontoDol)
        {
            if (NumCli == string.Empty)
                NumCli = NumNic;
            bool exito = false;
            //WEB SERVICE CON SUS MÉTODOS
            CntHablaMas.WSgenericRT WSHablaMas = new CntHablaMas.WSgenericRT();
            //WSBNServicios.Credentials = new NetworkCredential("ekono", "ekonobncr2014");

            //Consulta de usuarios
            CntHablaMas.RechargeReq RGReq = new CntHablaMas.RechargeReq();
            CntHablaMas.RechargeRes RSRes = new CntHablaMas.RechargeRes();

            RGReq.UserCode = varHMasUsr; //usuario que identifica la empresa
            RGReq.UserAccessKey = varHMasPwd; //Clave
            RGReq.NumberPhoneTarget = NumNic; //Número a  recargar
            RGReq.NumberPhoneSource = NumCli; // número del cliente que realiza la recarga
            RGReq.Amount = int.Parse(MontoDol.Trim()); //monto
            RGReq.IDAccountBranch = varHMasSuc; //identifica la sucursal


            RSRes = WSHablaMas.SendRecharge(RGReq);
            //registra la respuesta del proveedor
            RegistroBDResNic(RSRes);
            //MessageBox.Show(RSRes.NumberTrans.ToString() + RSRes.CodState.ToString() );
            if (RSRes.CodState.ToString() == "0")
            {
                exito = true;
                long varDocumento = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("SEC_DOCUMENTO", "PDV"));

                //Revisa el tipo de pago segun el tab
                if (tabCtrlRecNic.SelectedTab.Name == "tabPagColones")
                {//pago en colones
                    //registra datos para el recibo
                    RegistroBDRecNic(varDocumento, RSRes.NumberTrans, MontoDol, RSRes.NumberPhoneTarget, "1", varHMasDolarCompra);
                }
                else
                {//pago en dolares
                    RegistroBDRecNic(varDocumento, RSRes.NumberTrans, MontoDol, RSRes.NumberPhoneTarget, "2", varHMasDolarCompra);
                }
                //imprime el recibo
                ImpFactRecNic(varDocumento);
            }
            else
            {
                GUI.CApp.ShowMessage("Error al realizar la recarga :" + RSRes.CodState, "Error", false);
                BitacoraIntentosENic(id, "Error al realizar la recarga :" + RSRes.CodState);
            }

            return exito;
        }

        //Almacena cada intento de recargar - crea la bitacora 
        //EKO_P_BITAC_INTNIC(&&pID&&,'&&pNUMRECNIC&&','&&pNUMCLIENTE&&',&&pMONTODOL&&,&&pDOLDISP&&,&&pJORNADA&&, &&pPAGACON&&, &&pVUELTO&&, &&pMONEDA&&, &&pDCompra&& , &&pDVenta&&);

        /// <summary>
        /// 
        /// </summary>
        /// <param name="DOLDISP"> cantidad de dolares que puede utilizar para recargar segun con lo q paga</param>
        /// <param name="montoDol">monto a recargar</param>
        /// <param name="telefNic">telefono a recargar</param>
        /// <param name="telefCli">telefono del cliente</param>
        /// <param name="PAGACON">Colones o dolares con los que pago</param>
        /// <param name="VUELTO">vuelto en colones</param>
        /// <param name="MONEDA">moneda con la que pago</param>
        private void BitacoraIntentosNIC(string DOLDISP, string montoDol, string telefNic, string telefCli,
           string PAGACON, string VUELTO, string MONEDA)
        {
            id = "";
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            id = Convert.ToString(GUI.CApp.bll.GetSingleValue("C_SEC_LOG_HABLAMAS", qp, "PDV"));
            qp.AddReplaceParam("pJORNADA", Program.Jornada.ToString());
            qp.AddReplaceParam("pNUMRECNIC", telefNic);
            qp.AddReplaceParam("pNUMCLIENTE", telefCli);
            qp.AddReplaceParam("pMONTODOL", montoDol); //lo q va a recargar
            qp.AddReplaceParam("pDOLDISP", DOLDISP); //los dolares disponibles que puede recargar
            qp.AddReplaceParam("pPAGACON", PAGACON); //Dolares o colones con los que paga el cliente
            qp.AddReplaceParam("pVUELTO", VUELTO); //
            qp.AddReplaceParam("pMONEDA", MONEDA);
            qp.AddReplaceParam("pID", id);
            qp.AddReplaceParam("pDCompra", varHMasDolarCompra);
            qp.AddReplaceParam("pDVenta", varHMasDolarVenta);
            // Llama el procedimiento que almacena los datos del intento de recarga a nicaragua en la BD, lo que se envia
            GUI.CApp.bll.ExecuteSql("WMS_P_BITACN_INT", qp, "PDV");
        }

        //Actualiza el intento de recarga como correcto
        private void BitacoraIntentosCNIC(string ID)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pID", ID);
            // Llama el procedimiento que almacena el estado de correcto de la recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_BITACN_INT_C", qp, "PDV");
        }

        private void btnDavivienda_Click(object sender, EventArgs e)
        {
            /*
            if (GUI.CApp.ValidateAccess("IDAVIVIENDA", "Integracion Davivienda"))
            {
                //Forms.OtrosServ.DHL.FrmDHL frmDHL = new OtrosServ.DHL.FrmDHL();
                //frmDHL.ShowDialog();
            }*/

            Forms.OtrosServ.Davivienda.FrmDavivienda frmDavivienda = new Forms.OtrosServ.Davivienda.FrmDavivienda();
            frmDavivienda.ShowDialog();

        }

        private void RegistroBDResNic(CntHablaMas.RechargeRes Resp)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            if (id == string.Empty)
            {
                GUI.CApp.ShowMessage("EL Id se encuentra vacío", "Error", false);
                qp.AddReplaceParam("pID", id);
            }
            else
            {
                qp.AddReplaceParam("pID", id);
            }

            if (Resp.CodState.ToString() == string.Empty)
            {
                qp.AddReplaceParam("pCODSTATE", "0");
            }
            else
            {
                qp.AddReplaceParam("pCODSTATE", Resp.CodState.ToString());
            }

            if (Resp.NumberTrans.ToString() == string.Empty)
            {
                qp.AddReplaceParam("pNUMBERTRANS", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pNUMBERTRANS", Resp.NumberTrans.ToString());
            }

            // qp.AddReplaceParam("pCODSTATE", Resp.CodState.ToString());
            // qp.AddReplaceParam("pNUMBERTRANS", Resp.NumberTrans.ToString());

            // Llama el procedimiento que almacena los datos de la recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_BITAC_RESNIC", qp, "PDV");
        }

        private void RegistroBDRecNic(long pdocumento, string idtransprov, string total, string telef, string moneda, string tasacambio)
        {
            //&&pID&&,&&pDocumento&&,&&pCaja&&,'&&pUsuario&&',&&pTotal&&,&&pJornada&&,'&&pIdTRans&&', '&&pTelefono&&',&&pMoneda&&,&&pTasa_Cambio&&);
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pID", id);
            qp.AddReplaceParam("pDocumento", pdocumento.ToString());
            qp.AddReplaceParam("pCaja", Program.Caja.ToString());
            qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);
            qp.AddReplaceParam("pTotal", total);
            qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
            qp.AddReplaceParam("pIdTRans", idtransprov);
            qp.AddReplaceParam("pTelefono", telef);
            qp.AddReplaceParam("pMoneda", moneda);
            qp.AddReplaceParam("pTasa_Cambio", tasacambio);
            // Llama el procedimiento que almacena los datos de la recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_RECIBOHABLAMAS", qp, "PDV");

            //CargarReporte2(varDocumento.ToString());
        }

        //Actualiza el intento de recarga con el error
        private void BitacoraIntentosENic(string ID, string ERROR)
        {
            ERROR = ERROR.Replace("'", " ");
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pError", ERROR);
            qp.AddReplaceParam("pID_INT", ID);
            // Llama el procedimiento que almacena el error de la recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_BITACN_INT_E", qp, "PDV");
        }

        /// <summary>Imprime la factura </summary>
        /// <param name="doc"></param>
        private void ImpFactRecNic(long pdoc)
        {
            object FormatoTipoImpresion = null;
            QueryParams qparams = new LLNet.Utils.QueryParams();
            qparams = new LLNet.Utils.QueryParams();
            qparams.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'RHM");
            Model.General.CgRefCodes dsDocTienda = new LLNet.Model.General.CgRefCodes();
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsDocTienda.GetType(), dsDocTienda.DOMAINS.TableName, qparams), dsDocTienda);
            string format = Utils.Helpers.Nvl(FormatoTipoImpresion, dsDocTienda.DOMAINS[0].RV_MPCC02).ToString();

            imprimirDocumentoDOS(pdoc, "", Convert.ToInt64(format));

            //Cantidad de impresiones
            QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("DOCUMENTO", pdoc.ToString());
            CApp.bll.ExecuteSql("WMS_P_RECARGIMPRESIONES", qp, "PDV");

        }

        private void LimpiartxtNic()
        {
            txtMontDoldispNic.Text = varHMasMin;
            txttelNicCol.Text = string.Empty;
            txtnumCliNic.Text = string.Empty;
        }

        private void sBtnReimpRecNic_Click(object sender, EventArgs e)
        {
            btnTelefonia.PerformClick();

            this.sbtnImprimir.Visible = true;//IGF

            btnRecargar.Enabled = false;
            pnCReportes.Visible = true;
            pnArea.Visible = false;
            ReporteJornada();
        }

        private void sBtnRepRecNic_Click(object sender, EventArgs e)
        {
            btnRecargar.Enabled = false;
            GridCRepJorn.DataSource = null;
            GridCRepJorn.Refresh();
            pnCReportes.Visible = true;
            ArqJornadaRecNic();
            pnlTelefonia.Visible = true;
            pnArea.Visible = false;
            pnlAgua.Visible = false;
            btnTelefonia.PerformClick();
        }

        /// <summary>Arqueo de la Jornada Actual </summary>
        private void ArqJornadaRecNic()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
            qp.AddReplaceParam("pCaja", Program.Caja.ToString());

            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "C_REPORTE_RECNIC_ARQ", qp);
            LLNet.Tienda.Reportes.CR_RecNic objRpt = new LLNet.Tienda.Reportes.CR_RecNic();
            LLNet.Tienda.Reportes.dsArqRecNic dsdatos = new LLNet.Tienda.Reportes.dsArqRecNic();

            objRpt.Load("C\\ekono\\POS Retail 8.0.0\\CR_RecNic.rpt");

            long total = 0; //monto total de la suma de los montos de cada recibo

            // N.MONTOD, N.RECIBO_NO FROM wms_v_RECARGANIC N WHERE DOCUMENTO IN ( SELECT DOCUMENTO FROM WMS_DOCUMENTOS W where W.JORNADA = &&pJornada&& AND W.CAJA = &&pCaja&& ) ORDER BY FECHA DESC
            if (dsB.Tables.Count > 0)
            {
                foreach (DataRow Fila in dsB.Tables[0].Rows)
                {
                    object[] datos = new object[4];

                    datos[0] = Convert.ToString(Fila[0]); //FECHA fecha
                    datos[1] = Convert.ToString(Fila[1]); //NUM_SERVICIO  numero
                    datos[2] = Convert.ToString(Fila[3]); //MONTO Dolares recibo
                    datos[3] = Convert.ToDouble(Fila[2]); //recibo
                    total += Convert.ToInt64(Fila[3]);
                    dsdatos.Tables[1].Rows.Add(datos);
                }
            }

            string[] totales = new string[3];
            totales[0] = Program.Jornada.ToString(); //JORNADA
            totales[1] = Program.Caja.ToString(); //CAJA
            totales[2] = string.Empty; //MONTO TOTAL            

            dsdatos.Tables[0].Rows.Add(totales);

            objRpt.SetDataSource((DataSet)dsdatos);

            crystalReportViewer1.ReportSource = objRpt;
            crystalReportViewer1.Refresh();

            GridCRepJorn.Refresh();


        }

        #endregion

        #region Western Union

        private void btnWestUnion_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("IWESTERNUNION", "Integracion Western Union"))
            {
                Forms.OtrosServ.WU.FrmWesternUnion frmWestUni = new Forms.OtrosServ.WU.FrmWesternUnion();
                frmWestUni.ShowDialog();
                /*
                pnlWesternUnion.Visible = true;
                pnlTelefonia.Visible = false;
                pnlAgua.Visible = false;

                this.sbtnImprimir.Visible = false;//IGF

                sbtnPagar.Visible = false;
                btnRecargar.Visible = false;
                btnRecargar.Enabled = false;
                sBtnRecNic.Visible = false;
                sBtnRecNic.Enabled = false;
                pnArea.Visible = false;
                pnCReportes.Visible = false;
                pnlClaroNic.Visible = false;
                 * */
            }
        }

        private void sBtnEnvio_Click(object sender, EventArgs e)
        {
            pnlCntrolEnvioWU.Visible = true;
            pnlControlCompWU.Visible = false;
            pnlControlReimpWU.Visible = false;
            sbtnImprimir.Visible = false;
            Uri dirweb = new Uri("http://www.google.co.cr");
            webBrwsr.Url = dirweb;
            webBrwsr.Navigate(dirweb);
        }

        private void sBtnComprbt_Click(object sender, EventArgs e)
        {
            pnlCntrolEnvioWU.Visible = false;
            pnlControlCompWU.Visible = true;
            pnlControlReimpWU.Visible = false;
            sbtnImprimir.Visible = false;
            LlenarComprobantes();
        }

        /// <summary>Obtiene los parámetros necesarios de cada tienda </summary>
        private void LlenarComprobantes()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);// pUsuario
            //CONSULTA LOS PARÁMETROS DE LA BD
            DataSet dsE = GUI.CApp.bll.getDataSet("PDV", "WU_ENVIOS", qp);
            DataSet dsP = GUI.CApp.bll.getDataSet("PDV", "WU_PAGOS", qp);

            if (dsE.Tables.Count > 0)
            {
                gdCtrlWUEnvio.DataSource = dsE.Tables[0];
            }
            else
            {
                gdCtrlWUEnvio.DataSource = null;
                gdCtrlWUEnvio.Refresh();
            }
            if (dsP.Tables.Count > 0)
            {
                gdCtrlWUPago.DataSource = dsP.Tables[0];
            }
            else
            {
                gdCtrlWUPago.DataSource = null;
                gdCtrlWUPago.Refresh();
            }
        }

        private void sBtnCompEnvioWU_Click(object sender, EventArgs e)
        {
            //registra datos para el recibo
            ComprobEnvioWU();
        }

        //Crear el comprobante de Western Union
        private void ComprobEnvioWU()
        {
            foreach (int handle in gridView7.GetSelectedRows())
            {
                //Id de la transaccion para almacenar los datos
                string IDE = Convert.ToString(gridView7.GetRowCellValue(handle, gridView7.Columns[0]));

                QueryParams qpV = new LLNet.Utils.QueryParams();
                qpV.AddReplaceParam("pID", IDE);
                //Facturado
                int vFacturado = Convert.ToInt16(GUI.CApp.bll.GetSingleValue("WU_ESTADO_TRA_E", qpV, "PDV"));
                //Valida si la transaccion ya fue facturada
                if (vFacturado < 1)
                {
                    if (IDE != string.Empty && IDE != "DOCUMENTO")
                    {
                        long varDocumento = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("SEC_DOCUMENTO", "PDV"));
                        //&&pID&& ,  &&pDocumento&& , &&pCaja&& , '&&pUsuario&&' , &&pJornada&& 
                        //Almacenar los datos del comprobante en la tienda y crear el recibo en wms_pague_servicios                
                        QueryParams qp = new LLNet.Utils.QueryParams();
                        qp.AddReplaceParam("pID", IDE);
                        qp.AddReplaceParam("pDocumento", varDocumento.ToString());
                        qp.AddReplaceParam("pCaja", Program.Caja.ToString());
                        qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);
                        qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
                        CApp.bll.ExecuteSql("WU_P_DENVIOS", qp, "PDV");

                        long DOCUM = long.Parse(varDocumento.ToString());

                        //imprimir el comprobante
                        ImpFactWesternUnion(DOCUM, 1);
                    }
                }
                else
                {
                    GUI.CApp.ShowMessage("El pago ya fue facturado, favor verifique en el reporte", "Error", false);
                }
            }
        }


        //Crear el comprobante de Western Union
        private void ComprobPagoWU()
        {
            foreach (int handle in gridView8.GetSelectedRows())
            {
                //Id de la transaccion para almacenar los datos
                string IDE = Convert.ToString(gridView8.GetRowCellValue(handle, gridView8.Columns[0]));

                QueryParams qpv = new LLNet.Utils.QueryParams();
                qpv.AddReplaceParam("pID", IDE);
                //Facturado
                int vFacturado = Convert.ToInt16(GUI.CApp.bll.GetSingleValue("WU_ESTADO_TRA_E", qpv, "PDV"));
                //Valida si la transaccion ya fue facturada
                if (vFacturado < 1)
                {
                    if (IDE != string.Empty && IDE != "DOCUMENTO")
                    {
                        long varDocumento = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("SEC_DOCUMENTO", "PDV"));
                        //&&pID&& ,  &&pDocumento&& , &&pCaja&& , '&&pUsuario&&' , &&pJornada&& 
                        //Almacenar los datos del comprobante en la tienda y crear el recibo en wms_pague_servicios                
                        QueryParams qp = new LLNet.Utils.QueryParams();
                        qp.AddReplaceParam("pID", IDE);
                        qp.AddReplaceParam("pDocumento", varDocumento.ToString());
                        qp.AddReplaceParam("pCaja", Program.Caja.ToString());
                        qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);
                        qp.AddReplaceParam("pJornada", Program.Jornada.ToString());
                        CApp.bll.ExecuteSql("WU_P_DPAGOS", qp, "PDV");

                        long DOCUM = long.Parse(varDocumento.ToString());

                        //imprimir el comprobante
                        ImpFactWesternUnion(DOCUM, 2);
                    }
                }
                else
                {
                    GUI.CApp.ShowMessage("El pago ya fue facturado, favor verifique en el reporte", "Error", false);
                }
            }
        }

        /// <summary>Imprime la factura </summary>
        /// <param name="doc"></param>
        private void ImpFactWesternUnion(long pdoc, int ptabla)
        {
            object FormatoTipoImpresion = null;
            QueryParams qparams = new LLNet.Utils.QueryParams();
            qparams = new LLNet.Utils.QueryParams();
            qparams.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'RWU");
            Model.General.CgRefCodes dsDocTienda = new LLNet.Model.General.CgRefCodes();
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsDocTienda.GetType(), dsDocTienda.DOMAINS.TableName, qparams), dsDocTienda);
            string format = Utils.Helpers.Nvl(FormatoTipoImpresion, dsDocTienda.DOMAINS[0].RV_MPCC02).ToString();

            imprimirDocumentoDOS(pdoc, "", Convert.ToInt64(format));

            //Cantidad de impresiones
            QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pDOCUMENTO", pdoc.ToString());
            qp.AddReplaceParam("pTABLA", ptabla.ToString());
            CApp.bll.ExecuteSql("WU_P_CANTIMP", qp, "PDV");
        }

        private void sBtnCompPagoWU_Click(object sender, EventArgs e)
        {
            ComprobPagoWU();
        }

        private void sBtn_Click(object sender, EventArgs e)
        {
            pnlCntrolEnvioWU.Visible = false;
            pnlControlCompWU.Visible = false;
            pnlControlReimpWU.Visible = true;
            sbtnImprimir.Visible = true;
            LlenarComprobImpr();
        }

        private void LlenarComprobImpr()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pUsuario", GUI.CApp.usuario); //Usuario
            qp.AddReplaceParam("pJornada", Program.Jornada.ToString()); //Jornada
            //CONSULTA LOS PARÁMETROS DE LA BD
            DataSet dsE = GUI.CApp.bll.getDataSet("PDV", "WU_DATOS_REIMP", qp);

            if (dsE.Tables.Count > 0)
            {
                gdCtlReimpWU.DataSource = dsE.Tables[0];
            }
            else
            {
                gdCtlReimpWU.DataSource = null;
                gdCtlReimpWU.Refresh();
            }
        }

        private void sBtnRepWU_Click(object sender, EventArgs e)
        {
            btnRecargar.Enabled = false;
            GridCRepJorn.DataSource = null;
            GridCRepJorn.Refresh();
            pnCReportes.Visible = true;
            ArqJornadaWU();
            pnlTelefonia.Visible = true;
            pnArea.Visible = false;
            pnlAgua.Visible = false;
            pnlWesternUnion.Visible = false;
            btnTelefonia.PerformClick();
        }

        /// <summary>Arqueo de la Jornada Actual </summary>
        private void ArqJornadaWU()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pUsuario", GUI.CApp.usuario); //Usuario
            qp.AddReplaceParam("pJornada", Program.Jornada.ToString()); //Jornada           

            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "C_REPORTE_WU_ARQ", qp);
            LLNet.Tienda.Reportes.CR_ArqWU objRpt = new LLNet.Tienda.Reportes.CR_ArqWU();
            LLNet.Tienda.Reportes.dsArqWesternU dsdatos = new LLNet.Tienda.Reportes.dsArqWesternU();

            objRpt.Load("C\\ekono\\POS Retail 8.0.0\\CR_ArqWU.rpt");

            long total = 0; //monto total de la suma de los montos de cada recibo

            // N.MONTOD, N.RECIBO_NO FROM wms_v_RECARGANIC N WHERE DOCUMENTO IN ( SELECT DOCUMENTO FROM WMS_DOCUMENTOS W where W.JORNADA = &&pJornada&& AND W.CAJA = &&pCaja&& ) ORDER BY FECHA DESC
            foreach (DataRow Fila in dsB.Tables[0].Rows)
            {
                object[] datos = new object[6];

                datos[0] = Convert.ToString(Fila[0]); //recibo
                datos[1] = Convert.ToString(Fila[1]); //tipo
                datos[2] = Convert.ToString(Fila[2]); //ID
                datos[3] = Convert.ToDouble(Fila[3]); //monto       
                datos[4] = Convert.ToString(Fila[4]); //remitent         
                datos[5] = Convert.ToString(Fila[5]); //destino       
                //total += Convert.ToInt64(Fila[3]);
                dsdatos.Tables[1].Rows.Add(datos);
            }

            string[] totales = new string[3];
            totales[0] = Program.Jornada.ToString(); //JORNADA
            totales[1] = Program.Caja.ToString(); //CAJA
            totales[2] = string.Empty; //MONTO TOTAL            

            dsdatos.Tables[0].Rows.Add(totales);

            objRpt.SetDataSource((DataSet)dsdatos);

            crystalReportViewer1.ReportSource = objRpt;
            crystalReportViewer1.Refresh();

            GridCRepJorn.Refresh();
        }

        #endregion

        private void txtPagaCnCol_EditValueChanged(object sender, EventArgs e)
        {
            //Secuencia de Comprobante
            //decimal varDOLARVent = Convert.ToDecimal(GUI.CApp.bll.GetSingleValue("DOLAR", "PDV"));
            if (txtPagaCnCol.Text != "")
            {
                float dolardisp = float.Parse(txtPagaCnCol.Text) / float.Parse(varHMasDolarVenta);
                if (dolardisp >= 1)
                {
                    txtMontDoldispNic.Text = dolardisp.ToString();
                }
                else
                {
                    txtMontDoldispNic.Text = "0";
                }
            }
            else
            {
                txtMontDoldispNic.Text = "0";
            }
            CalcVueltoCol();
        }

        private void txtpagDolNic_EditValueChanged(object sender, EventArgs e)
        {
            CalcVueltoDol();
        }

        private void txtMontRecDolNic_EditValueChanged(object sender, EventArgs e)
        {
            CalcVueltoCol();
        }

        private void txtrecDolDolNic_EditValueChanged(object sender, EventArgs e)
        {
            CalcVueltoDol();
        }

        private void CalcVueltoCol()
        {
            if (txtMontRecDolNic.Text != "")
            {
                decimal vueltoCol = (decimal.Parse(txtMontDoldispNic.Text) - decimal.Parse(txtMontRecDolNic.Text)) * int.Parse(varHMasDolarVenta);
                txtvueltoColNic.Text = vueltoCol.ToString();

            }
            else
            {
                txtvueltoColNic.Text = "0";
            }
        }

        private void CalcVueltoDol()
        {
            if (txtrecDolDolNic.Text != "")
            {
                decimal vueltoCol = (decimal.Parse(txtpagDolNic.Text) - decimal.Parse(txtrecDolDolNic.Text)) * int.Parse(varHMasDolarCompra);
                txtVueltColDolNic.Text = vueltoCol.ToString();

            }
            else
            {
                txtVueltColDolNic.Text = "0";
            }
        }

        private void btnCNFL_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("ICNFL", "Integracion CNFL"))
            {
                Forms.OtrosServ.CNFL.FrmCNFL frmCNFL = new OtrosServ.CNFL.FrmCNFL();
                frmCNFL.ShowDialog();
            }
        }

        private void btnAyA_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("IAyA", "Integracion AyA"))
            {
                Forms.OtrosServ.AyA.FrmAyA frmAyA = new OtrosServ.AyA.FrmAyA();
                frmAyA.ShowDialog();
            }
        }

        private void btnDHL_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("IDHL", "Integracion DHL"))
            {
                Forms.OtrosServ.DHL.FrmDHL frmDHL = new OtrosServ.DHL.FrmDHL();
                frmDHL.ShowDialog();
            }
        }

        private void btnMarchamos_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("IMARCHAMOS", "Integracion Marchamos"))
            {

                Forms.OtrosServ.Marchamos.FrmMarchamos frmMarchams = new OtrosServ.Marchamos.FrmMarchamos();
                frmMarchams.ShowDialog();
            }
        }

        private void gdCtlReimpWU_Click(object sender, EventArgs e)
        {

        }

        private void btnRapiBAC_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("IRAPIBAC", "Integracion RapiBAC"))
            {
                Forms.OtrosServ.RapiBAC.FrmRapibac frmRapiBac = new Forms.OtrosServ.RapiBAC.FrmRapibac();
                frmRapiBac.ShowDialog();
            }
        }




    }
}