#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 System.Collections;
using Microsoft.Win32;
using System.Threading;
//using OposCashDrawer_1_9_Lib;
using LLNet.Utils;
using LLNet.GUI;
#endregion

namespace LLNet.Tienda.MainForms
{
    public partial class frmRePrinting: LLNet.GUI.FormBases.frmBase
    {
        public int Agregarsku = 0;
        public string Sku ;
        public int Formato = 2;
        private string EsquemaC;
        private string formatoGarantia;
        private static string subTipoDocumentoPreimpreso;
        private static string factura = "";

        long Documento = 0;

        public frmRePrinting()
        {
            InitializeComponent();

            GUI.CApp.TraducirForm(this);
        }

        public override void Init(object[] pArgs)
        {
            #region Limpiando el dataset
            dsPDV1.TDA_V_FACTURAS.Clear();
            dsPDV1.TDA_DETALLE_PEDIDO.Clear();            
            #endregion

            #region Inicializando propiedades de la pantalla
            rowTotal.Properties.Value = null;
            rowCliente.Properties.Value = null;
            rowNit.Properties.Value = null;
            rowTotalNC.Properties.Value = null;
            rowClienteNC.Properties.Value = null;
            rowNitNC.Properties.Value = null;
            rowTotalFC.Properties.Value = null;
            vGridControl1.FocusedRow = mrowFactura;
            vGridControl1.Focus();            
            #endregion            

            EsquemaC = Utils.Helpers.ObjToStr(GUI.CApp.GetParam("NDEC"));

            comboBoxEdit1.Properties.ReadOnly = !GUI.CApp.GetAccess("TDA_ImpresionGarantias", GUI.CApp.usuario);
            comboBoxEdit1.Enabled = !comboBoxEdit1.Properties.ReadOnly;


            base.Init(pArgs);
        }

        public bool FindNotaCredito(string pSerie, decimal pNC)
        {
            #region Asignando parametros para busqueda del documento
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("SERIE", pSerie.ToString());
            qp.AddReplaceParam("NO_DOCUMENTO", pNC.ToString());

            #endregion

            dsPDV1.TDA_V_FACTURAS.Clear();
            if (pSerie != "")
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_V_FACTURAS.TableName, qp, "NotaCredito"), dsPDV1);
            else
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_V_FACTURAS.TableName, qp, "NotaCreditoSs"), dsPDV1);

            if (dsPDV1.TDA_V_FACTURAS.Rows.Count > 0)
            {
                btnImprimirNC.Enabled = true;

                #region Obteniendo detalles del producto

                qp.Clear();
                qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO.ToString());
                dsPDV1.TDA_DETALLE_PEDIDO.Clear();
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_DETALLE_PEDIDO.TableName, qp), dsPDV1);

                #endregion
            }
            else
            {
                btnImprimirNC.Enabled = false;
            }

            return (dsPDV1.TDA_V_FACTURAS.Rows.Count > 0);
        }

        public bool FindFacturaCons(string pSerie, decimal pNC)
        {
            dsPDV1.EnforceConstraints = false;
            #region Asignando parametros para busqueda del documento
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("SERIE", pSerie.ToString());
            qp.AddReplaceParam("NO_DOCUMENTO", pNC.ToString());

            #endregion

            dsPDV1.TDA_V_FACTURAS.Clear();
            if (pSerie != "")
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_V_FACTURAS.TableName, qp, "FacturaCons"), dsPDV1);
            else
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_V_FACTURAS.TableName, qp, "FacturaConsSs"), dsPDV1);

            if (dsPDV1.TDA_V_FACTURAS.Rows.Count > 0)
            {
                btnImprimirFC.Enabled = true;

                #region Obteniendo detalles del producto

                dsPDV1.TDA_DETALLE_PEDIDO.Clear();
                if (pSerie != "")
                    Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_DETALLE_PEDIDO.TableName, qp,"DetalleFacCons"), dsPDV1);
                else
                    Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_DETALLE_PEDIDO.TableName, qp, "DetalleFacConsSs"), dsPDV1);

                #endregion
            }
            else
            {
                btnImprimirFC.Enabled = false;
            }

            return (dsPDV1.TDA_V_FACTURAS.Rows.Count > 0);
        }

        public bool FindFactura(string pSerie, decimal pFactura)
        {
            #region Asignando parametros para busqueda del documento
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("SERIE", pSerie.ToString());
            qp.AddReplaceParam("NO_DOCUMENTO", pFactura.ToString());
            #endregion

            dsPDV1.TDA_V_FACTURAS.Clear();
            if (pSerie != "")
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_V_FACTURAS.TableName, qp, "Factura"), dsPDV1);
            else
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_V_FACTURAS.TableName, qp, "FacturaSs"), dsPDV1);

            if (dsPDV1.TDA_V_FACTURAS.Rows.Count > 0)
            {
                btnImprimirF.Enabled = true;
                btnImprimirP.Enabled = true;
               

                #region Obteniendo detalles del producto

                qp.Clear();
                qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO.ToString());
                dsPDV1.TDA_DETALLE_PEDIDO.Clear();
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_DETALLE_PEDIDO.TableName, qp), dsPDV1);
                if (dsPDV1.TDA_DETALLE_PEDIDO.Rows.Count  > 0)
                {
                    btnImprimirG.Enabled = true;
                    btnNotaCred.Enabled = true;
                }
                else
                {
                    btnImprimirG.Enabled = false;
                    btnNotaCred.Enabled = false;
                }
                #endregion
            }
            else
                    {
                btnImprimirF.Enabled = false;
                btnImprimirP.Enabled = false;
               
            }

            return (dsPDV1.TDA_V_FACTURAS.Rows.Count > 0);
        }

        public bool FindRecibo(string pSerie, decimal pFactura)
        {
            #region Asignando parametros para busqueda del documento
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("SERIE", pSerie.ToString());
            qp.AddReplaceParam("NO_DOCUMENTO", pFactura.ToString());
            #endregion

            dsPDV1.TDA_V_FACTURAS.Clear();
            if (pSerie != "")
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_V_FACTURAS.TableName, qp, "Recibos"), dsPDV1);
            //else
            //    Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_V_FACTURAS.TableName, qp, "FacturaSs"), dsPDV1);

            if (dsPDV1.TDA_V_FACTURAS.Rows.Count > 0)
            {
                //btnImprimirF.Enabled = true;
                //btnImprimirP.Enabled = true;
                btnRecibo.Enabled = true;

                //#region Obteniendo detalles del producto

                //qp.Clear();
                //qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO.ToString());
                //dsPDV1.TDA_DETALLE_PEDIDO.Clear();
                //Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_DETALLE_PEDIDO.TableName, qp), dsPDV1);
                //if (dsPDV1.TDA_DETALLE_PEDIDO.Rows.Count > 0)
                //{
                //    //btnImprimirG.Enabled = true;
                //    //btnNotaCred.Enabled = true;
                //}
                //else
                //{
                //    //btnImprimirG.Enabled = false;
                //    //btnNotaCred.Enabled = false;
                //}
                //#endregion
            }
            else
            {
                //btnImprimirF.Enabled = false;
                //btnImprimirP.Enabled = false;
                btnRecibo.Enabled = false;
            }

            return (dsPDV1.TDA_V_FACTURAS.Rows.Count > 0);
        }

        private void txtFactura_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                clearComponents(0);

                if (Utils.Helpers.ObjToStr(((DevExpress.XtraEditors.TextEdit)sender).EditValue).Trim() != string.Empty)
                {
                    dsPDV1.TDA_DETALLE_PEDIDO.Clear();
                    dsPDV1.TDA_V_FACTURAS.Clear();
                    string Serie = Utils.Helpers.ObjToStr(mrowFactura.PropertiesCollection[0].Value);
                    decimal Factura = Convert.ToDecimal(((DevExpress.XtraEditors.TextEdit)sender).Text);
                    if (FindFactura(Serie, Factura))
                    {
                        rowCliente.Properties.Value = dsPDV1.TDA_V_FACTURAS[0].NOMBRE; ;
                        rowNit.Properties.Value = dsPDV1.TDA_V_FACTURAS[0].NIT;
                        rowTotal.Properties.Value = dsPDV1.TDA_V_FACTURAS[0].TOTAL;
                        mrowFactura.PropertiesCollection[1].Value = dsPDV1.TDA_V_FACTURAS[0].NO_DOCUMENTO;
                        mrowFactura.PropertiesCollection[0].Value = dsPDV1.TDA_V_FACTURAS[0].SERIE;
                    }
                    else
                    {
                        GUI.CApp.ShowMessage("Factura no encontrada", "Consola de ReImpresiones", true);
                        Program.ClearVerticalGrid(vGridControl1);
                    }
                }
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Program.CloseWindow(this);
        }

        private void btnImprimirP_Click(object sender, EventArgs e)
        {
            Hashtable ht = new Hashtable();
            Utils.QueryParams QueryParams = new LLNet.Utils.QueryParams();
            QueryParams.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO.ToString());
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsRepPreimpresos1.GetType(), dsRepPreimpresos1.TDA_V_REP_PREIMPRESOS.TableName, QueryParams), dsRepPreimpresos1.TDA_V_REP_PREIMPRESOS.DataSet);

            if (dsRepPreimpresos1.TDA_V_REP_PREIMPRESOS.Count > 0)
            {
                ht.Add(dsRepPreimpresos1.TDA_V_REP_PREIMPRESOS.TableName, QueryParams);
                LLNet.Reports.BaseReports.XRInfo Info;
                Info = Reports.BaseReports.XRBase.SetInfo("PAGARE");

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

                string printerPagare = "";

                if (key != null)
                    printerPagare = Utils.Helpers.ObjToStr(key.GetValue("Pagare", ""));

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


                LLNet.Reports.BaseReports.XRBase xrBase = new LLNet.Reports.BaseReports.XRBase(Info.BaseReport, Info.CodeReport);
                xrBase.BeforeLoadInfo += new LLNet.Reports.BaseReports.BeforeLoadInfoEvent(xrBase_BeforeLoadInfo);
                xrBase.Parametros = Info;
                xrBase.BllInstance = GUI.CApp.bll;
                xrBase.ExePath = GUI.CApp.ExeDir;
                xrBase.ExecuteReport(LLNet.Reports.BaseReports.XRExecution.XRPrint, false, ht);
                Bitacora(dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO.ToString());//DLQG
            }
            else
                GUI.CApp.ShowMessage("La factura no tiene ningún pagaré para imprimir", "Reimpresiones", true);

            DialogResult = DialogResult.OK;
        }
        
        private void btnImprimirG_Click(object sender, EventArgs e)
        {

            Model.Reports.DsRepGarantia dsRepG = new LLNet.Model.Reports.DsRepGarantia();

            object[] Params = new object[] { dsRepG, dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO, this.gridView1.GetFocusedRowCellValue(colSKU).ToString() };
            GUI.CApp.bll.RemoteExecute("Reports", "ImpresionGarantias", Params);
            dsRepG = Params[0] as Model.Reports.DsRepGarantia;
            dsRepGarantia1.TDA_V_IMPRESION_GARANTIAS.Clear();
            Utils.Helpers.Merge(dsRepG, dsRepGarantia1);

            if (dsRepGarantia1.TDA_V_IMPRESION_GARANTIAS.Count > 0)
            {
                Hashtable ht = new Hashtable();
                Utils.QueryParams QueryParams = new LLNet.Utils.QueryParams();
                QueryParams.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO.ToString());
                QueryParams.AddReplaceParam("SKU", this.gridView1.GetFocusedRowCellValue(colSKU).ToString());
                //Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsRepGarantia1.GetType(), dsRepGarantia1.TDA_V_REP_PREIMPRESOS.TableName, QueryParams), dsRepGarantia1.TDA_V_REP_PREIMPRESOS.DataSet);
                ht.Add(dsRepGarantia1.TDA_V_IMPRESION_GARANTIAS.TableName, QueryParams);
                LLNet.Reports.BaseReports.XRInfo Info;
                Info = Reports.BaseReports.XRBase.SetInfo("CERG");

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

                string printerGarantia = "";

                if (key != null)
                    printerGarantia = Utils.Helpers.ObjToStr(key.GetValue("Garantia", ""));

                LLNet.Reports.BaseReports.XRBase xrBase = new LLNet.Reports.BaseReports.XRBase(Info.BaseReport, Info.CodeReport);
                xrBase.BeforeLoadInfo += new LLNet.Reports.BaseReports.BeforeLoadInfoEvent(xrBase_BeforeLoadInfo);
                xrBase.Parametros = Info;
                xrBase.BllInstance = GUI.CApp.bll;
                xrBase.ExePath = GUI.CApp.ExeDir;
                xrBase.ExecuteReport(LLNet.Reports.BaseReports.XRExecution.XRPrint, false, ht);
                Bitacora(dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO.ToString());//DLQG
            }
            else
                GUI.CApp.ShowMessage("La factura no tiene ninguna garantía para reimprimir", "Reimpresiones", true);
            DialogResult = DialogResult.OK;
        }

        void xrBase_BeforeLoadInfo(LLNet.Utils.QueryParams qParams, string TableName, DataSet Ds, ref bool bHandle)
        {
            LLNet.Model.Reports.DsRepGarantia dsRepGarantias = new LLNet.Model.Reports.DsRepGarantia();
            LLNet.Model.Reports.DsRepPreimpresos dsRepPagare = new LLNet.Model.Reports.DsRepPreimpresos();
            
            if (TableName == "TDA_V_IMPRESION_GARANTIAS")
                Utils.Helpers.Merge(dsRepGarantia1, Ds);

            if (TableName == "TDA_V_REP_PREIMPRESOS")
                Utils.Helpers.Merge(dsRepPreimpresos1 , Ds);
            
            bHandle = true;
            
        }

        private void btnImprimirF_Click(object sender, EventArgs e)
        {           
            object FormatoTipoImpresion = null;
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            switch (Utils.Helpers.ObjToStr(dsPDV1.TDA_V_FACTURAS[0]["SUBTIPO_DOCUMENTO"]))
            {
                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 = 'FAC");
                    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)
            {
                //int cantidadFormatosFactura = Convert.ToInt32(GUI.CApp.bll.GetSingleValue("CantidadFormatosFactura", "PDV"));
                //string reporte = Utils.Helpers.ObjToStr(dsDocTienda.DOMAINS[0]["RV_MPCC03"]);
                //if (cantidadFormatosFactura > 1)
                //{
                //    Forms.dlgSeleccionFactura sf = new LLNet.Tienda.MainForms.Forms.dlgSeleccionFactura();
                //    sf.Init(new object[] { dsDocTienda.DOMAINS[0].RV_MPNC03 });
                //    sf.ShowDialog();
                //    reporte = sf.Factura;

                //}

                //if (Utils.Helpers.Nvl(reporte, "").ToString() == string.Empty)
                //    return;

                //if (reporte == Utils.Helpers.ObjToStr(dsDocTienda.DOMAINS[0]["RV_MPCC03"]))
                //{



            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 != 0 )
                {
                    if (Formato != 1)
                        {
                            Formato = Convert.ToInt16(dsDocTienda.DOMAINS[0]["RV_MPNC03"]);
                        }
                 }           

                // GUSTAVO MIRANDA
                   // switch (Convert.ToInt16(dsDocTienda.DOMAINS[0]["RV_MPNC03"]))
                    switch (Formato)
                    {
                        case 1:
                            string serie = Utils.Helpers.Nvl(dsPDV1.TDA_V_FACTURAS[0]["SERIE"], string.Empty).ToString();
                            string factura = Utils.Helpers.Nvl(dsPDV1.TDA_V_FACTURAS[0]["NO_DOCUMENTO"], string.Empty).ToString();
                            imprimirFacturaPreimpresa(Convert.ToInt64(dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO), serie, factura, dsDocTienda.DOMAINS[0].RV_MPCC03);
                            
                          //if (Forms.frmConfiguration.isIBM == "Si")
                          //{

                          //      OPOSCashDrawer ocd = new OPOSCashDrawer();
                          //      object rc;

                          //      rc = ocd.Open("cashdrawer");
                          //      rc = ocd.ClaimDevice(1000);
                          //      ocd.DeviceEnabled = true;
                          //      ocd.OpenDrawer();

                          //      rc = ocd.Close();


                          // }
                            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;  
                                long documento = Convert.ToInt64(dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO);
                                string TipoDocumento=Utils.Helpers.ObjToStr(dsPDV1.TDA_V_FACTURAS[0]["SUBTIPO_DOCUMENTO"]);
                                imprimirFacturaPreimpresaN(TipoDocumento,documento, printerFactura, dsDocTienda.DOMAINS[0].RV_MPCC03, Utils.Helpers.Nvl(FormatoTipoImpresion, dsDocTienda.DOMAINS[0].RV_MPCC02).ToString());
                              //  if (Forms.frmConfiguration.isIBM == "Si")
                              //{

                              //      OPOSCashDrawer ocd = new OPOSCashDrawer();
                              //      object rc;

                              //      rc = ocd.Open("cashdrawer");
                              //      rc = ocd.ClaimDevice(1000);
                              //      ocd.DeviceEnabled = true;
                              //      ocd.OpenDrawer();

                              //      rc = ocd.Close();


                              // }
                            break;
                        default:                           
                            imprimirTicket(Convert.ToInt64(dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO), dsDocTienda.DOMAINS[0].RV_MPCC00, Convert.ToInt32(dsDocTienda.DOMAINS[0].RV_MPNC02), Convert.ToInt64(dsDocTienda.DOMAINS[0].RV_MPCC02));
                            //if (Forms.frmConfiguration.isIBM == "Si")
                            //{

                            //    OPOSCashDrawer ocd = new OPOSCashDrawer();
                            //    object rc;

                            //    rc = ocd.Open("cashdrawer");
                            //    rc = ocd.ClaimDevice(1000);
                            //    ocd.DeviceEnabled = true;
                            //    ocd.OpenDrawer();

                            //    rc = ocd.Close();


                            //}
                            break;
                    }
                //}
                //else
                //    imprimirFacturaPreimpresa(Convert.ToInt64(dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO), reporte);
            }
            DialogResult = DialogResult.OK;
        }

        private static void imprimirFacturaPreimpresaN(string TipoDocumento,long documento, string Impresora, string codigoReporte, string formato)
        {
            //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);
                BitacoraS(documento.ToString()); //DLQG
                //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 (Utils.Helpers.ObjToStr(TipoDocumento))
                {
                    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)
                {

                    imprimirFacturaNotepad(documento, Impresora, Convert.ToInt32(formato));
                }
            }
        }

        private static void imprimirFacturaNotepad(long documento, string Impresora, long formato)
        {
            //string Ruta = GUI.CApp.GetParam("UATI").ToString();
            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 = documento;
                    Args = pDocumento +  ".txt ";
                }

                //string Args = GUI.CApp.usuario + ".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();

                    qp.AddReplaceParam("DOCUMENTO", documento.ToString());
                    qp.AddReplaceParam("FORMATO", formato.ToString());
                    qp.AddReplaceParam("USUARIO", GUI.CApp.usuario.ToString());
                    GUI.CApp.bll.ExecuteSql("GENERAR_IMPRESION_POS", qp, "PDV");
                    Thread.Sleep(2000);  // se deja un delay para esperar a que la base contruya el archivo
                    System.Diagnostics.Process.Start(startInfo);
                    BitacoraS(documento.ToString());//DLQG
                }
                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);
                }
            }
            else
            {
                throw new Exception("No esta Definido el Parametro UATI");
            }
            //startInfo.UseShellExecute = false; 
            
        }


        private static void imprimirTicket(long documento, string impresora, int copias, long formato)
        {
            Impresion.Impresion imp;
            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 printerFactura = "";

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

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

            prntMess.TipoFormato = Impresion.TipoFormato.Documentos;
            prntMess.Llave1 = documento;
            prntMess.Copias = copias;
            prntMess.Formato = formato;
            imp.SetMensajeImpresion(prntMess);
            try
            {
                imp.ImprimirDocumento();
                BitacoraS(documento.ToString());//DLQG
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message, "Impresion de Documentos", true);
            }
        }

        private static void imprimirFacturaPreimpresa(long documento, string serie, string factura, string codigoReporte)
        {
            Forms.dlgDatosFactura df = new LLNet.Tienda.MainForms.Forms.dlgDatosFactura();
            df.Init(new object[] { serie, factura });
            df.ShowDialog();
            if (df.Serie != serie || df.Factura != factura)
            {
                if (GUI.CApp.ValidateAccess("CambiarFactura", "Cambiar número de serie y factura al reimprimir"))
                {
                    try
                    {
                        Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                        qp.AddReplaceParam("SERIE", serie);
                        qp.AddReplaceParam("NO_DOCUMENTO", factura);
                        qp.AddReplaceParam("NSERIE", df.Serie);
                        qp.AddReplaceParam("NNO_DOCUMENTO", df.Factura);

                        GUI.CApp.bll.ExecuteSql("ActualizarFactura", qp, "PDV");
                        serie = df.Serie;
                        factura = df.Factura;
                    }
                    catch (Exception ex)
                    {
                        if (ex.Message.IndexOf("ORA-20000") >= 0)
                            GUI.CApp.ShowMessage(ex.Message.Substring(11, ex.Message.IndexOf("ORA-", 11) - 12), "Advertencia",true);
                        else
                            GUI.CApp.ShowMessage(ex.Message, "Reimpresión", true);
                        return;
                    }
                }
                else
                    return;
            }

            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);
            BitacoraS(documento.ToString());//DLQG
        }


        private void frmRePrinting_KeyDown(object sender, KeyEventArgs e)
        {                
            if (e.KeyCode == Keys.F3 && this.btnImprimirF.Enabled == true)
                btnImprimirF_Click(null, null);
            if (e.KeyCode == Keys.F4 && this.btnImprimirG.Enabled == true)
                btnImprimirP_Click(null, null);
            if (e.KeyCode == Keys.F5 && this.btnImprimirP.Enabled == true)
                btnImprimirG_Click(null, null);
            if (e.KeyCode == Keys.F6 && this.btnNotaCred.Enabled == true)
                btnNotaCred_Click(null, null);
            if (e.KeyCode == Keys.F7)            
                xtraTabControl2.SelectedTabPage = xtraTabPage1;                
            if (e.KeyCode == Keys.F8)
                xtraTabControl2.SelectedTabPage = xtraTabPage2;
            if (e.KeyCode == Keys.F9)
                xtraTabControl2.SelectedTabPage = xtraTabPage3;
            if (e.KeyCode == Keys.F10)
                xtraTabControl2.SelectedTabPage = xtraTabPage5;
            if (e.KeyCode == Keys.F11)
                xtraTabControl2.SelectedTabPage = xtraTabPage6 ;
            
            if (e.KeyCode == Keys.Escape)
            {
                Program.CloseWindow(this);
            }

            if (e.KeyCode == Keys.F12 && this.btnImprimirF.Enabled == true)
                btnImprimirF_Click(null, null);

            if (e.KeyCode == Keys.F12 && this.btnImprimirNC.Enabled == true)
                btnImprimirNC_Click(null, null);

            if (e.KeyCode == Keys.F12 && this.btnImprimirFC.Enabled == true)
                btnImprimirFC_Click(null, null);

            if (e.KeyCode == Keys.F12 && this.btnRecibo.Enabled == true)
                btnRecibo_Click(null, null);
            //FONABE
            if(e.KeyCode == Keys.F12 && this.btnAceptarF.Enabled == true)
                btnAceptarF_Click(null, null);

            if (e.Modifiers == Keys.Alt)
            {
                if (e.KeyCode == Keys.D)
                    gridControl1.Focus();
                if (e.KeyCode == Keys.V)//FONABE
                {
                    xtraTabControl2.SelectedTabPage = xtraTabPage7;
                }
                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 btnNotaCred_Click(object sender, EventArgs e)
        {
            ImprimirNotasCredito(Convert.ToInt64(dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO));
            DialogResult = DialogResult.OK;
        }


        private void ImprimirSoloNC(long documento)
        {
            object FormatoTipoImpresion = null;
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'NC");

            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)
            {
                switch (Convert.ToInt16(dsDocTienda.DOMAINS[0].RV_MPNC03))
                {
                    case 1:
                        imprimirNCPreimpresa(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;
                        //long documento = Convert.ToInt64(dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO);
                        string TipoDocumento = Utils.Helpers.ObjToStr(dsPDV1.TDA_V_FACTURAS[0]["SUBTIPO_DOCUMENTO"]);
                        imprimirFacturaPreimpresaN(TipoDocumento, documento, printerFactura, dsDocTienda.DOMAINS[0].RV_MPCC03, Utils.Helpers.Nvl(FormatoTipoImpresion, dsDocTienda.DOMAINS[0].RV_MPCC02).ToString());
                        break;
                    default:
                        imprimirNCTicket(documento, dsDocTienda.DOMAINS[0].RV_MPCC00, Convert.ToInt32(dsDocTienda.DOMAINS[0].RV_MPNC02), Convert.ToInt64(dsDocTienda.DOMAINS[0].RV_MPCC02));
                        break;
                }

            }

        }

        private void ImprimirNotasCredito(long documento)
        {
            object FormatoTipoImpresion = null;
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'NC");

            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", documento.ToString());
                DataSet ds = GUI.CApp.bll.getDataSet("PDV", "NotasCreditoxFactura", qp);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    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;
                                //long documento = Convert.ToInt64(dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO);
                                string TipoDocumento = Utils.Helpers.ObjToStr(dsPDV1.TDA_V_FACTURAS[0]["SUBTIPO_DOCUMENTO"]);
                                imprimirFacturaPreimpresaN(TipoDocumento, documento, printerFactura, dsDocTienda.DOMAINS[0].RV_MPCC03, Utils.Helpers.Nvl(FormatoTipoImpresion, dsDocTienda.DOMAINS[0].RV_MPCC02).ToString());
                                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;
                        }
                    }
                }
                else
                    GUI.CApp.ShowMessage("La factura no tiene ninguna nota de crédito para reimprimir", "Reimpresiones", true);

            }

        }

        private static void imprimirNCTicket(long documento, string impresora, int copias, long formato)
        {
            Impresion.Impresion imp;
            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 printerFactura = "";

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

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

            prntMess.TipoFormato = Impresion.TipoFormato.Documentos;
            prntMess.Llave1 = documento;
            prntMess.Copias = copias;
            prntMess.Formato = formato;
            imp.SetMensajeImpresion(prntMess);
            try
            {
                imp.ImprimirDocumento();
                BitacoraS(documento.ToString());//DLQG
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message, "Impresion de Documentos", true);
            }
        }

        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 Crédito", ""));

            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;
            GUI.CApp.ShowMessage("Asegúrese que la impresora tenga lista la nota de crédito a imprimir para continuar", "Impresión de Notas de Crédito", true);
            xrBase.ExecuteReport(LLNet.Reports.BaseReports.XRExecution.XRPrint, false, ht);
            BitacoraS(documento.ToString());//DLQG
        }

        private void txtNC_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                clearComponents(1);

                if (Utils.Helpers.ObjToStr(((DevExpress.XtraEditors.TextEdit)sender).EditValue).Trim() != string.Empty)
                {
                    dsPDV1.TDA_DETALLE_PEDIDO.Clear();
                    dsPDV1.TDA_V_FACTURAS.Clear();
                    string Serie = Utils.Helpers.ObjToStr(multiEditorRow1.PropertiesCollection[0].Value);
                    decimal NC = Convert.ToDecimal(((DevExpress.XtraEditors.TextEdit)sender).Text);
                    if (FindNotaCredito(Serie, NC))
                    {
                        rowClienteNC.Properties.Value = dsPDV1.TDA_V_FACTURAS[0].NOMBRE; ;
                        rowNitNC.Properties.Value = dsPDV1.TDA_V_FACTURAS[0].NIT;
                        rowTotalNC.Properties.Value = dsPDV1.TDA_V_FACTURAS[0].TOTAL;
                        multiEditorRow1.PropertiesCollection[1].Value = dsPDV1.TDA_V_FACTURAS[0].NO_DOCUMENTO;
                        multiEditorRow1.PropertiesCollection[0].Value = dsPDV1.TDA_V_FACTURAS[0].SERIE;
                    }
                    else
                    {
                        GUI.CApp.ShowMessage("Nota de crédito no encontrada", "Consola de ReImpresiones", true);
                        Program.ClearVerticalGrid(vGridControl2);
                    }
                }
            }
        }

        private void clearComponents(int selectedTab)
        {
            if (selectedTab != 0)
            {
                rowTotal.Properties.Value = null;
                rowCliente.Properties.Value = null;
                rowNit.Properties.Value = null;
                mrowFactura.PropertiesCollection[0].Value = null;
                mrowFactura.PropertiesCollection[1].Value = null;
            }

            if (selectedTab != 1)
            {
                multiEditorRow1.PropertiesCollection[0].Value = null;
                multiEditorRow1.PropertiesCollection[1].Value = null;
                rowTotalNC.Properties.Value = null;
                rowClienteNC.Properties.Value = null;
                rowNitNC.Properties.Value = null;
            }

            if (selectedTab != 2)
            {
                multiEditorRow2.PropertiesCollection[0].Value = null;
                multiEditorRow2.PropertiesCollection[1].Value = null;
                rowTotalFC.Properties.Value = null;
            }
        }

        private void btnImprimirNC_Click(object sender, EventArgs e)
        {
            ImprimirSoloNC(Convert.ToInt64(dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO));
            DialogResult = DialogResult.OK;

        }

        private void txtFacturaFC_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                clearComponents(2);

                if (Utils.Helpers.ObjToStr(((DevExpress.XtraEditors.TextEdit)sender).EditValue).Trim() != string.Empty)
                {
                    dsPDV1.TDA_DETALLE_PEDIDO.Clear();
                    dsPDV1.TDA_V_FACTURAS.Clear();
                    string Serie = Utils.Helpers.ObjToStr(multiEditorRow2.PropertiesCollection[0].Value);
                    decimal FC = Convert.ToDecimal(((DevExpress.XtraEditors.TextEdit)sender).Text);
                    if (FindFacturaCons(Serie, FC))
                    {
                        rowTotalFC.Properties.Value = dsPDV1.TDA_V_FACTURAS[0].TOTAL;
                        multiEditorRow2.PropertiesCollection[1].Value = dsPDV1.TDA_V_FACTURAS[0].NO_DOCUMENTO;
                        multiEditorRow2.PropertiesCollection[0].Value = dsPDV1.TDA_V_FACTURAS[0].SERIE;
                    }
                    else
                    {
                        GUI.CApp.ShowMessage("Factura consolidada no encontrada", "Consola de ReImpresiones", true);
                        Program.ClearVerticalGrid(vGridControl3);
                    }
                }
            }

        }

        private void btnImprimirFC_Click(object sender, EventArgs e)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'FC");

            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)
            {
                switch (Convert.ToInt16(dsDocTienda.DOMAINS[0].RV_MPNC03))
                {
                    case 1:
                        imprimirFacConsPreimpresa(Utils.Helpers.Nvl(dsPDV1.TDA_V_FACTURAS[0]["SERIE"],"").ToString(), 
                            Utils.Helpers.Nvl(dsPDV1.TDA_V_FACTURAS[0]["NO_DOCUMENTO"],"").ToString(),
                            dsDocTienda.DOMAINS[0].RV_MPCC03);
                        break;
                    default:
                        //imprimirTicketCons(dsPDV1.TDA_V_FACTURAS[0]["SERIE"], dsPDV1.TDA_V_FACTURAS[0]["NO_DOCUMENTO"], dsDocTienda.DOMAINS[0].RV_MPCC00, Convert.ToInt32(dsDocTienda.DOMAINS[0].RV_MPNC02), Convert.ToInt64(dsDocTienda.DOMAINS[0].RV_MPCC02), this.CreateGraphics());
                        break;
                }

            }
            DialogResult = DialogResult.OK;

        }

        private static void imprimirFacConsPreimpresa(string serie, string factura, string codigoReporte)
        {
            Forms.dlgDatosFactura df = new LLNet.Tienda.MainForms.Forms.dlgDatosFactura();
            df.Init(new object[] {serie, factura});
            df.ShowDialog();
            if (df.Serie != serie || df.Factura != factura)
            {
                if (GUI.CApp.ValidateAccess("CambiarFactura", "Cambiar número de serie y factura"))
                {
                    try
                    {
                        Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                        qp.AddReplaceParam("SERIE", serie);
                        qp.AddReplaceParam("NO_DOCUMENTO", factura);
                        qp.AddReplaceParam("NSERIE", df.Serie);
                        qp.AddReplaceParam("NNO_DOCUMENTO", df.Factura);

                        GUI.CApp.bll.ExecuteSql("ActualizarFacturaConsolidada", qp, "PDV");
                        serie = df.Serie;
                        factura = df.Factura;
                    }
                    catch (Exception ex)
                    {
                        if (ex.Message.IndexOf("ORA-20000") >= 0)
                            GUI.CApp.ShowMessage(ex.Message.Substring(11, ex.Message.IndexOf("ORA-", 11) - 12), "Advertencia", true);
                        else
                            GUI.CApp.ShowMessage(ex.Message, "Reimpresión", true);
                        return;
                    }
                }
                else
                    return;
            }

            Hashtable ht = new Hashtable();
            Utils.QueryParams QueryParams = new LLNet.Utils.QueryParams();
            QueryParams.AddReplaceParam("SERIE", serie);
            QueryParams.AddReplaceParam("NO_DOCUMENTO", factura);
            ht.Add("TDA_V_REP_DOCUMENTOS", new object[] { QueryParams, "DsDocReports.TDA_DATOS_DOCCONS" });
            ht.Add("TDA_V_REP_DET_DOCUMENTOS", new object[] { QueryParams, "DsDocReports.TDA_DETALLE_PEDCONS" });

            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);
            // BitacoraS() ;//DLQG
        }

        private void xtraTabControl2_SelectedPageChanged(object sender, DevExpress.XtraTab.TabPageChangedEventArgs e)
        {
            if (e.Page == xtraTabPage1)
            {
                vGridControl1.FocusedRow = mrowFactura;
                vGridControl1.Focus();
            }
            else if (e.Page == xtraTabPage2)
            {
                vGridControl2.FocusedRow = multiEditorRow1;
                vGridControl2.Focus();
            }
            else if (e.Page == xtraTabPage3)
            {
                vGridControl3.FocusedRow = multiEditorRow2;
                vGridControl3.Focus();
            }
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void txtFactGar_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                if (Utils.Helpers.ObjToStr(merFactura.PropertiesCollection[0].Value) != string.Empty)
                {
                    qp.AddReplaceParam("SERIE", merFactura.PropertiesCollection[0].Value.ToString());
                    qp.AddReplaceParam("DOCUMENTO", Utils.Helpers.ObjToStr(((DevExpress.XtraEditors.TextEdit)sender).EditValue));
                    //qp.AddReplaceParam("SKU", sku.ToString());
                }

                if (EsquemaC != string.Empty)
                {
                    try
                    {
                        dsGarantias1.Merge(GUI.CApp.bll.getConnTypedDataSet(dsGarantias1.GetType(), dsGarantias1.TDA_V_GARANTIAS_X_FACTURA.TableName, EsquemaC, qp));
                    }
                    catch
                    {
                        dsGarantias1.Merge(GUI.CApp.bll.getTypedDataSet(dsGarantias1.GetType(), dsGarantias1.TDA_V_GARANTIAS_X_FACTURA.TableName, qp));
                    }

                }
                else
                {
                    dsGarantias1.Merge(GUI.CApp.bll.getTypedDataSet(dsGarantias1.GetType(), dsGarantias1.TDA_V_GARANTIAS_X_FACTURA.TableName, qp));
                }

                if (dsGarantias1.TDA_V_GARANTIAS_X_FACTURA.Count == 0)
                {
                    GUI.CApp.ShowMessage("La factura no existe, no contiene el producto o la garantía ya fue aplicada", "Aplicar Garantías", true);
                }
            }

        }

        private void btnPrintWarranty_Click(object sender, EventArgs e)
        {
            ImprimirGarantiasGeneradas( Convert.ToInt64(gridView5.GetFocusedRowCellValue(colGARANTIA)));
        }

        #region WRLG. DESARROLLO DE GARANTIAS

        private void ImprimirGarantiasGeneradas(long documento)
        {
            using (Model.PDV.DsGarantias dsGarantias = new LLNet.Model.PDV.DsGarantias())
            {
                dsGarantias.Merge(GUI.CApp.bll.getTypedDataSet(dsGarantias.GetType(), dsGarantias.WMS_GARANTIAS_X_CLASIFICACION.TableName));
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("GARANTIA", documento.ToString());
                dsGarantias.Merge(GUI.CApp.bll.getTypedDataSet(dsGarantias.GetType(), dsGarantias.WMS_GARANTIAS.TableName, qp,"ReimpresionGarantias"));

                foreach (Model.PDV.DsGarantias.WMS_GARANTIASRow gRow in dsGarantias.WMS_GARANTIAS.Rows)
                {
                    DataRow[] dRow = dsGarantias.WMS_GARANTIAS_X_CLASIFICACION.Select("clasificacion = " + gRow["CLASIFICACION"].ToString());
                    string tipoImpresion = dRow[0]["TIPO_IMPRESION"].ToString();
                    string formato = dRow[0]["FORMATO"].ToString();
                    string impresion = (comboBoxEdit1.SelectedItem.ToString() == "Garantía Impresa" ? dRow[0]["IMPRESION"].ToString() : dRow[0]["IMPRESION_FORMULARIO"].ToString());
                    string impresora = dRow[0]["IMPRESORA"].ToString();

                    if (tipoImpresion == "0")
                    {
                        ImprimirGarantiaTicket(Convert.ToInt64(gRow.DOCUMENTO), gRow.GARANTIA, impresion, impresora);
                    }
                    else
                    {
                        ImprimirGarantiaPreimpresa(Convert.ToInt64(gRow.DOCUMENTO), gRow.GARANTIA, formato, impresora);
                    }
                }
            }
        }

        private void ImprimirGarantiaPreimpresa(long documento, decimal garantia, string formato, string impresora)
        {
            //Bitacora(documento.toString()); //descomentar esto si ingresan algo aqui par que guarde la bitácora DLQG
        }

        private void ImprimirGarantiaTicket(long documento, decimal garantia, string impresion, string impresora)
        {
            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);

            prntMess.Impresora = impresora;
            prntMess.TipoFormato = Impresion.TipoFormato.Vales;
            prntMess.Llave1 = documento;
            prntMess.Llave2 = Convert.ToInt64(garantia);
            prntMess.Copias = 1;
            prntMess.Formato = Convert.ToInt32(impresion);
            imp.SetMensajeImpresion(prntMess);

            try
            {
                imp.ImprimirDocumento();
                Bitacora(documento.ToString());//DLQG
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message, "Impresion de Documentos", true);
            }

        }

        #endregion

        private void btnReciboPago_Click(object sender, EventArgs e)
        {
           
        }
        private void printReceipt(long documento)
        {
            Utils.QueryParams qp = new Utils.QueryParams();
            qp.AddReplaceParam("RV_DOMAIN", "DOCUMENTOS TIENDA' AND RV_LOW_VALUE = 'RP");

            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)
            {
                switch (Convert.ToInt16(dsDocTienda.DOMAINS[0].RV_MPNC03))
                {
                    case 1:
                        imprimirReciboPreimpreso(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(documento, printerFactura, dsDocTienda.DOMAINS[0].RV_MPCC03, dsDocTienda.DOMAINS[0].RV_MPCC02.ToString());
                        break;
                    default:
                        imprimirReciboTicket(documento, dsDocTienda.DOMAINS[0].RV_MPCC00, Convert.ToInt32(dsDocTienda.DOMAINS[0].RV_MPNC02), Convert.ToInt64(dsDocTienda.DOMAINS[0].RV_MPCC02));
                        break;
                }
            }
        }
        private static void imprimirReciboTicket(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 printerRecibo = "";

            if (key != null)
                printerRecibo = Utils.Helpers.ObjToStr(key.GetValue("Recibo", ""));

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

            prntMess.TipoFormato = Impresion.TipoFormato.Documentos;
            prntMess.Llave1 = documento;
            prntMess.Copias = copias;
            prntMess.Formato = formato;
            imp.SetMensajeImpresion(prntMess);
            try
            {
                imp.ImprimirDocumento();
                BitacoraS(documento.ToString()); //DLQG
            }
            catch (Exception ex)
            {
                GUI.CApp.ShowMessage(ex.Message, "Impresion de Documentos", true);
            }
        }
        private static void imprimirReciboPreimpreso(long documento, string codigoReporte)
        {
            Hashtable ht = new Hashtable();
            Utils.QueryParams QueryParams = new Utils.QueryParams();
            QueryParams.AddReplaceParam("DOCUMENTO", documento.ToString());
            ht.Add("TDA_DATOS_DOCUMENTO", QueryParams);
            ht.Add("TDA_DETALLE_PEDIDO", 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 printerRecibo = "";

            if (key != null)
                printerRecibo = Utils.Helpers.ObjToStr(key.GetValue("Recibo", ""));


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

            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);
            BitacoraS(documento.ToString()); //DLQG
        }
        private static void imprimirDocumentoPreimpresaDOS(long documento, string Impresora, string codigoReporte, string formato)
        {
            imprimirDocumentoPreimpresaDOS(documento, Impresora, codigoReporte, formato, "", "");
        }
        private static void imprimirDocumentoPreimpresaDOS(long documento, string Impresora, string codigoReporte, string batName, string formato)
        {
            imprimirDocumentoPreimpresaDOS(documento, Impresora, codigoReporte, formato, batName, "");
        }
        private static void imprimirDocumentoPreimpresaDOS(long documento, string Impresora, string codigoReporte, string formato, string batName, string prefijo)
        {
            //System.Diagnostics.Process.Start("START", "/min notepad /P" + " C:\\" + GUI.CApp.usuario + ".txt");            
            string PreimpresaXvariables = Utils.Helpers.ObjToStr(GUI.CApp.GetParam("PIXV"));

            if (PreimpresaXvariables == "NO")
            {
                Hashtable ht = new Hashtable();
                Utils.QueryParams QueryParams = new 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);
                BitacoraS(documento.ToString());//DLQG
                //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 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 void repRecibo_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                clearComponents(4);

                if (Utils.Helpers.ObjToStr(((DevExpress.XtraEditors.TextEdit)sender).EditValue).Trim() != string.Empty)
                {
                    dsPDV1.TDA_DETALLE_PEDIDO.Clear();
                    dsPDV1.TDA_V_FACTURAS.Clear();
                    string Serie = Utils.Helpers.ObjToStr(rowRecibo.PropertiesCollection[0].Value);
                    decimal Factura = Convert.ToDecimal(((DevExpress.XtraEditors.TextEdit)sender).Text);
                    if (FindRecibo(Serie, Factura))
                    {
                        rowClienteR.Properties.Value = dsPDV1.TDA_V_FACTURAS[0].NOMBRE; ;
                        rowNitR.Properties.Value = dsPDV1.TDA_V_FACTURAS[0].NIT;
                        rowTotalR.Properties.Value = dsPDV1.TDA_V_FACTURAS[0].TOTAL;
                        rowRecibo.PropertiesCollection[1].Value = dsPDV1.TDA_V_FACTURAS[0].NO_DOCUMENTO;
                        rowRecibo.PropertiesCollection[0].Value = dsPDV1.TDA_V_FACTURAS[0].SERIE;
                    }
                    else
                    {
                        GUI.CApp.ShowMessage("Recibo no Encontrado", "Consola de ReImpresiones", true);
                        Program.ClearVerticalGrid(vGridControl1);
                    }
                }
            }
        }

        private void btnRecibo_Click(object sender, EventArgs e)
        {
            //Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            //qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO.ToString());
            //long ReciboP = Convert.ToInt64(Utils.Helpers.Nvl(GUI.CApp.bll.GetSingleValue("ReciboP", qp, "PDV"), 0));
            //if (ReciboP != 0)            
            printReceipt(Convert.ToInt64(dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO));
        }
        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 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 ";
                }
                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();
                    qp.AddReplaceParam("DOCUMENTO", documento.ToString());
                    qp.AddReplaceParam("FORMATO", formato.ToString());
                    qp.AddReplaceParam("USUARIO", GUI.CApp.usuario.ToString());
                    GUI.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);
                    BitacoraS(documento.ToString());//DLQG
                }
                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);
                }
            }
            else
            {
                throw new Exception("No esta Definido el Parametro UATI");
            }
            //startInfo.UseShellExecute = false; 
        }
        private static void imprimirDocumentoDOS(long documento, string Impresora, long formato)
        {
            imprimirDocumentoDOS(documento, Impresora, formato, "", "");
        }
        private static void imprimirDocumentoDOS(long documento, string Impresora, long formato, string batName)
        {
            imprimirDocumentoDOS(documento, Impresora, formato, "", batName);
        }

        private void xtraTabControl2_Click(object sender, EventArgs e)
        {

        }

        /// <summary> Almacena una bitácora de la reimpresión del documento -> Documento,usuario y Fecha-Hora </summary>
        /// <param name="documento"></param>
        public void Bitacora(string documento)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("Documento", documento);
            qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);
            // Llama el procedimiento que almacena los datos de la bitacora en la BD _P_REIMPRESION_BITAC WMS_P_RIFA_BITAC_CANC
            GUI.CApp.bll.ExecuteSql("WMS_P_REIMPRESION_BITAC", qp, "PDV");
        }

        /// <summary> Almacena una bitácora de la reimpresión del documento -> Documento,usuario y Fecha-Hora </summary>
        /// <param name="documento"></param>
        public static void BitacoraS(string documento)
        {
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("Documento", documento);
            qp.AddReplaceParam("pUsuario", GUI.CApp.usuario);
            // Llama el procedimiento que almacena los datos de la bitacora en la BD _P_REIMPRESION_BITAC WMS_P_RIFA_BITAC_CANC
            GUI.CApp.bll.ExecuteSql("WMS_P_REIMPRESION_BITAC", qp, "PDV");
        }

        #region FONABE
        #region LlenarGrids
        private void LlenarGrids(string sSerie, string sFactura)
        {
            #region Asignando parametros para busqueda del documento
            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("SERIE", sSerie);
            qp.AddReplaceParam("NO_DOCUMENTO", sFactura);
            #endregion

            dsPDV1.TDA_V_FACTURAS.Clear();
            if (sSerie != "")
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_V_FACTURAS.TableName, qp, "Factura"), dsPDV1);
            else
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_V_FACTURAS.TableName, qp, "FacturaSs"), dsPDV1);

            if (dsPDV1.TDA_V_FACTURAS.Rows.Count > 0)
            {
                //Llena el grid de parte del encabezado de la factura
                rowFACTURA.PropertiesCollection[1].Value = sFactura;
                rowClienteF.Properties.Value = dsPDV1.TDA_V_FACTURAS[0].NOMBRE;
                rowFECHA_EMISION.Properties.Value = dsPDV1.TDA_V_FACTURAS[0].FECHA_EMISION;
                gridView6.BestFitColumns();

                #region Obteniendo detalles del producto

                qp.Clear();
                qp.AddReplaceParam("DOCUMENTO", dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO.ToString());
                dsPDV1.TDA_DETALLE_PEDIDO.Clear();
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_DETALLE_PEDIDO.TableName, qp), dsPDV1);

                Documento = long.Parse(dsPDV1.TDA_V_FACTURAS[0].DOCUMENTO.ToString());

                #endregion

                this.btnAceptarF.Enabled = true;
            }
        }
        #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 txtFacturaF_KeyDown
        private void txtFacturaF_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Tab)
            {
                LlenarGrids(Utils.Helpers.ObjToStr(rowFACTURA.PropertiesCollection[0].Value), Utils.Helpers.ObjToStr(((DevExpress.XtraEditors.ButtonEdit)sender).EditValue));
                e.Handled = true;
            }
        }
        #endregion

        #region btnAceptarF_Click
        private void btnAceptarF_Click(object sender, EventArgs e)
        {
            if (Documento != 0)
            {
                //Aumenta el número de impresiones del comprobante
                LLNet.Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("DOCUMENTO", Documento.ToString());
                CApp.bll.ExecuteSql("WMS_P_FONIMPRESIONES", qp, "PDV");
                //
                printInvoice(Documento);
                //
                this.btnAceptarF.Enabled = false;
                DialogResult = DialogResult.OK;
            }
        }
        #endregion

        #region btnSalirF_Click
        private void btnSalirF_Click(object sender, EventArgs e)
        {
            Program.CloseWindow(this);
        }
        #endregion
        #endregion

        #region sbtnVouchers_Click
        private void sbtnVouchers_Click(object sender, EventArgs e)
        {

            Forms.Tarjetas.FrmBanco fbanco = new Forms.Tarjetas.FrmBanco();
            fbanco.ShowDialog();
        }
        #endregion

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

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

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