#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 LLNet.Utils;
using LLNet.GUI;
#endregion

namespace LLNet.Tienda.MainForms.Forms
{
    public partial class frmAsignarClienteFEAsociaciones : LLNet.GUI.FormBases.frmBase
    {

        #region Constructor

        public frmAsignarClienteFEAsociaciones()
        {
            InitializeComponent();
            this.DsPedido = new Model.PDV.DsPDV();
            //GUI.CApp.TraducirForm(this);
        }

        #endregion

        private cDatosDocumento doc;
        private string oldVendor;
        private string oldNit;
        private bool verificaCliente;
        public static int validar_cf;
        public int conteo_warnings;
        public LLNet.Model.PDV.DsPDV DsPedido;


        #region Metodos Sobreescritos

        public override void Init(object[] pArgs)
        {
            base.Init(pArgs);

            codigoTextEdit.Properties.ReadOnly = !GUI.CApp.GetAccess("TDA_CustomerCode");

            beSocioFactura.EditValue = null;
            cDatosDocumentoBindingSource.Clear();

            try { layoutControl1.RestoreLayoutFromXml(GUI.CApp.ExeDir + "DatosDocumento.xml"); }
            catch { }

            setRegularExpressions();

            // apunta hacia el dataset de pedidos
            dsPDV1 = this.DsPedido;

            cDatosDocumentoBindingSource.AddNew();
            doc = ((cDatosDocumento)cDatosDocumentoBindingSource.Current);

            LoadLookupData();

            if (dsPDV1.WMS_DOCUMENTOS.Count > 0)
            {
                Model.PDV.DsPDV.WMS_DOCUMENTOSRow pedido = dsPDV1.WMS_DOCUMENTOS[0];
                GetCurrentCustomer(pedido);
                Model.PDV.DsPDV.WMS_SOCIOSRow cliente = null;
                cliente = dsPDV1.WMS_SOCIOS[0];

                if (cliente != null)
                {
                    LoadObject(pedido, cliente);
                    cDatosDocumentoBindingSource.ResetCurrentItem();
                }
                //enableAllEditors(false);
            }
            else
            {
                //enableAllEditors(true);
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("USUARIO", GUI.CApp.usuario);
                if (Utils.Helpers.ObjToStr(GUI.CApp.bll.GetSingleValue("EsUsuarioVendedor", qp, "PDV")) == "S")
                    doc.Vendedor = GUI.CApp.usuario;
            }

            verificaCliente = true;

            GUI.CApp.TraducirForm(this);
        }

        #endregion

        private void setRegEx(DevExpress.XtraEditors.ButtonEdit be, string regex)
        {
            be.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
            be.Properties.Mask.EditMask = regex;
        }

        private void setRegEx(DevExpress.XtraEditors.TextEdit be, string regex)
        {
            be.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
            be.Properties.Mask.EditMask = regex;
        }

        private void setRegularExpressions()
        {
            setRegEx(nitButtonEdit, Program.regexNit);
            setRegEx(telefonoTextEdit, Program.regexTelefono);
            setRegEx(telefonoOficinaTextEdit, Program.regexTelefono);
            setRegEx(celularTextEdit, Program.regexTelefono);
            setRegEx(direccionOficinaTextEdit, Program.regexDireccion);
            setRegEx(direccionTextEdit, Program.regexDireccion);
            setRegEx(correoElectronicoTextEdit, Program.regexEmail);
            setRegEx(clienteButtonEdit, Program.regexDefault);
            setRegEx(codigoTextEdit, Program.regexDefault);
            setRegEx(conyugueTextEdit, Program.regexDefault);
            setRegEx(razonSocialTextEdit, Program.regexDefault);
            //setRegEx(txtCustom0, Program.regexDefault);
            setRegEx(txtCustom1, Program.regexDefault);
            setRegEx(txtCustom2, Program.regexDefault);
            setRegEx(txtCustom3, Program.regexDefault);
            setRegEx(txtCustom4, Program.regexDefault);
            setRegEx(txtCustom5, Program.regexDefault);
            setRegEx(txtCustom6, Program.regexDefault);
            setRegEx(txtCustom7, Program.regexDefault);
            setRegEx(txtCustom8, Program.regexDefault);
            setRegEx(txtCustom9, Program.regexDefault);
            setRegEx(txtRegistroFiscal, Program.regexDefault);
            setRegEx(tarjetaTextEdit, Program.regexTarjeta);
            setRegEx(txtTarjeta1, Program.regexTarjeta);
            setRegEx(txtTarjeta2, Program.regexTarjeta);
            setRegEx(txtCiudad, Program.regexDefault);
            setRegEx(txtBlock, Program.regexDefault);
            setRegEx(txtCalle, Program.regexDefault);
            //setRegEx(txtLimiteCredito, Program.regexDefault);
            //setRegEx(txtDisponible, Program.regexDefault);
        }

        private void LoadLookupData()
        {
            dsPDV1.VENDEDORES.Clear();
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.VENDEDORES.TableName), dsPDV1);
            vendedorLookUpEdit.Properties.DataSource = dsPDV1.VENDEDORES;
            vendedorAsignadoLookUpEdit.Properties.DataSource = dsPDV1.VENDEDORES;

            dsGeneral1.SBOEstados.Clear();
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsGeneral1.GetType(), dsGeneral1.SBOEstados.TableName), dsGeneral1);
            lueEstado.Properties.DataSource = dsGeneral1.SBOEstados;

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

            fillLookup(qp, "OCUPACION", ref dsOcupacion);
            fillLookup(qp, "SEXO", ref dsSexo);
            fillLookup(qp, "ESTADOCIVIL", ref dsEstadoCivil);
            fillLookup(qp, "TIPO CLIENTE", ref dsTipoProveedor);
            fillLookup(qp, "FORMATO NOTA CREDITO", ref dsFormatoNC);
            fillLookup(qp, "TIPO FACTURA' AND RV_MPCC02 = 'X", ref dsTipoFactura);

            dsPDV1.Clasificacion1.Clear();
            dsPDV1.Clasificacion2.Clear();
            dsPDV1.Clasificacion3.Clear();
            dsPDV1.Clasificacion4.Clear();
            dsPDV1.Clasificacion5.Clear();

            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), new string[] {
                dsPDV1.Clasificacion1.TableName,
                dsPDV1.Clasificacion2.TableName,
                dsPDV1.Clasificacion3.TableName,
                dsPDV1.Clasificacion4.TableName,
                dsPDV1.Clasificacion5.TableName
            }), dsPDV1);

            lueClas1.Properties.DataSource = dsPDV1.Clasificacion1;
            lueClas2.Properties.DataSource = dsPDV1.Clasificacion2;
            lueClas3.Properties.DataSource = dsPDV1.Clasificacion3;
            lueClas4.Properties.DataSource = dsPDV1.Clasificacion4;
            lueClas5.Properties.DataSource = dsPDV1.Clasificacion5;
        }

        private void fillLookup(Utils.QueryParams qp, string pDomain, ref Model.General.CgRefCodes dsLookup)
        {
            qp.Clear();
            qp.AddReplaceParam("RV_DOMAIN", pDomain);
            dsLookup.Clear();
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsLookup.GetType(), dsLookup.DOMAINS.TableName, qp), dsLookup);
        }

        #region Carga de dataset a objeto

        private string LoadObjectField(object fieldData)
        {
            if (fieldData != null)
                return fieldData.ToString();
            else
                return null;
        }

        private decimal? LoadObjectDecimalField(object fieldData)
        {
            if (fieldData != System.DBNull.Value)
                return Convert.ToDecimal(fieldData);
            else
                return null;
        }

        private DateTime? LoadObjectDateTimeField(object fieldData)
        {
            if (fieldData != System.DBNull.Value)
                return Convert.ToDateTime(fieldData);
            else
                return null;
        }

        private void LoadObject(Model.PDV.DsPDV.WMS_DOCUMENTOSRow pedido, Model.PDV.DsPDV.WMS_SOCIOSRow cliente)
        {
            doc.AceptarCheque = LoadObjectField(cliente["ACEPTAR_CHEQUE"]);
            doc.Celular = LoadObjectField(cliente["CELULAR"]);
            doc.Clasificacion1 = LoadObjectDecimalField(cliente["CLAS1"]);
            doc.Clasificacion2 = LoadObjectDecimalField(cliente["CLAS2"]);
            doc.Clasificacion3 = LoadObjectDecimalField(cliente["CLAS3"]);
            doc.Clasificacion4 = LoadObjectDecimalField(cliente["CLAS4"]);
            doc.Clasificacion5 = LoadObjectDecimalField(cliente["CLAS5"]);
            doc.Cliente = LoadObjectField(cliente["NOMBRE"]);
            doc.Codigo = LoadObjectField(cliente["SOCIO_ALTERNO"]);
            doc.Conyugue = LoadObjectField(cliente["CONYUGUE"]);
            doc.CorreoElectronico = LoadObjectField(cliente["EMAIL"]);
            doc.Custom0 = LoadObjectField(cliente["CUSTOM0"]);
            doc.Custom1 = LoadObjectField(cliente["CUSTOM1"]);
            doc.Custom2 = LoadObjectField(cliente["CUSTOM2"]);
            doc.Custom3 = LoadObjectField(cliente["CUSTOM3"]);
            doc.Custom4 = LoadObjectField(cliente["CUSTOM4"]);
            doc.Custom5 = LoadObjectField(cliente["CUSTOM5"]);
            doc.Custom6 = LoadObjectField(cliente["CUSTOM6"]);
            doc.Custom7 = LoadObjectField(cliente["CUSTOM7"]);
            doc.Custom8 = LoadObjectField(cliente["CUSTOM8"]);
            doc.Custom9 = LoadObjectField(cliente["CUSTOM9"]);
            doc.Direccion = LoadObjectField(cliente["DIRECCION1"]);
            doc.DireccionOficina = LoadObjectField(cliente["DIRECCION_OFICINA"]);
            doc.EstadoCivil = LoadObjectField(cliente["ESTADO_CIVIL"]);
            doc.FechaAniversario = LoadObjectDateTimeField(cliente["FECHA_ANIVERSARIO"]);
            doc.FechaNacimiento = LoadObjectDateTimeField(cliente["FECHA_NACIMIENTO"]);
            doc.Nit = LoadObjectField(cliente["NIT"]);
            doc.NumeroHijos = LoadObjectDecimalField(cliente["HIJOS"]);
            doc.ObservacionesCliente = LoadObjectField(cliente["OBSERVACIONES"]);
            doc.Ocupacion = LoadObjectField(cliente["OCUPACION"]);
            doc.RazonSocial = LoadObjectField(cliente["NOMBRE_COMERCIAL"]);
            doc.Region = LoadObjectDecimalField(cliente["REGION1"]);
            doc.DescRegion = LoadObjectField(cliente["DESC_REGION1"]);
            doc.RegistroFiscal = LoadObjectField(cliente["RFC"]);
            doc.Sexo = LoadObjectField(cliente["SEXO"]);
            doc.Tarjeta = LoadObjectField(cliente["TARJETA"]);
            doc.Tarjeta1 = LoadObjectField(cliente["TARJETA1"]);
            doc.Tarjeta2 = LoadObjectField(cliente["TARJETA2"]);
            doc.Telefono = LoadObjectField(cliente["TELEFONOS"]);
            doc.TelefonoOficina = LoadObjectField(cliente["TELEFONO_OFICINA"]);
            doc.Socio = LoadObjectDecimalField(cliente["SOCIO"]);
            doc.TipoFactura = LoadObjectField(cliente["TIPO_FACTURA"]);
            doc.VencimientoTarjeta = LoadObjectDateTimeField(cliente["VENCIMIENTO_TARJETA"]);
            doc.CodigoPostal = LoadObjectField(cliente["CODIGO_POSTAL"]);
            doc.Impuesto = LoadObjectDecimalField(cliente["IMPUESTO"]);
            doc.VendedorAsignado = LoadObjectField(cliente["VENDEDOR_ASIGNADO"]);
            doc.TipoProveedor = LoadObjectField(cliente["TIPO_PROVEEDOR"]);
            doc.FormatoNotaCredito = LoadObjectField(cliente["FORMATO_NOTA_CREDITO"]);
            doc.Estado = LoadObjectField(cliente["ESTADO"]);
            doc.Ciudad = LoadObjectField(cliente["CIUDAD"]);
            doc.Block = LoadObjectField(cliente["BLOCK"]);
            doc.Calle = LoadObjectField(cliente["CALLE"]);
            doc.Disponible = LoadObjectDecimalField(cliente["DISPONIBLE"]);
            doc.Limite_credito = LoadObjectDecimalField(cliente["LIMITE_CREDITO"]);
            doc.Puntos = LoadObjectDecimalField(cliente["PUNTOS"]);

            if (pedido != null)
            {
                doc.DireccionEntregaProducto = LoadObjectField(pedido["DIRECCION1"]);
                doc.DireccionCobro = LoadObjectField(pedido["DIRECCION2"]);
                doc.DireccionEntregaFactura = LoadObjectField(pedido["DIRECCION3"]);
                doc.FechaCobro = LoadObjectDateTimeField(pedido["FECHA_VENCIMIENTO"]);
                doc.ObservacionesDocumento = LoadObjectField(pedido["OBSERVACIONES"]);
                doc.RegionDirEntregaProd = LoadObjectDecimalField(pedido["REGION1"]);
                doc.RegionDirCobro = LoadObjectDecimalField(pedido["REGION2"]);
                doc.RegionDirEntregaFactura = LoadObjectDecimalField(pedido["REGION3"]);
                doc.Socio = LoadObjectDecimalField(pedido["SOCIO"]);
                doc.SocioFactura = LoadObjectDecimalField(pedido["SOCIO_FACTURA"]);

                if (doc.SocioFactura != null)
                {
                    Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                    qp.AddReplaceParam("SOCIO", doc.SocioFactura.ToString());
                    DsSocioFactura.WMS_SOCIOS.Clear();
                    Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(DsSocioFactura.GetType(), DsSocioFactura.WMS_SOCIOS.TableName, qp, "FillBySocio"), DsSocioFactura);
                    if (DsSocioFactura.WMS_SOCIOS.Count > 0)
                        beSocioFactura.EditValue = DsSocioFactura.WMS_SOCIOS[0].NOMBRE;
                }

                doc.TipoEntrega = LoadObjectDecimalField(pedido["TIPO_ENTREGA"]);
                doc.FechaEntrega = LoadObjectDateTimeField(pedido["FECHA_ENTREGA"]);
                doc.Vendedor = LoadObjectField(pedido["USUARIO1"]);
            }

            //enableAllEditors(false);
            cDatosDocumentoBindingSource.ResetItem(0);
        }

        private void LimpiaCasillas()
        {
            //doc.Nit = nitButtonEdit.Text;  //LIMPIA TODOS LOS CAMPOS MENOS EL NIT
            doc.Nit = null;

            doc.AceptarCheque = null;
            doc.Celular = null;
            doc.Clasificacion1 = null;
            doc.Clasificacion2 = null;
            doc.Clasificacion3 = null;
            doc.Clasificacion4 = null;
            doc.Clasificacion5 = null;
            doc.Cliente = null;
            doc.Codigo = null;
            doc.Conyugue = null;
            doc.CorreoElectronico = null;
            doc.Custom0 = null;
            doc.Custom1 = null;
            doc.Custom2 = null;
            doc.Custom3 = null;
            doc.Custom4 = null;
            doc.Custom5 = null;
            doc.Custom6 = null;
            doc.Custom7 = null;
            doc.Custom8 = null;
            doc.Custom9 = null;
            doc.Direccion = null;
            doc.DireccionOficina = null;
            doc.EstadoCivil = null;
            doc.FechaAniversario = null;
            doc.FechaNacimiento = null;
            //doc.Nit = null;
            doc.NumeroHijos = null;
            doc.ObservacionesCliente = null;
            doc.Ocupacion = null;
            doc.RazonSocial = null;
            doc.Region = null;
            doc.DescRegion = null;
            doc.RegistroFiscal = null;
            doc.Sexo = null;
            doc.Tarjeta = null;
            doc.Tarjeta1 = null;
            doc.Tarjeta2 = null;
            doc.Telefono = null;
            doc.TelefonoOficina = null;
            doc.Socio = null;
            doc.TipoFactura = null;
            doc.VencimientoTarjeta = null;
            doc.CodigoPostal = null;
            doc.Impuesto = null;
            doc.VendedorAsignado = null;
            doc.TipoProveedor = null;
            doc.FormatoNotaCredito = null;
            doc.Estado = null;
            doc.Ciudad = null;
            doc.Block = null;
            doc.Calle = null;
            doc.Disponible = null;
            doc.Limite_credito = null;


            doc.DireccionEntregaProducto = null;
            doc.DireccionCobro = null;
            doc.DireccionEntregaFactura = null;
            doc.FechaCobro = null;
            doc.ObservacionesDocumento = null;
            doc.RegionDirEntregaProd = null;
            doc.RegionDirCobro = null;
            doc.RegionDirEntregaFactura = null;
            doc.Socio = null;
            doc.SocioFactura = null;

            doc.TipoEntrega = null;
            doc.FechaEntrega = null;
            //doc.Vendedor = null;

            cDatosDocumentoBindingSource.ResetItem(0);
        }

        #endregion

        private void repNIT_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            Tienda.MainForms.Finders.frmFindCustomer fc = new LLNet.Tienda.MainForms.Finders.frmFindCustomer();
            fc.Init(null);
            fc.ShowDialog(this);

            if (fc.DialogResult == DialogResult.OK)
            {
                string selectedVendor = doc.Vendedor;

                cDatosDocumentoBindingSource.Clear();
                cDatosDocumentoBindingSource.AddNew();
                doc = ((cDatosDocumento)cDatosDocumentoBindingSource.Current);
                doc.Vendedor = selectedVendor;

                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                if (fc.Socio != null)
                {
                    qp.AddReplaceParam("SOCIO", fc.Socio.ToString());
                    dsPDV1.WMS_SOCIOS.Clear();
                    Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.WMS_SOCIOS.TableName, qp, "FillBySocio"), dsPDV1);
                    LoadObject(null, dsPDV1.WMS_SOCIOS[0]);
                    oldNit = nitButtonEdit.Text;
                    cDatosDocumentoBindingSource.ResetItem(0);
                }
            }
            if (validar_cf != 0)
            {
                GUI.CApp.ShowMessage("Consumidor Final - Solo Lectura", "Informacion CF", true);
                enableAllEditors(true);

            }
            else
            {
                enableAllEditors(false);


            }

        }

        #region carga de objeto a dataset

        private void SetData(ref Model.PDV.DsPDV.WMS_SOCIOSRow row, string column, object obj)
        {

            if (obj != null && obj.ToString() != string.Empty)
            {
                if (row[column] != null && row[column].ToString() != string.Empty)
                {
                    if (obj.ToString() != row[column].ToString())
                    {
                        row[column] = obj;
                    }
                }
                else
                    row[column] = obj;
            }
            else
            {
                if (row[column] != null && row[column].ToString() != string.Empty)
                    row[column] = DBNull.Value;
            }
        }

        private void SetData(ref Model.PDV.DsPDV.WMS_DOCUMENTOSRow row, string column, object obj)
        {
            if (obj != null && obj.ToString() != string.Empty)
            {
                if (row[column] != null && row[column].ToString() != string.Empty)
                {
                    if (obj.ToString() != row[column].ToString())
                    {
                        row[column] = obj;
                    }
                }
                else
                    row[column] = obj;
            }
            else
            {
                if (row[column] != null && row[column].ToString() != string.Empty)
                    row[column] = DBNull.Value;
            }
        }

        private void SetCustomerData()
        {
            Model.PDV.DsPDV.WMS_SOCIOSRow sr = dsPDV1.WMS_SOCIOS[0];

            SetData(ref sr, "CELULAR", doc.Celular);
            SetData(ref sr, "CLIENTE", 'S');
            SetData(ref sr, "CONYUGUE", doc.Conyugue);
            SetData(ref sr, "CUSTOM0", doc.Custom0);
            SetData(ref sr, "CUSTOM1", doc.Custom1);
            SetData(ref sr, "CUSTOM2", doc.Custom2);
            SetData(ref sr, "CUSTOM3", doc.Custom3);
            SetData(ref sr, "CUSTOM4", doc.Custom4);
            SetData(ref sr, "CUSTOM5", doc.Custom5);
            SetData(ref sr, "CUSTOM6", doc.Custom6);
            SetData(ref sr, "CUSTOM7", doc.Custom7);
            SetData(ref sr, "CUSTOM8", doc.Custom8);
            SetData(ref sr, "CUSTOM9", doc.Custom9);
            SetData(ref sr, "DIRECCION_OFICINA", doc.DireccionOficina);
            SetData(ref sr, "DIRECCION1", doc.Direccion);
            SetData(ref sr, "EMAIL", doc.CorreoElectronico);
            SetData(ref sr, "ESTADO_CIVIL", doc.EstadoCivil);
            SetData(ref sr, "FECHA_ANIVERSARIO", doc.FechaAniversario);
            SetData(ref sr, "FECHA_NACIMIENTO", doc.FechaNacimiento);
            SetData(ref sr, "HIJOS", doc.NumeroHijos);
            SetData(ref sr, "NIT", doc.Nit);
            SetData(ref sr, "NOMBRE", doc.Cliente);
            SetData(ref sr, "NOMBRE_COMERCIAL", doc.RazonSocial);
            SetData(ref sr, "OBSERVACIONES", doc.ObservacionesCliente);
            SetData(ref sr, "OCUPACION", doc.Ocupacion);
            SetData(ref sr, "REGION1", doc.Region);
            SetData(ref sr, "RFC", doc.RegistroFiscal);
            SetData(ref sr, "SEXO", doc.Sexo);
            SetData(ref sr, "SOCIO", doc.Socio);
            SetData(ref sr, "SOCIO_ALTERNO", doc.Codigo);
            SetData(ref sr, "TARJETA", doc.Tarjeta);
            SetData(ref sr, "TARJETA1", doc.Tarjeta1);
            SetData(ref sr, "TARJETA2", doc.Tarjeta2);
            SetData(ref sr, "TELEFONO_OFICINA", doc.TelefonoOficina);
            SetData(ref sr, "TELEFONOS", doc.Telefono);
            SetData(ref sr, "TIPO_FACTURA", doc.TipoFactura);
            SetData(ref sr, "VENCIMIENTO_TARJETA", doc.VencimientoTarjeta);
            SetData(ref sr, "CLAS1", doc.Clasificacion1);
            SetData(ref sr, "CLAS2", doc.Clasificacion2);
            SetData(ref sr, "CLAS3", doc.Clasificacion3);
            SetData(ref sr, "CLAS4", doc.Clasificacion4);
            SetData(ref sr, "CLAS5", doc.Clasificacion5);
            SetData(ref sr, "ACEPTAR_CHEQUE", doc.AceptarCheque);
            SetData(ref sr, "CODIGO_POSTAL", doc.CodigoPostal);
            SetData(ref sr, "IMPUESTO", doc.Impuesto);
            SetData(ref sr, "VENDEDOR_ASIGNADO", doc.VendedorAsignado);
            SetData(ref sr, "TIPO_PROVEEDOR", doc.TipoProveedor);
            SetData(ref sr, "FORMATO_NOTA_CREDITO", doc.FormatoNotaCredito);
            SetData(ref sr, "ESTADO", doc.Estado);
            SetData(ref sr, "CIUDAD", doc.Ciudad);
            SetData(ref sr, "BLOCK", doc.Block);
            SetData(ref sr, "CALLE", doc.Calle);
            SetData(ref sr, "DISPONIBLE", doc.Disponible);
            SetData(ref sr, "PUNTOS", doc.Puntos);
        }

        private void setDocumentData()
        {
            /****************Cambio Factura Electrónica*******************/
            QueryParams vParametros = new QueryParams();
            vParametros.AddReplaceParam("pSOCIO", doc.Socio.ToString());

            string vIdentificacion = String.Empty;
            string vLimiteC = Convert.ToString(GUI.CApp.bll.GetSingleValue("WMS_F_LIMITE_CREDITO", vParametros, "PDV"));
            bool vSocioAsoc = false;

            // Verifica si el socio, es un cliente de asociación, es decir, con límite de crédito
            if (!String.IsNullOrEmpty(vLimiteC) && Convert.ToInt64(vLimiteC) > 0)
            {
                vSocioAsoc = true;
            }
            /****************Cambio Factura Electrónica*******************/


            #region Validación Identificación

            if (!String.IsNullOrEmpty(vLimiteC))
            {
                // Si vSocioAsoc es true, es un socio de Asociación y debe crearse el cliente para hacienda
                if (vSocioAsoc)
                {
                    vParametros = new QueryParams();
                    vParametros.AddReplaceParam("pSOCIO", doc.Socio.ToString());
                    vParametros.AddReplaceParam("pIDENTIFICACION", DBNull.Value.ToString());

                    vIdentificacion = Convert.ToString(GUI.CApp.bll.GetSingleValue("FE_F_IDENTIFICACION_INST", vParametros, "PDV"));
                    //
                    // Si vIdentificación es igual a doc.Socio, significa que el socio no está registrado en la tabla de clientes para Hacienda
                    if (vIdentificacion == doc.Socio.ToString())
                    {
                        CApp.ShowMessage("Por favor cree el cliente para Hacienda", "Cliente - Factura Electrónica", true);
                    //
                    CrearCliente:
                        using (FacturaElect.FrmClienteFE vForm = new FacturaElect.FrmClienteFE())
                        {
                            vForm.mIdentificacion = nitButtonEdit.Text;
                            vForm.ShowDialog();

                            if (!vForm.mCon_Datos)
                            {
                                this.DsPedido.WMS_DOCUMENTOS[0].DIRECCION2 = null;
                                //
                                if (CApp.ShowMessage("Por favor cree/seleccione el cliente o de clic en el botón No", "Cliente - Factura Electrónica", true, true) ==
                                    System.Windows.Forms.DialogResult.OK)
                                {
                                    goto CrearCliente;
                                }
                                else
                                {
                                    btnCF_Click(null, null);
                                    return;
                                }
                            }
                            else
                            {
                                #region else

                                this.DsPedido.WMS_DOCUMENTOS[0].DIRECCION2 = vForm.mIdentificacion;
                                //
                                vParametros = new QueryParams();
                                vParametros.AddReplaceParam("pSOCIO", "NULL");
                                vParametros.AddReplaceParam("pIDENTIFICACION", vForm.mIdentificacion);
                                //
                                vIdentificacion = Convert.ToString(GUI.CApp.bll.GetSingleValue("FE_F_IDENTIFICACION_INST", vParametros, "PDV"));
                                //
                                if (doc.Socio.ToString() != vIdentificacion)
                                {
                                    if (CApp.ShowMessage("El código del cliente de hacienda, no coincide con el cliente del pedido, por favor seleccione el cliente correcto o de clic en el botón No",
                                        "Cliente - Factura Electrónica", true, true) ==
                                    System.Windows.Forms.DialogResult.OK)
                                    {
                                        goto CrearCliente;
                                    }
                                    else
                                    {
                                        btnCF_Click(null, null);
                                        return;
                                    }
                                }

                                #endregion
                            }// else
                        }// using
                    }// if
                }// if
            }// else

            #endregion
        }

        #endregion

        #region Teclas de Funcion

        private void frmAsignarClienteFEAsociaciones_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.F2:
                    btnBuscar_Click(null, null);
                    break;
                case Keys.F3:
                    btnNuevo_Click(null, null);
                    break;
                case Keys.F9:
                    simpleButton1_Click(null, null);
                    break;
                case Keys.F10:
                    btnSocioFactura_Click(null, null);
                    break;
                case Keys.F11:
                    btnCF_Click(null, null);
                    break;
                case Keys.F12:
                    btnAceptar.PerformClick();
                    break;
                case Keys.Escape:
                    btnCancelar_Click(null, null);
                    break;
            }
        }

        //private DevExpress.XtraVerticalGrid.Rows.BaseRow getLastEditorRowValue()
        //{
        //    //DevExpress.XtraVerticalGrid.Rows.BaseRow result = vGridControl1.GetLastVisible();
        //    //if (result.GetType() != typeof(DevExpress.XtraVerticalGrid.Rows.CategoryRow))
        //    //    return result;
        //    //else
        //    //{
        //    //    while (result.GetType() != typeof(DevExpress.XtraVerticalGrid.Rows.EditorRow))
        //    //    {
        //    //        result = vGridControl1.GetPrevVisible(result);
        //    //    }
        //    //    return result;
        //    //}
        //}

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

        #endregion

        private void frmAsignarClienteFEAsociaciones_Load(object sender, EventArgs e)
        {
            if (vendedorLookUpEdit.EditValue != null)
            {
                oldVendor = vendedorLookUpEdit.EditValue.ToString();
            }

            oldNit = Utils.Helpers.ObjToStr(nitButtonEdit.EditValue);
            /*/ Limpia Casillas al Cargar /*/
            LimpiaCasillas();


            /*/ Emanuel Carvajal Marin - Bloquea Campos al Iniciar -(NIT) /*/
            enableAllEditors(true);
            /*/FIN/*/

            this.nitButtonEdit.Focus();
        }

        private void GetCurrentCustomer(Model.PDV.DsPDV.WMS_DOCUMENTOSRow pedido)
        {
            Utils.QueryParams qp = new Utils.QueryParams();
            qp.AddReplaceParam("SOCIO", pedido.SOCIO.ToString());
            dsPDV1.WMS_SOCIOS.Clear();
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.WMS_SOCIOS.TableName, qp, "FillBySocio"), dsPDV1);
        }

        public Model.PDV.DsPDV.WMS_SOCIOSRow GetCustomer(string NIT)
        {
            Utils.QueryParams qp = new Utils.QueryParams();

            if (NIT == oldNit && dsPDV1.WMS_SOCIOS.Count > 0 && (NIT != string.Empty || dsPDV1.WMS_SOCIOS[0].NOMBRE != String.Empty))
                return dsPDV1.WMS_SOCIOS[0];

            dsPDV1.WMS_SOCIOS.Clear();

            // Si no ingresaron codigo devuelve el consumidor final
            if ((NIT == null) || (NIT == ""))
            {
                Model.PDV.DsPDV.WMS_SOCIOSRow row;
                row = dsPDV1.WMS_SOCIOS.NewWMS_SOCIOSRow();
                row.SOCIO = Convert.ToDecimal(GUI.CApp.GetSequence("WMS_S_SOCIO"));
                row.NIT = NIT;
                row.CLIENTE = "S";
                dsPDV1.WMS_SOCIOS.AddWMS_SOCIOSRow(row);
            }
            else
            {
                qp.AddReplaceParam("NIT", NIT);

                // Busca el NIT ingresado
                dsPDV1.WMS_SOCIOS.Clear();
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.WMS_SOCIOS.TableName, qp, "CustomerByNIT"), dsPDV1);
                if (dsPDV1.WMS_SOCIOS.Rows.Count == 0)
                {
                    Model.PDV.DsPDV.WMS_SOCIOSRow row = dsPDV1.WMS_SOCIOS.NewWMS_SOCIOSRow();
                    row.SOCIO = Convert.ToDecimal(GUI.CApp.GetSequence("WMS_S_SOCIO"));
                    row.NIT = NIT;
                    row.CLIENTE = "S";
                    dsPDV1.WMS_SOCIOS.AddWMS_SOCIOSRow(row);
                }
            }
            oldNit = NIT;
            //
            //enableAllEditors(false);

            return dsPDV1.WMS_SOCIOS[0];
        }
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        public bool ExisteCliente(string NIT)
        {
            Utils.QueryParams qp = new Utils.QueryParams();
            dsPDV1.WMS_SOCIOS.Clear();
            qp.AddReplaceParam("NIT", NIT);

            // Busca el NIT ingresado
            //dsPDV1.WMS_SOCIOS.Clear();
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.WMS_SOCIOS.TableName, qp, "CustomerByNIT"), dsPDV1);
            if (dsPDV1.WMS_SOCIOS.Rows.Count == 0)
            {
                return false;
            }
            return true;
        }

        public void CrearCliente(string NIT)
        {
            Utils.QueryParams qp = new Utils.QueryParams();
            dsPDV1.WMS_SOCIOS.Clear();
            qp.AddReplaceParam("NIT", NIT);

            // Busca el NIT ingresado
            dsPDV1.WMS_SOCIOS.Clear();
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.WMS_SOCIOS.TableName, qp, "CustomerByNIT"), dsPDV1);
            if (dsPDV1.WMS_SOCIOS.Rows.Count == 0)
            {
                //enableAllEditors(true);
                DialogResult result = GUI.CApp.ShowMessage("Cliente no existe. ¿Desea crearlo?", "Datos del Cliente", true, true);
                if (result == DialogResult.OK)
                {
                    if (GUI.CApp.ValidateAccess("NewCustomer", "Clientes"))
                    {
                        enableAllEditors(false);
                        doc = ((cDatosDocumento)cDatosDocumentoBindingSource.Current);
                        GetCustomerData(null, null);
                        //layoutControl1.Focus();
                        //layoutControl1.FocusHelper.FocusFirst();
                    }
                    else
                    {
                        enableAllEditors(true);
                        LimpiaCasillas();
                    }
                }
                else
                {
                    enableAllEditors(true);
                    LimpiaCasillas();
                }
            }
            else
            {
                Model.PDV.DsPDV.WMS_SOCIOSRow row;
                row = dsPDV1.WMS_SOCIOS[0];
                LoadObject(null, row);
            }
        }

        private void enableAllEditors(bool state)
        {


            clienteButtonEdit.Properties.ReadOnly = state;
            beSocioFactura.Properties.ReadOnly = state;
            telefonoTextEdit.Properties.ReadOnly = state;
            telefonoOficinaTextEdit.Properties.ReadOnly = state;
            tarjetaTextEdit.Properties.ReadOnly = state;
            direccionOficinaTextEdit.Properties.ReadOnly = state;
            direccionTextEdit.Properties.ReadOnly = state;
            celularTextEdit.Properties.ReadOnly = state;
            codigoTextEdit.Properties.ReadOnly = state;
            conyugueTextEdit.Properties.ReadOnly = state;
            correoElectronicoTextEdit.Properties.ReadOnly = state;
            descRegionTextEdit.Properties.ReadOnly = state;
            estadoCivilLookUpEdit.Properties.ReadOnly = state;
            fechaAniversarioDateEdit.Properties.ReadOnly = state;
            fechaNacimientoDateEdit.Properties.ReadOnly = state;
            numeroHijosSpinEdit.Properties.ReadOnly = state;
            observacionesClienteMemoEdit.Properties.ReadOnly = state;
            ocupacionLookUpEdit.Properties.ReadOnly = state;
            razonSocialTextEdit.Properties.ReadOnly = state;
            regionButtonEdit.Properties.ReadOnly = state;
            //txtCustom0.Properties.ReadOnly = state;
            txtCustom1.Properties.ReadOnly = state;
            txtCustom2.Properties.ReadOnly = state;
            txtCustom3.Properties.ReadOnly = state;
            txtCustom4.Properties.ReadOnly = state;
            txtCustom5.Properties.ReadOnly = state;
            txtCustom6.Properties.ReadOnly = state;
            txtCustom7.Properties.ReadOnly = state;
            txtCustom8.Properties.ReadOnly = state;
            txtCustom9.Properties.ReadOnly = state;
            lueClas1.Properties.ReadOnly = state;
            lueClas2.Properties.ReadOnly = state;
            lueClas3.Properties.ReadOnly = state;
            lueClas4.Properties.ReadOnly = state;
            lueClas5.Properties.ReadOnly = state;
            txtRegistroFiscal.Properties.ReadOnly = state;
            sexoLookUpEdit.Properties.ReadOnly = state;
            txtTarjeta1.Properties.ReadOnly = state;
            txtTarjeta2.Properties.ReadOnly = state;
            datVencimiento.Properties.ReadOnly = state;
            lueTipoFactura.Properties.ReadOnly = state;
            vendedorAsignadoLookUpEdit.Properties.ReadOnly = state;
            codigoPostalTextEdit.Properties.ReadOnly = state;
            impuestoSpinEdit.Properties.ReadOnly = state;
            tipoProveedorLookUpEdit.Properties.ReadOnly = state;
            formatoNotaCreditoLookUpEdit.Properties.ReadOnly = state;
            lueEstado.Properties.ReadOnly = state;
            txtCiudad.Properties.ReadOnly = state;
            txtBlock.Properties.ReadOnly = state;
            txtCalle.Properties.ReadOnly = state;
            txtPuntos.Properties.ReadOnly = state;
            //txtLimiteCredito.ReadOnly = state;
            //txtDisponible.ReadOnly = state;

            if (!state)
                codigoTextEdit.Properties.ReadOnly = !GUI.CApp.GetAccess("TDA_CustomerCode");
        }

        private void GetCustomerData(object sender, KeyEventArgs e)
        {
            Model.PDV.DsPDV.WMS_SOCIOSRow row;
            if (sender == null)
                row = GetCustomer(nitButtonEdit.Text);
            else
                row = GetCustomer(((DevExpress.XtraEditors.ButtonEdit)sender).Text);

            LoadObject(null, row);

            if (e != null && (e.KeyCode == Keys.Enter || (e.KeyCode == Keys.Tab && e.Modifiers == Keys.None)))
                clienteButtonEdit.Focus();
        }

        private void repNIT_KeyDown(object sender, KeyEventArgs e)
        {
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (dsPDV1.WMS_SOCIOS.Count > 0)
            {
                if (saveData())
                    DialogResult = DialogResult.OK;
            }
            else
                GUI.CApp.ShowMessage("Ingrese un cliente", "Datos del Documento", true);
        }

        private bool saveData()
        {

            Control activeCtrl = ActiveControl;
            while (activeCtrl is ContainerControl)
                activeCtrl = ((ContainerControl)activeCtrl).ActiveControl;
            if (activeCtrl is DevExpress.XtraEditors.TextBoxMaskBox)
                activeCtrl = activeCtrl.Parent;
            if (activeCtrl is DevExpress.XtraEditors.BaseEdit)
                ((DevExpress.XtraEditors.BaseEdit)activeCtrl).DoValidate();

            if (Utils.Helpers.ObjToStr(doc.Cliente) == String.Empty)
            {
                GUI.CApp.ShowMessage("Ingrese el nombre del cliente", "Datos del Documento", true);
                clienteButtonEdit.Focus();
                return false;
            }

            if (Utils.Helpers.ObjToStr(GUI.CApp.GetParam("LPP")) == "1")
            {
                if (Utils.Helpers.ObjToStr(doc.Vendedor) == String.Empty)
                {
                    GUI.CApp.ShowMessage("Ingrese el vendedor", "Datos del Documento", true);
                    clienteButtonEdit.Focus();
                    return false;
                }
            }

            layoutControl1.FocusHelper.FocusFirst();

            SetCustomerData();
            LLNet.Model.PDV.DsPDV.WMS_SOCIOSRow rCust = dsPDV1.WMS_SOCIOS[0];

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

            if (this.DsPedido.TDA_DETALLE_PEDIDO.Count > 0)
            {
                qp.AddReplaceParam("SOCIO", rCust.SOCIO.ToString());
                qp.AddReplaceParam("USUARIO", doc.Vendedor);
                qp.AddReplaceParam("SKU", this.DsPedido.TDA_DETALLE_PEDIDO[0].SKU.ToString());
                qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.Order.ToString());

                if (Utils.Helpers.ObjToStr(GUI.CApp.bll.GetSingleValue("ValidarCambioCanal", qp, "PDV")) == "0")
                {
                    GUI.CApp.ShowMessage("El cliente seleccionado no pertenece al mismo canal del cliente anterior", "Datos del Documento", true);
                    return false;
                }

            }

            qp.Clear();

            if (rCust.RowState == DataRowState.Added || rCust.RowState == DataRowState.Modified)
            {
                DataRowState rowstate = rCust.RowState;

                if (Utils.Helpers.ObjToStr(GUI.CApp.GetParam("ACCN")) == "X")
                {
                    doc.AceptarCheque = "S";
                    rCust.ACEPTAR_CHEQUE = "S";
                }

                if (rowstate == DataRowState.Added)
                    rCust.CREADO_POR = GUI.CApp.usuario;
                else
                    rCust.MODIFICADO_POR = GUI.CApp.usuario;

                qp.AddReplaceParam("SOCIO", rCust.SOCIO.ToString());

                decimal?[] clas = new decimal?[] { 
                    doc.Clasificacion1, 
                    doc.Clasificacion2,
                    doc.Clasificacion3,
                    doc.Clasificacion4,
                    doc.Clasificacion5
                };

                try
                {
                    GUI.CApp.bll.updateDataSet(dsPDV1, dsPDV1.WMS_SOCIOS.TableName);
                }
                catch (Exception ex)
                {
                    if (ex.Message.IndexOf("SOCI_UK02") >= 0)
                        GUI.CApp.ShowMessage("La tarjeta ya ha sido ingresada a un registro de cliente", "Datos del Documento", true);
                    else
                        GUI.CApp.ShowMessage(ex.Message, "Datos del Documento", true);
                }

                if (rowstate == DataRowState.Added)
                {
                    Utils.QueryParams qpCust = new LLNet.Utils.QueryParams();
                    qpCust.AddReplaceParam("SOCIO", rCust.SOCIO.ToString());
                    GUI.CApp.bll.ExecuteSql("ClasificarClientes", qpCust, "PDV");
                }

                dsPDV1.WMS_SOCIOS.Clear();
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.WMS_SOCIOS.TableName, qp, "FillBySocio"), dsPDV1);

                Utils.QueryParams stmt = new LLNet.Utils.QueryParams();
                string statement = null;
                try
                {
                    for (int i = 0; i < 5; i++)
                    {
                        if (clas[i] != null)
                        {
                            if (dsPDV1.WMS_SOCIOS[0]["CLAS" + (i + 1).ToString()] != DBNull.Value && clas[i] != Convert.ToDecimal(dsPDV1.WMS_SOCIOS[0]["CLAS" + (i + 1).ToString()]))
                            {
                                statement = string.Format("Delete from wms_socios_x_clasificacion where socio = {0} and catalogo = to_number(cg_f_parameter_value('CSS{1}'))", dsPDV1.WMS_SOCIOS[0].SOCIO.ToString(), (i + 1).ToString());
                                stmt.Clear();
                                stmt.AddReplaceParam("STATEMENT", statement);
                                GUI.CApp.bll.ExecuteSql("RunGenericStatement", stmt, "PDV");

                                statement = string.Format("insert into wms_socios_x_clasificacion (socio, clasificacion) values ({0},{1}) ", dsPDV1.WMS_SOCIOS[0].SOCIO.ToString(), clas[i].ToString());
                                stmt.Clear();
                                stmt.AddReplaceParam("STATEMENT", statement);
                                GUI.CApp.bll.ExecuteSql("RunGenericStatement", stmt, "PDV");
                            }
                            else if (dsPDV1.WMS_SOCIOS[0]["CLAS" + (i + 1).ToString()] == DBNull.Value)
                            {
                                statement = string.Format("insert into wms_socios_x_clasificacion (socio, clasificacion) values ({0},{1}) ", dsPDV1.WMS_SOCIOS[0].SOCIO.ToString(), clas[i].ToString());
                                stmt.Clear();
                                stmt.AddReplaceParam("STATEMENT", statement);
                                GUI.CApp.bll.ExecuteSql("RunGenericStatement", stmt, "PDV");
                            }
                        }
                        else
                        {
                            if (dsPDV1.WMS_SOCIOS[0]["CLAS" + (i + 1).ToString()] != DBNull.Value)
                            {
                                statement = string.Format("Delete from wms_socios_x_clasificacion where socio = {0} and catalogo = to_number(cg_f_parameter_value('CSS{1}'))", dsPDV1.WMS_SOCIOS[0].SOCIO.ToString(), (i + 1).ToString());
                                stmt.Clear();
                                stmt.AddReplaceParam("STATEMENT", statement);
                                GUI.CApp.bll.ExecuteSql("RunGenericStatement", stmt, "PDV");
                            }
                        }
                    }
                }
                catch { }
                dsPDV1.AcceptChanges();
            }

            setDocumentData();
            GUI.CApp.bll.updateDataSet(dsPDV1, dsPDV1.WMS_DOCUMENTOS.TableName);
            dsPDV1.AcceptChanges();

            qp.Clear();
            qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.Order.ToString());
            dsPDV1.TDA_DATOS_DOCUMENTO.Clear();
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_DATOS_DOCUMENTO.TableName, qp), dsPDV1);
            dsPDV1.AcceptChanges();
            return true;
        }

        public void btnCF_Click(object sender, EventArgs e)
        {
            if (Utils.Helpers.ObjToStr(GUI.CApp.GetParam("LPP")) == "1")
            {
                if (Utils.Helpers.ObjToStr(doc.Vendedor) == String.Empty)
                {
                    GUI.CApp.ShowMessage("Ingrese el vendedor", "Datos del Documento", true);
                    clienteButtonEdit.Focus();
                    return;
                }
            }

            Utils.QueryParams qp = new LLNet.Utils.QueryParams();
            qp.AddReplaceParam("SOCIO", GUI.CApp.GetParam("NSCF").ToString());
            dsPDV1.WMS_SOCIOS.Clear();
            Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.WMS_SOCIOS.TableName, qp, "FillBySocio"), dsPDV1);
            LoadObject(null, dsPDV1.WMS_SOCIOS[0]);
            oldNit = nitButtonEdit.Text;

            //borrar
            if (dsPDV1.WMS_DOCUMENTOS.Count == 0)
                Program.FrmMainPos.pos.ctlAddSkus1.CreateOrder(dsPDV1.WMS_SOCIOS[0].SOCIO, doc.Vendedor);

            if (dsPDV1.WMS_DOCUMENTOS.Count > 0)
            {
                setDocumentData();
                GUI.CApp.bll.updateDataSet(dsPDV1, dsPDV1.WMS_DOCUMENTOS.TableName);
                dsPDV1.AcceptChanges();

                qp.Clear();
                qp.AddReplaceParam("DOCUMENTO", Program.FrmMainPos.Order.ToString());
                dsPDV1.TDA_DATOS_DOCUMENTO.Clear();
                Utils.Helpers.Merge(GUI.CApp.bll.getTypedDataSet(dsPDV1.GetType(), dsPDV1.TDA_DATOS_DOCUMENTO.TableName, qp), dsPDV1);
                dsPDV1.AcceptChanges();
                DialogResult = DialogResult.OK;
            }
        }

        private void repRegion_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            Finders.frmRegionGeografica rg = new Finders.frmRegionGeografica();
            rg.ShowDialog(this);
            if (rg.DialogResult == DialogResult.OK)
            {
                doc.Region = rg.Clasificacion;
                doc.DescRegion = rg.DescRegion;
                cDatosDocumentoBindingSource.ResetItem(0);
                cDatosDocumentoBindingSource.ResetBindings(false);
            }
        }

        private void repRegionEntProd_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            Finders.frmRegionGeografica rg = new Finders.frmRegionGeografica();
            rg.ShowDialog(this);
            if (rg.DialogResult == DialogResult.OK)
            {
                doc.RegionDirEntregaProd = rg.Clasificacion;
                doc.DescRegionDirEntregaProd = rg.DescRegion;
            }
        }

        private void repRegionCobro_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            Finders.frmRegionGeografica rg = new Finders.frmRegionGeografica();
            rg.ShowDialog(this);
            if (rg.DialogResult == DialogResult.OK)
            {
                doc.RegionDirCobro = rg.Clasificacion;
                doc.DescRegionDirCobro = rg.DescRegion;
            }
        }

        private void repRegionEntFac_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            Finders.frmRegionGeografica rg = new Finders.frmRegionGeografica();
            rg.ShowDialog(this);
            if (rg.DialogResult == DialogResult.OK)
            {
                doc.RegionDirEntregaFactura = rg.Clasificacion;
                doc.DescRegionDirEntregaFactura = rg.DescRegion;
            }
        }

        private void nitButtonEdit_KeyDown(object sender, KeyEventArgs e)
        {

            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Tab)

                if ((nitButtonEdit.Text == null) || (nitButtonEdit.Text == ""))
                    repNIT_ButtonClick(null, null);
                else
                    if (verificaCliente)
                    {
                        if (nitButtonEdit.Text != "")
                        {

                            if (ExisteCliente(nitButtonEdit.Text))
                            {
                                GetCustomerData(sender, null);

                                NIT_VALIDATION();

                                if (validar_cf != 0)
                                {
                                    /*/ CF - Solo lectura /*/
                                    GUI.CApp.ShowMessage("Consumidor Final - Solo Lectura", "Informacion CF", true);
                                    enableAllEditors(true);
                                    /*/ FIN /*/
                                }
                                else
                                {
                                    /*/ Si no tiene acceso u permiso para editar informaciòn de los socios el sistema bloquea los campos /*/
                                    enableAllEditors(false);
                                    /*/ FIN - Emanuel Carvajal Marìn /*/

                                }

                                if (!GUI.CApp.GetAccess("TDA_AlterCustomer"))
                                {

                                    /*/ Si no tiene acceso u permiso para editar informaciòn de los socios el sistema bloquea los campos /*/
                                    enableAllEditors(true);
                                    /*/ FIN - Emanuel Carvajal Marìn /*/

                                }


                            }
                            else
                            {

                                DialogResult result = GUI.CApp.ShowMessage("Cliente no existe. ¿Desea crearlo?", "Datos del Cliente", true, true);
                                if (result == DialogResult.OK)
                                {
                                    /*/ Emanuerl Carvajal Marìn - Habilita los Campos para adicionar un nuevo socio/*/
                                    enableAllEditors(false);
                                    /*/ FIN /*/

                                    if (GUI.CApp.ValidateAccess("NewCustomer", "Clientes"))
                                    {
                                        GetCustomerData(sender, null);
                                        verificaCliente = false;
                                        clienteButtonEdit.Focus();
                                    }
                                }
                                else
                                {
                                    /*/ Emanuel Carvajal Marin - Desabilita los Campos de Ediciòn/*/
                                    enableAllEditors(true);
                                    /*/ FIN /*/
                                    LimpiaCasillas();
                                }
                            }
                        }
                        else
                        {
                            LimpiaCasillas();



                        }
                    }
            verificaCliente = true;
        }

        //private void nitButtonEdit_Leave(object sender, EventArgs e)
        //{
        //if (verificaCliente){
        //    if (nitButtonEdit.Text != "")
        //    {

        //        if (ExisteCliente(nitButtonEdit.Text))
        //        {                     
        //            GetCustomerData(sender, null);

        //            NIT_VALIDATION();

        //            if (validar_cf != 0) 
        //            {
        //                /*/ Si no tiene acceso u permiso para editar informaciòn de los socios el sistema bloquea los campos /*/
        //                enableAllEditors(true);
        //                /*/ FIN - Emanuel Carvajal Marìn /*/ 
        //            }
        //            else
        //            {
        //                /*/ CF - Solo lectura /*/
        //                GUI.CApp.ShowMessage("Consumidor Final - Solo Lectura", "Informacion CF", true);
        //                enableAllEditors(true);
        //                /*/ FIN /*/
        //            }

        //            if (!GUI.CApp.GetAccess("TDA_AlterCustomer")) 
        //            {

        //                 /*/ Si no tiene acceso u permiso para editar informaciòn de los socios el sistema bloquea los campos /*/
        //                    enableAllEditors(true);
        //                 /*/ FIN - Emanuel Carvajal Marìn /*/ 

        //            }


        //        }
        //        else
        //        {

        //            DialogResult result = GUI.CApp.ShowMessage("Cliente no existe. ¿Desea crearlo?", "Datos del Cliente", true, true);
        //            if (result == DialogResult.OK)
        //            {
        //                /*/ Emanuerl Carvajal Marìn - Habilita los Campos para adicionar un nuevo socio/*/
        //                enableAllEditors(false);
        //                /*/ FIN /*/

        //                if (GUI.CApp.ValidateAccess("NewCustomer", "Clientes"))
        //                {
        //                    GetCustomerData(sender, null);
        //                    verificaCliente = false;
        //                    clienteButtonEdit.Focus();
        //                }
        //            }
        //            else
        //            {   
        //                /*/ Emanuel Carvajal Marin - Desabilita los Campos de Ediciòn/*/
        //                enableAllEditors(true);
        //                /*/ FIN /*/
        //                LimpiaCasillas();
        //            }
        //        }
        //    }
        //    else {
        //        LimpiaCasillas();



        //    }
        //}
        //verificaCliente = true;

        //}

        private void frmAsignarClienteFEAsociaciones_FormClosed(object sender, FormClosedEventArgs e)
        {
            layoutControl1.SaveLayoutToXml(GUI.CApp.ExeDir + "DatosDocumento.xml");
        }

        private void clienteButtonEdit_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                btnAceptar_Click(null, null);
        }

        private void regionButtonEdit_EditValueChanged(object sender, EventArgs e)
        {
            if (((DevExpress.XtraEditors.ButtonEdit)sender).EditValue != null && ((DevExpress.XtraEditors.ButtonEdit)sender).EditValue != DBNull.Value)
            {
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                qp.AddReplaceParam("REGION", Utils.Helpers.Nvl(Utils.Helpers.NullIf(((DevExpress.XtraEditors.ButtonEdit)sender).EditValue.ToString().Trim(), string.Empty), 0).ToString());
                doc.DescRegion = GUI.CApp.bll.GetSingleValue("ObtenerRegion", qp, "PDV").ToString();
            }
            else
                doc.DescRegion = null;
        }

        private void btnSocioFactura_Click(object sender, EventArgs e)
        {
            if (dsPDV1.WMS_SOCIOS.Count > 0)
                saveData();
        }

        private void layoutControl1_Enter(object sender, EventArgs e)
        {
        }

        private void frmAsignarClienteFEAsociaciones_Shown(object sender, EventArgs e)
        {
            layoutControl1.FocusHelper.FocusFirst();
            //SendKeys.Send("{TAB}");
            this.nitButtonEdit.Focus();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            if (((DevExpress.XtraLayout.BaseLayoutItem)layoutControl1.FocusHelper.SelectedComponent).Name == "lciClienteFactura")
                beSocioFactura_Properties_ButtonClick(null, null);
            else
                repNIT_ButtonClick(null, null);
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            if (GUI.CApp.ValidateAccess("NewCustomer", "Clientes"))
            {
                /*/ Activa los Campos para adicion - condicionado a permisos de usuario/*/
                enableAllEditors(false);

                string selectedVendor = doc.Vendedor;
                cDatosDocumentoBindingSource.Clear();
                cDatosDocumentoBindingSource.AddNew();
                doc = ((cDatosDocumento)cDatosDocumentoBindingSource.Current);
                doc.Vendedor = selectedVendor;
                nitButtonEdit.EditValue = "";
                oldNit = null;
                GetCustomerData(null, null);
                layoutControl1.Focus();
                layoutControl1.FocusHelper.FocusFirst();

                /*/ FIN - Validacion - Emanuel Carvajal Marìn /*/
            }
        }

        private void beSocioFactura_Properties_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            if (e != null)
            {
                switch (e.Button.Index)
                {
                    case 0:
                        BuscarSocioFactura();
                        break;
                    case 1:
                        beSocioFactura.EditValue = null;
                        doc.SocioFactura = null;
                        break;
                }
            }
            else
                BuscarSocioFactura();
        }

        private void BuscarSocioFactura()
        {
            Tienda.MainForms.Finders.frmFindCustomer fc = new LLNet.Tienda.MainForms.Finders.frmFindCustomer();
            fc.Init(null);
            fc.ShowDialog(this);

            if (fc.DialogResult == DialogResult.OK)
            {
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                if (fc.Socio != null)
                {
                    beSocioFactura.EditValue = fc.Nombre;
                    doc.SocioFactura = Convert.ToDecimal(fc.Socio);
                }
            }
        }

        private void nitButtonEdit_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            //            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Tab)
            //                GetCustomerData(null, null);
        }

        private void txtTarjeta1_Validating(object sender, CancelEventArgs e)
        {
            if (Utils.Helpers.ObjToStr(GUI.CApp.GetParam("DVTP")) == "X")
            {
                Utils.QueryParams qp = new LLNet.Utils.QueryParams();
                string valorActual = Utils.Helpers.ObjToStr(((DevExpress.XtraEditors.TextEdit)sender).EditValue);
                if (valorActual.Trim() != string.Empty)
                {
                    qp.AddReplaceParam("STATEMENT", string.Format("SELECT CG_F_DIGITO_VERIFICADOR('{0}') FROM DUAL", valorActual));
                    try
                    {
                        int valid = Convert.ToInt32(GUI.CApp.bll.GetSingleValue("RunGenericStatement", qp, "PDV"));
                        if (valid == 0)
                        {
                            e.Cancel = true;
                            GUI.CApp.ShowMessage("El número de tarjeta no es válido", "Datos del Documento", true);
                        }
                    }
                    catch
                    {
                        e.Cancel = true;
                        GUI.CApp.ShowMessage("El número de tarjeta no es válido", "Datos del Documento", true);
                    }
                }
            }
        }

        private void simpleButton1_Click(object sender, EventArgs e)
        {
            if (doc.Cliente != null && doc.Cliente != string.Empty)
            {
                object[] obj = new object[] { doc.Socio };
                frmHistoricoFactSocio hfs = (frmHistoricoFactSocio)GUI.CApp.CreateForm(typeof(frmHistoricoFactSocio), "", true, obj, true);
            }
            else
                GUI.CApp.ShowMessage("No ha seleccionado ningún cliente", "Datos del Documento", true);
        }

        private void vendedorLookUpEdit_EditValueChanged(object sender, EventArgs e)
        {
            doc.Vendedor = Utils.Helpers.ObjToStr(((DevExpress.XtraEditors.LookUpEdit)sender).EditValue);
        }

        private void nitButtonEdit_EditValueChanged(object sender, EventArgs e)
        {

        }

        private void lbCaption_Click(object sender, EventArgs e)
        {

        }

        public void NIT_VALIDATION()
        {
            /*/ Emanuel Carvajal Marin /*/
            QueryParams qnit = new QueryParams();
            qnit.AddReplaceParam("NIT", nitButtonEdit.Text);
            CApp.bll.ExecuteSql("Restriccion_edit_cf", qnit, "PDV");
            validar_cf = Convert.ToInt16(CApp.bll.GetSingleValue("Restriccion_edit_cf", qnit, "PDV"));
            /*/ FIN METHOD /*/
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            DsPedido.WMS_SOCIOS[0].SOCIO = 0;
            this.Close();
        }
    }

}