using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using LLNet.Utils;
using LLNet.GUI;
using System.Text.RegularExpressions;
using System.Net;
using System.IO;

namespace LLNet.Tienda.MainForms.Forms.FacturaElect
{
    public partial class FrmClienteFE : Form
    {
        /// <summary>
        /// Indica si se consultaron o guardaron los datos del receptor
        /// </summary>
        private bool vCon_Datos = false;
        private string vIdentificacion = String.Empty;
        private string vIdentificacionCliente = String.Empty;
        private string vNombre = String.Empty;
        //
        private string vUrlPts, vCodemprPts, vCodsucPts, vid;
        //
        Regex vExpresion_Ced = new Regex(@"^\d-\d{4,4}-\d{4,4}$");//Expresión regular para el número de cédula
        Regex vExpresion_Correo = new Regex(@"^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$");//Expresión regular para el correo

        #region Constructor
        public FrmClienteFE()
        {
            InitializeComponent();
            //
            mtbIdentificacion.LostFocus += mtbIdentificacion_LostFocus;
        }

        public FrmClienteFE(string pIdentificacionCliente)
        {
            InitializeComponent();
            //
            mtbIdentificacion.LostFocus += mtbIdentificacion_LostFocus;
            this.vIdentificacionCliente = pIdentificacionCliente;
        }
        #endregion

        #region Propiedades

        #region mCon_Datos
        /// <summary>
        /// Indica si se consultaron o guardaron los datos del receptor
        /// </summary>
        public bool mCon_Datos
        {
            get
            {
                return this.vCon_Datos;
            }
        }
        #endregion

        #region mIdentificacion
        /// <summary>
        /// Identificación del cliente
        /// </summary>
        public string mIdentificacion
        {
            get
            {
                return vIdentificacion;
            }
            set
            {
                vIdentificacion = value;
            }
        }
        #endregion

        #region mNombre
        /// <summary>
        /// Nombre del cliente
        /// </summary>
        public string mNombre
        {
            get
            {
                return this.vNombre;
            }
        }
        #endregion

        #region mTipo_Identificacion
        /// <summary>
        /// Tipo de identificacion
        /// </summary>
        public string mTipo_Identificacion
        {
            get
            {
                return cboTiposIdentif.SelectedValue.ToString();
            }
        }
        #endregion

        #endregion

        #region PTS

        #region mActDatos_PTS
        /// <summary>
        /// Consulta los datos del cliente
        /// </summary>
        private void mActDatos_PTS()
        {
            string vTarjeta = String.Empty;
            QueryParams vParametros = new QueryParams();

            vParametros.AddReplaceParam("pCEDULA", mtbIdentificacion.Text);
            vTarjeta = Convert.ToString(GUI.CApp.bll.GetSingleValue("OBTENER_TARJETA", vParametros, "PDV"));

            if (!String.IsNullOrEmpty(vTarjeta))
            {
                mBitacoraTiempo(vTarjeta, "consultar_informacion.php");
                mLlenarParametros();
                string vPData = "url_respuesta=" + vUrlPts + "prueba_respuesta_informacion.php&tipo_respuesta=1&cod_empresa=" + vCodemprPts + "&cod_sucursal=" + vCodsucPts + "&consulta_cedula=0&numero_tarjeta=" + vTarjeta;
                string vInfo = mRequestPOST(vUrlPts + "consultar_informacion.php", vPData);
                mBitacoraTiempoF(vid);
                vInfo = vInfo.Trim();
                if (vInfo.StartsWith("<br>"))
                {
                    vInfo = vInfo.Replace("<br>", "*");
                    vInfo = vInfo.Replace("**", "*");
                    string[] vDatos = vInfo.Split('*');
                    if (vDatos.Length > 1)
                    {
                        DateTime vFechaNac = Convert.ToDateTime(vDatos[4].ToString().Split('=').GetValue(1).ToString());

                        #region Actualización de datos

                        mBitacoraTiempo(vTarjeta, "modificacion_tarjetahabiente.php");
                        //Envia los datos al proveedor
                        vPData = "url_respuesta=" + vUrlPts + "prueba_respuesta.php&tipo_respuesta=1&cod_empresa=" + vCodemprPts + "&cod_sucursal=" + vCodsucPts +
                            "&numero_tarjeta=" + vTarjeta;
                        vPData += "&nombre_th=" + txtNombre.Text + "&apellido1_th=" + txtApellido1.Text + "&apellido2_th=" + txtApellido2.Text + "&cedula_th=" +
                            mtbIdentificacion.Text + "&fecha_th=" + vFechaNac.ToString("yyyy/MM/dd") + "&email_th=" + txtEmail.Text;
                        vPData += "&genero_th=" + vDatos[12].ToString().Split('=').GetValue(1).ToString() + "&tipo_ubicacion=1&id_ubicacion=30105&localidad=" +
                            vDatos[10].ToString().Split('=').GetValue(1).ToString() + "&ciudad=" + vDatos[11].ToString().Split('=').GetValue(1).ToString() +
                            "&distrito=" + vDatos[9].ToString().Split('=').GetValue(1).ToString() + "&comentario_th=";
                        vPData += "&tel_oficina_th=&tel_casa_th=" + vDatos[7].ToString().Split('=').GetValue(1).ToString() + "&tel_movil_th=" + mtbTelefono.Text;

                        vInfo = mRequestPOST(vUrlPts + "modificacion_tarjetahabiente.php", vPData);
                        mBitacoraTiempoF(vid);
                        vInfo = vInfo.Trim();
                        string[] vDatosA = vInfo.Split(' ');

                        if (vDatosA.Length > 2)
                        {
                            if (vDatosA[0].ToString() == "10")
                            {
                                //ACTUALIZA los datos en nuestra Base d Datos
                                vParametros = new LLNet.Utils.QueryParams();
                                vParametros.AddReplaceParam("pTARJETA", vTarjeta);
                                vParametros.AddReplaceParam("pCEDULA", mtbIdentificacion.Text);
                                vParametros.AddReplaceParam("pNOMBRE", txtNombre.Text);
                                vParametros.AddReplaceParam("pAPELLIDO1", txtApellido1.Text);
                                vParametros.AddReplaceParam("pAPELLIDO2", txtApellido2.Text);
                                vParametros.AddReplaceParam("pTELEFONO1", mtbTelefono.Text);
                                vParametros.AddReplaceParam("pTELEFONO2", vDatos[7].ToString().Split('=').GetValue(1).ToString());
                                vParametros.AddReplaceParam("pEMAIL", txtEmail.Text);
                                vParametros.AddReplaceParam("pFECHA_NAC", vFechaNac.ToShortDateString());
                                vParametros.AddReplaceParam("pGENERO", vDatos[12].ToString().Split('=').GetValue(1).ToString());
                                vParametros.AddReplaceParam("pPROVINCIA", vDatos[10].ToString().Split('=').GetValue(1).ToString());
                                vParametros.AddReplaceParam("pCANTON", vDatos[11].ToString().Split('=').GetValue(1).ToString());
                                vParametros.AddReplaceParam("pDISTRITO", vDatos[9].ToString().Split('=').GetValue(1).ToString());
                                vParametros.AddReplaceParam("pPERTENECE_A", "MisPts");
                                vParametros.AddReplaceParam("pCAJERO", GUI.CApp.usuario);
                                // Llama el procedimiento que actualiza los datos del cliente
                                GUI.CApp.bll.ExecuteSql("WMS_AClienteMisPts", vParametros, "PDV");
                            }
                            else
                            {
                                mBitacoraErrorWS("WS=" + vUrlPts + "modificacion_tarjetahabiente.php " + vInfo, vPData);
                            }
                        }
                        else
                        {
                            mBitacoraErrorWS("WS=" + vUrlPts + "modificacion_tarjetahabiente.php " + vInfo, vPData);
                        }

                        #endregion
                    }
                }
            }
        }
        #endregion

        #region mBitacoraErrorWS
        /// <summary>
        /// Almacena el error en el WS
        /// </summary>
        /// <param name="pError"></param>
        /// <param name="pWServ"></param>
        private void mBitacoraErrorWS(string pError, string pWServ)
        {
            if (pWServ.Length > 300)
                pWServ = pWServ.Substring(0, 300);
            Utils.QueryParams vqp = new LLNet.Utils.QueryParams();
            vqp.AddReplaceParam("pError", pError);
            vqp.AddReplaceParam("pWServ", pWServ);
            // Llama el procedimiento que almacena el error del WS en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_BITAC_E_AFIL", vqp, "PDV");
        }
        #endregion

        #region mBitacoraTiempo
        /// <summary>
        /// Almacena cada tiempo inicial de consulta de MisPuntos
        /// </summary>
        /// <param name="pdocumento"></param>
        /// <param name="pws"></param>
        private void mBitacoraTiempo(string pdocumento, string pws)
        {
            vid = "";
            Utils.QueryParams vqp = new LLNet.Utils.QueryParams();
            vid = Convert.ToString(GUI.CApp.bll.GetSingleValue("C_SEC_LOG_BIT_TIEMPO", vqp, "PDV"));

            vqp.AddReplaceParam("pDocumento", pdocumento);
            vqp.AddReplaceParam("pWs", pws);
            vqp.AddReplaceParam("pID_INT", vid);
            // Llama el procedimiento que almacena los datos del intento de recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_BITAC_TIEMP", vqp, "PDV");
        }
        #endregion

        #region mBitacoraTiempoF
        /// <summary>
        /// Actualiza el tiempo final de la consulta de MisPuntos
        /// </summary>
        /// <param name="ID"></param>
        private void mBitacoraTiempoF(string ID)
        {
            Utils.QueryParams vqp = new LLNet.Utils.QueryParams();
            vqp.AddReplaceParam("pID_INT", ID);
            // Llama el procedimiento que almacena el estado de correcto de la recarga en la BD
            GUI.CApp.bll.ExecuteSql("WMS_P_BITAC_TIEMP_C", vqp, "PDV");
        }
        #endregion

        #region mLlenarParametros
        /// <summary>Obtiene los parámetros necesarios de cada tienda </summary>
        private void mLlenarParametros()
        {
            Utils.QueryParams vParametro = new LLNet.Utils.QueryParams();
            //CONSULTA LOS PARÁMETROS DE LA BD
            using (DataSet vdsB = GUI.CApp.bll.getDataSet("PDV", "C_PPTS", vParametro))
            {
                object[] vDatos = new object[3];
                vDatos = vdsB.Tables[0].Rows[0].ItemArray;

                vUrlPts = vDatos[0].ToString();
                vCodemprPts = vDatos[1].ToString();
                vCodsucPts = vDatos[2].ToString();
            }
        }
        #endregion

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

        #endregion

        #region mCantones
        /// <summary>
        /// Obtiene y carga los cantones
        /// </summary>
        private void mCantones()
        {
            cboCanton.DataSource = null;

            QueryParams vParametro = new QueryParams();
            vParametro.AddReplaceParam("pPROVINCIA", cboProvincia.Text);

            using (DataSet vCantones = CApp.bll.getDataSet("PDV", "CANTONES", vParametro))
            {
                // Verifica si tiene datos
                if (vCantones.Tables.Count > 0 && vCantones.Tables[0].Rows.Count > 0)
                {
                    cboCanton.DataSource = vCantones.Tables[0];
                    cboCanton.DisplayMember = "CANTON";
                }
            }
        }
        #endregion

        #region mDatosReceptor
        /// <summary>
        /// Este método busca los datos del receptor, si están, y los muestra
        /// </summary>
        private void mDatosReceptor()
        {
            QueryParams vParametro = new QueryParams();
            vParametro.AddReplaceParam("pIDENTIFICACION", mtbIdentificacion.Text.Replace("-", ""));

            using (DataSet vDatos = CApp.bll.getDataSet("PDV", "FE_V_RECEPTORES", vParametro))
            {
                // Verifica si tiene datos
                if (vDatos.Tables.Count > 0 && vDatos.Tables[0].Rows.Count > 0)
                {
                    if (!String.IsNullOrEmpty(vDatos.Tables[0].Rows[0].ItemArray[8].ToString()))
                    {
                        cboTiposIdentif.SelectedValue = vDatos.Tables[0].Rows[0].ItemArray[8].ToString();
                    }

                    mtbIdentificacion.Text = vDatos.Tables[0].Rows[0].ItemArray[0].ToString();
                    txtNombre.Text = vDatos.Tables[0].Rows[0].ItemArray[1].ToString();
                    txtApellido1.Text = vDatos.Tables[0].Rows[0].ItemArray[2].ToString();
                    txtApellido2.Text = vDatos.Tables[0].Rows[0].ItemArray[3].ToString();
                    mtbTelefono.Text = vDatos.Tables[0].Rows[0].ItemArray[4].ToString();
                    txtEmail.Text = vDatos.Tables[0].Rows[0].ItemArray[5].ToString();
                    cboProvincia.Text = vDatos.Tables[0].Rows[0].ItemArray[6].ToString();
                    cboCanton.Text = vDatos.Tables[0].Rows[0].ItemArray[7].ToString();
                    //
                    this.vIdentificacion = mtbIdentificacion.Text.Replace("-", "");
                }
                else
                {
                    //CApp.ShowMessage("¡No existe un cliente con esos datos!", "Cliente - Factura Electrónica", true);
                    //
                    //mtbIdentificacion.Text = String.Empty;
                    txtNombre.Text = String.Empty;
                    txtApellido1.Text = String.Empty;
                    txtApellido2.Text = String.Empty;
                    mtbTelefono.Text = String.Empty;
                    txtEmail.Text = String.Empty;
                    cboProvincia.SelectedIndex = 0;
                    cboCanton.SelectedIndex = 0;
                    //
                    this.vIdentificacion = String.Empty;
                }
            }
        }


        private void mDatosReceptorClienteFacturaAsociacion(string pIdentificacionCliente)
        {
            QueryParams vParametro = new QueryParams();
            vParametro.AddReplaceParam("pIDENTIFICACION", pIdentificacionCliente.Replace("-", ""));

            using (DataSet vDatos = CApp.bll.getDataSet("PDV", "FE_V_RECEPTORES", vParametro))
            {
                // Verifica si tiene datos
                if (vDatos.Tables.Count > 0 && vDatos.Tables[0].Rows.Count > 0)
                {
                    if (!String.IsNullOrEmpty(vDatos.Tables[0].Rows[0].ItemArray[8].ToString()))
                    {
                        cboTiposIdentif.SelectedValue = vDatos.Tables[0].Rows[0].ItemArray[8].ToString();
                    }

                    mtbIdentificacion.Text = vDatos.Tables[0].Rows[0].ItemArray[0].ToString();
                    txtNombre.Text = vDatos.Tables[0].Rows[0].ItemArray[1].ToString();
                    txtApellido1.Text = vDatos.Tables[0].Rows[0].ItemArray[2].ToString();
                    txtApellido2.Text = vDatos.Tables[0].Rows[0].ItemArray[3].ToString();
                    mtbTelefono.Text = vDatos.Tables[0].Rows[0].ItemArray[4].ToString();
                    txtEmail.Text = vDatos.Tables[0].Rows[0].ItemArray[5].ToString();
                    cboProvincia.Text = vDatos.Tables[0].Rows[0].ItemArray[6].ToString();
                    cboCanton.Text = vDatos.Tables[0].Rows[0].ItemArray[7].ToString();
                    //
                    this.vIdentificacion = mtbIdentificacion.Text.Replace("-", "");
                }
                else
                {
                    //CApp.ShowMessage("¡No existe un cliente con esos datos!", "Cliente - Factura Electrónica", true);
                    //
                    //mtbIdentificacion.Text = String.Empty;
                    txtNombre.Text = String.Empty;
                    txtApellido1.Text = String.Empty;
                    txtApellido2.Text = String.Empty;
                    mtbTelefono.Text = String.Empty;
                    txtEmail.Text = String.Empty;
                    cboProvincia.SelectedIndex = 0;
                    cboCanton.SelectedIndex = 0;
                    //
                    this.vIdentificacion = String.Empty;
                }
            }
        }
        #endregion

        #region mProvincias
        /// <summary>
        /// Obtiene y carga las provincias
        /// </summary>
        private void mProvincias()
        {
            cboProvincia.DataSource = null;
            cboProvincia.SelectedIndexChanged -= cboProvincia_SelectedIndexChanged;

            using (DataSet vProvincias = CApp.bll.getDataSet("PDV", "PROVINCIAS"))
            {
                // Verifica si tiene datos
                if (vProvincias.Tables.Count > 0 && vProvincias.Tables[0].Rows.Count > 0)
                {
                    cboProvincia.DataSource = vProvincias.Tables[0];
                    cboProvincia.DisplayMember = "PROVINCIA";
                }
            }

            cboProvincia.SelectedIndexChanged += cboProvincia_SelectedIndexChanged;
        }
        #endregion

        #region mRegistrarReceptor
        /// <summary>
        /// Registra o actualiza los datos de un receptor
        /// </summary>
        private void mRegistrarReceptor()
        {
            QueryParams vParametros = new QueryParams();
            vParametros.AddReplaceParam("pCIDENTIFICACION", this.vIdentificacion);
            vParametros.AddReplaceParam("pCNOMBRE", txtNombre.Text);
            vParametros.AddReplaceParam("pCAPELLIDO1", txtApellido1.Text);
            vParametros.AddReplaceParam("pCAPELLIDO2", txtApellido2.Text);
            vParametros.AddReplaceParam("pCEMAIL", txtEmail.Text);
            vParametros.AddReplaceParam("pCTELEFONO", mtbTelefono.Text.Replace("-", ""));
            vParametros.AddReplaceParam("pCPROVINCIA", cboProvincia.Text);
            vParametros.AddReplaceParam("pCCANTON", cboCanton.Text);
            vParametros.AddReplaceParam("pCTIPO_IDENTIFICACION", cboTiposIdentif.SelectedValue.ToString());
            vParametros.AddReplaceParam("pCUSUARIO", CApp.usuario);

            GUI.CApp.bll.ExecuteSql("FE_P_REGISTRAR_RECEPTOR", vParametros, "PDV");
            //
            mActDatos_PTS();
            //
            CApp.ShowMessage("¡Cliente registrado correctamente!", "Cliente - Factura Electrónica", true);
            //
            vNombre = txtNombre.Text + " " + txtApellido1.Text + " " + txtApellido2.Text;
            this.vCon_Datos = true;
            this.Dispose();
        }
        #endregion

        #region mTiposIdentificacion
        /// <summary>
        /// Este método obtiene y carga en el combobox los tipos de identicación
        /// </summary>
        private void mTiposIdentificacion()
        {
            cboTiposIdentif.DataSource = null;
            cboTiposIdentif.SelectedValueChanged -= cboTiposIdentif_SelectedValueChanged;

            using (DataSet vTipoIdentif = CApp.bll.getDataSet("PDV", "FE_V_TIPO_IDENTIFICACION"))
            {
                // Verifica si tiene datos
                if (vTipoIdentif.Tables.Count > 0 && vTipoIdentif.Tables[0].Rows.Count > 0)
                {
                    cboTiposIdentif.DataSource = vTipoIdentif.Tables[0];
                    cboTiposIdentif.DisplayMember = "TIPO";
                    cboTiposIdentif.ValueMember = "ID_TIPO";
                }
            }

            cboTiposIdentif.SelectedValueChanged += cboTiposIdentif_SelectedValueChanged;
        }
        #endregion

        #region FrmClienteFE_Load
        private void FrmClienteFE_Load(object sender, EventArgs e)
        {
            try
            {
                mTiposIdentificacion();
                cboTiposIdentif_SelectedValueChanged(null, null);
                mProvincias();
                mCantones();


                if (!String.IsNullOrEmpty(vIdentificacion))
                {
                    cboTiposIdentif.SelectedValue = "02";
                    mtbIdentificacion.Text = vIdentificacion;
                }

                if (!String.IsNullOrEmpty(this.vIdentificacionCliente))
                {
                    //carga los datos del cliente
                    mDatosReceptorClienteFacturaAsociacion(this.vIdentificacionCliente);
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Cliente - Factura Electrónica", true);
            }
        }
        #endregion

        #region FrmClienteFE_KeyDown
        private void FrmClienteFE_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                switch (e.KeyCode)
                {
                    case Keys.Enter:
                        btnBuscar_Click(null, null);
                        break;
                    case Keys.F12:
                        btnAceptar_Click(null, null);
                        break;
                    case Keys.Escape:
                        btnSalir_Click(null, null);
                        break;
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Cliente - Factura Electrónica", true);
            }
        }
        #endregion

        #region btnSalir_Click
        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.vCon_Datos = false;
            this.Dispose();
        }
        #endregion

        #region btnBuscar_Click
        private void btnBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                if (cboTiposIdentif.SelectedValue.ToString() == "01" && !vExpresion_Ced.IsMatch(mtbIdentificacion.Text))
                {
                    CApp.ShowMessage("¡Digite/complete la cédula con el formato 0-0000-0000!", "Cliente - Factura Electrónica", true);
                    mtbIdentificacion.Focus();
                }
                else
                {
                    if (cboTiposIdentif.SelectedValue.ToString() != "01")
                    {
                        mtbIdentificacion.Text = mtbIdentificacion.Text.Replace("-", "");
                    }

                    mDatosReceptor();

                    if (!String.IsNullOrEmpty(txtNombre.Text))
                    {
                        this.vCon_Datos = true;
                    }
                    else
                    {
                        using (FacturaElect.FrmBuscarCliente vForm = new FacturaElect.FrmBuscarCliente())
                        {
                            vForm.ShowDialog();

                            if (!String.IsNullOrEmpty(vForm.mIdentificacion))
                            {
                                mtbIdentificacion.Text = vForm.mIdentificacion;
                                mDatosReceptor();
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Cliente - Factura Electrónica", true);
            }
        }
        #endregion

        #region btnAceptar_Click
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                if (cboTiposIdentif.SelectedValue.ToString() == "01" && !vExpresion_Ced.IsMatch(mtbIdentificacion.Text))
                {
                    CApp.ShowMessage("¡Digite/complete la cédula con el formato 0-0000-0000!", "Cliente - Factura Electrónica", true);
                    mtbIdentificacion.Focus();
                }
                else if (cboTiposIdentif.SelectedValue.ToString() == "02" && mtbIdentificacion.Text.Length > 10)
                {
                    CApp.ShowMessage("La cédula jurídica no puede ser de más de 10 dígitos", "Cliente - Factura Electrónica", true);
                    mtbIdentificacion.Focus();
                }
                else if (String.IsNullOrEmpty(txtNombre.Text))
                {
                    CApp.ShowMessage("¡Digite el nombre!", "Cliente - Factura Electrónica", true);
                    txtNombre.Focus();
                }
                else if (lblOblig_Ap1.Visible && String.IsNullOrEmpty(txtApellido1.Text))
                {
                    CApp.ShowMessage("¡Digite el primer apellido!", "Cliente - Factura Electrónica", true);
                    txtApellido1.Focus();
                }
                else if (lblOblig_Ap2.Visible && String.IsNullOrEmpty(txtApellido2.Text))
                {
                    CApp.ShowMessage("¡Digite el segundo apellido!", "Cliente - Factura Electrónica", true);
                    txtApellido2.Focus();
                }
                else if (mtbTelefono.Text.Trim() == "-")
                {
                    CApp.ShowMessage("¡Digite el teléfono!", "Cliente - Factura Electrónica", true);
                    mtbTelefono.Focus();
                }
                else if (String.IsNullOrEmpty(txtEmail.Text) || !vExpresion_Correo.IsMatch(txtEmail.Text))
                {
                    CApp.ShowMessage("¡Digite/complete el correo con un correo válido!", "Cliente - Factura Electrónica", true);
                    txtEmail.Focus();
                }
                else
                {
                    if (cboTiposIdentif.SelectedValue.ToString() != "01")
                    {
                        mtbIdentificacion.Text = mtbIdentificacion.Text.Replace("-", "");
                    }

                    this.vIdentificacion = mtbIdentificacion.Text.Replace("-", "");
                    mRegistrarReceptor();
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Cliente - Factura Electrónica", true);
            }
        }
        #endregion

        #region cboTiposIdentif_SelectedValueChanged
        private void cboTiposIdentif_SelectedValueChanged(object sender, EventArgs e)
        {
            try
            {
                if (cboTiposIdentif.SelectedValue.ToString() == "01")
                {
                    mtbIdentificacion.Mask = "0-0000-0000";
                    //
                    lblOblig_Ap1.Visible = true;
                    lblOblig_Ap2.Visible = true;
                    //
                    mtbIdentificacion.Focus();
                }
                else
                {
                    if (cboTiposIdentif.SelectedValue.ToString() == "02")
                    {
                        lblOblig_Ap1.Visible = false;
                        lblOblig_Ap2.Visible = false;
                    }

                    mtbIdentificacion.Mask = String.Empty;
                    mtbIdentificacion.Focus();
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Cliente - Factura Electrónica", true);
            }
        }
        #endregion

        #region cboProvincia_SelectedIndexChanged
        private void cboProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                mCantones();
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Cliente - Factura Electrónica", true);
            }
        }
        #endregion

        #region mtbIdentificacion_LostFocus
        private void mtbIdentificacion_LostFocus(object sender, EventArgs e)
        {
            try
            {
                if (cboTiposIdentif.SelectedValue.ToString() != "01")
                {
                    mtbIdentificacion.Text = mtbIdentificacion.Text.Replace("-", "");
                }
            }
            catch (Exception ex)
            {
                CApp.ShowMessage(ex.Message, "Cliente - Factura Electrónica", true);
            }
        }
        #endregion
    }
}