using System;
using Microsoft.Win32;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using LLNet.Utils;
using LLNet.GUI;
using System.Net;
using System.IO;
using System.Xml;

namespace LLNet.Tienda.Dialogs.Refunds
{

    public partial class dlgRefundType : LLNet.GUI.FormBases.frmBase
    {
        private decimal vMonto = 0;
        private static string subTipoDocumentoPreimpreso;
        private string docDevPts;
        private string varUrlPts, varCodemprPts, varCodsucPts;
        private static string notac = "";
  

        public dlgRefundType()
        {
            InitializeComponent();
            ctlMaster1.DataSource = Program.FrmMainPos.DsPedido;
            docDevPts = Program.FrmMainPos.pos.ctlAddSkus1.DocumentoPTS.ToString();
            GUI.CApp.TraducirForm(this);
            LlenarParametros();
        }

        #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


        private void btnTramiteCheque_Click(object sender, EventArgs e)
        {

            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            decimal DocProcesado = 0;
            qp.Clear();
            qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
            DocProcesado = Convert.ToDecimal(GUI.CApp.bll.GetSingleValue("DocumentoProcesado", qp, "PDV"));

            if (DocProcesado > 0)
            {
                GUI.CApp.ShowMessage("Esta devolución ya fue Procesada, porfavor revise su Jornada", "Documento Procesado", true);
                return;
            }

            CreateRefund("T");
            try
            {

                PostData();
                string pFormatoNC = Utils.Helpers.Nvl(Program.FrmMainPos.DsPedido.WMS_SOCIOS[0]["FORMATO_NOTA_CREDITO"], "NC").ToString();

                #region pts
                //consulta los puntos que debe eliminar o acumular
                Utils.QueryParams qp4 = new LLNet.Utils.QueryParams();
                qp4.AddReplaceParam("v_ORDEN", Program.FrmMainPos.Order.ToString());
                DataSet dsB5 = GUI.CApp.bll.getDataSet("PDV", "TyF_DEVOLUCION", qp4);
                DataSet dsB4 = GUI.CApp.bll.getDataSet("PDV", "PUNTOS_DEVOLUCION", qp4);

                if (dsB4.Tables.Count > 0)
                {
                    if (dsB4.Tables[0].Rows.Count > 0)
                    {
                        foreach (DataRow fila in dsB4.Tables[0].Rows)
                        {
                            DataRow fila2 = dsB5.Tables[0].Rows[0];
                            if (Convert.ToString(fila2[0]) != string.Empty)
                            {
                                try
                                {
                                    Utils.QueryParams qpD = new LLNet.Utils.QueryParams();
                                    qpD.AddReplaceParam("DEVOLUCION", Convert.ToString(fila2[1]));
                                    decimal ValFactPts = decimal.Parse(GUI.CApp.bll.GetSingleValue("C_FactorAlm", qpD, "PDV").ToString());
                                    decimal ValRealPts = decimal.Parse(Convert.ToString(fila[0])) * ValFactPts;
                                    //Envia los datos de la compra al proveedor para que descuente los puntos
                                    string PData = "url_respuesta=" + varUrlPts + "prueba_respuesta.php&tipo_respuesta=1&cod_empresa=" + varCodemprPts + "&cod_sucursal=" + varCodsucPts + "&numero_tarjeta=" + Convert.ToString(fila2[0]);
                                    // PData += "&numero_factura=" + documento.ToString() + "&puntos=" + Convert.ToString(fila[0]) + "&monto_factura=" + Convert.ToString(fila[0]) + "&nombre_cajero=" + CApp.usuario;
                                    PData += "&numero_factura=" + Convert.ToString(fila2[1]) + "&puntos=" + ValRealPts;// Convert.ToString(fila[0]);
                                    string info = RequestPOST(varUrlPts + "ws_devolucion.inc.php", PData);
                                    info = info.Trim();
                                    string[] datos = info.Split(' ');
                                    if (datos[0].ToString() != "10")
                                    {
                                        info = info.Replace("'", " ");
                                        CApp.ShowMessage(info, "RedimirPuntos", true);

                                        string log = "WS=" + varUrlPts + "ws_devolucion.inc.php" + info;
                                        if (log.Length > 50)
                                        {
                                            log = log.Substring(0, 49);
                                        }

                                        BitacoraErrorWS(log, PData);
                                    }
                                    else
                                    {
                                        //Almacena los puntos en nuestra Base d Datos
                                        Utils.QueryParams qp3 = new LLNet.Utils.QueryParams();
                                        qp3.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.Order.ToString());
                                        qp3.AddReplaceParam("pPTSGANA", Convert.ToString(fila[0]));
                                        GUI.CApp.bll.ExecuteSql("WMS_IPtsFACTURA", qp3, "PDV");
                                    }
                                }
                                catch (Exception ex)
                                {
                                    string log = ex.Message;
                                    log = log.Replace("'", " ");
                                    if (ex.Message.Length > 50)
                                    {
                                        BitacoraErrorWS("SIN INTERNET WS=" + varUrlPts + "ws_devolucion.inc.php" + log.Substring(0, 49), "ORDER: " + Program.FrmMainPos.Order.ToString());
                                    }
                                    else
                                    {
                                        BitacoraErrorWS("SIN INTERNET WS=" + varUrlPts + "ws_devolucion.inc.php" + log, "ORDER: " + Program.FrmMainPos.Order.ToString());
                                    }
                                }
                            }
                            else
                            {
                                BitacoraErrorWS("WS=" + varUrlPts + "ws_devolucion.inc.php", "El documento no tiene tarjeta asociada " + Program.FrmMainPos.Order.ToString() + " TyF_DEVOLUCION ");
                            }
                        }
                    }
                }


                ////Devolucion de pts -elimina los puntos que gano
                ////Pagar con Pts
                ////AGREGA LOS PUNTOS A LA DEVOLUCION
                //qp.Clear();
                //qp.AddReplaceParam("v_ORDEN", Program.FrmMainPos.Order.ToString());
                //GUI.CApp.bll.ExecuteSql("PTS_DEVOLUCION", qp, "PDV");
                ////CONSULTA LOS PUNTOS y los envia
                //Utils.QueryParams qp4 = new LLNet.Utils.QueryParams();
                //qp4.AddReplaceParam("v_DOC", Program.FrmMainPos.Order.ToString());           
                //DataSet dsB4 = GUI.CApp.bll.getDataSet("PDV", "PTS_REDIMIR_DEVO", qp4);
                //if (dsB4.Tables.Count > 0)
                //{
                //    if (dsB4.Tables[0].Rows.Count > 0)
                //    {
                //        foreach (DataRow fila in dsB4.Tables[0].Rows)
                //        {
                //            //Envia los datos de la compra al proveedor para que descuente los puntos
                //            string PData = "url_respuesta=" + varUrlPts + "prueba_respuesta.php&tipo_respuesta=1&cod_empresa=" + varCodemprPts + "&cod_sucursal=" + varCodsucPts + "&numero_tarjeta=" + Convert.ToString(fila[1]) + "&tipo_transaccion=2";
                //            // PData += "&numero_factura=" + documento.ToString() + "&puntos=" + Convert.ToString(fila[0]) + "&monto_factura=" + Convert.ToString(fila[0]) + "&nombre_cajero=" + CApp.usuario;
                //            PData += "&numero_factura=" + Convert.ToString(fila[2]) + "&puntos=" + Convert.ToString(fila[0]) + "&monto_factura=&nombre_cajero=" + CApp.usuario;
                //            string info = RequestPOST(varUrlPts + "redimir_puntos.php", PData);
                //            info = info.Trim();
                //            string[] datos = info.Split(' ');
                //            if (datos[0].ToString() != "10")
                //            {
                //                CApp.ShowMessage(info, "RedimirPuntos", true);
                //                BitacoraErrorWS("WS=" + varUrlPts + "redimir_puntos.php " + info, PData);
                //            }
                //            else
                //            {
                //                //Almacena el ID_Maestro del proceso de redimir
                //                Utils.QueryParams qp3 = new LLNet.Utils.QueryParams();
                //                qp3.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.Order.ToString());
                //                qp3.AddReplaceParam("pIDMAESTRO", datos[3].ToString());
                //                GUI.CApp.bll.ExecuteSql("WMS_IIDMAESTRO", qp3, "PDV");
                //            }
                //        }
                //    }
                //}


                #endregion

                /****************Cambio Factura Electrónica*******************/
                Utils.QueryParams vParametro = new LLNet.Utils.QueryParams();
                vParametro.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.TDA_DETALLE_PEDIDO[0].DOCUMENTO_PADRE3.ToString());
                long vDocNC = Utils.Helpers.ObjToInt64(GUI.CApp.bll.GetSingleValue("OBTIENE_NC_GENERADA", vParametro, "PDV"));

                mTrama(vDocNC);

                printDocument(Program.FrmMainPos.Order, pFormatoNC);
                printDocument(Program.FrmMainPos.Order, "CP");
                /****************Cambio Factura Electrónica*******************/

                Hide();
                Close();
                Program.FrmMainPos.newOrder();
            }
            catch
            {
                Hide();
                Close();
                Program.FrmMainPos.newOrder();
            }
        }

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

        /// <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.            
            // Clean up the streams.
            reader.Close();
            dataStream.Close();
            response.Close();
            return responseFromServer;
        }

        #region btnCashRefund_Click
        private void btnCashRefund_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("DevolEfectivo", "Devoluciones en efectivo"))
            {
                bool vContinuar = false;
                decimal vLimite = Convert.ToDecimal(Helpers.Nvl(CApp.GetParam("MDEE"), "-1"));
                decimal vTotal = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].TOTAL;// Obtiene el total de la devolución

                Utils.QueryParams qp = new LLNet.Utils.QueryParams();

                if (vTotal < 0)
                {
                    vTotal *= -1;
                }

                if (vLimite > 0 && vTotal > vLimite)
                {
                    DialogResult vResult = GUI.CApp.ShowMessage("El monto a ser entregado, es mayor al límite permitido para una devolución en efectivo. ¿Desea continuar?",
                        "Devolución Efectivo", true, true);

                    if (vResult == System.Windows.Forms.DialogResult.OK)
                    {
                        if (GUI.CApp.ValidateAccess("Devol_Efectivo_Mayor", "Devoluciones en efectivo"))
                        {
                            vContinuar = true;

                            qp = new LLNet.Utils.QueryParams();
                            qp.AddReplaceParam("pNPEDIDO_DEVOL", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());

                            if (GUI.CApp.Sup != null && GUI.CApp.Sup != "")
                            {
                                qp.AddReplaceParam("pCAUTORIZADO_POR", GUI.CApp.Sup);
                            }
                            else
                            {
                                qp.AddReplaceParam("pCAUTORIZADO_POR", GUI.CApp.usuario);
                            }

                            GUI.CApp.bll.ExecuteSql("EKO_P_BITAC_DEVOL_EFECTIVO", qp, "PDV");
                        }
                    }
                }
                else
                {
                    vContinuar = true;
                }

                if (vContinuar)
                {
                    qp = new LLNet.Utils.QueryParams();
                    decimal DocProcesado = 0;
                    qp.Clear();
                    qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
                    DocProcesado = Convert.ToDecimal(GUI.CApp.bll.GetSingleValue("DocumentoProcesado", qp, "PDV"));

                    if (DocProcesado > 0)
                    {
                        GUI.CApp.ShowMessage("Esta devolución ya fue Procesada, por favor revise su Jornada", "Documento Procesado", true);
                        return;
                    }


                    CreateRefund("D");
                    try
                    {

                        PostData();
                        string pFormatoNC = Utils.Helpers.Nvl(Program.FrmMainPos.DsPedido.WMS_SOCIOS[0]["FORMATO_NOTA_CREDITO"], "NC").ToString();

                        #region pts
                        //consulta los puntos que debe eliminar o acumular
                        Utils.QueryParams qp4 = new LLNet.Utils.QueryParams();
                        qp4.AddReplaceParam("v_ORDEN", Program.FrmMainPos.Order.ToString());
                        DataSet dsB5 = GUI.CApp.bll.getDataSet("PDV", "TyF_DEVOLUCION", qp4);
                        DataSet dsB4 = GUI.CApp.bll.getDataSet("PDV", "PUNTOS_DEVOLUCION", qp4);

                        if (dsB4.Tables.Count > 0)
                        {
                            if (dsB4.Tables[0].Rows.Count > 0)
                            {
                                foreach (DataRow fila in dsB4.Tables[0].Rows)
                                {
                                    DataRow fila2 = dsB5.Tables[0].Rows[0];
                                    if (Convert.ToString(fila2[0]) != string.Empty)
                                    {
                                        try
                                        {
                                            Utils.QueryParams qpD = new LLNet.Utils.QueryParams();
                                            qpD.AddReplaceParam("DEVOLUCION", Convert.ToString(fila2[1]));
                                            decimal ValFactPts = decimal.Parse(GUI.CApp.bll.GetSingleValue("C_FactorAlm", qpD, "PDV").ToString());
                                            decimal ValRealPts = decimal.Parse(Convert.ToString(fila[0])) * ValFactPts;
                                            //Envia los datos de la compra al proveedor para que descuente los puntos
                                            string PData = "url_respuesta=" + varUrlPts + "prueba_respuesta.php&tipo_respuesta=1&cod_empresa=" + varCodemprPts + "&cod_sucursal=" + varCodsucPts + "&numero_tarjeta=" + Convert.ToString(fila2[0]);
                                            // PData += "&numero_factura=" + documento.ToString() + "&puntos=" + Convert.ToString(fila[0]) + "&monto_factura=" + Convert.ToString(fila[0]) + "&nombre_cajero=" + CApp.usuario;
                                            PData += "&numero_factura=" + Convert.ToString(fila2[1]) + "&puntos=" + ValRealPts;//Convert.ToString(fila[0]);
                                            string info = RequestPOST(varUrlPts + "ws_devolucion.inc.php", PData);
                                            info = info.Trim();
                                            string[] datos = info.Split(' ');

                                            if (datos[0].ToString() != "10")
                                            {
                                                string log = "WS=" + varUrlPts + "ws_devolucion.inc.php" + info;
                                                log = log.Replace("'", " ");
                                                if (log.Length > 50)
                                                {
                                                    log = log.Substring(0, 49);
                                                }
                                                CApp.ShowMessage(info, "RedimirPuntos", true);
                                                BitacoraErrorWS(log, PData);
                                            }
                                            else
                                            {
                                                //Almacena los puntos en nuestra Base d Datos
                                                Utils.QueryParams qp3 = new LLNet.Utils.QueryParams();
                                                qp3.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.Order.ToString());
                                                qp3.AddReplaceParam("pPTSGANA", Convert.ToString(fila[0]));
                                                GUI.CApp.bll.ExecuteSql("WMS_IPtsFACTURA", qp3, "PDV");
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            string log = ex.Message.Replace("'", " ");
                                            if (ex.Message.Length > 50)
                                            {
                                                BitacoraErrorWS("SIN INTERNET WS=" + varUrlPts + "ws_devolucion.inc.php" + log.Substring(0, 49), "ORDER: " + Program.FrmMainPos.Order.ToString());
                                            }
                                            else
                                            {
                                                BitacoraErrorWS("SIN INTERNET WS=" + varUrlPts + "ws_devolucion.inc.php" + log, "ORDER: " + Program.FrmMainPos.Order.ToString());
                                            }
                                        }
                                    }
                                    else
                                    {
                                        BitacoraErrorWS("WS=" + varUrlPts + "ws_devolucion.inc.php", "El documento no tiene tarjeta asociada " + Program.FrmMainPos.Order.ToString() + " TyF_DEVOLUCION ");
                                    }
                                    //else
                                    //{
                                    //    //Almacena el ID_Maestro del proceso de redimir
                                    //    Utils.QueryParams qp3 = new LLNet.Utils.QueryParams();
                                    //    qp3.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.Order.ToString());
                                    //    qp3.AddReplaceParam("pIDMAESTRO", datos[3].ToString());
                                    //    GUI.CApp.bll.ExecuteSql("WMS_IIDMAESTRO", qp3, "PDV");
                                    //}
                                }
                            }
                        }


                        ////Devolucion de pts -elimina los puntos que gano
                        ////Pagar con Pts
                        ////AGREGA LOS PUNTOS A LA DEVOLUCION
                        //qp.Clear();
                        //qp.AddReplaceParam("v_ORDEN", Program.FrmMainPos.Order.ToString());
                        //GUI.CApp.bll.ExecuteSql("PTS_DEVOLUCION", qp, "PDV");
                        ////CONSULTA LOS PUNTOS y los envia
                        //Utils.QueryParams qp4 = new LLNet.Utils.QueryParams();
                        //qp4.AddReplaceParam("v_DOC", Program.FrmMainPos.Order.ToString());           
                        //DataSet dsB4 = GUI.CApp.bll.getDataSet("PDV", "PTS_REDIMIR_DEVO", qp4);
                        //if (dsB4.Tables.Count > 0)
                        //{
                        //    if (dsB4.Tables[0].Rows.Count > 0)
                        //    {
                        //        foreach (DataRow fila in dsB4.Tables[0].Rows)
                        //        {
                        //            //Envia los datos de la compra al proveedor para que descuente los puntos
                        //            string PData = "url_respuesta=" + varUrlPts + "prueba_respuesta.php&tipo_respuesta=1&cod_empresa=" + varCodemprPts + "&cod_sucursal=" + varCodsucPts + "&numero_tarjeta=" + Convert.ToString(fila[1]) + "&tipo_transaccion=2";
                        //            // PData += "&numero_factura=" + documento.ToString() + "&puntos=" + Convert.ToString(fila[0]) + "&monto_factura=" + Convert.ToString(fila[0]) + "&nombre_cajero=" + CApp.usuario;
                        //            PData += "&numero_factura=" + Convert.ToString(fila[2]) + "&puntos=" + Convert.ToString(fila[0]) + "&monto_factura=&nombre_cajero=" + CApp.usuario;
                        //            string info = RequestPOST(varUrlPts + "redimir_puntos.php", PData);
                        //            info = info.Trim();
                        //            string[] datos = info.Split(' ');
                        //            if (datos[0].ToString() != "10")
                        //            {
                        //                CApp.ShowMessage(info, "RedimirPuntos", true);
                        //                BitacoraErrorWS("WS=" + varUrlPts + "redimir_puntos.php " + info, PData);
                        //            }
                        //            else
                        //            {
                        //                //Almacena el ID_Maestro del proceso de redimir
                        //                Utils.QueryParams qp3 = new LLNet.Utils.QueryParams();
                        //                qp3.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.Order.ToString());
                        //                qp3.AddReplaceParam("pIDMAESTRO", datos[3].ToString());
                        //                GUI.CApp.bll.ExecuteSql("WMS_IIDMAESTRO", qp3, "PDV");
                        //            }
                        //        }
                        //    }
                        //}


                        #endregion

                        /****************Cambio Factura Electrónica*******************/
                        Utils.QueryParams vParametro = new LLNet.Utils.QueryParams();
                        vParametro.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.TDA_DETALLE_PEDIDO[0].DOCUMENTO_PADRE3.ToString());
                        long vDocNC = Utils.Helpers.ObjToInt64(GUI.CApp.bll.GetSingleValue("OBTIENE_NC_GENERADA", vParametro, "PDV"));

                        mTrama(vDocNC);

                        printDocument(Program.FrmMainPos.Order, pFormatoNC);
                        printDocument(Program.FrmMainPos.Order, "CP");
                        /****************Cambio Factura Electrónica*******************/

                        /****************Cambio Membresia*******************/
                        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());
                        vParametro.AddReplaceParam("USUARIO", supervisor);

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

                        /****************Cambio Membresia*******************/


                        Hide();
                        Close();
                        Program.FrmMainPos.newOrder();
                    }
                    catch
                    {
                        Hide();
                        Close();
                        Program.FrmMainPos.newOrder();
                    }
                }
            }
        }
        #endregion

        private void btnCredit_Click(object sender, EventArgs e)
        {

            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            decimal DocProcesado = 0;
            qp.Clear();
            qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
            DocProcesado = Convert.ToDecimal(GUI.CApp.bll.GetSingleValue("DocumentoProcesado", qp, "PDV"));

            if (DocProcesado > 0)
            {
                GUI.CApp.ShowMessage("Esta devolución ya fue Procesada, porfavor revise su Jornada", "Documento Procesado", true);
                return;
            }

            CreateRefund("C");
            try
            {
                PostData();

                #region pts
                //consulta los puntos que debe eliminar o acumular
                Utils.QueryParams qp4 = new LLNet.Utils.QueryParams();
                qp4.AddReplaceParam("v_ORDEN", Program.FrmMainPos.Order.ToString());
                DataSet dsB5 = GUI.CApp.bll.getDataSet("PDV", "TyF_DEVOLUCION", qp4);
                DataSet dsB4 = GUI.CApp.bll.getDataSet("PDV", "PUNTOS_DEVOLUCION", qp4);

                if (dsB4.Tables.Count > 0)
                {
                    if (dsB4.Tables[0].Rows.Count > 0)
                    {
                        foreach (DataRow fila in dsB4.Tables[0].Rows)
                        {
                            DataRow fila2 = dsB5.Tables[0].Rows[0];
                            if (Convert.ToString(fila2[0]) != string.Empty)
                            {
                                try
                                {
                                    Utils.QueryParams qpD = new LLNet.Utils.QueryParams();
                                    qpD.AddReplaceParam("DEVOLUCION", Convert.ToString(fila2[1]));
                                    decimal ValFactPts = decimal.Parse(GUI.CApp.bll.GetSingleValue("C_FactorAlm", qpD, "PDV").ToString());
                                    decimal ValRealPts = decimal.Parse(Convert.ToString(fila[0])) * ValFactPts;
                                    //Envia los datos de la compra al proveedor para que descuente los puntos
                                    string PData = "url_respuesta=" + varUrlPts + "prueba_respuesta.php&tipo_respuesta=1&cod_empresa=" + varCodemprPts + "&cod_sucursal=" + varCodsucPts + "&numero_tarjeta=" + Convert.ToString(fila2[0]);
                                    // PData += "&numero_factura=" + documento.ToString() + "&puntos=" + Convert.ToString(fila[0]) + "&monto_factura=" + Convert.ToString(fila[0]) + "&nombre_cajero=" + CApp.usuario;
                                    PData += "&numero_factura=" + Convert.ToString(fila2[1]) + "&puntos=" + ValRealPts;// Convert.ToString(fila[0]);
                                    string info = RequestPOST(varUrlPts + "ws_devolucion.inc.php", PData);
                                    info = info.Trim();
                                    string log = info.Replace("'", " ");
                                    log = "WS=" + varUrlPts + "ws_devolucion.inc.php" + log;
                                    if (log.Length > 50)
                                    {
                                        log = log.Substring(0, 49);
                                    }
                                    string[] datos = info.Split(' ');
                                    if (datos[0].ToString() != "10")
                                    {
                                        CApp.ShowMessage(info, "RedimirPuntos", true);
                                        BitacoraErrorWS(log, PData);
                                    }
                                    else
                                    {
                                        //Almacena los puntos en nuestra Base d Datos
                                        Utils.QueryParams qp3 = new LLNet.Utils.QueryParams();
                                        qp3.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.Order.ToString());
                                        qp3.AddReplaceParam("pPTSGANA", Convert.ToString(fila[0]));
                                        GUI.CApp.bll.ExecuteSql("WMS_IPtsFACTURA", qp3, "PDV");
                                    }
                                }
                                catch (Exception ex)
                                {
                                    string log = ex.Message;
                                    log = log.Replace("'", " ");
                                    if (ex.Message.Length > 50)
                                    {
                                        BitacoraErrorWS("SIN INTERNET WS=" + varUrlPts + "ws_devolucion.inc.php" + log.Substring(0, 49), "ORDER: " + Program.FrmMainPos.Order.ToString());
                                    }
                                    else
                                    {
                                        BitacoraErrorWS("SIN INTERNET WS=" + varUrlPts + "ws_devolucion.inc.php" + log, "ORDER: " + Program.FrmMainPos.Order.ToString());
                                    }
                                }
                            }
                            else
                            {
                                BitacoraErrorWS("WS=" + varUrlPts + "ws_devolucion.inc.php", "El documento no tiene tarjeta asociada " + Program.FrmMainPos.Order.ToString() + " TyF_DEVOLUCION ");
                            }
                            //else
                            //{
                            //    //Almacena el ID_Maestro del proceso de redimir
                            //    Utils.QueryParams qp3 = new LLNet.Utils.QueryParams();
                            //    qp3.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.Order.ToString());
                            //    qp3.AddReplaceParam("pIDMAESTRO", datos[3].ToString());
                            //    GUI.CApp.bll.ExecuteSql("WMS_IIDMAESTRO", qp3, "PDV");
                            //}
                        }
                    }
                }


                ////Devolucion de pts -elimina los puntos que gano
                ////Pagar con Pts
                ////AGREGA LOS PUNTOS A LA DEVOLUCION
                //qp.Clear();
                //qp.AddReplaceParam("v_ORDEN", Program.FrmMainPos.Order.ToString());
                //GUI.CApp.bll.ExecuteSql("PTS_DEVOLUCION", qp, "PDV");
                ////CONSULTA LOS PUNTOS y los envia
                //Utils.QueryParams qp4 = new LLNet.Utils.QueryParams();
                //qp4.AddReplaceParam("v_DOC", Program.FrmMainPos.Order.ToString());           
                //DataSet dsB4 = GUI.CApp.bll.getDataSet("PDV", "PTS_REDIMIR_DEVO", qp4);
                //if (dsB4.Tables.Count > 0)
                //{
                //    if (dsB4.Tables[0].Rows.Count > 0)
                //    {
                //        foreach (DataRow fila in dsB4.Tables[0].Rows)
                //        {
                //            //Envia los datos de la compra al proveedor para que descuente los puntos
                //            string PData = "url_respuesta=" + varUrlPts + "prueba_respuesta.php&tipo_respuesta=1&cod_empresa=" + varCodemprPts + "&cod_sucursal=" + varCodsucPts + "&numero_tarjeta=" + Convert.ToString(fila[1]) + "&tipo_transaccion=2";
                //            // PData += "&numero_factura=" + documento.ToString() + "&puntos=" + Convert.ToString(fila[0]) + "&monto_factura=" + Convert.ToString(fila[0]) + "&nombre_cajero=" + CApp.usuario;
                //            PData += "&numero_factura=" + Convert.ToString(fila[2]) + "&puntos=" + Convert.ToString(fila[0]) + "&monto_factura=&nombre_cajero=" + CApp.usuario;
                //            string info = RequestPOST(varUrlPts + "redimir_puntos.php", PData);
                //            info = info.Trim();
                //            string[] datos = info.Split(' ');
                //            if (datos[0].ToString() != "10")
                //            {
                //                CApp.ShowMessage(info, "RedimirPuntos", true);
                //                BitacoraErrorWS("WS=" + varUrlPts + "redimir_puntos.php " + info, PData);
                //            }
                //            else
                //            {
                //                //Almacena el ID_Maestro del proceso de redimir
                //                Utils.QueryParams qp3 = new LLNet.Utils.QueryParams();
                //                qp3.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.Order.ToString());
                //                qp3.AddReplaceParam("pIDMAESTRO", datos[3].ToString());
                //                GUI.CApp.bll.ExecuteSql("WMS_IIDMAESTRO", qp3, "PDV");
                //            }
                //        }
                //    }
                //}


                #endregion

                string pFormatoNC = Utils.Helpers.Nvl(Program.FrmMainPos.DsPedido.WMS_SOCIOS[0]["FORMATO_NOTA_CREDITO"], "NC").ToString();

                /****************Cambio Factura Electrónica*******************/
                Utils.QueryParams vParametro = new LLNet.Utils.QueryParams();
                vParametro.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.TDA_DETALLE_PEDIDO[0].DOCUMENTO_PADRE3.ToString());
                long vDocNC = Utils.Helpers.ObjToInt64(GUI.CApp.bll.GetSingleValue("OBTIENE_NC_GENERADA", vParametro, "PDV"));

                vParametro = new QueryParams();
                vParametro.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.DsPedido.TDA_DETALLE_PEDIDO[0].DOCUMENTO.ToString());

                mTrama(vDocNC);
                printDocument(Program.FrmMainPos.Order, pFormatoNC);
                /****************Cambio Factura Electrónica*******************/

                Hide();
                Close();
                Program.FrmMainPos.newOrder();

            }
            catch
            {
                Hide();
                Close();
                Program.FrmMainPos.newOrder();

            }
        }

        private void btnCoupon_Click(object sender, EventArgs e)
        {
            if (Utils.Helpers.ObjToStr(GUI.CApp.GetParam("PVCF")).Trim() == string.Empty)
            {
                if (Utils.Helpers.ObjToStr(Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["SOCIO"]) == Utils.Helpers.ObjToStr(GUI.CApp.GetParam("NSCF")))
                {
                    GUI.CApp.ShowMessage("No puede crear un vale por devolución a consumidor final", "Devoluciones", true);
                    return;
                }
            }

            MainForms.Forms.frmCoupons cou = new LLNet.Tienda.MainForms.Forms.frmCoupons();
            cou.Init(null);
            cou.ShowDialog();
            Close();
        }

        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());
                DataSet ds = GUI.CApp.bll.getDataSet("PDV", "NotasCredito", qp);
                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 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 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 dlgRefundType_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.F8:
                    if (btnContracargoE.Enabled)
                    {
                        btnContracargoE_Click(null, null);
                    }
                    break;
                case Keys.F7:
                    if (btnRechazadas.Enabled && btnRechazadas.Visible)
                    {
                        btnRechazadas_Click(null, null);
                    }
                    break;
                case Keys.F9:
                    if (btnTramiteCheque.Enabled)
                        btnTramiteCheque_Click(null, null);
                    break;
                case Keys.F10:
                    if (btnCashRefund.Enabled)
                        btnCashRefund_Click(null, null);
                    break;
                case Keys.F11:
                    if (btnCredit.Enabled)
                        btnCredit_Click(null, null);
                    break;
                case Keys.F12:
                    if (btnCoupon.Enabled)
                        btnCoupon_Click(null, null);
                    break;
                case Keys.Escape:
                    btnSalir_Click(null, null);
                    break;
            }
        }

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

        /// <summary>
        /// Crea una devolucion en base al pedido
        /// </summary>
        /// <returns></returns>
        public void CreateRefund(string pTipo)
        {



            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            //qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
            //GUI.CApp.bll.ExecuteSql("ActualizaSituacion", qp, "PDV");

            qp.Clear();
            qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
            qp.AddReplaceParam("TIPO", pTipo);

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

            if (Utils.Helpers.ObjToStr(GUI.CApp.GetParam("AICD")) == "X")
            {

                qp.Clear();
                string stmnt = "SELECT documento FROM wms_documentos where TIPO_DOCUMENTO = 'D' and documento_padre = " + Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString();
                qp.AddReplaceParam("STATEMENT", stmnt);

                DataSet devolucion = GUI.CApp.bll.getDataSet("PDV", "RunGenericStatement", qp);

                foreach (DataRow dr in devolucion.Tables[0].Rows)
                {
                    qp.Clear();
                    qp.AddReplaceParam("&&p_documento&&", dr[0].ToString());
                    qp.AddReplaceParam("&&p_bodega&&", Utils.Helpers.ObjToStr(GUI.CApp.GetParam("BADD")));
                    qp.AddReplaceParam("&&p_ajustar_inventario&&", "TRUE");

                    qp.AddReplaceParam("&&p_actualizar_costos&&", "FALSE");
                    qp.AddReplaceParam("&&p_valida_cantidad&&", "NULL");
                    qp.AddReplaceParam("&&p_usuario&&", GUI.CApp.usuario);
                    qp.AddReplaceParam("&&p_valida_permiso&&", "FALSE");
                    qp.AddReplaceParam("&&p_commit&&", "FALSE");

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

        }

        /// <summary>
        /// Crea una factura en base al pedido
        /// </summary>
        /// <returns></returns>
        public decimal CreateInvoice()
        {
            decimal pInvoice;

            #region Inserta los datos de la factura

            Model.PDV.DsPDV.WMS_DOCUMENTOSRow row = DsFactura.WMS_DOCUMENTOS.NewWMS_DOCUMENTOSRow();
            pInvoice = Convert.ToDecimal(GUI.CApp.GetSecuence("WMS_S_DOCUMENTO"));
            row.SOCIO = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].SOCIO;
            row.DOCUMENTO = pInvoice;
            row.DOCUMENTO_PADRE = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO;
            row.TIPO_DOCUMENTO = "F";
            row.SITUACION = 3;

            if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["SUBTIPO_DOCUMENTO"] != DBNull.Value)
                row.SUBTIPO_DOCUMENTO = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].SUBTIPO_DOCUMENTO;

            row.TOTAL = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].TOTAL;
            row.CREADO_POR = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].CREADO_POR;

            if (Program.Caja != null)
                row.CAJA = (decimal)Program.Caja;

            if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["APROBACION2"] != DBNull.Value)
                row.APROBACION2 = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].APROBACION2;

            if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["ENGANCHE"] != DBNull.Value)
                row.ENGANCHE = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].ENGANCHE;

            if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["CUOTAS"] != DBNull.Value)
                row.CUOTAS = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].CUOTAS;

            if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["ULTIMA_CUOTA"] != DBNull.Value)
                row.ULTIMA_CUOTA = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].ULTIMA_CUOTA;

            if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["FECHA_PRIMERA_CUOTA"] != DBNull.Value)
                row.FECHA_PRIMERA_CUOTA = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].FECHA_PRIMERA_CUOTA;

            if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["CANTIDAD_PAGOS"] != DBNull.Value)
                row.CANTIDAD_PAGOS = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].CANTIDAD_PAGOS;

            if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["SUBTIPO_PAGO"] != DBNull.Value)
                row.SUBTIPO_PAGO = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].SUBTIPO_PAGO;

            if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["PORCENTAJE_INTERES"] != DBNull.Value)
                row.PORCENTAJE_INTERES = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].PORCENTAJE_INTERES;

            if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["ULTIMA_CUOTA"] != DBNull.Value)
                row.ULTIMA_CUOTA = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].ULTIMA_CUOTA;

            if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["ESCENARIO_FINANCIERA"] != DBNull.Value)
                row.ESCENARIO_FINANCIERA = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].ESCENARIO_FINANCIERA;

            row.USUARIO1 = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].USUARIO1;

            if (Program.Jornada != null)
                row.JORNADA = (decimal)Program.Jornada;

            if (Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0]["SALDO"] != DBNull.Value)
                row.SALDO = Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].SALDO;
            else
                row.SetSALDONull();

            row.FECHA_EMISION = DateTime.Now;
            DsFactura.WMS_DOCUMENTOS.AddWMS_DOCUMENTOSRow(row);

            #endregion

            #region Inserta el detalle de la factura

            foreach (Model.PDV.DsPDV.WMS_SKUS_X_DOCUMENTORow sdrOrder in Program.FrmMainPos.DsPedido.WMS_SKUS_X_DOCUMENTO.Select("documento = " + Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString() + " and usuario_anulo is null "))
            {
                // Solo facturar lineas no anuladas
                if (sdrOrder["USUARIO_ANULO"] == System.DBNull.Value)
                {
                    Model.PDV.DsPDV.WMS_SKUS_X_DOCUMENTORow sdrInvoice = DsFactura.WMS_SKUS_X_DOCUMENTO.NewWMS_SKUS_X_DOCUMENTORow();
                    sdrInvoice.DOCUMENTO = pInvoice;
                    sdrInvoice.LINEA = sdrOrder.LINEA;
                    sdrInvoice.SKU = sdrOrder.SKU;
                    sdrInvoice.CANTIDAD = sdrOrder.CANTIDAD;
                    sdrInvoice.PRECIO_UNITARIO = sdrOrder.PRECIO_UNITARIO;
                    sdrInvoice.CREADO_POR = sdrOrder.CREADO_POR;

                    if (sdrOrder["DOCUMENTO_PADRE3"] != DBNull.Value)
                        sdrInvoice.DOCUMENTO_PADRE3 = sdrOrder.DOCUMENTO_PADRE3;

                    if (sdrOrder["LINEA_PADRE3"] != DBNull.Value)
                        sdrInvoice.LINEA_PADRE3 = sdrOrder.LINEA_PADRE3;

                    if (sdrOrder["VALE"] != DBNull.Value)
                        sdrInvoice.VALE = sdrOrder.VALE;

                    if (sdrOrder["IMPUESTO"] == System.DBNull.Value)
                        sdrInvoice.SetIMPUESTONull();
                    else
                        sdrInvoice.IMPUESTO = sdrOrder.IMPUESTO;

                    if (sdrOrder["DESCUENTO"] == System.DBNull.Value)
                        sdrInvoice.SetDESCUENTONull();
                    else
                        sdrInvoice.DESCUENTO = sdrOrder.DESCUENTO;

                    if (sdrOrder["BODEGA"] == System.DBNull.Value)
                        sdrInvoice.SetBODEGANull();
                    else
                        sdrInvoice.BODEGA = sdrOrder.BODEGA;

                    if (sdrOrder["BODEGA2"] == System.DBNull.Value)
                        sdrInvoice.SetBODEGA2Null();
                    else
                        sdrInvoice.BODEGA2 = sdrOrder.BODEGA2;

                    if (sdrOrder["BODEGA3"] == System.DBNull.Value)
                        sdrInvoice.SetBODEGA3Null();
                    else
                        sdrInvoice.BODEGA3 = sdrOrder.BODEGA3;

                    if (sdrOrder["A_DOMICILIO"] == System.DBNull.Value)
                        sdrInvoice.SetA_DOMICILIONull();
                    else
                        sdrInvoice.A_DOMICILIO = sdrOrder.A_DOMICILIO;

                    if (sdrOrder["DIRECCION"] == System.DBNull.Value)
                        sdrInvoice.SetDIRECCIONNull();
                    else
                        sdrInvoice.DIRECCION = sdrOrder.DIRECCION;

                    if (sdrOrder["REGION"] == System.DBNull.Value)
                        sdrInvoice.SetREGIONNull();
                    else
                        sdrInvoice.REGION = sdrOrder.REGION;

                    if (sdrOrder["SITUACION_SKU"] == System.DBNull.Value)
                        sdrInvoice.SetSITUACION_SKUNull();
                    else
                        sdrInvoice.SITUACION_SKU = sdrOrder.SITUACION_SKU;

                    if (sdrOrder["PORCENTAJE1"] == System.DBNull.Value)
                        sdrInvoice.SetPORCENTAJE1Null();
                    else
                        sdrInvoice.PORCENTAJE1 = sdrOrder.PORCENTAJE1;

                    if (sdrOrder["PORCENTAJE2"] == System.DBNull.Value)
                        sdrInvoice.SetPORCENTAJE2Null();
                    else
                        sdrInvoice.PORCENTAJE2 = sdrOrder.PORCENTAJE2;

                    if (sdrOrder["PORCENTAJE3"] == System.DBNull.Value)
                        sdrInvoice.SetPORCENTAJE3Null();
                    else
                        sdrInvoice.PORCENTAJE3 = sdrOrder.PORCENTAJE3;

                    if (sdrOrder["USUARIO"] == System.DBNull.Value)
                        sdrInvoice.SetUSUARIONull();
                    else
                        sdrInvoice.USUARIO = sdrOrder.USUARIO;

                    if (sdrOrder["USUARIO2"] == System.DBNull.Value)
                        sdrInvoice.SetUSUARIO2Null();
                    else
                        sdrInvoice.USUARIO2 = sdrOrder.USUARIO2;

                    if (sdrOrder["USUARIO3"] == System.DBNull.Value)
                        sdrInvoice.SetUSUARIO3Null();
                    else
                        sdrInvoice.USUARIO3 = sdrOrder.USUARIO3;

                    if (sdrOrder["FECHA_ENTREGA"] == System.DBNull.Value)
                        sdrInvoice.SetFECHA_ENTREGANull();
                    else
                        sdrInvoice.FECHA_ENTREGA = sdrOrder.FECHA_ENTREGA;

                    if (sdrOrder["COSTO_PROMEDIO"] == System.DBNull.Value)
                        sdrInvoice.SetCOSTO_PROMEDIONull();
                    else
                        sdrInvoice.COSTO_PROMEDIO = sdrOrder.COSTO_PROMEDIO;

                    if (sdrOrder["OBSERVACIONES"] == System.DBNull.Value)
                        sdrInvoice.SetOBSERVACIONESNull();
                    else
                        sdrInvoice.OBSERVACIONES = sdrOrder.OBSERVACIONES;

                    sdrOrder.FACTURADO = sdrInvoice.CANTIDAD;

                    DsFactura.WMS_SKUS_X_DOCUMENTO.AddWMS_SKUS_X_DOCUMENTORow(sdrInvoice);
                }
            }

            #endregion

            return pInvoice;
        }

        public void PostData()
        {
            // Guardando datos del pedido
            GUI.CApp.bll.updateDataSet(Program.FrmMainPos.DsPedido, Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS.TableName);

            if (DsFactura.WMS_DOCUMENTOS.Count > 0)
            {
                // Guardando datos de la factura
                GUI.CApp.bll.updateDataSet(DsFactura, DsFactura.WMS_DOCUMENTOS.TableName);
                GUI.CApp.bll.updateDataSet(DsFactura, DsFactura.WMS_SKUS_X_DOCUMENTO.TableName);

                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("DOCUMENTO", DsFactura.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
                GUI.CApp.bll.ExecuteSql("wms_p_documentos.procesar_facturas_in", qp, "PDV");
            }
        }

        private void dlgRefundType_Load(object sender, EventArgs e)
        {

            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("pDOCUMENTO", Program.FrmMainPos.Order.ToString());

            string vResultado = GUI.CApp.bll.GetSingleValue("EKO_F_VALIDAR_DEVOL", qp, "PDV").ToString();

            if (vResultado != "ECOM" && vResultado != "OTRA")
            {
                CApp.ShowMessage(vResultado, "Devolución", true);
                this.Hide();
                btnSalir_Click(null, null);
                return;
            }
            else if (vResultado == "ECOM" || vResultado == "OTRA")
            {
                qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("CAJA", Program.Caja.ToString());

                if (Utils.Helpers.ObjToStr(GUI.CApp.bll.GetSingleValue("TalonarioValidoNC", qp, "PDV")) != "1")
                {
                    long ncRestantes = Convert.ToInt64(GUI.CApp.bll.GetSingleValue("NCRestantes", qp, "PDV"));

                    if (ncRestantes >= 0)
                        GUI.CApp.ShowMessage(string.Format(GUI.CApp.TraducirPalabra("Quedan {0} notas de crédito disponibles en el talonario"), ncRestantes), GUI.CApp.TraducirPalabra("Devoluciones"), false);
                    else
                    {
                        GUI.CApp.ShowMessage("Ya no hay más notas de crédito disponibles en el talonario vigente", "Devoluciones", true);
                        Hide();
                        Close();
                        return;
                    }
                }

                qp.Clear();
                qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.Order.ToString());
                object oMonto = GUI.CApp.bll.GetSingleValue("TotalValeDevolucion", qp, "PDV");
                if (oMonto != null && oMonto != DBNull.Value)
                    vMonto = Convert.ToDecimal(oMonto);
                else
                    vMonto = Program.FrmMainPos.DsPedido.TDA_DATOS_DOCUMENTO[0].TOTAL * -1;

                if (vMonto <= 0)
                {
                    btnCredit.Enabled = true;
                    btnCashRefund.Enabled = false;
                    btnTramiteCheque.Enabled = false;
                    btnCoupon.Enabled = false;
                }
                else
                {
                    btnCredit.Enabled = true;
                    btnCashRefund.Enabled = true;
                    btnTramiteCheque.Enabled = true;
                    btnCoupon.Enabled = true;
                }


                object oBloqueo = GUI.CApp.bll.GetSingleValue("BloquearEfectivo", qp, "PDV");
                if (Convert.ToDecimal(oBloqueo) > 0)
                {
                    if (!GUI.CApp.GetAccess("TDA_DEV_ACREDITAR"))
                    {
                        this.btnCredit.Enabled = false;
                    }
                    else
                    {
                        if ((Convert.ToInt32(Utils.Helpers.pFactCredito)) > 0)
                            this.btnCredit.Enabled = true;
                        else
                            this.btnCredit.Enabled = false;
                    }
                    btnCashRefund.Enabled = false;
                    btnTramiteCheque.Enabled = false;
                    btnCoupon.Enabled = false;
                }
                else
                {
                    if ((Convert.ToInt32(Utils.Helpers.pFactCredito)) > 0)
                        this.btnCredit.Enabled = false;
                    else
                        this.btnCredit.Enabled = false;
                    // if (!GUI.CApp.GetAccess("TDA_DEV_ACREDITAR"))
                    // {
                    //     this.btnCredit.Enabled = false;
                    // }
                    // else
                    // {
                    //     if ((Convert.ToInt32(Utils.Helpers.pFactCredito)) > 0)
                    //         this.btnCredit.Enabled = true;
                    //     else
                    //         this.btnCredit.Enabled = false;
                    // }



                    if (!GUI.CApp.GetAccess("TDA_DEV_CHEQUE"))
                    {
                        this.btnTramiteCheque.Enabled = false;
                    }
                    else
                        this.btnTramiteCheque.Enabled = true;


                    if (!GUI.CApp.GetAccess("TDA_DEV_EFECTIVO"))
                    {
                        this.btnCashRefund.Enabled = false;
                    }
                    else
                        this.btnCashRefund.Enabled = true;



                    if (!GUI.CApp.GetAccess("TDA_DEV_VALE"))
                    {
                        this.btnCoupon.Enabled = false;
                    }
                    else
                        this.btnCoupon.Enabled = true;


                }

                qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.WMS_SKUS_X_DOCUMENTO[0].DOCUMENTO_PADRE3.ToString());
                object resul = CApp.bll.GetSingleValue("WMS_F_EXISTEDEVOLF", qp, "PDV");
                if (resul.ToString() != "")
                    if (int.Parse(resul.ToString()) >= 1)
                    {
                        btnCashRefund.Enabled = false;
                        this.btnTramiteCheque.Enabled = false;
                    }

                qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.WMS_SKUS_X_DOCUMENTO[0].DOCUMENTO_PADRE3.ToString());
                resul = CApp.bll.GetSingleValue("WMS_F_EXISTEGIFTC", qp, "PDV");
                if (resul != null)
                    if (int.Parse(resul.ToString()) >= 1)
                    {
                        btnCashRefund.Enabled = false;
                        this.btnTramiteCheque.Enabled = false;
                    }

                if (vResultado == "ECOM")
                {
                    this.btnContracargoE.Enabled = true;
                }
                else
                {
                    this.btnContracargoE.Enabled = false;
                }
            }
        }
        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 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 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 ";
                }
                else
                {
                    long pDocumento = documento;
                    if (prefijo != "")
                        Args = prefijo + pDocumento + ".txt ";
                    else
                        Args = pDocumento + ".txt ";
                }

                startInfo.Arguments = Args;
                try
                {
                    qp.AddReplaceParam("DOCUMENTO", documento.ToString());
                    object notacTmp = GUI.CApp.bll.GetSingleValue("ObtenerFact", qp, "PDV");
                    if (notacTmp != null && notacTmp.ToString() != "")
                        notac = notacTmp.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 DELAY PARA QUE LA BD TENGA TIEMPO DE GENERAR EL TXT
                    System.Diagnostics.Process.Start(startInfo);
                }
                catch (Exception ex)
                {
                    if (ex.Message == "El sistema no puede hallar el archivo especificado")
                        CApp.ShowMessage(ex.Message + "\rREIMPRIMA LA NOTA DE CRÉDITO " + notac, "Impresion de Documentos", true);
                    else
                        CApp.ShowMessage(ex.Message, "Impresión 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);
        }

        #region btnContracargoE_Click
        private void btnContracargoE_Click(object sender, EventArgs e)
        {
            try
            {
                if (GUI.CApp.ValidateAccess("ECOM_Contracargo", "Devolución"))
                {
                    CreateRefund("R");
                    try
                    {
                        PostData();
                        string pFormatoNC = Utils.Helpers.Nvl(Program.FrmMainPos.DsPedido.WMS_SOCIOS[0]["FORMATO_NOTA_CREDITO"], "NC").ToString();

                        /****************Cambio Factura Electrónica*******************/
                        Utils.QueryParams vParametro = new LLNet.Utils.QueryParams();
                        vParametro.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.TDA_DETALLE_PEDIDO[0].DOCUMENTO_PADRE3.ToString());
                        long vDocNC = Utils.Helpers.ObjToInt64(GUI.CApp.bll.GetSingleValue("OBTIENE_NC_GENERADA", vParametro, "PDV"));

                        mTrama(vDocNC);

                        printDocument(Program.FrmMainPos.Order, pFormatoNC);
                        printDocument(Program.FrmMainPos.Order, "CP");
                        /****************Cambio Factura Electrónica*******************/

                        Hide();
                        //
                        using (FrmDatosClienteDevol vForm = new FrmDatosClienteDevol())
                        {
                            vForm.NDocumento_Devol = Program.FrmMainPos.Order.ToString();
                            vForm.NDocumento_Fact = Program.FrmMainPos.DsPedido.WMS_SKUS_X_DOCUMENTO[0].DOCUMENTO_PADRE3.ToString();
                            vForm.ShowDialog();
                            btnSalir_Click(null, null);
                        }
                        Close();
                        Program.FrmMainPos.newOrder();
                    }
                    catch
                    {
                        Hide();
                        Close();
                        Program.FrmMainPos.newOrder();
                    }
                }
            }
            catch (Exception vEx)
            {
                CApp.ShowMessage(vEx.Message, "Devolución", true);
            }
        }
        #endregion

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

                if (GUI.CApp.ValidateAccess("DevolRechazadas", "Devoluciones Rechazadas"))
                {
                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    qp = new LLNet.Utils.QueryParams();
                    decimal DocProcesado = 0;
                    qp.Clear();
                    qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.WMS_DOCUMENTOS[0].DOCUMENTO.ToString());
                    DocProcesado = Convert.ToDecimal(GUI.CApp.bll.GetSingleValue("DocumentoProcesado", qp, "PDV"));

                    if (DocProcesado > 0)
                    {
                        GUI.CApp.ShowMessage("Esta devolución ya fue Procesada, por favor revise su Jornada", "Documento Procesado", true);
                        return;
                    }


                    CreateRefund("E");

                    try
                    {

                        PostData();
                        string pFormatoNC = Utils.Helpers.Nvl(Program.FrmMainPos.DsPedido.WMS_SOCIOS[0]["FORMATO_NOTA_CREDITO"], "NC").ToString();


                        /****************Cambio Factura Electrónica*******************/
                        Utils.QueryParams vParametro = new LLNet.Utils.QueryParams();
                        vParametro.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.DsPedido.TDA_DETALLE_PEDIDO[0].DOCUMENTO_PADRE3.ToString());
                        long vDocNC = Utils.Helpers.ObjToInt64(GUI.CApp.bll.GetSingleValue("OBTIENE_NC_GENERADA", vParametro, "PDV"));

                        mTrama(vDocNC);

                        printDocument(Program.FrmMainPos.Order, pFormatoNC);
                        printDocument(Program.FrmMainPos.Order, "CP");
                        /****************Cambio Factura Electrónica*******************/

                        /****************Cambio Membresia*******************/
                        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());
                        vParametro.AddReplaceParam("USUARIO", supervisor);

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

                        /****************Cambio Membresia*******************/

                        Hide();
                        Close();
                        Program.FrmMainPos.newOrder();
                    }
                    catch
                    {
                        Hide();
                        Close();
                        Program.FrmMainPos.newOrder();
                    }

                }
            }
            catch (Exception vEx)
            {
                CApp.ShowMessage(vEx.Message, "Devolución FE Rechazadas", true);
            }

        }
        #endregion
    }
}