#region Using
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Collections;
using System.Threading;
using PoswareRMS;
using LLNet.Utils;
using LLNet.GUI;
using System.Net;
using System.IO;
using Microsoft.Win32;
using CredixCnx = LLNet.Tienda.com.credix.qaconectividad;
using AloExpress = LLNet.Tienda.Aloprepago.AloExpress;
using GenesisCnx = LLNet.Tienda.wsGenesis;
using System.Xml;
using BNCRLaro = LARO.CallWirePos;
#endregion

namespace LLNet.Tienda.MainForms
{
    public partial class frmCancelInvoice : LLNet.GUI.FormBases.frmBase
    {
        private string varUrlPts, varCodemprPts, varCodsucPts,varUSRG, varPWDG;
        private string moneda, pais, compania, tienda, aliado, InstFin, usrcredito;
        private string varUsrC, varPwdC, varFV, varCVV, varMont, varMoned, varURLE;
        private string varEntMEA, varUsrMEA, varPwdMEA, vUrl;
        private static ArrayList lId_tr_tarj = new ArrayList();//Lista id transacciones tarjetas BCR
        private static string factura = "";
        private string strresulIF; //string resultado de la consulta de los instrumentos financieros


        #region Constructor
        
        private static string subTipoDocumentoPreimpreso;

        public frmCancelInvoice()
        {
            InitializeComponent();

            GUI.CApp.TraducirForm(this);

            lId_tr_tarj.Clear();
        }

        #endregion

        #region Declaraciones

        public decimal pDocument;
        public string pType;
        public bool Exito = false;//Indica si la anulación de la venta con tarjeta fue exitosa o no       

        #endregion

        #region Metodos

        public void Clear()
        {
            Clear(true);
        }

        public void Clear(bool limpiarVale)
        {        
            dsPDV1.TDA_DETALLE_PEDIDO.Clear();
            dsPDV1.TDA_V_CONSULTA_VALES.Clear();
            
            if (limpiarVale) txtVale.EditValue = null;

            txtCliente.EditValue = null;
            txtDe.EditValue = null;
            txtMonto.EditValue = null;
            txtPara.EditValue = null;
            txtProducto.EditValue = null;
            txtTienda.EditValue = null;
            datEmision.EditValue = null;
            datVencimiento.EditValue = null;

            merFactura.PropertiesCollection[0].Value = null;
            merFactura.PropertiesCollection[1].Value = null;
            vGridControl1.Focus();
            vGridControl1.FocusedRow = merFactura.PropertiesCollection[0].Row;
        }

        private bool containExchange()
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());

            object obj = GUI.CApp.bll.GetSingleValue("GetExchangedCount", qp, "PDV");
            if (obj != null)
                return (Convert.ToDecimal(obj) > 0);
            else
                return false;
        }

        #region mTrama
        /// <summary>
        /// Este método genera la trama y la envía al proveedor
        /// </summary>
        /// <param name="pDocumento"></param>
        private void mTrama(long pDocumento)
        {
            string vClave = String.Empty, vCodigo = String.Empty;
            string vEnvio_Trama = String.Empty;
            QueryParams vParametros = new QueryParams();
            string vRespuesta = String.Empty;
            string vRespuesta_Xml = String.Empty;
            string vUrl = String.Empty;
            try
            {
                vEnvio_Trama = Helpers.Nvl(CApp.GetParam("ETFE"), "N").ToString();

                if (vEnvio_Trama == "S")
                {
                    vParametros.AddReplaceParam("pNDOCUMENTO", pDocumento.ToString());
                    //
                    // Se crea la trama
                    GUI.CApp.bll.ExecuteSql("FE_P_CREAR_TRAMA", vParametros, "PDV");
                    //
                    // Obtiene la trama
                    using (DataSet vDatos = GUI.CApp.bll.getDataSet("PDV", "OBTENER_TRAMAS", vParametros))
                    {
                        if (vDatos.Tables.Count > 0 && vDatos.Tables[0].Rows.Count > 0)
                        {
                            vUrl = Helpers.Nvl(CApp.GetParam("URLF"), "").ToString();

                            WSAVD.WSFEBuilderSoapClient vFact_Elect = new WSAVD.WSFEBuilderSoapClient();
                            //
                            // Actualiza la dirección del web services
                            vFact_Elect.Endpoint.Address = new System.ServiceModel.EndpointAddress(vUrl);
                            //
                            // Envía la trama
                            vRespuesta_Xml = vFact_Elect.procesarTextoPlano(vDatos.Tables[0].Rows[0].ItemArray[2].ToString(),
                                vDatos.Tables[0].Rows[0].ItemArray[3].ToString(), vDatos.Tables[0].Rows[0].ItemArray[4].ToString(),
                                vDatos.Tables[0].Rows[0].ItemArray[1].ToString(), vDatos.Tables[0].Rows[0].ItemArray[0].ToString());
                            //
                            if (!String.IsNullOrEmpty(vRespuesta_Xml))
                            {
                                XmlDocument vXml_Doc = new XmlDocument();
                                vXml_Doc.LoadXml(vRespuesta_Xml);
                                //
                                using (DataSet vDatosXML = new DataSet())
                                {
                                    vDatosXML.ReadXml(new XmlNodeReader(vXml_Doc));

                                    if (vDatosXML.Tables.Count > 0 && vDatosXML.Tables[0].Rows.Count > 0)
                                    {
                                        // Código respuesta del proveedor
                                        vCodigo = vDatosXML.Tables[0].Rows[0].ItemArray[0].ToString();
                                        vRespuesta = vDatosXML.Tables[0].Rows[0].ItemArray[2].ToString();

                                        if (vCodigo.Replace("'", "") == "S0001")
                                        {
                                            vClave = vDatosXML.Tables[0].Rows[0].ItemArray[3].ToString();
                                        }
                                        else
                                        {
                                            vClave = String.Empty;
                                        }
                                    }
                                }
                            }
                            //
                            // Almacena la respuesta
                            vParametros.AddReplaceParam("pCCODIGO", vCodigo.Replace("'", ""));
                            vParametros.AddReplaceParam("pCRESPUESTA", vRespuesta.Replace("'", ""));
                            vParametros.AddReplaceParam("pCRESPUESTA_XML", vRespuesta_Xml.Replace("'", ""));
                            vParametros.AddReplaceParam("pCCLAVE", vClave);

                            GUI.CApp.bll.ExecuteSql("FE_P_ALM_RESPUESTA", vParametros, "PDV");
                        }
                    }
                }
            }
            catch (Exception vError)
            {
                vParametros = new QueryParams();
                // Error envío AVD
                vParametros.AddReplaceParam("pNDOCUMENTO", pDocumento.ToString());
                vParametros.AddReplaceParam("pCERROR", vError.Message.Replace("'", ""));
                //
                GUI.CApp.bll.ExecuteSql("FE_P_REGISTRO_ERROR", vParametros, "PDV");
            }
        }
        #endregion

        #endregion

        #region Eventos

        private void frmCancelInvoice_Load(object sender, EventArgs e)
        {
            GUI.CApp.MainForm = null;
            vGridControl1.Focus();
            vGridControl1.FocusedRow = merFactura.PropertiesCollection[0].Row;
            SendKeys.Send("{TAB}");
            LlenarParametros();
            LlenarParametrosGenesis();
            LlenarParametrosC();
        }

        private void txtFactura_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("SERIE",merFactura.PropertiesCollection[0].Value.ToString());
                qp.AddReplaceParam("NO_DOCUMENTO", ((DevExpress.XtraEditors.TextEdit)sender).Text);
                dsPDV1.TDA_DETALLE_PEDIDO.Clear();
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_DETALLE_PEDIDO.TableName, qp, "DetallePedidoXFactura"), dsPDV1);

                bool exists = false;

                if (dsPDV1.TDA_DETALLE_PEDIDO.Count > 0)
                {
                    if (containExchange())
                    {
                        dsPDV1.TDA_DETALLE_PEDIDO.Clear();
                        GUI.CApp.ShowMessage("No puede anular una factura con vales o certificados canjeados o anulados", "Anulación de Documentos", true);
                    }
                    else
                    {
                        exists = true;
                    }
                }
                else
                    GUI.CApp.ShowMessage("La factura no existe", "Anulación de Documentos", true);

                e.Handled = true;
                if (exists) btnAceptar.Focus();
                else
                {
                    vGridControl1.FocusedRow = merFactura.ChildRows[0];
                    vGridControl1.Focus();
                    SendKeys.Send("{TAB}");
                }

            }
        }


        #region ObtenerDocumento
        public int ObtenerDocumento(string pDOCUMENTO)
        {

            try
            {
                int vResultado = 0;

                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("DOCUMENTO", pDOCUMENTO);
                vResultado = Convert.ToInt32(GUI.CApp.bll.GetSingleValue("WMS_F_OBTIENE_ND_GENERADA", qp, "PDV"));

                return vResultado;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            
            
            if (xtraTabControl1.SelectedTabPage == xtraTabPage1)
            
            {
                #region FACTURAS
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();

                string TipoAn = Convert.ToString(GUI.CApp.GetParam("MAFR"));
                if (TipoAn == "D")
                {
                    //Anular Envio Ekono Express
                    string EEEAn = Convert.ToString(GUI.CApp.GetParam("AEEE"));
                    if (EEEAn == "S")
                    {
                        qp.AddReplaceParam("pFactura", dsPDV1.TDA_DETALLE_PEDIDO[0].SERIE.ToString() + "-" + dsPDV1.TDA_DETALLE_PEDIDO[0].NO_DOCUMENTO.ToString());
                        qp.AddReplaceParam("pUsername", GUI.CApp.usuario);
                        GUI.CApp.bll.ExecuteSql("AFactExp", qp, "PDV");
                    }

                    //Eliminar cupones------DLQG-IMG
                    qp.AddReplaceParam("pDocumento", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                    GUI.CApp.bll.ExecuteSql("ElimCupon", qp, "PDV");

                    //ELIMINA CUPONES CREDIE
                    GUI.CApp.bll.ExecuteSql("ElimCuponCREDIE", qp, "PDV");

                    string supervisor = "";

                    if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                    {
                        supervisor = GUI.CApp.Sup;
                    }
                    else
                    {
                        supervisor = GUI.CApp.usuario;
                    }

                    qp.Clear();
                    qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                    qp.AddReplaceParam("USUARIO", supervisor);

                    //ELIMINA MEMBRESIA EKONO PLUS
                    GUI.CApp.bll.ExecuteSql("PLUS_ElimMembresiaPlus", qp, "PDV");
                    

                    string result = GUI.CApp.bll.GetSingleValue("AnulFact", qp, "PDV").ToString();
                    if (result == "TC")
                    {
                        if (GUI.CApp.ValidateAccess("AnulacionTrans", "Anulación de pagos con tarjeta"))
                        {
                            qp.Clear();
                            qp = new LLNet.Utils.QueryParams();
                            qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                            DataSet ds_datos = GUI.CApp.bll.getDataSet("PDV", "DatosTrans", qp);

                            if (ds_datos.Tables.Count > 0 && ds_datos.Tables[0].Rows.Count > 0)
                            {
                                bool proceder = true;//Se pone en false, si una transacción no se puedo anular

                                if (ds_datos.Tables[0].Rows[0].ItemArray[8].ToString() != "1")
                                {
                                    #region foreach
                                    foreach (DataRow fila in ds_datos.Tables[0].Rows)
                                    {
                                        if (proceder && fila.ItemArray[3].ToString() != String.Empty)
                                        {
                                            string NumAutoriz = fila.ItemArray[1].ToString();//Número de autorización
                                            string NumTarj = fila.ItemArray[2].ToString();//Número de tarjeta enmascarado
                                            string NumRef = fila.ItemArray[3].ToString();//Número de referencia de la transacción
                                            string MontoTrans = fila.ItemArray[5].ToString();//Monto transacción
                                            string Id_tr_tarj = "";
                                            string Invoice = fila.ItemArray[11].ToString();//Para las transacciones LARO

                                            supervisor = String.Empty;
                                            if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                                                supervisor = GUI.CApp.Sup;

                                            if (MontoTrans == "")
                                                MontoTrans = "0";

                                            QueryParams qparams = new QueryParams();
                                            qparams.AddReplaceParam("TARJETA", NumTarj);
                                            qparams.AddReplaceParam("AUTORIZACION", NumAutoriz);
                                            qparams.AddReplaceParam("REFERENCIA", NumRef);
                                            qparams.AddReplaceParam("INVOICE", Invoice);
                                            object caja = GUI.CApp.bll.GetSingleValue("ExisteVenta", qparams, "PDV");
                                            //Verifica si la venta con esos datos existe
                                            if (caja == null)
                                            {
                                                proceder = false;
                                                CApp.ShowMessage("No existe una transacción con esos datos", "Anulación de Documentos", true);
                                            }
                                            else
                                            {
                                                if (decimal.Parse(caja.ToString()) == 0)
                                                {
                                                    proceder = false;
                                                    CApp.ShowMessage("No existe una transacción con esos datos", "Anulación de Documentos", true);
                                                }
                                                else if (decimal.Parse(caja.ToString()) != Program.Caja)
                                                {
                                                    proceder = false;
                                                    CApp.ShowMessage("Debe hacer la anulación en la misma caja que se hizo la transacción", "Anulación de Documentos", true);
                                                }
                                                else
                                                {
                                                    object anulada = GUI.CApp.bll.GetSingleValue("ExisteAnulacion", qparams, "PDV");
                                                    //
                                                    if (anulada == null)
                                                    {
                                                        proceder = false;
                                                        CApp.ShowMessage("La transacción ya fue anulada o los datos son erróneos", "Anulación de Documentos", true);
                                                    }
                                                    else
                                                    {
                                                        if (int.Parse(anulada.ToString()) == 1)
                                                        {
                                                            proceder = false;
                                                            CApp.ShowMessage("La transacción ya fue anulada", "Anulación de Documentos", true);
                                                        }
                                                        else
                                                        {
                                                            //Verifica si los datos de la transacción, corresponden al BNCR o BCR
                                                            if (fila.ItemArray[6].ToString() == "2")//BNCR
                                                            {
                                                                #region BNCR
                                                                qparams = new QueryParams();
                                                                qparams.AddReplaceParam("TARJETA", NumTarj);
                                                                qparams.AddReplaceParam("AUTORIZACION", NumAutoriz);
                                                                qparams.AddReplaceParam("REFERENCIA", NumRef);
                                                                object cerrada = GUI.CApp.bll.GetSingleValue("TransCerrada", qparams, "PDV");

                                                                if (cerrada == null)
                                                                {
                                                                    proceder = false;
                                                                    CApp.ShowMessage("No se pueden cargar los datos", "Anulación de Documentos", true);
                                                                }
                                                                else
                                                                {
                                                                    if (int.Parse(cerrada.ToString()) != 0)
                                                                    {
                                                                        proceder = false;
                                                                        CApp.ShowMessage("La transacción ya fue cerrada", "Anulación de Documentos", true);
                                                                    }
                                                                    else
                                                                    {
                                                                        //RealizarTransaccion(supervisor, NumAutoriz, NumTarj, NumRef, MontoTrans, fila.ItemArray[4].ToString());
                                                                        RealizarTransaccionLARO(supervisor, NumAutoriz, NumTarj, NumRef, MontoTrans, fila.ItemArray[4].ToString(),Invoice);
                                                                    }
                                                                }
                                                                #endregion
                                                            }
                                                            else if (fila.ItemArray[6].ToString() == "3")//BCR
                                                            {
                                                                #region BCR
                                                                qparams = new QueryParams();
                                                                qparams.AddReplaceParam("ID_TR_TARJ", fila.ItemArray[7].ToString());
                                                                string tarj = Helpers.Nvl(GUI.CApp.bll.GetSingleValue("ObtTarj", qparams, "PDV"), "").ToString();

                                                                if (tarj != "")
                                                                {
                                                                    #region
                                                                    qparams = new QueryParams();
                                                                    Id_tr_tarj = GUI.CApp.bll.GetSingleValue("Sig_Id_tr_tarj", "PDV").ToString();
                                                                    qparams.AddReplaceParam("ID_TR_TARJ", Id_tr_tarj);
                                                                    qparams.AddReplaceParam("DOCUMENTO", fila.ItemArray[4].ToString());
                                                                    qparams.AddReplaceParam("CAJA", Program.Caja.ToString());
                                                                    qparams.AddReplaceParam("TIPO", "Anulación");
                                                                    if (supervisor != null && supervisor != "")
                                                                        qparams.AddReplaceParam("USUARIO", supervisor);
                                                                    else
                                                                        qparams.AddReplaceParam("USUARIO", GUI.CApp.usuario);
                                                                    qparams.AddReplaceParam("MONTO", fila.ItemArray[5].ToString());
                                                                    qparams.AddReplaceParam("ESTADO", "Pendiente");
                                                                    qparams.AddReplaceParam("EMISOR", "3");
                                                                    qparams.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                                                                    #endregion
                                                                    //
                                                                    GUI.CApp.bll.ExecuteSql("Ini_Log_Tarjetas_Anul", qparams, "PDV");

                                                                    LLNet.Tienda.MainForms.Forms.FrmBCR fbcr = new LLNet.Tienda.MainForms.Forms.FrmBCR(MontoTrans, tarj, NumTarj,
                                                                        NumAutoriz, NumRef, Id_tr_tarj, fila.ItemArray[9].ToString(), fila.ItemArray[10].ToString());
                                                                    fbcr.ShowDialog();
                                                                    bool realizado = fbcr.exito;

                                                                    #region (NO)Aprobado
                                                                    if (realizado)
                                                                    {
                                                                        qparams = new QueryParams();
                                                                        //Datos fin del proceso de pago con tarjeta de crédito/débito
                                                                        qparams.AddReplaceParam("ID_TR_TARJ", Id_tr_tarj);
                                                                        qparams.AddReplaceParam("TARJETA", NumTarj);
                                                                        qparams.AddReplaceParam("AUTORIZACION", NumAutoriz);
                                                                        qparams.AddReplaceParam("REFERENCIA", NumRef);
                                                                        qparams.AddReplaceParam("ESTADO", "Aprobada");
                                                                        qparams.AddReplaceParam("ERRORES", "");
                                                                        //
                                                                        GUI.CApp.bll.ExecuteSql("Fin_Log_Tarjetas", qparams, "PDV");
                                                                        this.Exito = true;

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

                                                                        CApp.ShowMessage("Transacción denegada", "Cobros y Facturación", true);
                                                                    }
                                                                    #endregion
                                                                }
                                                                #endregion
                                                                else
                                                                    CApp.ShowMessage("No se puede realizar este proceso", "Anulación de Documentos", true);
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        else if (proceder && fila.ItemArray[3].ToString() == String.Empty)
                                        {
                                            this.Exito = true;
                                        }
                                    }//for
                                    #endregion
                                }
                                else
                                {
                                    this.Exito = false;
                                    CApp.ShowMessage("No se puede realizar este proceso debido a que hay devoluciones asociadas a esta Factura", "Anulación de Documentos", true);
                                }
                                #region //Elimina pagos con Credix
                                Utils.QueryParams qpCx = new LLNet.Utils.QueryParams();
                                qpCx.AddReplaceParam("pFactura", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                                string pcrdx = GUI.CApp.bll.GetSingleValue("WMS_F_PEFACREDIX", qpCx, "PDV").ToString();
                                bool Ancor = false; //Anular credix correcto
                                if (pcrdx != "")
                                {//si pago con credix
                                    Ancor = Anular_TransCrdx(pcrdx);
                                }
                                else
                                {//no pago con credix
                                    Ancor = true;
                                }
                                if (Ancor == false)
                                {
                                    this.Exito = false;
                                }
                                #endregion

                                #region //Elimina pagos con MonederoAlo
                                Utils.QueryParams qpMA = new LLNet.Utils.QueryParams();
                                qpMA.AddReplaceParam("pFactura", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                                string pMOA = GUI.CApp.bll.GetSingleValue("WMS_F_PEFAMOA", qpMA, "PDV").ToString();
                                bool AnMA = false; //Anular Monedero Alo correcto
                                if (pMOA != "")
                                {//si pago con Monedero Alo
                                    AnMA = Anular_TransMOA(pMOA);
                                }
                                else
                                {//no pago con Monedero Alo
                                    AnMA = true;
                                }
                                if (AnMA == false)
                                {
                                    this.Exito = false;
                                }
                                #endregion

                                #region //Elimina pagos con CrediCuotas
                                Utils.QueryParams qpCC = new LLNet.Utils.QueryParams();
                                qpCC.AddReplaceParam("pFactura", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                                string pCCE = GUI.CApp.bll.GetSingleValue("WMS_F_PEFACCE", qpCC, "PDV").ToString();
                                bool AnCCE = false; //Anular CREDICUOTAS correcto
                                if (pCCE != "")
                                {//si pago con CREDICUOTAS
                                    try
                                    {
                                        AnCCE = Anular_TransCrediCuotsEk(pCCE);
                                    }
                                    catch (Exception ex)
                                    {
                                        CApp.ShowMessage(ex.Message, "CrediCuotas Ekono", true);
                                        RegBDERRORCREDEK("", "", "", "", pCCE, ex.Message, "ANULACION");
                                    }
                                }
                                else
                                {//no pago con CREDICUOTAS
                                    AnCCE = true;
                                }
                                if (AnCCE == false)
                                {
                                    this.Exito = false;
                                }
                                #endregion

                            }
                            else
                            {
                                CApp.ShowMessage("No se puede hacer la anulación", "Anulación de Documentos", true);
                            }
                        }

                        if (this.Exito)
                        {
                            if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                            {
                                supervisor = GUI.CApp.Sup;
                            }
                            else
                            {
                                supervisor = GUI.CApp.usuario;
                            }

                            this.Exito = false;
                            qp.Clear();
                            qp = new LLNet.Utils.QueryParams();
                            qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                            qp.AddReplaceParam("USUARIO", supervisor);
                            qp.AddReplaceParam("CAJA", Program.Caja.ToString());
                            qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                            GUI.CApp.bll.ExecuteSql("AnularFacturaconDevo", qp, "PDV");
                            Utils.QueryParams qpNC = new LLNet.Utils.QueryParams();
                            qpNC.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                            long DocNC = Utils.Helpers.ObjToInt64(GUI.CApp.bll.GetSingleValue("OBTIENE_NC_GENERADA", qpNC, "PDV"));
                            //string pFormatoNC = Utils.Helpers.Nvl(Program.FrmMainPos.DsPedido.WMS_SOCIOS[0]["FORMATO_NOTA_CREDITO"], "NC").ToString();
                            string pFormatoNC = Utils.Helpers.Nvl(null, "NC").ToString();

                            /****************Cambio Factura Electrónica*******************/
                            mTrama(DocNC);

                            printDocument(DocNC, pFormatoNC);
                            printDocument(DocNC, "CP");
                            /****************Cambio Factura Electrónica*******************/

                            // ***************** MIS PUNTOS ****************          
                            // Si Pago o Gano PTS los elimina 
                            Utils.QueryParams qp2 = new LLNet.Utils.QueryParams();
                            qp2.AddReplaceParam("pDocumento", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "PtsyIDFac", qp2);
                            if (dsB.Tables.Count > 0)
                            {
                                if (dsB.Tables[0].Rows.Count > 0)
                                {
                                    object[] datos = new object[2];
                                    datos = dsB.Tables[0].Rows[0].ItemArray;
                                    string vIDMAESTRO = datos[0].ToString();
                                    string vptsDOC = datos[1].ToString();
                                    if (vIDMAESTRO != string.Empty)
                                        EMisPtsPago(vIDMAESTRO);
                                    if (vptsDOC != string.Empty)
                                        EMisPtsGano(dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                                }
                            }
                            //Devolución FONABE
                            //Anulación
                            qp = new QueryParams();
                            qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                            if (Helpers.Nvl(CApp.bll.GetSingleValue("WMS_F_EXISTEDEVOLF", qp, "PDV"), "").ToString() == "1")
                            {
                                CApp.bll.ExecuteSql("WMS_P_ANULDEVOLFONABE", qp, "PDV");
                                //Impresión comprobante
                                printInvoice(long.Parse(dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString()));
                            }

                            Program.CloseWindow(this);
                        }
                    }
                    else if (result != "")
                        CApp.ShowMessage(result, "Anulación de Documentos", true);
                    else
                    {
                        #region //Elimina pagos con Credix
                        Utils.QueryParams qpCx = new LLNet.Utils.QueryParams();
                        qpCx.AddReplaceParam("pFactura", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                        string pcrdx = GUI.CApp.bll.GetSingleValue("WMS_F_PEFACREDIX", qpCx, "PDV").ToString();
                        bool Ancor = false; //Anular credix correcto
                        if (pcrdx != "")
                        {//si pago con credix
                            Ancor = Anular_TransCrdx(pcrdx);
                        }
                        else
                        {//no pago con credix
                            Ancor = true;
                        }
                        #endregion

                        #region //Elimina pagos con MonederoAlo
                        Utils.QueryParams qpMA = new LLNet.Utils.QueryParams();
                        qpMA.AddReplaceParam("pFactura", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                        string pMOA = GUI.CApp.bll.GetSingleValue("WMS_F_PEFAMOA", qpMA, "PDV").ToString();
                        bool AnMA = false; //Anular Monedero Alo correcto
                        if (pMOA != "")
                        {//si pago con Monedero Alo
                            AnMA = Anular_TransMOA(pMOA);
                        }
                        else
                        {//no pago con Monedero Alo
                            AnMA = true;
                        }
                        #endregion

                        #region //Elimina pagos con CrediCuotas
                        Utils.QueryParams qpCC = new LLNet.Utils.QueryParams();
                        qpCC.AddReplaceParam("pFactura", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                        string pCCE = GUI.CApp.bll.GetSingleValue("WMS_F_PEFACCE", qpCC, "PDV").ToString();
                        bool AnCCE = false; //Anular CREDICUOTAS correcto
                        if (pCCE != "")
                        {//si pago con CREDICUOTAS
                            AnCCE = Anular_TransCrediCuotsEk(pCCE);
                        }
                        else
                        {//no pago con CREDICUOTAS
                            AnCCE = true;
                        }
                        if (AnCCE == false)
                        {
                            this.Exito = false;
                        }
                        #endregion

                        if (Ancor)
                        {
                            if (AnMA)
                            {

                                if (AnCCE)
                                {
                                    qp.AddReplaceParam("CAJA", Program.Caja.ToString());
                                    qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                                    GUI.CApp.bll.ExecuteSql("AnularFacturaconDevo", qp, "PDV");
                                    Utils.QueryParams qpNC = new LLNet.Utils.QueryParams();
                                    qpNC.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                                    long DocNC = Utils.Helpers.ObjToInt64(GUI.CApp.bll.GetSingleValue("OBTIENE_NC_GENERADA", qpNC, "PDV"));
                                    //string pFormatoNC = Utils.Helpers.Nvl(Program.FrmMainPos.DsPedido.WMS_SOCIOS[0]["FORMATO_NOTA_CREDITO"], "NC").ToString();
                                    string pFormatoNC = Utils.Helpers.Nvl(null, "NC").ToString();

                                    /****************Cambio Factura Electrónica*******************/
                                    mTrama(DocNC);

                                    printDocument(DocNC, pFormatoNC);
                                    printDocument(DocNC, "CP");
                                    /****************Cambio Factura Electrónica*******************/

                                    // ***************** MIS PUNTOS ****************          
                                    // Si Pago o Gano PTS los elimina 
                                    Utils.QueryParams qp2 = new LLNet.Utils.QueryParams();
                                    qp2.AddReplaceParam("pDocumento", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                                    DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "PtsyIDFac", qp2);
                                    if (dsB.Tables.Count > 0)
                                    {
                                        if (dsB.Tables[0].Rows.Count > 0)
                                        {
                                            object[] datos = new object[2];
                                            datos = dsB.Tables[0].Rows[0].ItemArray;
                                            string vIDMAESTRO = datos[0].ToString();
                                            string vptsDOC = datos[1].ToString();
                                            if (vIDMAESTRO != string.Empty)
                                                EMisPtsPago(vIDMAESTRO);
                                            if (vptsDOC != "0")
                                                EMisPtsGano(dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());
                                                LLNet.Tienda.MainForms.Forms.MisPuntos.frmGestionCbb.AnularFacturaCBB(dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString(), CApp.usuario);
                                        }
                                    }

                                    Program.CloseWindow(this);
                                }
                                else
                                {
                                    CApp.ShowMessage("No se puede eliminar la factura error con Credie ", "Anulación de Documentos", true);
                                }
                            }
                            else
                            {
                                CApp.ShowMessage("No se puede eliminar la factura error con Monedero Aló ", "Anulación de Documentos", true);
                            }
                        }
                        else
                        {
                            CApp.ShowMessage("No se puede eliminar la factura error con Credix ", "Anulación de Documentos", true);
                        }
                    }
                }
                #endregion

                #region FACTURAS OTROS
                else
                {
                    qp.Clear();
                    qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("NO_DOCUMENTO", dsPDV1.TDA_DETALLE_PEDIDO[0].NO_DOCUMENTO);
                    qp.AddReplaceParam("SERIE", dsPDV1.TDA_DETALLE_PEDIDO[0].SERIE);
                    qp.AddReplaceParam("USUARIO", GUI.CApp.usuario);
                    qp.AddReplaceParam("TIPO_ANULACION", "1");
                    qp.AddReplaceParam("ANULAR_RECIBOS", "SI");
                    qp.AddReplaceParam("NULIFICAR_ENTREGA", "SI");
                    qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());

                    GUI.CApp.bll.ExecuteSql("AnularFactura", qp, "PDV");

                    if (GUI.CApp.ShowMessage("¿Desea editar nuevamente el pedido?", "Anulación de Documentos", true, true) == DialogResult.OK)
                    {
                        pDocument = dsPDV1.TDA_DETALLE_PEDIDO[0].DOCUMENTO_PADRE;
                        pType = "F";
                        Program.GetOrder(pDocument, pType);
                        Hide();
                    }
                    else
                        Program.CloseWindow(this);
                }
                #endregion
            }
            else if (xtraTabControl1.SelectedTabPage == xtpNotaCredito)
            {
                // CON ESTE PROCESO SE ANULA UNA NOTA DE CREDITO Y CREA UNA NOTA DE DEBITO
                #region NOTA_CREDITO ANYU
                if (!GUI.CApp.ValidateAccess("ANULAR_NOTA_CREDITO", "Anular Notas de Crédito"))
                {
                    return;
                }

                if (GUI.CApp.ValidateAccess("ANULAR_NOTA_DEBITO", "Anular Notas de Crédito"))
                {
                    string supervisor = "";

                    if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                    {
                        supervisor = GUI.CApp.Sup;
                    }
                    else
                    {
                        supervisor = GUI.CApp.usuario;
                    }

                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_DETALLE_NOTACREDITO[0].DOCUMENTO.ToString());
                    qp.AddReplaceParam("USUARIO_AUTORIZA", supervisor);
                    qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                    //
                    GUI.CApp.bll.ExecuteSql("FE_P_GENERAR_NOTA_DEBITO", qp, "PDV");

                    int vdocumento = ObtenerDocumento(dsPDV1.TDA_DETALLE_NOTACREDITO[0].DOCUMENTO.ToString());
                    mTrama(vdocumento);
                    merNotaCredito.PropertiesCollection[0].Value = "";
                    merNotaCredito.PropertiesCollection[1].Value = "";
                    dsPDV1.TDA_DETALLE_NOTACREDITO.Clear();
                    //
                    //---------------------Modificación para ND----------I.M.G.F.--
                    printDocument(vdocumento, "ND");
                    //---------------------Modificación para ND----------I.M.G.F.--
                    //
                    Program.CloseWindow(this);
                }

                #endregion
            }
            else if (xtraTabControl1.SelectedTabPage == xtpNotaDebito)
            {
                if (!GUI.CApp.ValidateAccess("ANULAR_NOTA_DEBITO", "Anular Notas de Débito"))
                {
                 
                    return;
                }

                #region NOTA_DEBITO
                if (GUI.CApp.ValidateAccess("ANULAR_NOTA_CREDITO", "Anular Notas de Débito"))
                {
                    string supervisor = "";

                    if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                    {
                        supervisor = GUI.CApp.Sup;
                    }
                    else
                    {
                        supervisor = GUI.CApp.usuario;
                    }

                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_DETALLE_NOTADEBITO[0].DOCUMENTO.ToString());
                    qp.AddReplaceParam("USUARIO_AUTORIZA", supervisor);
                    qp.AddReplaceParam("CAJA", Program.Caja.ToString());
                    qp.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                    //
                    GUI.CApp.bll.ExecuteSql("FE_P_GENERAR_NOTA_CREDITO", qp, "PDV");

                    Utils.QueryParams qpNC = new LLNet.Utils.QueryParams();
                    qpNC.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_DETALLE_NOTADEBITO[0].DOCUMENTO.ToString());
                    long DocNC = Utils.Helpers.ObjToInt64(GUI.CApp.bll.GetSingleValue("OBTIENE_NC_GENERADA", qpNC, "PDV"));

                    dsPDV1.TDA_DETALLE_NOTADEBITO.Clear();
                    mTrama(DocNC);
                    merNotaDebito.PropertiesCollection[0].Value = "";
                    merNotaDebito.PropertiesCollection[1].Value = "";
                    //
                    //---------------------Modificación para ND----------I.M.G.F.--
                    printDocument(DocNC, "NC");
                    //---------------------Modificación para ND----------I.M.G.F.--
                    //
                    Program.CloseWindow(this);

                }
                
                #endregion

               
            }
            /*****************IGF*****************************/
            else if (xtraTabControl1.SelectedTabPage == xtpTransacciones)
            {
                #region Anulación Transacción Tarjeta
                if (this.txteNumTarjeta.Text == "")
                    CApp.ShowMessage("Digite el número de tarjeta tal y como aparece en el voucher", "Anulación de Documentos", true);
                else if (this.txteNumAutoriz.Text == "")
                    CApp.ShowMessage("Digite el número de autorización", "Anulación de Documentos", true);
                else if (this.txteNumRef.Text == "")
                    CApp.ShowMessage("Digite el RRN (número de referencia)", "Anulación de Documentos", true);
                else if (this.txteInvoice.Text == "")
                    CApp.ShowMessage("Digite el número de cargo (invoice)", "Anulación de Documentos", true);
                else
                {
                    string tarjventa = this.txteNumTarjeta.Text;
                    QueryParams qparams = new QueryParams();
                    qparams.AddReplaceParam("TARJETA", this.txteNumTarjeta.Text);
                    qparams.AddReplaceParam("AUTORIZACION", this.txteNumAutoriz.Text);
                    qparams.AddReplaceParam("REFERENCIA", this.txteNumRef.Text);
                    qparams.AddReplaceParam("INVOICE", this.txteInvoice.Text);
                    object caja = GUI.CApp.bll.GetSingleValue("ExisteVenta", qparams, "PDV");
                    object tarjBD = GUI.CApp.bll.GetSingleValue("TarjVenta", qparams, "PDV");

                    if (tarjBD == null)
                        CApp.ShowMessage("No encontró el número de tarjeta almacenado", "Anulación de Documentos", true);
                    else
                        tarjventa = tarjBD.ToString();
                    //Verifica si la venta con esos datos existe
                    if (caja == null)
                        CApp.ShowMessage("No existe una transacción con esos datos", "Anulación de Documentos", true);
                    else
                    {
                        if (decimal.Parse(caja.ToString()) == 0)
                            CApp.ShowMessage("No existe una transacción con esos datos", "Anulación de Documentos", true);
                        else if (decimal.Parse(caja.ToString()) != Program.Caja)
                            CApp.ShowMessage("Debe hacer la anulación en la misma caja que se hizo la transacción", "Anulación de Documentos", true);
                        else
                        {
                            object anulada = GUI.CApp.bll.GetSingleValue("ExisteAnulacion", qparams, "PDV");
                            //
                            if (anulada == null)
                                CApp.ShowMessage("La transacción ya fue anulada o los datos son erróneos", "Anulación de Documentos", true);
                            else
                            {
                                if (int.Parse(anulada.ToString()) == 1)
                                    CApp.ShowMessage("La transacción ya fue anulada", "Anulación de Documentos", true);
                                else
                                {
                                    qparams = new QueryParams();
                                    //qparams.AddReplaceParam("TARJETA", this.txteNumTarjeta.Text);
                                    qparams.AddReplaceParam("TARJETA", tarjventa);
                                    qparams.AddReplaceParam("AUTORIZACION", this.txteNumAutoriz.Text);
                                    object existeDoc = GUI.CApp.bll.GetSingleValue("ExisteDoc", qparams, "PDV");
                                    //Verifica si la transacción está asociada a una factura
                                    if (existeDoc != null)
                                    {
                                        if (int.Parse(existeDoc.ToString()) != 0)
                                            CApp.ShowMessage("No se puede anular una transacción asociada a una factura no anulada", "Anulación de Documentos", true);
                                        else
                                        {
                                            qparams = new QueryParams();
                                            //qparams.AddReplaceParam("TARJETA", this.txteNumTarjeta.Text);
                                            qparams.AddReplaceParam("TARJETA", tarjventa);
                                            qparams.AddReplaceParam("AUTORIZACION", this.txteNumAutoriz.Text);
                                            qparams.AddReplaceParam("REFERENCIA", this.txteNumRef.Text);
                                            qparams.AddReplaceParam("INVOICE", this.txteInvoice.Text);
                                            object cerrada = GUI.CApp.bll.GetSingleValue("TransCerrada", qparams, "PDV");
                                            object documento = GUI.CApp.bll.GetSingleValue("NumPedido", qparams, "PDV");

                                            if (cerrada == null)
                                                CApp.ShowMessage("No se pueden cargar los datos", "Anulación de Documentos", true);
                                            else
                                            {
                                                if (int.Parse(cerrada.ToString()) != 0)
                                                    CApp.ShowMessage("La transacción ya fue cerrada", "Anulación de Documentos", true);
                                                else
                                                {
                                                    //Obtiene el monto de la transacción
                                                    string monto = GUI.CApp.bll.GetSingleValue("MontoTrans", qparams, "PDV").ToString();
                                                    this.txteMonto.Text = monto;

                                                    if (GUI.CApp.ValidateAccess("AnulacionTrans", "Anulación de pagos con tarjeta"))
                                                    {
                                                        string supervisor = "";
                                                        if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                                                            supervisor = GUI.CApp.Sup;

                                                        if (documento != null && documento.ToString() != "")
                                                            //RealizarTransaccion(supervisor, this.txteNumAutoriz.Text, this.txteNumTarjeta.Text, this.txteNumRef.Text, this.txteMonto.Text, documento.ToString());
                                                            RealizarTransaccionLARO(supervisor, this.txteNumAutoriz.Text, tarjventa, this.txteNumRef.Text, this.txteMonto.Text, documento.ToString(),this.txteInvoice.Text);
                                                        this.Exito = false;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    else
                                        CApp.ShowMessage("No se puede hacer la anulación", "Anulación de Documentos", true);
                                }
                            }
                        }
                    }
                }
                #endregion
            }/***IGF***/
            else
            {
                #region RECIBOS

                if (xtraTabControl1.SelectedTabPage == xtraTabPage3)
                {
                    string supervisor = "";
                    if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                        supervisor = GUI.CApp.Sup;

                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_DATOS_DOCUMENTO[0].DOCUMENTO.ToString());
                    DataSet ds_datos = GUI.CApp.bll.getDataSet("PDV", "DatosTransRec", qp);

                    if (ds_datos.Tables.Count > 0 && ds_datos.Tables[0].Rows.Count > 0)
                    {
                        bool proceder = true;//Se pone en false, si una transacción no se puedo anular
                        foreach (DataRow fila in ds_datos.Tables[0].Rows)
                        {
                            if (proceder)
                            {
                                string NumAutoriz = fila.ItemArray[1].ToString();//Número de autorización
                                string NumTarj = fila.ItemArray[2].ToString();//Número de tarjeta enmascarado
                                string NumRef = fila.ItemArray[3].ToString();//Número de referencia de la transacción
                                string MontoTrans = fila.ItemArray[4].ToString();//Monto transacción
                                string Invoice = fila.ItemArray[11].ToString();//Para las transacciones LARO
                                string Id_tr_tarj = "";

                                if (MontoTrans == "")
                                    MontoTrans = "0";

                                QueryParams qparams = new QueryParams();
                                qparams.AddReplaceParam("TARJETA", NumTarj);
                                qparams.AddReplaceParam("AUTORIZACION", NumAutoriz);
                                qparams.AddReplaceParam("REFERENCIA", NumRef);
                                object caja = GUI.CApp.bll.GetSingleValue("ExisteVenta", qparams, "PDV");
                                //Verifica si la venta con esos datos existe
                                if (caja == null)
                                {
                                    proceder = false;
                                    CApp.ShowMessage("No existe una transacción con esos datos", "Anulación de Documentos", true);
                                }
                                else
                                {
                                    if (decimal.Parse(caja.ToString()) == 0)
                                    {
                                        proceder = false;
                                        CApp.ShowMessage("No existe una transacción con esos datos", "Anulación de Documentos", true);
                                    }
                                    else if (decimal.Parse(caja.ToString()) != Program.Caja)
                                    {
                                        proceder = false;
                                        CApp.ShowMessage("Debe hacer la anulación en la misma caja que se hizo la transacción", "Anulación de Documentos", true);
                                    }
                                    else
                                    {
                                        object anulada = GUI.CApp.bll.GetSingleValue("ExisteAnulacion", qparams, "PDV");
                                        //
                                        if (anulada == null)
                                        {
                                            proceder = false;
                                            CApp.ShowMessage("La transacción ya fue anulada o los datos son erróneos", "Anulación de Documentos", true);
                                        }
                                        else
                                        {
                                            if (int.Parse(anulada.ToString()) == 1)
                                            {
                                                proceder = false;
                                                CApp.ShowMessage("La transacción ya fue anulada", "Anulación de Documentos", true);
                                            }
                                            else
                                            {
                                                //Verifica si los datos de la transacción, corresponden al BNCR o BCR
                                                if (fila.ItemArray[5].ToString() == "2")//BNCR
                                                {
                                                    #region BNCR
                                                    qparams = new QueryParams();
                                                    qparams.AddReplaceParam("TARJETA", NumTarj);
                                                    qparams.AddReplaceParam("AUTORIZACION", NumAutoriz);
                                                    qparams.AddReplaceParam("REFERENCIA", NumRef);
                                                    qparams.AddReplaceParam("EMISOR", "2");
                                                    object cerrada = GUI.CApp.bll.GetSingleValue("TransCerrada", qparams, "PDV");

                                                    if (cerrada == null)
                                                    {
                                                        proceder = false;
                                                        CApp.ShowMessage("No se pueden cargar los datos", "Anulación de Documentos", true);
                                                    }
                                                    else
                                                    {
                                                        if (int.Parse(cerrada.ToString()) != 0)
                                                        {
                                                            proceder = false;
                                                            CApp.ShowMessage("La transacción ya fue cerrada", "Anulación de Documentos", true);
                                                        }
                                                        else
                                                        {
                                                            //RealizarTransaccion(supervisor, NumAutoriz, NumTarj, NumRef, MontoTrans, fila.ItemArray[4].ToString());                                                            
                                                            RealizarTransaccionLARO(supervisor, NumAutoriz, NumTarj, NumRef, MontoTrans, fila.ItemArray[4].ToString(),Invoice);

                                                        }
                                                    }
                                                    #endregion
                                                }
                                                else if (fila.ItemArray[5].ToString() == "3")//BCR
                                                {
                                                    #region BCR
                                                    qparams = new QueryParams();
                                                    qparams.AddReplaceParam("ID_TR_TARJ", fila.ItemArray[6].ToString());
                                                    string tarj = Helpers.Nvl(GUI.CApp.bll.GetSingleValue("ObtTarj", qparams, "PDV"), "").ToString();

                                                    if (tarj != "")
                                                    {
                                                        #region
                                                        qparams = new QueryParams();
                                                        Id_tr_tarj = GUI.CApp.bll.GetSingleValue("Sig_Id_tr_tarj", "PDV").ToString();
                                                        qparams.AddReplaceParam("ID_TR_TARJ", Id_tr_tarj);
                                                        qparams.AddReplaceParam("DOCUMENTO", fila.ItemArray[0].ToString());
                                                        qparams.AddReplaceParam("CAJA", Program.Caja.ToString());
                                                        qparams.AddReplaceParam("TIPO", "Anulación");
                                                        if (supervisor != null && supervisor != "")
                                                            qparams.AddReplaceParam("USUARIO", supervisor);
                                                        else
                                                            qparams.AddReplaceParam("USUARIO", GUI.CApp.usuario);
                                                        qparams.AddReplaceParam("MONTO", fila.ItemArray[4].ToString());
                                                        qparams.AddReplaceParam("ESTADO", "Pendiente");
                                                        qparams.AddReplaceParam("EMISOR", "3");
                                                        qparams.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                                                        #endregion
                                                        //
                                                        GUI.CApp.bll.ExecuteSql("Ini_Log_Tarjetas_Anul", qparams, "PDV");

                                                        LLNet.Tienda.MainForms.Forms.FrmBCR fbcr = new LLNet.Tienda.MainForms.Forms.FrmBCR(MontoTrans, tarj, NumTarj,
                                                            NumAutoriz, NumRef, Id_tr_tarj, fila.ItemArray[7].ToString(), fila.ItemArray[8].ToString());
                                                        fbcr.ShowDialog();
                                                        bool realizado = fbcr.exito;

                                                        #region (NO)Aprobado
                                                        if (realizado)
                                                        {
                                                            qparams = new QueryParams();
                                                            //Datos fin del proceso de pago con tarjeta de crédito/débito
                                                            qparams.AddReplaceParam("ID_TR_TARJ", Id_tr_tarj);
                                                            qparams.AddReplaceParam("TARJETA", NumTarj);
                                                            qparams.AddReplaceParam("AUTORIZACION", NumAutoriz);
                                                            qparams.AddReplaceParam("REFERENCIA", NumRef);
                                                            qparams.AddReplaceParam("ESTADO", "Aprobada");
                                                            qparams.AddReplaceParam("ERRORES", "");
                                                            //
                                                            GUI.CApp.bll.ExecuteSql("Fin_Log_Tarjetas", qparams, "PDV");
                                                            this.Exito = true;

                                                            #region Impresión vouchers anulados BCR
                                                            object FormatoTipoImpresion = null;
                                                            qparams = new LLNet.Utils.QueryParams();
                                                            qparams.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'VOO");
                                                            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();
                                                            imprimirVoucher(Convert.ToInt64(Id_tr_tarj), "", Convert.ToInt64(format));
                                                            #endregion
                                                        }
                                                        else
                                                        {
                                                            qparams = new QueryParams();
                                                            qparams.AddReplaceParam("ID_TR_TARJ", Id_tr_tarj);
                                                            qparams.AddReplaceParam("TARJETA", NumTarj);
                                                            qparams.AddReplaceParam("AUTORIZACION", NumAutoriz);
                                                            qparams.AddReplaceParam("REFERENCIA", NumRef);
                                                            qparams.AddReplaceParam("ESTADO", "Denegada");
                                                            qparams.AddReplaceParam("ERRORES", fbcr.Motivo);
                                                            //
                                                            GUI.CApp.bll.ExecuteSql("Fin_Log_Tarjetas", qparams, "PDV");

                                                            CApp.ShowMessage("Transacción denegada", "Cobros y Facturación", true);
                                                        }
                                                        #endregion
                                                    }
                                                    else
                                                        CApp.ShowMessage("No se puede realizar este proceso", "Anulación de Documentos", true);
                                                    #endregion
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }//

                        #region //Elimina pagos con CrediCuotas
                        Utils.QueryParams qpCC = new LLNet.Utils.QueryParams();
                        qpCC.AddReplaceParam("pFactura", dsPDV1.TDA_DATOS_DOCUMENTO[0].DOCUMENTO.ToString());
                        string pCCE = GUI.CApp.bll.GetSingleValue("WMS_F_REFACCE", qpCC, "PDV").ToString();
                        bool AnCCE = false; //Anular CREDICUOTAS correcto
                        if (pCCE != "")
                        {//si pago con CREDICUOTAS
                            AnCCE = Anular_TransCrediCuotsEk(pCCE);
                        }
                        else
                        {//no pago con CREDICUOTAS
                            AnCCE = true;
                        }
                        if (AnCCE == false)
                        {
                            this.Exito = false;
                        }
                        else
                        {
                            this.Exito = true;
                        }
                        #endregion

                        if (this.Exito)
                        {
                            this.Exito = false;

                            qp = new LLNet.Utils.QueryParams();
                            qp.AddReplaceParam("NO_DOCUMENTO", dsPDV1.TDA_DATOS_DOCUMENTO[0].NO_DOCUMENTO);
                            qp.AddReplaceParam("SERIE", dsPDV1.TDA_DATOS_DOCUMENTO[0].SERIE);
                            qp.AddReplaceParam("USUARIO", GUI.CApp.usuario);
                            qp.AddReplaceParam("TIPO_ANULACION", "1");
                            qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_DATOS_DOCUMENTO[0].DOCUMENTO.ToString());

                            GUI.CApp.bll.ExecuteSql("AnularRecibo", qp, "PDV");

                            GUI.CApp.ShowMessage("Recibo anulado satisfactoriamente", "Anulación de Documentos", true);

                            // ***************** MIS PUNTOS ****************          
                            // Si Pago o Gano PTS los elimina 
                            Utils.QueryParams qp2 = new LLNet.Utils.QueryParams();
                            qp2.AddReplaceParam("pDocumento", dsPDV1.TDA_DATOS_DOCUMENTO[0].DOCUMENTO.ToString());
                            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "PtsyIDFac", qp2);
                            if (dsB.Tables.Count > 0)
                            {
                                if (dsB.Tables[0].Rows.Count > 0)
                                {
                                    object[] datos = new object[2];
                                    datos = dsB.Tables[0].Rows[0].ItemArray;
                                    string vIDMAESTRO = datos[0].ToString();
                                    string vptsDOC = datos[1].ToString();
                                    if (vIDMAESTRO != string.Empty)
                                        EMisPtsPago(vIDMAESTRO);
                                    if (vptsDOC != string.Empty)
                                        EMisPtsGano(dsPDV1.TDA_DATOS_DOCUMENTO[0].DOCUMENTO.ToString());
                                }
                            }

                            dsPDV1.TDA_DATOS_DOCUMENTO.Clear();

                            multiEditorRow1.PropertiesCollection[0].Value = "";
                            multiEditorRow1.PropertiesCollection[1].Value = "";
                        }
                    }
                    //  else if (ds_datos.Tables.Count == 0) dlqg NO ESTA ANULANDO EL RECIBO X ESO LO CAMBIO A 1
                    else if (ds_datos.Tables.Count == 1 && ds_datos.Tables[0].Rows.Count == 0)
                    {
                        #region //Elimina pagos con CrediCuotas
                        Utils.QueryParams qpCC = new LLNet.Utils.QueryParams();
                        qpCC.AddReplaceParam("pFactura", dsPDV1.TDA_DATOS_DOCUMENTO[0].DOCUMENTO.ToString());
                        string pCCE = GUI.CApp.bll.GetSingleValue("WMS_F_REFACCE", qpCC, "PDV").ToString();
                        bool AnCCE = false; //Anular CREDICUOTAS correcto
                        if (pCCE != "")
                        {//si pago con CREDICUOTAS
                            AnCCE = Anular_TransCrediCuotsEk(pCCE);
                        }
                        else
                        {//no pago con CREDICUOTAS
                            AnCCE = true;
                        }
                        if (AnCCE == false)
                        {
                            this.Exito = false;
                        }
                        else
                        {
                            this.Exito = true;
                        }
                        #endregion

                        if (Exito)
                        {
                            qp = new LLNet.Utils.QueryParams();
                            qp.AddReplaceParam("NO_DOCUMENTO", dsPDV1.TDA_DATOS_DOCUMENTO[0].NO_DOCUMENTO);
                            qp.AddReplaceParam("SERIE", dsPDV1.TDA_DATOS_DOCUMENTO[0].SERIE);
                            qp.AddReplaceParam("USUARIO", GUI.CApp.usuario);
                            qp.AddReplaceParam("TIPO_ANULACION", "1");
                            qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_DATOS_DOCUMENTO[0].DOCUMENTO.ToString());

                            GUI.CApp.bll.ExecuteSql("AnularRecibo", qp, "PDV");

                            GUI.CApp.ShowMessage("Recibo anulado satisfactoriamente", "Anulación de Documentos", true);

                            ////// Pagar con Pts 
                            ////Utils.QueryParams qp2 = new LLNet.Utils.QueryParams();
                            ////qp2.AddReplaceParam("pDocumento", dsPDV1.TDA_DATOS_DOCUMENTO[0].DOCUMENTO.ToString());
                            ////DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "PagosAPts", qp2);
                            ////if (dsB.Tables.Count > 0)
                            ////{
                            ////    if (dsB.Tables[0].Rows.Count > 0)
                            ////    {
                            ////      //  EMisPuntos(dsPDV1.TDA_DATOS_DOCUMENTO[0].DOCUMENTO.ToString());
                            ////    }
                            ////}
                            // ***************** MIS PUNTOS ****************          
                            // Si Pago o Gano PTS los elimina 
                            Utils.QueryParams qp2 = new LLNet.Utils.QueryParams();
                            qp2.AddReplaceParam("pDocumento", dsPDV1.TDA_DATOS_DOCUMENTO[0].DOCUMENTO.ToString());
                            DataSet dsB = GUI.CApp.bll.getDataSet("PDV", "PtsyIDFac", qp2);
                            if (dsB.Tables.Count > 0)
                            {
                                if (dsB.Tables[0].Rows.Count > 0)
                                {
                                    object[] datos = new object[2];
                                    datos = dsB.Tables[0].Rows[0].ItemArray;
                                    string vIDMAESTRO = datos[0].ToString();
                                    string vptsDOC = datos[1].ToString();
                                    if (vIDMAESTRO != string.Empty)
                                        EMisPtsPago(vIDMAESTRO);
                                    if (vptsDOC != string.Empty)
                                        EMisPtsGano(dsPDV1.TDA_DATOS_DOCUMENTO[0].DOCUMENTO.ToString());
                                }
                            }


                            dsPDV1.TDA_DATOS_DOCUMENTO.Clear();

                            multiEditorRow1.PropertiesCollection[0].Value = "";
                            multiEditorRow1.PropertiesCollection[1].Value = "";
                        }
                        else
                        {
                            CApp.ShowMessage("Problemas al anular el Pago con Credi-E", "Anulación de Documentos", false);
                        }
                    }
                }
                #endregion

                #region VALES
                else
                {
                    if (!GUI.CApp.ValidateAccess("CancelVale", "Anulaciones"))
                    {
                        return;
                    }
                    if (dsPDV1.TDA_V_CONSULTA_VALES.Count > 0)
                    {
                        switch (dsPDV1.TDA_V_CONSULTA_VALES[0].ESTADO)
                        {
                            case "C":
                                GUI.CApp.ShowMessage("No puede anular un vale o certificado que ya fue canjeado", "Anulación de Documentos", true);
                                break;
                            case "A":
                                GUI.CApp.ShowMessage("El vale ya fue anulado", "Anulación de Documentos", true);
                                break;
                            case "E":
                                LLNet.Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                                qp.AddReplaceParam("VALE", dsPDV1.TDA_V_CONSULTA_VALES[0].VALE.ToString());
                                qp.AddReplaceParam("ESTADO", "A");
                                GUI.CApp.bll.ExecuteSql("ActualizarEstadoVale", qp, "PDV");
                                Program.CloseWindow(this);
                                break;
                        }
                    }
                }
                #endregion
            }
   
            
        }

        #region imprimirVoucher IGF
        /// <summary>
        /// Imprime el voucher
        /// </summary>
        /// <param name="voucher">Id voucher</param>
        /// <param name="Impresora"></param>
        /// <param name="formato">Formato impresión</param>
        private void imprimirVoucher(long voucher, string Impresora, long formato)
        {
            string Ruta = Application.StartupPath;
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            if (Ruta != string.Empty)
            {
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(Ruta + "\\" + "imprimir.bat ");
                startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

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

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

                startInfo.Arguments = Args;
                try
                {
                    qp.AddReplaceParam("ID_TR_TARJ", voucher.ToString());
                    qp.AddReplaceParam("FORMATO", formato.ToString());
                    qp.AddReplaceParam("USUARIO", GUI.CApp.usuario.ToString());
                    GUI.CApp.bll.ExecuteSql("WMS_P_GENERAR_IMPRVO", qp, "PDV");
                    Thread.Sleep(2000);  // se deja un delay para esperar a que la base contruya el archivo
                    System.Diagnostics.Process.Start(startInfo);

                    #region Imprimir copia voucher
                    string valor = Helpers.Nvl(CApp.GetParam("HCV"), "").ToString();
                    if (valor == "1")//Si valor es 1, se imprime la copia del voucher
                    {
                        object FormatoTipoImpresion = null;
                        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");
                            }
                        }

                        qp = new LLNet.Utils.QueryParams();
                        qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'VOC");
                        Model.General.CgRefCodes dsDocTienda = new LLNet.Model.General.CgRefCodes();
                        Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsDocTienda.GetType(), dsDocTienda.DOMAINS.TableName, qp), dsDocTienda);
                        string format = Utils.Helpers.Nvl(FormatoTipoImpresion, dsDocTienda.DOMAINS[0].RV_MPCC02).ToString();
                        qp.AddReplaceParam("ID_TR_TARJ", voucher.ToString());
                        qp.AddReplaceParam("FORMATO", format.ToString());
                        qp.AddReplaceParam("USUARIO", GUI.CApp.usuario.ToString());
                        Thread.Sleep(2000);  // se deja un delay para esperar a que la base contruya el archivo
                        GUI.CApp.bll.ExecuteSql("WMS_P_GENERAR_IMPRVO", qp, "PDV");
                        Thread.Sleep(2000);  // se deja un delay para esperar a que la base contruya el archivo
                        System.Diagnostics.Process.Start(startInfo);
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    GUI.CApp.ShowMessage(ex.Message, "Impresion de Documentos", true);
                }
            }
            else
            {
                throw new Exception("No esta Definido el Parametro UATI");
            }
        }
        #endregion

        #region printInvoice
        /// <summary>
        /// Imprime la factura
        /// </summary>
        /// <param name="documento"></param>
        public static void printInvoice(long documento)
        {
            int Formato = 2;
            int numImpresiones = 1;
            object FormatoTipoImpresion = null;
            // int EsCredito = 0;
            QueryParams qp = new QueryParams();
            qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'DF");

            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"]);
                }
            }

            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
                }
            }
        }
        #endregion

        #region RealizarTransaccion IGF
        /// <summary>
        /// Realiza anulación de pago con tarjeta
        /// </summary>
        private void RealizarTransaccion(string Supervisor, string NumA, string NumT, string NumR, string Monto, string Documento)
        {
            string TipoTrans = "W";//Tipo transacción
            bool Aprobado = false;//Indica si la transacción fue aprobada o no
            double ResponseAmount = 0;//Disponible de la tarjeta en consulta de saldos
            string nombTarj = "";//Nombre del tarjeta habiente
            string Merchant = "", MerchantNumber = "", TerminalNumber = "";

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

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

                if (ds_datos.Tables.Count > 0 && ds_datos.Tables[0].Rows.Count > 0)
                {
                    Merchant = ds_datos.Tables[0].Rows[0].ItemArray[0].ToString();
                    MerchantNumber = ds_datos.Tables[0].Rows[0].ItemArray[1].ToString();
                    TerminalNumber = ds_datos.Tables[0].Rows[0].ItemArray[2].ToString();
                    //
                    //
                    string NumAutoriz = NumA;//Número de autorización
                    string NumTarj = NumT;//Número de tarjeta enmascarado
                    string NumRef = NumR;//Número de referencia de la transacción
                    //
                    #region
                    Utils.QueryParams qparams = new QueryParams();
                    string id_tr_tarj = GUI.CApp.bll.GetSingleValue("Sig_Id_tr_tarj", "PDV").ToString();
                    qparams.AddReplaceParam("ID_TR_TARJ", id_tr_tarj);
                    qparams.AddReplaceParam("DOCUMENTO", Documento);
                    qparams.AddReplaceParam("CAJA", Program.Caja.ToString());
                    qparams.AddReplaceParam("TIPO", "Anulación");
                    if (Supervisor != null && Supervisor != "")
                        qparams.AddReplaceParam("USUARIO", Supervisor);
                    else
                        qparams.AddReplaceParam("USUARIO", GUI.CApp.usuario);
                    qparams.AddReplaceParam("MONTO", Monto);
                    qparams.AddReplaceParam("ESTADO", "Pendiente");
                    qparams.AddReplaceParam("EMISOR", "2");
                    qparams.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                    //
                    GUI.CApp.bll.ExecuteSql("Ini_Log_Tarjetas_Anul", qparams, "PDV");
                    #endregion
                    //
                    //Realiza el proceso de anulación de la transacción
                    BNCRGL.BNCR bn = new BNCRGL.BNCR();
                    bn.GenerarTransaccion(Merchant, MerchantNumber, TerminalNumber, TipoTrans,
                    0, 0, 0, 0, 0, ref NumTarj, ref nombTarj, ref Aprobado, ref NumRef,
                    ref NumAutoriz, ref ResponseAmount);
                    //
                    #region (NO) Aprobado
                    if (Aprobado)
                    {
                        qparams = new QueryParams();
                        //Datos fin del proceso de pago con tarjeta de crédito
                        qparams.AddReplaceParam("ID_TR_TARJ", id_tr_tarj);
                        qparams.AddReplaceParam("TARJETA", NumTarj);
                        qparams.AddReplaceParam("AUTORIZACION", NumAutoriz);
                        qparams.AddReplaceParam("REFERENCIA", NumRef);
                        qparams.AddReplaceParam("ESTADO", "Aprobada");
                        qparams.AddReplaceParam("ERRORES", "");
                        //
                        GUI.CApp.bll.ExecuteSql("Fin_Log_Tarjetas", qparams, "PDV");

                        this.txteMonto.Text = String.Empty;
                        this.txteNumAutoriz.Text = String.Empty;
                        this.txteNumRef.Text = String.Empty;
                        this.txteNumTarjeta.Text = String.Empty;
                        this.txteNumTarjeta.Focus();
                        this.Exito = true;
                    }
                    else
                    {
                        qparams = new QueryParams();
                        qparams.AddReplaceParam("ID_TR_TARJ", id_tr_tarj);
                        qparams.AddReplaceParam("TARJETA", NumTarj);
                        qparams.AddReplaceParam("AUTORIZACION", NumAutoriz);
                        qparams.AddReplaceParam("REFERENCIA", NumRef);
                        qparams.AddReplaceParam("ESTADO", "Denegada");
                        qparams.AddReplaceParam("ERRORES", "Anulación denegada/cancelada");
                        //
                        this.Exito = false;
                        GUI.CApp.bll.ExecuteSql("Fin_Log_Tarjetas", qparams, "PDV");

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


        #region RealizarTransaccionLARO DLQG
        /// <summary>
        /// Realiza anulación de pago con tarjeta LARO BNCR
        /// </summary>
        private void RealizarTransaccionLARO(string Supervisor, string NumA, string NumT, string NumR, string Monto, string Documento, string pinvoice)
        {
            string TipoTrans = "W";//Tipo transacción
            bool Aprobado = false;//Indica si la transacción fue aprobada o no
            double ResponseAmount = 0;//Disponible de la tarjeta en consulta de saldos
            string nombTarj = "";//Nombre del tarjeta habiente
            
            Utils.QueryParams qp = new QueryParams();
            qp.AddReplaceParam("CAJA", Program.Caja.ToString());
            qp.AddReplaceParam("EMISOR", "2");

            //Verifica que la caja tenga en la base de datos, los datos de merchant, merchantnumber, terminalnumber
            if (GUI.CApp.bll.GetSingleValue("HayDatos", qp, "PDV").ToString() != "0")
            {
                //
                string NumAutoriz = NumA;//Número de autorización
                string NumTarj = NumT;//Número de tarjeta enmascarado
                string NumRef = NumR;//Número de referencia de la transacción
                string NumInvoic = pinvoice; //Invoice de la transacción
                //
                #region
                Utils.QueryParams qparams = new QueryParams();
                string id_tr_tarj = GUI.CApp.bll.GetSingleValue("Sig_Id_tr_tarj", "PDV").ToString();
                qparams.AddReplaceParam("ID_TR_TARJ", id_tr_tarj);
                qparams.AddReplaceParam("DOCUMENTO", Documento);
                qparams.AddReplaceParam("CAJA", Program.Caja.ToString());
                qparams.AddReplaceParam("TIPO", "Anulación");
                if (Supervisor != null && Supervisor != "")
                    qparams.AddReplaceParam("USUARIO", Supervisor);
                else
                    qparams.AddReplaceParam("USUARIO", GUI.CApp.usuario);
                qparams.AddReplaceParam("MONTO", Monto);
                qparams.AddReplaceParam("ESTADO", "Pendiente");
                qparams.AddReplaceParam("EMISOR", "2");
                qparams.AddReplaceParam("JORNADA", Program.Jornada.ToString());
                //
                GUI.CApp.bll.ExecuteSql("Ini_Log_Tarjetas_Anul", qparams, "PDV");
                #endregion

                /*//
                    //Realiza el proceso de anulación de la transacción
                    BNCRGL.BNCR bn = new BNCRGL.BNCR();
                    bn.GenerarTransaccion(Merchant, MerchantNumber, TerminalNumber, TipoTrans,
                    0, 0, 0, 0, 0, ref NumTarj, ref nombTarj, ref Aprobado, ref NumRef,
                    ref NumAutoriz, ref ResponseAmount);
                    //*/

                BNCRLaro.CallWirePos Virtualbn = new BNCRLaro.CallWirePos("C:\\AuthorPos");
                string Tramaresp = Virtualbn.VoidTransaction("", 0, NumInvoic, "");

                LLNet.Controls.LLEventLog EventLogManuales = new LLNet.Controls.LLEventLog(LLNet.DAL.OracleDAL.ExeLogDir);
                EventLogManuales.WriteLog("", Tramaresp);

                //CApp.ShowMessage(Aprobado.ToString(), "LOG TEMPORAL", true);
                //CApp.ShowMessage(Tramaresp, "LOG TEMPORAL", true);

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

                if (TramaCampos[0].ToString() == "00")
                {
                    //00 en el campo 0 significa aprobado en el banco
                    Aprobado = true;
                   //CApp.ShowMessage(Aprobado.ToString() + "00", "LOG TEMPORAL", true);
                }
                /*
                if (TramaCampos.Length >= 10)
                {
                    NumTarj = TramaCampos[2].ToString();
                    NumAutoriz = TramaCampos[1].ToString();
                    NumRef = TramaCampos[3].ToString();
                }*/

                #region (NO) Aprobado
                if (Aprobado)
                {
                    qparams = new QueryParams();
                    //Datos fin del proceso de pago con tarjeta de crédito
                    qparams.AddReplaceParam("ID_TR_TARJ", id_tr_tarj);
                    qparams.AddReplaceParam("TARJETA", NumTarj);
                    qparams.AddReplaceParam("AUTORIZACION", NumAutoriz);
                    qparams.AddReplaceParam("REFERENCIA", NumRef);
                    qparams.AddReplaceParam("ESTADO", "Aprobada");
                    qparams.AddReplaceParam("ERRORES", "");
                    qparams.AddReplaceParam("pINVOICE", NumInvoic);
                    qparams.AddReplaceParam("pTRAMA", Tramaresp);
                    //
                    GUI.CApp.bll.ExecuteSql("Fin_Log_TarjetasBNCR", qparams, "PDV");

                    this.txteMonto.Text = String.Empty;
                    this.txteNumAutoriz.Text = String.Empty;
                    this.txteNumRef.Text = String.Empty;
                    this.txteNumTarjeta.Text = String.Empty;
                    this.txteInvoice.Text = String.Empty;
                    this.txteNumTarjeta.Focus();
                    this.Exito = true;
                }
                else
                {
                    qparams = new QueryParams();
                    qparams.AddReplaceParam("ID_TR_TARJ", id_tr_tarj);
                    qparams.AddReplaceParam("TARJETA", NumTarj);
                    qparams.AddReplaceParam("AUTORIZACION", NumAutoriz);
                    qparams.AddReplaceParam("REFERENCIA", NumRef);
                    qparams.AddReplaceParam("ESTADO", "Denegada");
                    qparams.AddReplaceParam("ERRORES", "Anulación denegada/cancelada");
                    qparams.AddReplaceParam("pINVOICE", NumInvoic);
                    qparams.AddReplaceParam("pTRAMA", Tramaresp);
                    //
                    this.Exito = false;
                    GUI.CApp.bll.ExecuteSql("Fin_Log_TarjetasBNCR", qparams, "PDV");

                    CApp.ShowMessage("Transacción denegada", "Anulación de Documentos", true);
                }
                #endregion
            }

        }
        #endregion



        #region Credix
        
        //Anula una transaccion de pago por Credix con Tarjeta
        private bool Anular_TransCrdx(string doc)
        {
            bool trans = false ;
            string fecha = GUI.CApp.bll.GetSingleValue("CREDIX_FECHA", "PDV").ToString(); 
            Utils.QueryParams qpcx = new LLNet.Utils.QueryParams();
            qpcx.AddReplaceParam("pdoc", doc);
            DataSet dsBC = GUI.CApp.bll.getDataSet("PDV", "WMS_TRANSCREDIX", qpcx);
            if (dsBC.Tables.Count > 0)
            {
                if (dsBC.Tables[0].Rows.Count > 0)
                {
                    /*    0          1        2      3        4           5       6               7           8           9                         * 
                    W.NUMTAR, W.FECHA_VENC, W.CVV, W.MONTO, W.IMPORTE, W.MONEDA, W.CUOTAS, W.REFERENCIA, W.TIPO_TRANS, W.PIN, 
                         10          11            12                  13                                    14
                     * W.DOCUMENTO, W.CREADO_EL, W.AUTORIZACION, wms_p_factpedido(W.DOCUMENTO) FACTURA, W.NUM_CRDX
            
                     */
                    object[] datos = new object[15];
                    datos = dsBC.Tables[0].Rows[0].ItemArray;
                    string fact = datos[13].ToString();
                    if (GUI.CApp.ValidateAccess("AnlrCrdx", "Anula un Pago con Credix"))
                    {
                        //Número de autorización
                        string nauto = datos[12].ToString();
                        //Pin
                        string npin = datos[9].ToString();
                        //Número de tarjeta enmascarado
                        string numtarj = datos[0].ToString();
                        //Fecha de vencimiento
                        string fven = datos[11].ToString();
                        //Número de referencia de la transacción
                        string NumRef = datos[7].ToString();
                        //Monto transacción
                        string imprt = datos[4].ToString();
                        //Moneda
                        string moned = datos[5].ToString();
                        //Numero Credix
                        string numcrdx = datos[14].ToString();

                        string Id_tr_tarj = "";

                        string supervisor = "";
                        if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                        {
                            supervisor = GUI.CApp.Sup;
                        }
                        else
                        {
                            supervisor = GUI.CApp.usuario;
                        }

                        if (fecha != fven)
                        {
                            CApp.ShowMessage("El voucher es de una fecha anterior a la actual", "Pagos Credix", true);

                        }
                        else
                        {
                            vUrl = Helpers.Nvl(CApp.GetParam("URLX"), "").ToString();
                            //WEB SERVICE CON SUS MÉTODOS
                            CredixCnx.Webservices_Model_WsService WSCredix = new CredixCnx.Webservices_Model_WsService();
                            WSCredix.Url = vUrl;
                            WSCredix.Credentials = new NetworkCredential(varUsrC, varPwdC);
                            if (numtarj != "")
                            {//Anulacion de transaccion con Tarjeta
                                //string resp = WSCredix.delete_transaction(varUsrC, varPwdC, numtarj, fven, nauto, imprt, moned, "S");
                                string resp = WSCredix.delete_transaction_without_cardnumber(varUsrC, varPwdC, imprt, fven, nauto, moned, "S");
                                string estad = "A";
                                if (resp.Substring(0, 2) == "00")
                                {
                                    trans = true;
                                    //Almacena la respuesta y la anulacion
                                    RegistroBDAPagoTarj(resp, NumRef, supervisor);
                                }
                                else
                                {
                                    CApp.ShowMessage("No se puede realizar la anulación " + resp, "Pagos Credix", false);
                                }
                            }
                            else
                            {//Anulacion de transaccion con Pin
                                string resp = WSCredix.delete_transaction_pin(varUsrC, varPwdC, nauto, numcrdx, imprt, moned, "S");
                                string estad = "A";
                                if (resp.Substring(0, 2) == "00")
                                {
                                    trans = true;
                                    //Almacena la respuesta y la anulacion
                                    RegistroBDAPagoTarj(resp, NumRef, supervisor);
                                }
                                else
                                {
                                    CApp.ShowMessage("No se puede realizar la anulación " + resp, "Pagos Credix", false);
                                }
                            }
                        }
                    }
                    else
                    {
                        CApp.ShowMessage("No tienes permisos para realizar la anulación", "Pagos Credix", false);
                    }
                }
            }
            return trans;
        }

        //Registrar en BD la transaccion Pago con tarjeta
        private void RegistroBDAPagoTarj(string resp, string refer, string usrauto)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            if (resp == "")
            {
                qp.AddReplaceParam("presp", DBNull.Value.ToString().ToString());
            }
            else
            {
                qp.AddReplaceParam("presp", resp);
            }
            if (refer == "")
            {
                qp.AddReplaceParam("prefer", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("prefer", refer);
            }
            if (usrauto == "")
            {
                qp.AddReplaceParam("pusrauto", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pusrauto", usrauto);
            }
            //Jornada
            qp.AddReplaceParam("pjornada", Program.Jornada.ToString());

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

        #endregion

        #region Monedero Alo

        //Anula una transaccion de pago por Monedero Alo
        private bool Anular_TransMOA(string doc)
        {
            bool trans = false;

            Utils.QueryParams qpcx = new LLNet.Utils.QueryParams();
            qpcx.AddReplaceParam("pdoc", doc);
            DataSet dsBC = GUI.CApp.bll.getDataSet("PDV", "WMS_TRANSMONEDALO", qpcx);
            if (dsBC.Tables.Count > 0)
            {
                if (dsBC.Tables[0].Rows.Count > 0)
                {
                    /*    0          1                     2    
                   W.REFERENCIA,W.ASOCIACION, W.IDENTIFICACION CLIENTE
                     */
                    object[] datos = new object[3];
                    datos = dsBC.Tables[0].Rows[0].ItemArray;
                    if (GUI.CApp.ValidateAccess("AnlrMA", "Anula un Pago con Monedero Alo"))
                    {
                        //Número de referencia de la transacción
                        string NumRef = datos[0].ToString();

                        string supervisor = "";
                        if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                        {
                            supervisor = GUI.CApp.Sup;
                        }
                        else
                        {
                            supervisor = GUI.CApp.usuario;
                        }

                        //WEB SERVICE CON SUS MÉTODOS
                        AloExpress.INTEGRACIONSP WSMONEDEROAE = new AloExpress.INTEGRACIONSP();

                        //Datos de seguridad
                        AloExpress.tipoInfoSeguridad TS = new AloExpress.tipoInfoSeguridad();
                        TS.Entidad = varEntMEA;
                        TS.Usuario = varUsrMEA;
                        TS.Clave = varPwdMEA;

                        AloExpress.tipoInfoServicio TIS = new AloExpress.tipoInfoServicio();
                        TIS.Referencia = NumRef;
                        TIS.Servicio = "29";

                        AloExpress.ReversarServicio RS = new AloExpress.ReversarServicio();
                        RS.InfoServicio = TIS;
                        RS.InfoSeguridad = TS;

                        AloExpress.ServicioReversadoOutput PSerRes = WSMONEDEROAE.ReversarServicio(RS);
                        string estad = "A";
                        if (PSerRes.ErrorCodigo == "00")
                        {
                            trans = true;                            
                            //Almacena la respuesta y la anulacion
                            RegistroBDAPago(NumRef, supervisor);
                        }
                        else
                        {
                            CApp.ShowMessage("No se puede realizar la anulación " + PSerRes.ErrorCodigo +":"+ PSerRes.ErrorDes, "Pagos Monedero Alo", false);
                        }
                    }
                    else
                    {
                        CApp.ShowMessage("No tienes permisos para realizar la anulación", "Pagos Monedero Alo", false);
                    }
                }
            }
            return trans;
        }

        //Registrar en BD la transaccion Anulacion Pago con monedero Aló
        private void RegistroBDAPago(string refer, string usrauto)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            if (refer == "")
            {
                qp.AddReplaceParam("prefer", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("prefer", refer);
            }
            if (usrauto == "")
            {
                qp.AddReplaceParam("pusrauto", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pusrauto", usrauto);
            }
            //Jornada
            qp.AddReplaceParam("pjornada", Program.Jornada.ToString());

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

        #endregion

        #region MisPuntos DLQG
        private string EMisPtsGano(string doc)
        {
            string info = "";
            string PData = "url_respuesta=" + varUrlPts + "prueba_respuesta.php&tipo_respuesta=1&cod_empresa=" + varCodemprPts + "&cod_sucursal=" + varCodsucPts + "&tipo_transaccion=credito&factura=" + doc + "&id_maestro=";
            try
            {
                info = RequestPOST(varUrlPts + "ws_anulacion_maestro.php", PData);
                info = info.Trim();
                string[] datos = info.Split(' ');

                if (datos.Length > 2)
                {
                    if (datos[0].ToString() != "10")
                    {
                        CApp.ShowMessage(info, "Anulación - Eliminar Pts Gano", true);
                        BitacoraErrorWS("WS=" + varUrlPts + "ws_anulacion_maestro.php " + info, PData);
                    }
                }
                else
                {
                    CApp.ShowMessage(info, "Anulación - Eliminar Pts Gano", true);
                    BitacoraErrorWS("WS=" + varUrlPts + "ws_anulacion_maestro.php " + info, PData);
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Anulación - Eliminar Pts Gano", true);
                if (ex.Message.Length > 50)
                {                 
                    BitacoraErrorWS("SIN INTERNET WS=" + varUrlPts + "ws_anulacion_maestro.php" + ex.Message.Substring(0, 49), "FACTURA: " + doc );
                }
                else
                {                    
                    BitacoraErrorWS("SIN INTERNET WS=" + varUrlPts + "ws_anulacion_maestro.php" + ex.Message, "FACTURA: " + doc );
                }
            }
            return info;
        }

        private string EMisPtsPago(string idmaestro)
        {
            string info = "";
            try
            {
                string PData = "url_respuesta=" + varUrlPts + "prueba_respuesta.php&tipo_respuesta=1&cod_empresa=" + varCodemprPts + "&cod_sucursal=" + varCodsucPts + "&tipo_transaccion=debito&factura=&id_maestro=" + idmaestro;
                info = RequestPOST(varUrlPts + "ws_anulacion_maestro.php", PData);
                info = info.Trim();
                string[] datos = info.Split(' ');

                if (datos.Length > 2)
                {
                    if (datos[0].ToString() != "10")
                    {
                        CApp.ShowMessage(info, "Anulación - Eliminar Pago con Pts", true);
                        BitacoraErrorWS("WS=" + varUrlPts + "ws_anulacion_maestro.php " + info, PData);
                    }
                }
                else
                {
                    CApp.ShowMessage(info, "Anulación - Eliminar Pago con Pts", true);
                    BitacoraErrorWS("WS=" + varUrlPts + "ws_anulacion_maestro.php " + info, PData);
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Anulación - Eliminar Pago con Pts", true);
                if (ex.Message.Length > 50)
                {
                    BitacoraErrorWS("SIN INTERNET WS=" + varUrlPts + "ws_anulacion_maestro.php" + ex.Message.Substring(0, 49), "IDMAESTRO: " + idmaestro);
                }
                else
                {
                    BitacoraErrorWS("SIN INTERNET WS=" + varUrlPts + "ws_anulacion_maestro.php" + ex.Message, "IDMAESTRO: " + idmaestro);
                }
            }
            return info;
        }



        /// <summary>Ejecuta por medio de post un llamado al Web Service utilizando HTTP POST</summary>
        /// <param name="URL"></param>
        /// <param name="PostData"></param>
        /// <returns></returns>
        private string RequestPOST(string URL, string PostData)
        {
            // Create a request using a URL that can receive a post. 
            WebRequest request = WebRequest.Create(URL);
            // Set the Method property of the request to POST.
            request.Method = "POST";
            // Create POST data and convert it to a byte array.
            //string postData = "";
            byte[] byteArray = Encoding.UTF8.GetBytes(PostData);
            // Set the ContentType property of the WebRequest.
            request.ContentType = "application/x-www-form-urlencoded";
            // Set the ContentLength property of the WebRequest.
            request.ContentLength = byteArray.Length;
            // Get the request stream.
            Stream dataStream = request.GetRequestStream();
            // Write the data to the request stream.
            dataStream.Write(byteArray, 0, byteArray.Length);
            // Close the Stream object.
            dataStream.Close();
            // Get the response.
            WebResponse response = request.GetResponse();
            // Display the status.
            //MessageBox.Show(((HttpWebResponse)response).StatusDescription, "DESCRIPCION");
            // Get the stream containing content returned by the server.
            dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();
            // Display the content.
           // MessageBox.Show(responseFromServer, "Respuesta del Server");
            // Clean up the streams.
            reader.Close();
            dataStream.Close();
            response.Close();
            return responseFromServer;
        }

        //almacena el error en el WS
        private void BitacoraErrorWS(string pError, string pWServ)
        {
            if (pWServ.Length > 300)
                pWServ = pWServ.Substring(0, 300);
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pError", pError);
            qp.AddReplaceParam("pWServ", pWServ);
            // Llama el procedimiento que almacena el error del WS en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_BITAC_E_AFIL", qp, "PDV");
        }

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

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

            varUrlPts = datos[0].ToString();
            varCodemprPts = datos[1].ToString();
            varCodsucPts = datos[2].ToString();

            qp.Clear();
            DataSet dsBC = GUI.CApp.bll.getDataSet("PDV", "C_PC", qp);

            object[] datosc = new object[2];
            datosc = dsBC.Tables[0].Rows[0].ItemArray;

            varUsrC = datosc[0].ToString();
            varPwdC = datosc[1].ToString();


            qp.Clear();
            DataSet dsBM = GUI.CApp.bll.getDataSet("PDV", "C_PM", qp);

            object[] datosm = new object[3];
            datosm = dsBM.Tables[0].Rows[0].ItemArray;

            varEntMEA = datosm[0].ToString();
            varUsrMEA = datosm[1].ToString();
            varPwdMEA = datosm[2].ToString();  
        }

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

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

            varUSRG = datos[0].ToString();
            varPWDG = datos[1].ToString();
            varURLE = datos[2].ToString();
        }

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

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

            moneda = datos[0].ToString(); //colones
            pais = datos[1].ToString(); //CostaRica
            compania = datos[2].ToString();
            aliado = datos[3].ToString();
            tienda = datos[4].ToString();
            usrcredito = datos[5].ToString();
        }


        #endregion

        #region Credicuotas DLQG

        //Registrar en BD UN ERROR DE CREDITO EKONO
        private void RegBDERRORCREDEK(string pERR_COD_ESTADO, string pERR_DESC, string pCOD_ESTADO,
            string pDESC_ESTADO, string pREFERENCIA, string pERROR, string pWS)
        {
            /*
              &&pREFERENCIA&&, &&pJORNADA&& ,
                    '&&pCOD_ESTADO&&' , '&&pDESC_ESTADO&&', '&&pERR_COD_EST&&' , 
                    '&&pERR_DESC&&', '&&pWS&&','&&pERROR&&'
             */
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();

            if (pERR_COD_ESTADO == "")
            {
                qp.AddReplaceParam("pERR_COD_EST", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pERR_COD_EST", pERR_COD_ESTADO);
            }
            if (pERR_DESC == "")
            {
                qp.AddReplaceParam("pERR_DESC", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pERR_DESC", pERR_DESC);
            }
            if (pCOD_ESTADO == "")
            {
                qp.AddReplaceParam("pCOD_ESTADO", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pCOD_ESTADO", pCOD_ESTADO);
            }
            if (pDESC_ESTADO == "")
            {
                qp.AddReplaceParam("pDESC_ESTADO", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pDESC_ESTADO", pDESC_ESTADO);
            }
            if (pERROR == "")
            {
                qp.AddReplaceParam("pERROR", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pERROR", pERROR);
            }
            if (pWS == "")
            {
                qp.AddReplaceParam("pWS", DBNull.Value.ToString());
            }
            else
            {
                qp.AddReplaceParam("pWS", pWS);
            }
            if (pREFERENCIA == "")
            {
                qp.AddReplaceParam("pREFERENCIA", "0");
            }
            else
            {
                qp.AddReplaceParam("pREFERENCIA", pREFERENCIA);
            }
            //Jornada
            qp.AddReplaceParam("pJORNADA", Program.Jornada.ToString());


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

        /*

        //Anula una transaccion de pago 
        private bool Anular_TransCrediCuotsEk(string doc)
        {
            bool trans = false;

            Utils.QueryParams qpcx = new LLNet.Utils.QueryParams();
            qpcx.AddReplaceParam("pdoc", doc);
            DataSet dsBC = GUI.CApp.bll.getDataSet("PDV", "WMS_TRANSCREDITOEK", qpcx);
            if (dsBC.Tables.Count > 0)
            {
                if (dsBC.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow Fila in dsBC.Tables[0].Rows)
                    {
                        object[] datos = new object[6];
                        datos = Fila.ItemArray;

                        if (GUI.CApp.ValidateAccess("AnlrCrEk", "Anula un Pago Credicuotas Ekono"))
                        {

                            //w.ID_TRANS_PROV,CG_F_PARAMETER_VALUE ('BREE') bodega, w.NIT_CLIENTE, w.VALORCOMPRA, w.FECHA_TRANS, referencia


                            //Número de autorización
                            string REFERENCIA = datos[5].ToString();

                            QueryParams qp = new QueryParams();
                            qp.AddReplaceParam("pREFERENCIA", REFERENCIA);
                            string ValFecha = GUI.CApp.bll.GetSingleValue("VALFECCREDITOEK", qp, "PDV").ToString();

                            if (ValFecha == "1")
                            {
                                string PreSolicitud = REFERENCIA;
                                int Estado = 6; //CANCELADO
                                string Usuario = usrcredito;
                                string IdCliente = datos[2].ToString();
                                string supervisor = "";
                                if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                                {
                                    supervisor = GUI.CApp.Sup;
                                }
                                else
                                {
                                    supervisor = GUI.CApp.usuario;
                                }

                                //WEB SERVICE CON SUS MÉTODOS
                                WSMulticred1.XperBusinessActionWS wsmulti = new WSMulticred1.XperBusinessActionWS();
                                strresulIF = wsmulti.AnularSolicitudCredito(PreSolicitud, Estado, Usuario, IdCliente);

                                DataSet ds = new DataSet();

                                XmlDocument xmlDoctest = new XmlDocument();

                                xmlDoctest.LoadXml(strresulIF);

                                ds.ReadXml(new XmlTextReader(new StringReader(xmlDoctest.OuterXml)));


                                DataTable vConsulta = ds.Tables[0];

                                //dataGridView1.DataSource = vConsulta;

                                string vResultado = vConsulta.Rows[0].ItemArray[0].ToString(); //resultado de la consulta
                                string vObserv = vConsulta.Rows[0].ItemArray[1].ToString(); //resultado de la consulta
                                
                                if (vResultado == "S")
                                {//TRANSACCION CORRECTA
                                    //this.exito = true;
                                    trans = true;
                                    RegBDAnul(PreSolicitud, CApp.usuario.ToString(), PreSolicitud, PreSolicitud);
                                    //IMPRIME EL COMPROBANTE DE ANULACION
                                    imprimirAVCREDITOEK(PreSolicitud);
                                }
                                else
                                { //ERROR
                                    // this.exito = false;
                                    trans = false;
                                    CApp.ShowMessage(vObserv, "Error CrediE", false);
                                    RegBDERRORCREDEK("", "", "", "", PreSolicitud, vObserv, "ANULACION");
                                }
                                /*
                                //Número de autorización
                                string SUCURSAL = datos[1].ToString();
                                //Pin
                                string ID_TRANS_PROV = datos[0].ToString();
                                //Número de referencia de la transacción
                                string VALORCOMPRA = datos[3].ToString();
                                //FECHA TRANSACCION
                                string FECHA_TRANS = datos[4].ToString();
                                //FECHA TRANSACCION
                                string NIT_CLIENTE = datos[2].ToString();

                                string supervisor = "";
                                if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                                {
                                    supervisor = GUI.CApp.Sup;
                                }
                                else
                                {
                                    supervisor = GUI.CApp.usuario;
                                }
                               
                                
                                //WEB SERVICE CON SUS MÉTODOS
                                GenesisCnx.Service wsGenesis = new GenesisCnx.Service();
                                XmlNode nod = wsGenesis.AnulaCompra(ID_TRANS_PROV, "F", SUCURSAL, CApp.usuario, Program.Caja.ToString(), Program.Jornada.ToString(), NIT_CLIENTE, VALORCOMPRA, FECHA_TRANS, varUSRG, varPWDG);
                                XmlNodeList list = nod.SelectNodes("/datos");
                                foreach (XmlNode DATO in list)
                                {
                                    //  MessageBox.Show(DATO.InnerXml);
                                    if (DATO.HasChildNodes)
                                    {/*
                              <err_cod_estado>05</err_cod_estado><err_descripcion>Datos Incorrectos</err_descripcion>
                              
                                        XmlNode cod_estado = DATO.SelectSingleNode("cod_estado");
                                        XmlNode desc_estado = DATO.SelectSingleNode("desc_estado");
                                        XmlNode err_cod_est = DATO.SelectSingleNode("err_cod_est");
                                        XmlNode err_desc = DATO.SelectSingleNode("err_desc");
                                        XmlNode id_trans_anulacion = DATO.SelectSingleNode("id_trans_anulacion");
                                        XmlNode tran_jornada = DATO.SelectSingleNode("tran_jornada");
                                        XmlNode tran_cedula = DATO.SelectSingleNode("tran_cedula");
                                        XmlNode tran_nombre = DATO.SelectSingleNode("tran_nombre");
                                        XmlNode tran_monto = DATO.SelectSingleNode("tran_monto");
                                        XmlNode tran_fecha = DATO.SelectSingleNode("tran_fecha");

                                        string codestado = "", descestado = "", errcodest = "", errdesc = "", idtransanulacion = "";

                                        if (cod_estado != null)
                                            codestado = cod_estado.InnerText;
                                        if (desc_estado != null)
                                            descestado = desc_estado.InnerText;
                                        if (err_cod_est != null)
                                            errcodest = err_cod_est.InnerText;
                                        if (err_desc != null)
                                            errdesc = err_desc.InnerText;
                                        if (id_trans_anulacion != null)
                                            idtransanulacion = id_trans_anulacion.InnerText;

                                        if (errcodest == "1")
                                        {//CONSULTA CORRECTA
                                            if (codestado == "1")
                                            {//TRANSACCION CORRECTA
                                                trans = true;

                                                RegBDAnul(REFERENCIA, CApp.usuario.ToString(), ID_TRANS_PROV, idtransanulacion);
                                                //IMPRIME EL COMPROBANTE DE ANULACION
                                                imprimirAVCREDITOEK(REFERENCIA);
                                            }
                                            else
                                            { //ERROR
                                                // this.exito = false;
                                                CApp.ShowMessage(descestado, "Error CrediE", false);
                                                RegBDERRORCREDEK(errcodest, errdesc, codestado, descestado, REFERENCIA, "", "ANULACION");
                                            }
                                        }
                                        else
                                        { //ERROR CONSULTA
                                            //this.exito = false;
                                            CApp.ShowMessage(errdesc, "Error CrediE", false);
                                            RegBDERRORCREDEK(errcodest, errdesc, codestado, descestado, REFERENCIA, "", "ANULACION");
                                        }

                                    }
                                    else
                                    {
                                        //this.exito = false;
                                        CApp.ShowMessage("No se obtiene datos", "Error CrediE", false);
                                        RegBDERRORCREDEK("", "", "", "", REFERENCIA, "No se obtiene datos del XML", "ANULACION");
                                    } 
                                } -- AQUI CERRABA EL * / SE QUITO PARA PODER COMENTAR TODO EL MÉTODO 
                            }
                            else
                            {
                                CApp.ShowMessage("No se puede anular un pago CrediE que no sea del día", "Pagos CrediE Ekono", false);
                            }
                        }
                        else
                        {
                            CApp.ShowMessage("No tienes permisos para realizar la anulación", "Pagos CrediE Ekono", false);
                        }
                    }
                }
                else
                    CApp.ShowMessage("No se puede anular un pago CrediE asociado a una factura/recibo", "Pagos CrediE Ekono", false);
            }
            return trans;
        }
        
        */

        //Anula una transaccion de pago 
        private bool Anular_TransCrediCuotsEk(string doc)
        {
            bool trans = false;

            Utils.QueryParams qpcx = new LLNet.Utils.QueryParams();
            qpcx.AddReplaceParam("pdoc", doc);
            DataSet dsBC = GUI.CApp.bll.getDataSet("PDV", "WMS_TRANSCREDITOEK", qpcx);
            if (dsBC.Tables.Count > 0)
            {
                if (dsBC.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow Fila in dsBC.Tables[0].Rows)
                    {
                        object[] datos = new object[6];
                        datos = Fila.ItemArray;

                        if (GUI.CApp.ValidateAccess("AnlrCrEk", "Anula un Pago Credicuotas Ekono"))
                        {

                            //w.ID_TRANS_PROV,CG_F_PARAMETER_VALUE ('BREE') bodega, w.NIT_CLIENTE, w.VALORCOMPRA, w.FECHA_TRANS, referencia


                            //Número de autorización
                            string REFERENCIA = datos[5].ToString();

                            QueryParams qp = new QueryParams();
                            qp.AddReplaceParam("pREFERENCIA", REFERENCIA);
                            string ValFecha = GUI.CApp.bll.GetSingleValue("VALFECCREDITOEK", qp, "PDV").ToString();

                            if (ValFecha == "1")
                            {
                                //Número de autorización
                                string SUCURSAL = datos[1].ToString();
                                //Pin
                                string ID_TRANS_PROV = datos[0].ToString();
                                //Número de referencia de la transacción
                                string VALORCOMPRA = datos[3].ToString();
                                //FECHA TRANSACCION
                                string FECHA_TRANS = datos[4].ToString();
                                //FECHA TRANSACCION
                                string NIT_CLIENTE = datos[2].ToString();

                                string supervisor = "";
                                if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                                {
                                    supervisor = GUI.CApp.Sup;
                                }
                                else
                                {
                                    supervisor = GUI.CApp.usuario;
                                }

                                //WEB SERVICE CON SUS MÉTODOS
                                GenesisCnx.Service wsGenesis = new GenesisCnx.Service();
                                wsGenesis.Url = varURLE;
                                XmlNode nod = wsGenesis.AnulaCompra(ID_TRANS_PROV, "F", SUCURSAL, CApp.usuario, Program.Caja.ToString(), Program.Jornada.ToString(), NIT_CLIENTE, VALORCOMPRA, FECHA_TRANS, varUSRG, varPWDG);
                                XmlNodeList list = nod.SelectNodes("/datos");
                                foreach (XmlNode DATO in list)
                                {
                                    //  MessageBox.Show(DATO.InnerXml);
                                    if (DATO.HasChildNodes)
                                    {/*
                              <err_cod_estado>05</err_cod_estado><err_descripcion>Datos Incorrectos</err_descripcion>
                              */
                                        XmlNode cod_estado = DATO.SelectSingleNode("cod_estado");
                                        XmlNode desc_estado = DATO.SelectSingleNode("desc_estado");
                                        XmlNode err_cod_est = DATO.SelectSingleNode("err_cod_est");
                                        XmlNode err_desc = DATO.SelectSingleNode("err_desc");
                                        XmlNode id_trans_anulacion = DATO.SelectSingleNode("id_trans_anulacion");
                                        XmlNode tran_jornada = DATO.SelectSingleNode("tran_jornada");
                                        XmlNode tran_cedula = DATO.SelectSingleNode("tran_cedula");
                                        XmlNode tran_nombre = DATO.SelectSingleNode("tran_nombre");
                                        XmlNode tran_monto = DATO.SelectSingleNode("tran_monto");
                                        XmlNode tran_fecha = DATO.SelectSingleNode("tran_fecha");

                                        string codestado = "", descestado = "", errcodest = "", errdesc = "", idtransanulacion = "";

                                        if (cod_estado != null)
                                            codestado = cod_estado.InnerText;
                                        if (desc_estado != null)
                                            descestado = desc_estado.InnerText;
                                        if (err_cod_est != null)
                                            errcodest = err_cod_est.InnerText;
                                        if (err_desc != null)
                                            errdesc = err_desc.InnerText;
                                        if (id_trans_anulacion != null)
                                            idtransanulacion = id_trans_anulacion.InnerText;

                                        if (errcodest == "1")
                                        {//CONSULTA CORRECTA
                                            if (codestado == "1")
                                            {//TRANSACCION CORRECTA
                                                trans = true;

                                                RegBDAnul(REFERENCIA, CApp.usuario.ToString(), ID_TRANS_PROV, idtransanulacion);
                                                //IMPRIME EL COMPROBANTE DE ANULACION
                                                imprimirAVCREDITOEK(REFERENCIA);
                                            }
                                            else
                                            { //ERROR
                                                // this.exito = false;
                                                CApp.ShowMessage(descestado, "Error Credi-E", false);
                                                RegBDERRORCREDEK(errcodest, errdesc, codestado, descestado, REFERENCIA, "", "ANULACION");
                                            }
                                        }
                                        else
                                        { //ERROR CONSULTA
                                            //this.exito = false;
                                            CApp.ShowMessage(errdesc, "Error Credi-E", false);
                                            RegBDERRORCREDEK(errcodest, errdesc, codestado, descestado, REFERENCIA, "", "ANULACION");
                                        }

                                    }
                                    else
                                    {
                                        //this.exito = false;
                                        CApp.ShowMessage("No se obtiene datos", "Error Credi-E", false);
                                        RegBDERRORCREDEK("", "", "", "", REFERENCIA, "No se obtiene datos del XML", "ANULACION");
                                    }
                                }
                            }
                            else
                            {
                                CApp.ShowMessage("No se puede anular un pago Credi-E que no sea del día", "Pagos Credi-E Ekono", false);
                            }
                        }
                        else
                        {
                            CApp.ShowMessage("No tienes permisos para realizar la anulación", "Pagos Credi-E Ekono", false);
                        }
                    }
                }
                else
                    CApp.ShowMessage("No se puede anular un pago Credi-E asociado a una factura/recibo", "Pagos Credi-E Ekono", false);
            }
            return trans;
        }


        private void RegBDAnul(string pREFERENCIA, string pUSUARIO, string pID_TRANS_PROV, string pID_TRANS_ANUL)
        {      /*
                (&&pREFERENCIA&& , '&&pUSUARIO&&' , '&&pID_TRANS_PROV&&' ,&&pID_TRANS_ANUL&& );
                */
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();

            if (pREFERENCIA == "")
            {
                qp.AddReplaceParam("pREFERENCIA", "0");
            }
            else
            {
                qp.AddReplaceParam("pREFERENCIA", pREFERENCIA);
            }
            if (pUSUARIO == "")
            {
                qp.AddReplaceParam("pUSUARIO", DBNull.Value.ToString().ToString());
            }
            else
            {
                qp.AddReplaceParam("pUSUARIO", pUSUARIO);
            }
            if (pID_TRANS_PROV == "")
            {
                qp.AddReplaceParam("pID_TRANS_PROV", DBNull.Value.ToString().ToString());
            }
            else
            {
                qp.AddReplaceParam("pID_TRANS_PROV", pID_TRANS_PROV);
            }
            if (pID_TRANS_ANUL == "")
            {
                qp.AddReplaceParam("pID_TRANS_ANUL", DBNull.Value.ToString().ToString());
            }
            else
            {
                qp.AddReplaceParam("pID_TRANS_ANUL", pID_TRANS_ANUL);
            }

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

        private void imprimirAVCREDITOEK(string id)
        {
            try
            {
                object FormatoTipoImpresion = null;
                QueryParams qparams = new LLNet.Utils.QueryParams();
                qparams = new LLNet.Utils.QueryParams();
                qparams.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'CAFC");
                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();
                imprimirVoucherCCE(Convert.ToInt64(id), "", Convert.ToInt64(format));
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Comprobante de Anulación Pago con Credi-E Ekono", false);
            }
        }

        /// <summary> Imprime el voucher</summary>
        /// <param name="voucher">Id voucher</param>
        /// <param name="Impresora"></param>
        /// <param name="formato">Formato impresión</param>
        private void imprimirVoucherCCE(long voucher, string Impresora, long formato)
        {
            string Ruta = Application.StartupPath;
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            if (Ruta != string.Empty)
            {
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(Ruta + "\\" + "imprimir.bat ");
                startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

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

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

                startInfo.Arguments = Args;
                try
                {
                    qp.AddReplaceParam("ID_TR_TARJ", voucher.ToString());
                    qp.AddReplaceParam("FORMATO", formato.ToString());
                    qp.AddReplaceParam("USUARIO", GUI.CApp.usuario.ToString());
                    GUI.CApp.bll.ExecuteSql("WMS_P_GENERAR_IMPRVO", qp, "PDV");
                    Thread.Sleep(2000);  // se deja un delay para esperar a que la base contruya el archivo
                    System.Diagnostics.Process.Start(startInfo);

                    #region Imprimir copia voucher
                    string valor = Helpers.Nvl(CApp.GetParam("HCV"), "").ToString();
                    if (valor == "1")//Si valor es 1, se imprime la copia del voucher
                    {
                        qp.AddReplaceParam("ID_TR_TARJ", voucher.ToString());
                        qp.AddReplaceParam("FORMATO", formato.ToString());
                        qp.AddReplaceParam("USUARIO", GUI.CApp.usuario.ToString());
                        GUI.CApp.bll.ExecuteSql("WMS_P_GENERAR_IMPRVO", qp, "PDV");
                        Thread.Sleep(2000);  // se deja un delay para esperar a que la base contruya el archivo
                        System.Diagnostics.Process.Start(startInfo);
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    GUI.CApp.ShowMessage(ex.Message, "Impresion de Documentos", false);
                }
            }
            else
            {
                throw new Exception("No esta Definido el Parametro UATI");
            }
        }

        #endregion

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.txteMonto.Text = String.Empty;
            this.txteNumAutoriz.Text = String.Empty;
            this.txteNumRef.Text = String.Empty;
            this.txteNumTarjeta.Text = String.Empty;

            Program.CloseWindow(this);
        }

        private void frmCancelInvoice_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.F6:
                    xtraTabControl1.SelectedTabPage = xtpNotaCredito;
                    break;
                case Keys.F7:
                    xtraTabControl1.SelectedTabPage = xtpNotaDebito;
                     break;
                case Keys.F8:
                    xtraTabControl1.SelectedTabPage = xtpTransacciones;
                    this.txteNumTarjeta.Focus();
                    break;
                case Keys.F9:
                    xtraTabControl1.SelectedTabPage = xtraTabPage1;
                    break;
                case Keys.F10:
                    xtraTabControl1.SelectedTabPage = xtraTabPage2;
                    txtVale.Focus();
                    break;
                case Keys.F11:
                    xtraTabControl1.SelectedTabPage = xtraTabPage3;  
                    break;
                case Keys.F12:
                    btnAceptar_Click(null, null);
                    break;
                case Keys.Escape:
                    btnCancelar_Click(null, null);
                    break;                    
            }

            if (e.Modifiers == Keys.Alt)
            {
                if (e.KeyCode == Keys.B)
                    this.sbtnVouchers_Click(null, null);
                if (e.KeyCode == Keys.C)
                    this.sBtnCredix_Click(null, null);
                if (e.KeyCode == Keys.M)
                    this.sBtnMonedAlo_Click(null, null);
                if (e.KeyCode == Keys.E)
                    this.btnCredCuotsEk_Click(null, null);
            }
        }
        
        private void txtVale_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter && Utils.Helpers.ObjToStr(((DevExpress.XtraEditors.TextEdit)sender).EditValue) != string.Empty)
            {
                Clear(false);
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("VALE", ((DevExpress.XtraEditors.TextEdit)sender).EditValue.ToString());
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_V_CONSULTA_VALES.TableName, qp), dsPDV1);
                if (dsPDV1.TDA_V_CONSULTA_VALES.Count == 0)
                {
                    GUI.CApp.ShowMessage("El vale o certificado no fue encontrado", "Anulación de Documentos", true);
                }
            }
        }

        private void txtRecibo_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                //qp.AddReplaceParam("SERIE", merFactura.PropertiesCollection[0].Value.ToString());
                qp.AddReplaceParam("SERIE", multiEditorRow1.PropertiesCollection[0].Value.ToString());                
                qp.AddReplaceParam("NO_DOCUMENTO", ((DevExpress.XtraEditors.TextEdit)sender).Text);
                
                dsPDV1.TDA_DATOS_DOCUMENTO.Clear();
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_DATOS_DOCUMENTO.TableName, qp, "DetalleDocumentoXRecibo"), dsPDV1);

                bool exists = false;

                if (dsPDV1.TDA_DATOS_DOCUMENTO.Count > 0)
                {
                    //if (containExchange())
                    //{
                    //    dsPDV1.TDA_DATOS_DOCUMENTO.Clear();
                    //    GUI.CApp.ShowMessage("No puede anular una factura con vales o certificados canjeados o anulados", "Anulación de Documentos", true);
                    //}
                    //else
                        exists = true;
                }
                else
                    GUI.CApp.ShowMessage("El recibo no existe", "Anulación de Documentos", true);

                e.Handled = true;
                if (exists) btnAceptar.Focus();
                else
                {
                    vGridControl1.FocusedRow = merFactura.ChildRows[0];
                    vGridControl1.Focus();
                    SendKeys.Send("{TAB}");
                }

            }
        }

        #endregion

        #region Modificacion para FE Anyu

        private void txtNotaDebito_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("SERIE", merNotaDebito.PropertiesCollection[0].Value.ToString());
                qp.AddReplaceParam("NO_DOCUMENTO", ((DevExpress.XtraEditors.TextEdit)sender).Text);

                dsPDV1.TDA_DETALLE_NOTADEBITO.Clear();
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_DETALLE_NOTADEBITO.TableName, qp, "DetalleDocumentoXNotaDebito"), dsPDV1);
                bool exists = false;

                if (dsPDV1.TDA_DETALLE_NOTADEBITO.Count > 0)
                {
                    exists = true;
                }
                else
                    GUI.CApp.ShowMessage("La nota de dédito no éxiste", "Anulación de Documentos", true);

                e.Handled = true;
                if (exists) btnAceptar.Focus();
                else
                {
                    vGridControl1.FocusedRow = merNotaDebito.ChildRows[0];
                    vGridControl1.Focus();
                    SendKeys.Send("{TAB}");
                }

            }
        }

        private void txtNotaCredito_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("SERIE", merNotaCredito.PropertiesCollection[0].Value.ToString());
                qp.AddReplaceParam("NO_DOCUMENTO", ((DevExpress.XtraEditors.TextEdit)sender).Text);

                dsPDV1.TDA_DETALLE_NOTACREDITO.Clear();
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_DETALLE_NOTACREDITO.TableName, qp, "DetalleDocumentoXNotaCredito"), dsPDV1);
                bool exists = false;

                if (dsPDV1.TDA_DETALLE_NOTACREDITO.Count > 0)
                {
                    exists = true;
                }
                else
                    GUI.CApp.ShowMessage("La nota de crédito no éxiste", "Anulación de Documentos", true);

                e.Handled = true;
                if (exists) btnAceptar.Focus();
                else
                {
                    vGridControl1.FocusedRow = merNotaCredito.ChildRows[0];
                    vGridControl1.Focus();
                    SendKeys.Send("{TAB}");
                }

            }
        }

        #endregion 

        private static void imprimirNCPreimpresa(long documento, string codigoReporte)
        {
            Hashtable ht = new Hashtable();
            Utils.QueryParams QueryParams = new LLNet.Utils.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 printerNC = "";

            if (key != null)
                printerNC = Utils.Helpers.ObjToStr(key.GetValue("Nota de Credito", ""));

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

            LLNet.Reports.BaseReports.XRBase xrBase = new LLNet.Reports.BaseReports.XRBase(Info.BaseReport, Info.CodeReport);
            xrBase.Parametros = Info;
            xrBase.BllInstance = GUI.CApp.bll;
            xrBase.ExePath = GUI.CApp.ExeDir;
            xrBase.ExecuteReport(LLNet.Reports.BaseReports.XRExecution.XRPrint, false, ht);
        }




        private void printDocument(object Order, string docType)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = '" + docType);
            subTipoDocumentoPreimpreso = docType;

            Model.General.CgRefCodes dsDocTienda = new LLNet.Model.General.CgRefCodes();

            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsDocTienda.GetType(), dsDocTienda.DOMAINS.TableName, qp), dsDocTienda);

            if (dsDocTienda.DOMAINS.Count > 0)
            {
                qp.Clear();
                qp.AddReplaceParam("DOCUMENTO", Order.ToString());

                //---------------------Modificación para ND----------I.M.G.F.--
                DataSet ds;
                if (docType == "NC")
                {
                    ds = GUI.CApp.bll.getDataSet("PDV", "NotasCreditoAn", qp);
                }
                else
                {
                    ds = GUI.CApp.bll.getDataSet("PDV", "NotasDebito", qp);
                }
                //---------------------Modificación para ND----------I.M.G.F.--

                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    switch (Convert.ToInt16(dsDocTienda.DOMAINS[0].RV_MPNC03))
                    {
                        case 1:
                            imprimirNCPreimpresa(Convert.ToInt64(dr["DOCUMENTO"]), dsDocTienda.DOMAINS[0].RV_MPCC03);
                            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 = Utils.Helpers.ObjToStr(Printer.GetValue("Factura", ""));
                            if (printerFactura == "")
                                printerFactura = dsDocTienda.DOMAINS[0].RV_MPCC00;
                            imprimirDocumentoPreimpresaDOS(Convert.ToInt64(dr["DOCUMENTO"]), printerFactura, dsDocTienda.DOMAINS[0].RV_MPCC03, dsDocTienda.DOMAINS[0].RV_MPCC02.ToString(), "imprimir.bat", "");
                            break;
                        default:
                            imprimirNCTicket(Convert.ToInt64(dr["DOCUMENTO"]), dsDocTienda.DOMAINS[0].RV_MPCC00, Convert.ToInt32(dsDocTienda.DOMAINS[0].RV_MPNC02), Convert.ToInt64(dsDocTienda.DOMAINS[0].RV_MPCC02));
                            break;
                    }
                }
            }
        }


        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 = Utils.Helpers.ObjToStr(GUI.CApp.GetParam("PIXV"));

            if (PreimpresaXvariables == "NO")
            {
                Hashtable ht = new Hashtable();
                Utils.QueryParams QueryParams = new LLNet.Utils.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 = Utils.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 = GUI.CApp.bll;
                xrBase.ExePath = GUI.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;
                Utils.QueryParams qp = new LLNet.Utils.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();
                Utils.Helpers.Merge(GUI.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 imprimirNCTicket(long documento, string impresora, int copias, long formato)
        {
            Impresion.Impresion imp = new Impresion.Impresion();
            imp.Conexion = GUI.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 printerNC = "";

            if (key != null)
                printerNC = Utils.Helpers.ObjToStr(key.GetValue("Nota de Credito", ""));

            if (printerNC != string.Empty)
                prntMess.Impresora = printerNC;
            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)
            {
                GUI.CApp.ShowMessage(ex.Message, "Impresion de Documentos", true);
            }
        }


        private static void imprimirDocumentoDOS(long documento, string Impresora, long formato, string prefijo, string BatName)
        {
            if (BatName == "")
                BatName = "imprimir.bat";
            string Ruta = Application.StartupPath;
            Utils.QueryParams qp = new LLNet.Utils.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 = Utils.Helpers.ObjToStr(GUI.CApp.GetParam("TTXT"));

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

                try
                {
                    qp.AddReplaceParam("DOCUMENTO", documento.ToString());
                    object factTmp = GUI.CApp.bll.GetSingleValue("ObtenerFact", qp, "PDV");
                    if (factTmp != null && factTmp.ToString() != "")
                        factura = factTmp.ToString();
                    qp.Clear();

                    if (lId_tr_tarj.Count == 0)
                    {
                        #region Factura/recibo
                        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);
                        #endregion
                    }
                    else if (lId_tr_tarj.Count == 1)
                    {
                        #region Factura/recibo/voucher
                        qp.AddReplaceParam("DOCUMENTO", documento.ToString());
                        qp.AddReplaceParam("FORMATO", formato.ToString());
                        qp.AddReplaceParam("USUARIO", CApp.usuario.ToString());
                        qp.AddReplaceParam("ID_TR_TARJ", lId_tr_tarj[0].ToString());
                        CApp.bll.ExecuteSql("GENERAR_IMPRESION_POSV", qp, "PDV");
                        Thread.Sleep(2000); // SE LE DA TIEMPO A LA BD DE GENERAR EL ARCHIVO DE TEXTO

                        #region Voucher
                        object FormatoTipoImpresion = null;
                        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");
                            }
                        }

                        string valor = Helpers.Nvl(CApp.GetParam("HCV"), "").ToString();
                        if (valor == "1")//Si valor es 1, se imprime la copia del voucher
                        {
                            #region Voucher - Copia
                            if (prefijo != "")
                                Args = prefijo + lId_tr_tarj[0].ToString() + ".txt ";
                            else
                                Args = lId_tr_tarj[0].ToString() + ".txt ";

                            startInfo.Arguments = Args;
                            qp = new LLNet.Utils.QueryParams();
                            qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'VOO");
                            Model.General.CgRefCodes dsDocTienda = new LLNet.Model.General.CgRefCodes();
                            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsDocTienda.GetType(), dsDocTienda.DOMAINS.TableName, qp), dsDocTienda);
                            string format = Utils.Helpers.Nvl(FormatoTipoImpresion, dsDocTienda.DOMAINS[0].RV_MPCC02).ToString();
                            qp = new QueryParams();
                            qp.AddReplaceParam("ID_TR_TARJ", lId_tr_tarj[0].ToString());
                            qp.AddReplaceParam("FORMATO", format.ToString());
                            qp.AddReplaceParam("USUARIO", GUI.CApp.usuario.ToString());
                            GUI.CApp.bll.ExecuteSql("WMS_P_GENERAR_IMPRVO", qp, "PDV");
                            Thread.Sleep(3000);  // se deja un delay para esperar a que la base contruya el archivo
                            System.Diagnostics.Process.Start(startInfo);

                            if (prefijo != "")
                                Args = prefijo + documento.ToString() + ".txt ";
                            else
                                Args = documento.ToString() + ".txt ";

                            startInfo.Arguments = Args;
                            FormatoTipoImpresion = null;
                            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");
                                }
                            }

                            #region Copia cliente
                            qp = new LLNet.Utils.QueryParams();
                            qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'VOC");
                            dsDocTienda = new LLNet.Model.General.CgRefCodes();
                            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsDocTienda.GetType(), dsDocTienda.DOMAINS.TableName, qp), dsDocTienda);
                            format = Utils.Helpers.Nvl(FormatoTipoImpresion, dsDocTienda.DOMAINS[0].RV_MPCC02).ToString();
                            qp.AddReplaceParam("ID_TR_TARJ", lId_tr_tarj[0].ToString());
                            qp.AddReplaceParam("FORMATO", format.ToString());
                            qp.AddReplaceParam("USUARIO", GUI.CApp.usuario.ToString());
                            qp.AddReplaceParam("DOCUMENTO", documento.ToString());
                            Thread.Sleep(2000);  // se deja un delay para esperar a que la base contruya el archivo
                            GUI.CApp.bll.ExecuteSql("GENERAR_IMPRESIONVOF", qp, "PDV");
                            Thread.Sleep(2000);  // se deja un delay para esperar a que la base contruya el archivo
                            System.Diagnostics.Process.Start(startInfo);
                            #endregion
                            #endregion
                        }
                        else
                        {
                            #region Voucher - Sin copia
                            qp = new LLNet.Utils.QueryParams();
                            qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'VOO");
                            Model.General.CgRefCodes dsDocTienda = new LLNet.Model.General.CgRefCodes();
                            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsDocTienda.GetType(), dsDocTienda.DOMAINS.TableName, qp), dsDocTienda);
                            string format = Utils.Helpers.Nvl(FormatoTipoImpresion, dsDocTienda.DOMAINS[0].RV_MPCC02).ToString();
                            qp = new QueryParams();
                            qp.AddReplaceParam("ID_TR_TARJ", lId_tr_tarj[0].ToString());
                            qp.AddReplaceParam("FORMATO", format.ToString());
                            qp.AddReplaceParam("USUARIO", GUI.CApp.usuario.ToString());
                            qp.AddReplaceParam("DOCUMENTO", documento.ToString());
                            GUI.CApp.bll.ExecuteSql("GENERAR_IMPRESIONVOF", qp, "PDV");
                            Thread.Sleep(3000);  // se deja un delay para esperar a que la base contruya el archivo
                            System.Diagnostics.Process.Start(startInfo);
                            #endregion
                        }
                        #endregion
                        #endregion
                    }
                    else if (lId_tr_tarj.Count > 1)
                    {
                        #region Factura/recibo/vouchers
                        qp.AddReplaceParam("DOCUMENTO", documento.ToString());
                        qp.AddReplaceParam("FORMATO", formato.ToString());
                        qp.AddReplaceParam("USUARIO", CApp.usuario.ToString());
                        qp.AddReplaceParam("ID_TR_TARJ", lId_tr_tarj[0].ToString());
                        CApp.bll.ExecuteSql("GENERAR_IMPRESION_POSV", qp, "PDV");
                        Thread.Sleep(2000); // SE LE DA TIEMPO A LA BD DE GENERAR EL ARCHIVO DE TEXTO

                        qp = new QueryParams();

                        for (int i = 0; i < lId_tr_tarj.Count; i++)
                        {
                            object FormatoTipoImpresion = null;
                            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");
                                }
                            }

                            qp = new LLNet.Utils.QueryParams();
                            qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'VOO");
                            Model.General.CgRefCodes dsDocTienda = new LLNet.Model.General.CgRefCodes();
                            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsDocTienda.GetType(), dsDocTienda.DOMAINS.TableName, qp), dsDocTienda);
                            string format = Utils.Helpers.Nvl(FormatoTipoImpresion, dsDocTienda.DOMAINS[0].RV_MPCC02).ToString();

                            string valor = Helpers.Nvl(CApp.GetParam("HCV"), "").ToString();

                            if (valor == "1")//Si valor es 1, se imprime la copia del voucher
                            {
                                #region Voucher
                                if (prefijo != "")
                                    Args = prefijo + lId_tr_tarj[i].ToString() + ".txt ";
                                else
                                    Args = lId_tr_tarj[i].ToString() + ".txt ";

                                startInfo.Arguments = Args;

                                qp.AddReplaceParam("ID_TR_TARJ", lId_tr_tarj[i].ToString());
                                qp.AddReplaceParam("FORMATO", format.ToString());
                                qp.AddReplaceParam("USUARIO", GUI.CApp.usuario.ToString());
                                GUI.CApp.bll.ExecuteSql("WMS_P_GENERAR_IMPRVO", qp, "PDV");
                                Thread.Sleep(3000);  // se deja un delay para esperar a que la base contruya el archivo
                                System.Diagnostics.Process.Start(startInfo);
                                #endregion

                                if (i == 0)
                                {
                                    #region Copia voucher
                                    if (prefijo != "")
                                        Args = prefijo + documento.ToString() + ".txt ";
                                    else
                                        Args = documento.ToString() + ".txt ";

                                    startInfo.Arguments = Args;


                                    FormatoTipoImpresion = null;
                                    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");
                                        }
                                    }

                                    qp = new LLNet.Utils.QueryParams();
                                    qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'VOC");
                                    dsDocTienda = new LLNet.Model.General.CgRefCodes();
                                    Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsDocTienda.GetType(), dsDocTienda.DOMAINS.TableName, qp), dsDocTienda);
                                    format = Utils.Helpers.Nvl(FormatoTipoImpresion, dsDocTienda.DOMAINS[0].RV_MPCC02).ToString();
                                    qp.AddReplaceParam("ID_TR_TARJ", lId_tr_tarj[i].ToString());
                                    qp.AddReplaceParam("FORMATO", format.ToString());
                                    qp.AddReplaceParam("USUARIO", GUI.CApp.usuario.ToString());
                                    qp.AddReplaceParam("DOCUMENTO", documento.ToString());
                                    Thread.Sleep(3000);  // se deja un delay para esperar a que la base contruya el archivo
                                    GUI.CApp.bll.ExecuteSql("GENERAR_IMPRESIONVOF", qp, "PDV");
                                    Thread.Sleep(2000);  // se deja un delay para esperar a que la base contruya el archivo
                                    System.Diagnostics.Process.Start(startInfo);
                                    #endregion
                                }
                                else
                                {
                                    #region Copia voucher
                                    if (prefijo != "")
                                        Args = prefijo + lId_tr_tarj[i].ToString() + ".txt ";
                                    else
                                        Args = lId_tr_tarj[i].ToString() + ".txt ";

                                    startInfo.Arguments = Args;

                                    FormatoTipoImpresion = null;
                                    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");
                                        }
                                    }

                                    qp = new LLNet.Utils.QueryParams();
                                    qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'VOC");
                                    dsDocTienda = new LLNet.Model.General.CgRefCodes();
                                    Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsDocTienda.GetType(), dsDocTienda.DOMAINS.TableName, qp), dsDocTienda);
                                    format = Utils.Helpers.Nvl(FormatoTipoImpresion, dsDocTienda.DOMAINS[0].RV_MPCC02).ToString();
                                    qp.AddReplaceParam("ID_TR_TARJ", lId_tr_tarj[i].ToString());
                                    qp.AddReplaceParam("FORMATO", format.ToString());
                                    qp.AddReplaceParam("USUARIO", GUI.CApp.usuario.ToString());
                                    GUI.CApp.bll.ExecuteSql("WMS_P_GENERAR_IMPRVO", qp, "PDV");
                                    Thread.Sleep(2000);  // se deja un delay para esperar a que la base contruya el archivo
                                    System.Diagnostics.Process.Start(startInfo);
                                    Thread.Sleep(2000);  // se deja un delay para esperar a que la base contruya el archivo
                                    #endregion
                                }
                            }
                            else
                            {
                                if (i == 0)
                                {
                                    #region Voucher
                                    qp.AddReplaceParam("ID_TR_TARJ", lId_tr_tarj[i].ToString());
                                    qp.AddReplaceParam("FORMATO", format.ToString());
                                    qp.AddReplaceParam("USUARIO", GUI.CApp.usuario.ToString());
                                    qp.AddReplaceParam("DOCUMENTO", documento.ToString());
                                    GUI.CApp.bll.ExecuteSql("GENERAR_IMPRESIONVOF", qp, "PDV");
                                    Thread.Sleep(3000);  // se deja un delay para esperar a que la base contruya el archivo
                                    System.Diagnostics.Process.Start(startInfo);
                                    #endregion
                                }
                                else
                                {
                                    #region Voucher
                                    if (prefijo != "")
                                        Args = prefijo + lId_tr_tarj[i].ToString() + ".txt ";
                                    else
                                        Args = lId_tr_tarj[i].ToString() + ".txt ";

                                    startInfo.Arguments = Args;

                                    qp.AddReplaceParam("ID_TR_TARJ", lId_tr_tarj[i].ToString());
                                    qp.AddReplaceParam("FORMATO", format.ToString());
                                    qp.AddReplaceParam("USUARIO", GUI.CApp.usuario.ToString());
                                    Thread.Sleep(2000);  // se deja un delay para esperar a que la base contruya el archivo
                                    GUI.CApp.bll.ExecuteSql("WMS_P_GENERAR_IMPRVO", qp, "PDV");
                                    Thread.Sleep(2000);  // se deja un delay para esperar a que la base contruya el archivo
                                    System.Diagnostics.Process.Start(startInfo);
                                    #endregion
                                }
                            }
                        }
                        #endregion
                    }
                }
                catch (Exception ex)
                {
                    if (ex.Message == "El sistema no puede hallar el archivo especificado")
                        CApp.ShowMessage(ex.Message + "\rREIMPRIMA EL DOCUMENTO " + factura, "Impresion de Documentos", true);
                    else
                        CApp.ShowMessage(ex.Message, "Impresión de Documentos", true);
                    //GUI.CApp.ShowMessage(ex.Message, "Impresion de Documentos", true);
                }

                lId_tr_tarj.Clear();
            }
            else
            {
                throw new Exception("No esta Definido el Parametro UATI");
            }
            //startInfo.UseShellExecute = false; 
        }

        private void gcDetRecibo_Click(object sender, EventArgs e)
        {

        }

        private void xtraTabControl1_Click(object sender, EventArgs e)
        {

        }

        #region txteNumRef_KeyDown IGF
        private void txteNumRef_KeyDown(object sender, KeyEventArgs e)
        {
            //Verifica si se ha presionado la tecla enter
            if (e.KeyCode == Keys.Enter)
            {
                if (this.txteNumTarjeta.Text == "")
                    CApp.ShowMessage("Digite el número de tarjeta tal y como aparece en el voucher", "Anulación de Documentos", true);
                else if (this.txteNumAutoriz.Text == "")
                    CApp.ShowMessage("Digite el número de autorización", "Anulación de Documentos", true);
                else if (this.txteNumRef.Text == "")
                    CApp.ShowMessage("Digite el RRN (número de referencia)", "Anulación de Documentos", true);
                else
                {
                    QueryParams qparams = new QueryParams();
                    qparams.AddReplaceParam("TARJETA", this.txteNumTarjeta.Text);
                    qparams.AddReplaceParam("AUTORIZACION", this.txteNumAutoriz.Text);
                    qparams.AddReplaceParam("REFERENCIA", this.txteNumRef.Text);
                    object caja = GUI.CApp.bll.GetSingleValue("ExisteVenta", qparams, "PDV");
                    //Verifica si la venta con esos datos existe
                    if (caja == null)
                        CApp.ShowMessage("No existe una transacción con esos datos", "Anulación de Documentos", true);
                    else
                    {
                        if (decimal.Parse(caja.ToString()) == 0)
                            CApp.ShowMessage("No existe una transacción con esos datos", "Anulación de Documentos", true);
                        else if (decimal.Parse(caja.ToString()) != Program.Caja)
                            CApp.ShowMessage("Debe hacer la anulación en la misma caja que se hizo la transacción", "Anulación de Documentos", true);
                        else
                        {
                            object anulada = GUI.CApp.bll.GetSingleValue("ExisteAnulacion", qparams, "PDV");
                            //
                            if (anulada == null)
                                CApp.ShowMessage("La transacción ya fue anulada o los datos son erróneos", "Anulación de Documentos", true);
                            else
                            {
                                if (int.Parse(anulada.ToString()) == 1)
                                    CApp.ShowMessage("La transacción ya fue anulada", "Anulación de Documentos", true);
                                else
                                {
                                    qparams = new QueryParams();
                                    qparams.AddReplaceParam("TARJETA", this.txteNumTarjeta.Text);
                                    qparams.AddReplaceParam("AUTORIZACION", this.txteNumAutoriz.Text);
                                    object existeDoc = GUI.CApp.bll.GetSingleValue("ExisteDoc", qparams, "PDV");
                                    //Verifica si la transacción está asociada a una factura
                                    if (existeDoc != null)
                                    {
                                        if (int.Parse(existeDoc.ToString()) != 0)
                                            CApp.ShowMessage("No se puede anular una transacción asociada a una factura", "Anulación de Documentos", true);
                                        else
                                        {
                                            qparams = new QueryParams();
                                            qparams.AddReplaceParam("TARJETA", this.txteNumTarjeta.Text);
                                            qparams.AddReplaceParam("AUTORIZACION", this.txteNumAutoriz.Text);
                                            qparams.AddReplaceParam("REFERENCIA", this.txteNumRef.Text);
                                            object cerrada = GUI.CApp.bll.GetSingleValue("TransCerrada", qparams, "PDV");

                                            if (cerrada == null)
                                                CApp.ShowMessage("No se pueden cargar los datos", "Anulación de Documentos", true);
                                            else
                                            {
                                                if (int.Parse(cerrada.ToString()) != 0)
                                                    CApp.ShowMessage("La transacción ya fue cerrada", "Anulación de Documentos", true);
                                                else
                                                {
                                                    //Obtiene el monto de la transacción
                                                    string monto = GUI.CApp.bll.GetSingleValue("MontoTrans", qparams, "PDV").ToString();
                                                    this.txteMonto.Text =  monto;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        #endregion

        private void button1_Click(object sender, EventArgs e)
        {
            EMisPtsPago("1789");
        }

        #region sbtnVouchers_Click
        private void sbtnVouchers_Click(object sender, EventArgs e)
        {
            Forms.FrmBCROpcs fbcr = new Forms.FrmBCROpcs("A");
            fbcr.ShowDialog();
        }
        #endregion

        private void sBtnCredix_Click(object sender, EventArgs e)
        {
            Forms.Credix.FrmAnulrCdx facdx = new Forms.Credix.FrmAnulrCdx("A");
            facdx.ShowDialog();
        }

        private void sBtnMonedAlo_Click(object sender, EventArgs e)
        {
            Forms.Monedero.FrmAnulrMnd faMnd = new Forms.Monedero.FrmAnulrMnd("A");
            faMnd.ShowDialog();
        }

        private void btnCredCuotsEk_Click(object sender, EventArgs e)
        {
            Forms.CreditEko.FrmAnulrEk faCredek = new Forms.CreditEko.FrmAnulrEk("A");
            faCredek.ShowDialog();
        }

    
    }
}