using Exferia_Aplicacion.General;
using Exferia_EntityFramework;
using Exferia_Formularios;
using Exferia_Hermes._0_Modelos;
using Exferia_Hermes._1_Datos;
using Exferia_Hermes.General;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_Hermes._3_Vistas.Controladoras
{
    public class P_ZonaLinea_Controladora
    {
        #region Variables Generales
        private P_ZonaLinea g_frm_P_ZonaLinea = null; //Variable que enlaza con la pantalla asociada
        private PE_Esperando g_frm_PE_Esperando; //Pantalla de espera, para cuando se ejecutan tareas pesadas como cargar, guardar, etc.

        //Clases de negocio necesarias para la carga de datos
        private HRM_ZonasLineas_Datos g_obj_HRM_ZonasLineas_Datos = new HRM_ZonasLineas_Datos();
       
        //Modelos
        private INTERNO_HRM_ZonasCabecera_Modelo g_mdl_INTERNO_HRM_ZonasCabecera_Modelo = null;
        private List<INTERNO_HRM_ZonasLineas_Listado_Modelo> g_lst_INTERNO_HRM_ZonasLineas_Listado_Modelo = null;
        public HRM_ZonasLineas g_mdl_HRM_ZonasLineas = null;
       
        public bool g_bol_Termino_CargaDatosInicial = false; //Se utiliza para saber cuando se termina la carga de datos estaticos iniciales
        public bool g_bol_ModificacionDatosAfectaLineas = true; //Se utiliza para saber si se modificaron datos que afectan las lineas.

        //Tarea Asincrona de carga de datos
        private BackgroundWorker g_obj_TareaAsincrona_CargarDatos;

        //Tarea Asincrona de grabar de datos
        private BackgroundWorker g_obj_TareaAsincrona_GrabarDatos;
        private bool g_bol_GrabarDatos_TerminoCorrectamente = true;
        private bool g_bol_GrabarDatos_VaciarDatos = true;

        //Tarea Asincrona de borrar de datos
        private BackgroundWorker g_obj_TareaAsincrona_BorrarDatos;

        private List<INTERNO_ComboBox_Modelo> g_lst_INTERNO_ComboBox_Modelo_CONDICIONES_INICIO = new List<INTERNO_ComboBox_Modelo>();
        private List<INTERNO_ComboBox_Modelo> g_lst_INTERNO_ComboBox_Modelo_CONDICIONES_FIN = new List<INTERNO_ComboBox_Modelo>();


        public bool g_bol_CampoCodigo_Numerico = false;
        #endregion

        #region Constructor
        public P_ZonaLinea_Controladora(P_ZonaLinea _frm_P_ZonaLinea, INTERNO_HRM_ZonasCabecera_Modelo _mdl_INTERNO_HRM_ZonasCabecera_Modelo,List<INTERNO_HRM_ZonasLineas_Listado_Modelo> _lst_INTERNO_HRM_ZonasLineas_Listado_Modelo)
        {
            g_frm_P_ZonaLinea = _frm_P_ZonaLinea;

            g_mdl_INTERNO_HRM_ZonasCabecera_Modelo = _mdl_INTERNO_HRM_ZonasCabecera_Modelo;
            g_lst_INTERNO_HRM_ZonasLineas_Listado_Modelo = _lst_INTERNO_HRM_ZonasLineas_Listado_Modelo;

            Cargar_DatosIniciales();

            g_bol_Termino_CargaDatosInicial = true;
        }
        #endregion

        #region Datos iniciales
        public void Cargar_DatosIniciales()
        {
            try
            {

                //Condicion_Inicial
                g_lst_INTERNO_ComboBox_Modelo_CONDICIONES_INICIO = ListadosEstaticos.Devolver_TiposCondiciones_Zonas_Inicio();
                g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionInicial.Items.Clear();
                g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionInicial.DataSource = g_lst_INTERNO_ComboBox_Modelo_CONDICIONES_INICIO;
                g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionInicial.SelectedIndex = 0;

                //Condicion_Final
                g_lst_INTERNO_ComboBox_Modelo_CONDICIONES_FIN = ListadosEstaticos.Devolver_TiposCondiciones_Zonas_Fin();
                g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal.Items.Clear();
                g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal.DataSource = g_lst_INTERNO_ComboBox_Modelo_CONDICIONES_FIN;
                g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal.SelectedIndex = 0;

            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(Cargar_DatosIniciales));
            }
            finally
            {
                g_frm_P_ZonaLinea.P_Base_SeModificoDatosPantalla = false;
            }
        }
        #endregion

        #region Vaciar Datos
        private void VaciarDatos()
        {
            //CondicionInicial
            g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionInicial.SelectedIndex = 0;
            g_frm_P_ZonaLinea.Exferia_TextBox_CondicionInicial.Text = "";

            //CondicionFinal
            g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal.SelectedIndex = 0;
            g_frm_P_ZonaLinea.Exferia_TextBox_CondicionFinal.Text = "";

            string[] str_Separador = new string[] { " [" };
            //Si ya hay valores de objeto, los elimino para rellenarlos de nuevo:
            if (g_frm_P_ZonaLinea.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None).Count() > 1)
            {
                g_frm_P_ZonaLinea.P_Base_TituloPantalla = (g_frm_P_ZonaLinea.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None))[0];
            }

            //Actualizar el boton de seleccion de pantalla ##########################################################
            Variables.G_EMS_CONTROL_MENUSUPERIOR.Update_Texto_NombrePantalla(g_frm_P_ZonaLinea.Tag.ToString());
            //#######################################################################################################

            g_mdl_HRM_ZonasLineas = null;
        }
        #endregion

        #region Comprobar Cambios
        public bool ComprobarCambios()
        {
            if (g_frm_P_ZonaLinea.P_Base_SeModificoDatosPantalla)
            {
                GrabarDatos(false);
                //Te quedas esperando a que termine la tarea asincrona de grabar
                while (g_obj_TareaAsincrona_GrabarDatos.IsBusy)
                {
                    Application.DoEvents();
                }
                return g_bol_GrabarDatos_TerminoCorrectamente;
            }
            return true;
        }
        #endregion

        #region Cargar Datos
        public void RecargarDatos()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que se termine
                g_frm_P_ZonaLinea.Enabled = false;

                //Mostrar la pantalla de espera
                g_frm_PE_Esperando = new PE_Esperando();

                //Si la tarea asincrona esta en marcha la paro
                if (g_obj_TareaAsincrona_CargarDatos != null)
                {
                    while (g_obj_TareaAsincrona_CargarDatos.IsBusy)
                        Application.DoEvents();
                }
                else
                {
                    g_obj_TareaAsincrona_CargarDatos = new BackgroundWorker();
                    g_obj_TareaAsincrona_CargarDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_CargarDatos_DoWork);
                    g_obj_TareaAsincrona_CargarDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_CargarDatos_Completed);
                    g_obj_TareaAsincrona_CargarDatos.WorkerReportsProgress = false;
                }

                //Vaciar
                VaciarDatos();

                //Tarea Asincrona cargar datos###############################################################
                g_obj_TareaAsincrona_CargarDatos.RunWorkerAsync();
                //###########################################################################################

                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                g_frm_P_ZonaLinea.Enabled = true;
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }
                throw new Control_Errores(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA(), ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(RecargarDatos), true);
            }
        }

        private void TareaAsincrona_CargarDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                //Cargar Valores
                if (CargarDatos(g_frm_P_ZonaLinea.P_Base_id) == false)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_DoWork));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_DoWork));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_CargarDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }

            //Desbloquear el formulario
            g_frm_P_ZonaLinea.Enabled = true;

            try
            {

                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                        g_frm_P_ZonaLinea.Salir_P_Base();
                    }
                }

                g_frm_P_ZonaLinea.P_Base_SeModificoDatosPantalla = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());

                g_frm_P_ZonaLinea.Salir_P_Base();
            }
        }

        public bool CargarDatos(long _lng_id)
        {
            bool bol_ValorDevuelto = true;

            try
            {
                g_mdl_HRM_ZonasLineas = g_obj_HRM_ZonasLineas_Datos.Obtener(_lng_id);

                //Si no es Nulo Cargo los Datos
                if (g_mdl_HRM_ZonasLineas != null)
                {
                    //Paginador ................................................................................
                    if (g_frm_P_ZonaLinea.P_Base_PantallaOrigen != null &&
                        g_frm_P_ZonaLinea.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados != null &&
                        g_frm_P_ZonaLinea.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.Count > 0)
                    {
                        long lng_id_ParaPaginacion = g_mdl_HRM_ZonasLineas.id;
                        int int_PaginaDelObjeto = g_frm_P_ZonaLinea.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.IndexOf(g_frm_P_ZonaLinea.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.Where(n => n.ID.Equals(lng_id_ParaPaginacion)).FirstOrDefault());

                        g_frm_P_ZonaLinea.g_obj_Funciones_Paginador.SetPaginaActual(int_PaginaDelObjeto);
                        // Asignando al paginador la pagina actual.
                        g_frm_P_ZonaLinea.Exferia_Paginador_ZonaLinea.PaginaActual = g_frm_P_ZonaLinea.g_obj_Funciones_Paginador.GetPaginaActual();
                    }
                    //...........................................................................................

                    //inicio_Condicion
                    g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionInicial.SelectedItem = g_lst_INTERNO_ComboBox_Modelo_CONDICIONES_INICIO.Where(m => m.Identificador.Equals(g_mdl_HRM_ZonasLineas.inicio_Condicion)).FirstOrDefault();

                    //inicio_CodigoPostal
                    g_frm_P_ZonaLinea.Exferia_TextBox_CondicionInicial.Text = g_mdl_HRM_ZonasLineas.inicio_CodigoPostal;

                    if (g_mdl_HRM_ZonasLineas.fin_Condicion!=null)
                    {
                        //fin_Condicion
                        g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal.SelectedItem = g_lst_INTERNO_ComboBox_Modelo_CONDICIONES_FIN.Where(m => m.Identificador.Equals(g_mdl_HRM_ZonasLineas.fin_Condicion)).FirstOrDefault();

                        //inicio_CodigoPostal
                        g_frm_P_ZonaLinea.Exferia_TextBox_CondicionFinal.Text = g_mdl_HRM_ZonasLineas.fin_CodigoPostal;
                    }
                 
                    // Mostrar Campo en el Titulo de mantenimiento
                    string str_MenuSuperior_Codigo = "";
                    if (g_frm_P_ZonaLinea.g_mdl_PRV_OpcionesDetalle != null &&
                        g_frm_P_ZonaLinea.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento != null &&
                        g_frm_P_ZonaLinea.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento.Trim().Length > 0)
                    {
                        //Obtener el Array de Campos
                        string[] arr_Campos = g_frm_P_ZonaLinea.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento.Split(new Char[] { ',' });
                        string str_ValorAMostrarFinal = "";

                        string[] str_Separador = new string[] { " [" };

                        //Si ya hay valores de objeto, los elimino para rellenarlos de nuevo
                        if (g_frm_P_ZonaLinea.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None).Count() > 1)
                        {
                            g_frm_P_ZonaLinea.P_Base_TituloPantalla = (g_frm_P_ZonaLinea.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None))[0];
                        }

                        dynamic dnm_Objeto = g_mdl_HRM_ZonasLineas;
                        foreach (string str_campo in arr_Campos)
                        {
                            var Valor = dnm_Objeto.GetType().GetProperty(str_campo).GetValue(dnm_Objeto, null);
                            if (Valor != null)
                            {
                                str_ValorAMostrarFinal += " " + Valor;
                            }

                        }

                        if (str_ValorAMostrarFinal != "")
                        {
                            g_frm_P_ZonaLinea.P_Base_TituloPantalla += " [" + str_ValorAMostrarFinal + "] -Modificar";
                        }
                    }

                    //Actualizar el Boton de Seleccion de pantalla ####################################################
                    Variables.G_EMS_CONTROL_MENUSUPERIOR.Add_Texto_NombrePantalla_Descripciones(g_frm_P_ZonaLinea.Tag.ToString(), str_MenuSuperior_Codigo);
                    //#################################################################################################

                    g_frm_P_ZonaLinea.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Control_Errores)
            {
                bol_ValorDevuelto = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(CargarDatos));
            }
            return bol_ValorDevuelto;
        }
        #endregion

        #region Grabar Datos
        public void GrabarDatos(bool _bol_GrabarDatos_VaciarDatos)
        {
            try
            {
                g_bol_GrabarDatos_VaciarDatos = _bol_GrabarDatos_VaciarDatos;

                g_bol_GrabarDatos_TerminoCorrectamente = true;

                g_frm_P_ZonaLinea.Enabled = false;
                g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_GRABANDODATOS());

                g_obj_TareaAsincrona_GrabarDatos = new BackgroundWorker();
                g_obj_TareaAsincrona_GrabarDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_GrabarDatos_DoWork);
                g_obj_TareaAsincrona_GrabarDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_GrabarDatos_Completed);
                g_obj_TareaAsincrona_GrabarDatos.RunWorkerAsync();

                g_frm_PE_Esperando.ShowDialog();
            }
            catch (Exception ex)
            {
                g_bol_GrabarDatos_TerminoCorrectamente = false;
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }
                g_frm_P_ZonaLinea.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(GrabarDatos));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA());
            }
        }
        private void TareaAsincrona_GrabarDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                //Validar Primero
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_VALIDACION = ValidarDatos();
                if (mdl_ValorDevuelto_Modelo_VALIDACION.TodoCorrecto)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = GrabarDatos_Final();
                }
                else
                {
                    mdl_INTERNO_ValorDevuelto_Modelo = mdl_ValorDevuelto_Modelo_VALIDACION;
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_GrabarDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_ZonaLinea.Enabled = true;

            try
            {
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);

                        //Poner el Foco en el objeto que tuvo el problema en validar
                        if (mdl_ValorDevuelto_Modelo_Resultado.Objeto != null)
                        {
                            Funciones.Poner_Foco_Objeto(g_frm_P_ZonaLinea, mdl_ValorDevuelto_Modelo_Resultado.Objeto);
                        }
                    }

                    g_bol_GrabarDatos_TerminoCorrectamente = false;
                }
                else
                {
                    // Devolver al Listado el Row Añadido/Modificado
                    List<object> lst_obj = new List<object>();
                    lst_obj.Add(g_frm_P_ZonaLinea.g_mdl_PRV_OpcionesDetalle.opcion);
                    lst_obj.Add(mdl_ValorDevuelto_Modelo_Resultado.Objeto);

                    g_frm_P_ZonaLinea.P_Base_PantallaOrigen.P_Base_ActualizarRegistro_ConObjeto(lst_obj, G_ENUM_TIPOACCION.INT_NADA);

                    if (g_bol_GrabarDatos_VaciarDatos)
                    {
                        VaciarDatos();
                    }

                    g_frm_P_ZonaLinea.P_Base_SeModificoDatosPantalla = false;

                    //Poner Texto predeterminado y foco
                    Funciones.Poner_Foco_Objeto(g_frm_P_ZonaLinea, g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionInicial);

                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_Completed));
            }
        }

        public INTERNO_ValorDevuelto_Modelo ValidarDatos()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            try
            {
                //Condicion inicial tiene que estar seleccionada
                if ( g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionInicial.SelectedItem == null ||
                     (g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionInicial.SelectedItem != null && ((INTERNO_ComboBox_Modelo)g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionInicial.SelectedItem).Identificador == "-1")
                        
                    )
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_VALIDACIONES_NOHAYREGISTROSSELECCIONADOS(g_frm_P_ZonaLinea.Exferia_Label_CondicionInicial.Text);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionInicial;
                }

                //Condicion inicial no puede estar vacio
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto &&
                     g_frm_P_ZonaLinea.Exferia_TextBox_CondicionInicial.Text.Trim().Length == 0)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_ZonaLinea.Exferia_Label_CondicionInicial.Text);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_ZonaLinea.Exferia_TextBox_CondicionInicial;
                }

                //Condicion final
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    //Si el combo no esta vacio tiene que tener un valor el textbox
                    if (g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal.SelectedItem != null &&
                        ((INTERNO_ComboBox_Modelo)g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal.SelectedItem).Identificador != "-1" &&
                        g_frm_P_ZonaLinea.Exferia_TextBox_CondicionFinal.Text.Trim().Length == 0)
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_ZonaLinea.Exferia_Label_CondicionFinal.Text);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_ZonaLinea.Exferia_TextBox_CondicionFinal;
                    }
                    //Si el textBox no esta vacio el combo tiene que tener un valor
                    else if (g_frm_P_ZonaLinea.Exferia_TextBox_CondicionFinal.Text.Trim().Length > 0 &&
                            (g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal.SelectedItem == null ||
                            (g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal.SelectedItem != null && ((INTERNO_ComboBox_Modelo)g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal.SelectedItem).Identificador == "-1")))
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_VALIDACIONES_NOHAYREGISTROSSELECCIONADOS(g_frm_P_ZonaLinea.Exferia_Label_CondicionFinal.Text);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal;
                    }
                }

                //Si tiene valor en la condicion fin, el inicio no ude ser mayor que el fin
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto &&
                    g_frm_P_ZonaLinea.Exferia_TextBox_CondicionFinal.Text.Trim().Length > 0 &&
                    String.Compare(g_frm_P_ZonaLinea.Exferia_TextBox_CondicionInicial.Text, g_frm_P_ZonaLinea.Exferia_TextBox_CondicionFinal.Text) > 0
                    )
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_HERMES_ZONAS_CODIGOSPOSTALESINICIOMENORFIN();
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal;
                }

                //Que no este contenida dentro de otra linea
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    if (g_lst_INTERNO_HRM_ZonasLineas_Listado_Modelo!=null && g_lst_INTERNO_HRM_ZonasLineas_Listado_Modelo.Count>0)
                    {
                        List<INTERNO_HRM_ZonasLineas_Listado_Modelo> lst_INTERNO_HRM_ZonasLineas_Listado_Modelo = g_lst_INTERNO_HRM_ZonasLineas_Listado_Modelo.Where(m => m.id != (g_mdl_HRM_ZonasLineas != null ? g_mdl_HRM_ZonasLineas.id : -1)).ToList();
                        if (lst_INTERNO_HRM_ZonasLineas_Listado_Modelo != null && lst_INTERNO_HRM_ZonasLineas_Listado_Modelo.Count > 0)
                        {
                            //Rango actual
                            foreach (INTERNO_HRM_ZonasLineas_Listado_Modelo mdl_INTERNO_HRM_ZonasLineas_Listado_Modelo in lst_INTERNO_HRM_ZonasLineas_Listado_Modelo)
                            {
                                if (ContieneRangoExistente(((INTERNO_ComboBox_Modelo)g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionInicial.SelectedItem).Identificador,
                                                            g_frm_P_ZonaLinea.Exferia_TextBox_CondicionInicial.Text,
                                                            (g_frm_P_ZonaLinea.Exferia_TextBox_CondicionFinal.Text.Trim().Length>0 ? ((INTERNO_ComboBox_Modelo)g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal.SelectedItem).Identificador : ""),
                                                            g_frm_P_ZonaLinea.Exferia_TextBox_CondicionFinal.Text.Trim(),
                                                            mdl_INTERNO_HRM_ZonasLineas_Listado_Modelo.inicio_Condicion, 
                                                            mdl_INTERNO_HRM_ZonasLineas_Listado_Modelo.inicio_CodigoPostal, 
                                                            mdl_INTERNO_HRM_ZonasLineas_Listado_Modelo.fin_Condicion, 
                                                            mdl_INTERNO_HRM_ZonasLineas_Listado_Modelo.fin_CodigoPostal))
                                {
                                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_HERMES_ZONAS_CODIGOSPOSTALESCONTENIDOSDENTRODEOTROS();
                                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionInicial;

                                    break;
                                }
                            }
                        }
                    }
                }


            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(ValidarDatos));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        private INTERNO_ValorDevuelto_Modelo GrabarDatos_Final()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();

            try
            {
                HRM_ZonasLineas mdl_HRM_ZonasLineas = new HRM_ZonasLineas();

                //id
                mdl_HRM_ZonasLineas.id = g_mdl_HRM_ZonasLineas != null ? g_mdl_HRM_ZonasLineas.id : -1;

                //idZonaCabecera
                mdl_HRM_ZonasLineas.idZonaCabecera = g_mdl_INTERNO_HRM_ZonasCabecera_Modelo.id;

                //inicio_Condicion
                mdl_HRM_ZonasLineas.inicio_Condicion = ((INTERNO_ComboBox_Modelo)g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionInicial.SelectedItem).Identificador;

                //inicio_CodigoPostal
                mdl_HRM_ZonasLineas.inicio_CodigoPostal = g_frm_P_ZonaLinea.Exferia_TextBox_CondicionInicial.Text;

                //Condicion_Final
                if (g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal.SelectedItem != null &&
                   ((INTERNO_ComboBox_Modelo)g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal.SelectedItem).Identificador != "-1")
                {
                    //fin_Condicion
                    mdl_HRM_ZonasLineas.fin_Condicion = ((INTERNO_ComboBox_Modelo)g_frm_P_ZonaLinea.Exferia_ComboBox_CondicionFinal.SelectedItem).Identificador;

                    //fin_CodigoPostal
                    mdl_HRM_ZonasLineas.fin_CodigoPostal = g_frm_P_ZonaLinea.Exferia_TextBox_CondicionFinal.Text;
                }
                else
                {
                    //fin_Condicion
                    mdl_HRM_ZonasLineas.fin_Condicion = null;

                    //fin_CodigoPostal
                    mdl_HRM_ZonasLineas.fin_CodigoPostal = null;
                }
               

                // Se graba el modelo ya relleno.
                mdl_INTERNO_ValorDevuelto_Modelo = g_obj_HRM_ZonasLineas_Datos.Grabar(mdl_HRM_ZonasLineas);

                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    //Obtener el modelo que se acaba de grabar
                    g_mdl_HRM_ZonasLineas = g_obj_HRM_ZonasLineas_Datos.Obtener(mdl_INTERNO_ValorDevuelto_Modelo.Id);

                    g_frm_P_ZonaLinea.P_Base_id = mdl_INTERNO_ValorDevuelto_Modelo.Id;

                    #region ARGUMENTOS A DEVOLVER, PARA ACTUALIZAR LE LISTADO
                    List<object> lst_Argumentos = new List<object>();

                    //Principal
                    lst_Argumentos.Add(mdl_INTERNO_ValorDevuelto_Modelo.Id);
                    lst_Argumentos.Add(mdl_INTERNO_ValorDevuelto_Modelo.TipoAccion);
                    //..........................................................................................................................

                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = lst_Argumentos;
                    #endregion
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(GrabarDatos_Final));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

        #region Borrar Datos
        public void BorrarDatos()
        {
            try
            {
                //Preguntar si está seguro de borrar
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_BORRAR()))
                {
                    g_frm_P_ZonaLinea.Enabled = false;
                    g_frm_PE_Esperando = new PE_Esperando(Mensajes.G_STR_ESPERANDO_BORRANDODATOS());

                    g_obj_TareaAsincrona_BorrarDatos = new BackgroundWorker();
                    g_obj_TareaAsincrona_BorrarDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_BorrarDatos_DoWork);
                    g_obj_TareaAsincrona_BorrarDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_BorrarDatos_Completed);
                    g_obj_TareaAsincrona_BorrarDatos.RunWorkerAsync();

                    g_frm_PE_Esperando.ShowDialog();
                }
            }
            catch (Exception ex)
            {
                if (g_frm_PE_Esperando != null)
                {
                    g_frm_PE_Esperando.Close();
                    g_frm_PE_Esperando = null;
                }
                g_frm_P_ZonaLinea.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(BorrarDatos));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA());
            }
        }
        private void TareaAsincrona_BorrarDatos_DoWork(object sender, DoWorkEventArgs e)
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                //Borrar
                mdl_INTERNO_ValorDevuelto_Modelo = BorrarDatos_Final();
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_DoWork));

                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_INTERNO_ValorDevuelto_Modelo;
            }
        }
        private void TareaAsincrona_BorrarDatos_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (g_frm_PE_Esperando != null)
            {
                g_frm_PE_Esperando.Close();
                g_frm_PE_Esperando = null;
            }
            g_frm_P_ZonaLinea.Enabled = true;

            try
            {
                INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo_Resultado = (INTERNO_ValorDevuelto_Modelo)e.Result;

                //Mostrar si tuviera algun mensaje
                if (mdl_ValorDevuelto_Modelo_Resultado.TodoCorrecto == false)
                {
                    if (mdl_ValorDevuelto_Modelo_Resultado.Mensaje.Trim().Length > 0)
                    {
                        Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                    }
                }
                else
                {
                    // Devolver al Listado el Row Borrar
                    List<object> lst_obj = new List<object>();

                    //opcion
                    lst_obj.Add(g_frm_P_ZonaLinea.g_mdl_PRV_OpcionesDetalle.opcion);


                    //Ids a borrar
                    List<long> lst_id = new List<long>();
                    lst_id.Add(mdl_ValorDevuelto_Modelo_Resultado.Id);
                    lst_obj.Add(lst_id);

                    g_frm_P_ZonaLinea.P_Base_PantallaOrigen.P_Base_ActualizarRegistro_ConObjeto(lst_obj, G_ENUM_TIPOACCION.INT_ELIMINAR);

                    g_frm_P_ZonaLinea.P_Base_SeModificoDatosPantalla = false;
                    g_frm_P_ZonaLinea.Salir_P_Base();
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_Completed));
            }
        }
        private INTERNO_ValorDevuelto_Modelo BorrarDatos_Final()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            try
            {
                mdl_INTERNO_ValorDevuelto_Modelo = g_obj_HRM_ZonasLineas_Datos.Borrar(g_mdl_HRM_ZonasLineas != null ? g_mdl_HRM_ZonasLineas.id : -1);
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_ZonaLinea_Controladora) + "/" + nameof(BorrarDatos_Final));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion


        private bool ContieneRangoExistente(string _str_Inicio_Condicion_ACTUAL,
                                            string _str_Inicio_CodigoPostal_ACTUAL, 
                                            string _str_Fin_Condicion_ACTUAL, 
                                            string _str_Fin_CodigoPostal_ACTUAL,
                                            string _str_Inicio_Condicion_EXISTENTE,
                                            string _str_Inicio_CodigoPostal_EXISTENTE,
                                            string _str_Fin_Condicion_EXISTENTE,
                                            string _str_Fin_CodigoPostal_EXISTENTE)
        {
            bool bol_Existe = false;


            //IGUALA #######################################################################################################################
            if (_str_Inicio_Condicion_ACTUAL == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_IGUALA.Codigo)
            {
                #region IGUALA
                if (_str_Inicio_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_IGUALA.Codigo)
                {
                    if (_str_Inicio_CodigoPostal_ACTUAL == _str_Inicio_CodigoPostal_EXISTENTE)
                    {
                        bol_Existe = true;
                    }
                }
                #endregion
                #region COMIENZAPOR
                else if (_str_Inicio_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_COMIENZAPOR.Codigo)
                {

                    int int_Ancho = _str_Inicio_CodigoPostal_EXISTENTE.Length;

                    if (_str_Inicio_CodigoPostal_ACTUAL.Length >= int_Ancho && _str_Inicio_CodigoPostal_ACTUAL.Substring(0, int_Ancho) == _str_Inicio_CodigoPostal_EXISTENTE)
                    {
                        bol_Existe = true;
                    }
                }
                #endregion
                #region OTROS POR RANGO
                else
                {
                    #region MAYORIGUALA
                    if (_str_Inicio_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_MAYORIGUALA.Codigo)
                    {
                        //Si tiene segunda condicion
                        if (_str_Fin_Condicion_EXISTENTE != null && _str_Fin_Condicion_EXISTENTE.Trim().Length > 0)
                        {
                            #region MENORIGUALA
                            if (_str_Fin_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_MENORIGUALA.Codigo)
                            {
                                if (
                                        //MayorQue
                                        (
                                            String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                            String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) > 0
                                        )
                                        &&
                                        //MenosQue
                                        (
                                            String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Fin_CodigoPostal_EXISTENTE) == 0 ||
                                            String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Fin_CodigoPostal_EXISTENTE) < 0
                                        )
                                    )
                                {
                                    bol_Existe = true;
                                }
                            }
                            #endregion
                        }
                        //Sin Condicion Final
                        else
                        {

                            if (String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) > 0)
                            {
                                bol_Existe = true;
                            }
                        }
                    }
                    #endregion
                    #region MENORIGUALA
                    else if (_str_Inicio_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_MENORIGUALA.Codigo)
                    {
                        //Si tiene segunda condicion
                        if (_str_Fin_Condicion_EXISTENTE != null && _str_Fin_Condicion_EXISTENTE.Trim().Length > 0)
                        {
                            #region MAYORIGUALA
                            if (_str_Fin_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_MAYORIGUALA.Codigo)
                            {
                                if (
                                        //MayorQue
                                        (
                                            String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Fin_CodigoPostal_EXISTENTE) == 0 ||
                                            String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Fin_CodigoPostal_EXISTENTE) > 0
                                        )
                                        &&
                                        //MenosQue
                                        (
                                            String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                            String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) < 0
                                        )
                                    )
                                {
                                    bol_Existe = true;
                                }
                            }
                            #endregion
                        }
                        //Sin Condicion Final
                        else
                        {

                            if (String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) < 0)
                            {
                                bol_Existe = true;
                            }
                        }
                    }
                    #endregion
                }
                #endregion
            }
            //COMIENZAPOR #######################################################################################################################
            else if (_str_Inicio_Condicion_ACTUAL == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_COMIENZAPOR.Codigo)
            {
                int int_Ancho_Actual = _str_Inicio_CodigoPostal_ACTUAL.Length;

                #region IGUALA
                if (_str_Inicio_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_IGUALA.Codigo)
                {
                    if (_str_Inicio_CodigoPostal_EXISTENTE.Length > int_Ancho_Actual && _str_Inicio_CodigoPostal_ACTUAL == _str_Inicio_CodigoPostal_EXISTENTE.Substring(0, int_Ancho_Actual))
                    {
                        bol_Existe = true;
                    }
                }
                #endregion
                #region COMIENZAPOR
                else if (_str_Inicio_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_COMIENZAPOR.Codigo)
                {
                    //Verificar el ancho del texto a coger
                    int int_Ancho_Existente = _str_Inicio_CodigoPostal_EXISTENTE.Length;
                    int int_AnchoFinal = 0;
                    if (int_Ancho_Existente < int_Ancho_Actual)
                    {
                        int_AnchoFinal = int_Ancho_Existente;
                    }
                    else
                    {
                        int_AnchoFinal = int_Ancho_Actual;
                    }

                    //Actual
                    if (_str_Inicio_CodigoPostal_ACTUAL.Length >= int_AnchoFinal)
                    {
                        //Existente
                        if (_str_Inicio_CodigoPostal_EXISTENTE.Length >= int_AnchoFinal)
                        {
                            if (_str_Inicio_CodigoPostal_ACTUAL.Substring(0, int_AnchoFinal) == _str_Inicio_CodigoPostal_EXISTENTE.Substring(0, int_AnchoFinal))
                            {
                                bol_Existe = true;
                            }
                        }
                    }
                }
                #endregion
                #region OTROS POR RANGO
                else
                {
                    //Existente
                    if (_str_Inicio_CodigoPostal_EXISTENTE.Length >= int_Ancho_Actual)
                    {
                        string str_Inicio_CodigoPostal_EXISTENTE_TRUNCADO = _str_Inicio_CodigoPostal_EXISTENTE.Substring(0, int_Ancho_Actual);
                        string str_Fin_CodigoPostal_EXISTENTE_TRUNCADO = _str_Fin_CodigoPostal_EXISTENTE != null && _str_Fin_CodigoPostal_EXISTENTE.Length >= int_Ancho_Actual ? _str_Fin_CodigoPostal_EXISTENTE.Substring(0, int_Ancho_Actual) : "";

                        #region MAYORIGUALA
                        if (_str_Inicio_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_MAYORIGUALA.Codigo)
                        {
                            //Si tiene segunda condicion
                            if (_str_Fin_Condicion_EXISTENTE != null && _str_Fin_Condicion_EXISTENTE.Trim().Length > 0)
                            {
                                #region MENORIGUALA
                                if (_str_Fin_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_MENORIGUALA.Codigo)
                                {
                                    if (
                                            //MayorQue
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Inicio_CodigoPostal_EXISTENTE_TRUNCADO) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Inicio_CodigoPostal_EXISTENTE_TRUNCADO) > 0
                                            )
                                            &&
                                            //MenosQue
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Fin_CodigoPostal_EXISTENTE_TRUNCADO) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Fin_CodigoPostal_EXISTENTE_TRUNCADO) < 0
                                            )
                                        )
                                    {
                                        bol_Existe = true;
                                    }
                                }
                                #endregion
                            }
                            //Sin Condicion Final
                            else
                            {
                                #region Sin Condicion Final
                                if (String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Inicio_CodigoPostal_EXISTENTE_TRUNCADO) == 0 ||
                                    String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Inicio_CodigoPostal_EXISTENTE_TRUNCADO) > 0)
                                {
                                    bol_Existe = true;
                                }
                                #endregion
                            }
                        }
                        #endregion
                        #region MENORIGUALA
                        else if (_str_Inicio_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_MENORIGUALA.Codigo)
                        {
                            //Si tiene segunda condicion
                            if (_str_Fin_Condicion_EXISTENTE != null && _str_Fin_Condicion_EXISTENTE.Trim().Length > 0)
                            {
                                #region MAYORIGUALA
                                if (_str_Fin_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_MAYORIGUALA.Codigo)
                                {
                                    if (
                                            //MayorQue
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Fin_CodigoPostal_EXISTENTE_TRUNCADO) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Fin_CodigoPostal_EXISTENTE_TRUNCADO) > 0
                                            )
                                            &&
                                            //MenosQue
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Inicio_CodigoPostal_EXISTENTE_TRUNCADO) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Inicio_CodigoPostal_EXISTENTE_TRUNCADO) < 0
                                            )
                                        )
                                    {
                                        bol_Existe = true;
                                    }
                                }
                                #endregion
                            }
                            //Sin Condicion Final
                            else
                            {

                                if (String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Inicio_CodigoPostal_EXISTENTE_TRUNCADO) == 0 ||
                                    String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Inicio_CodigoPostal_EXISTENTE_TRUNCADO) < 0)
                                {
                                    bol_Existe = true;
                                }
                            }
                        }
                        #endregion
                    }
                    
                }
                #endregion
            }
            //MAYORIGUALA #######################################################################################################################
            else if (_str_Inicio_Condicion_ACTUAL == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_MAYORIGUALA.Codigo)
            {
                #region IGUALA
                if (_str_Inicio_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_IGUALA.Codigo)
                {
                    //Si tiene segunda condicion
                    if (_str_Fin_Condicion_ACTUAL != null && _str_Fin_Condicion_ACTUAL.Trim().Length > 0)
                    {
                        #region MENORIGUALA
                        if (_str_Fin_Condicion_ACTUAL == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_MENORIGUALA.Codigo)
                        {
                            if (
                                    //MayorQue
                                    (
                                        String.Compare(_str_Inicio_CodigoPostal_EXISTENTE, _str_Inicio_CodigoPostal_ACTUAL) == 0 ||
                                        String.Compare(_str_Inicio_CodigoPostal_EXISTENTE, _str_Inicio_CodigoPostal_ACTUAL) > 0
                                    )
                                    &&
                                    //MenosQue
                                    (
                                        String.Compare(_str_Inicio_CodigoPostal_EXISTENTE, _str_Fin_CodigoPostal_ACTUAL) == 0 ||
                                        String.Compare(_str_Inicio_CodigoPostal_EXISTENTE, _str_Fin_CodigoPostal_ACTUAL) < 0
                                    )
                                )
                            {
                                bol_Existe = true;
                            }
                        }
                        #endregion
                    }
                    //Sin Condicion Final
                    else
                    {

                        if (String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                            String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) <0)
                        {
                            bol_Existe = true;
                        }
                    }


                }
                #endregion
                #region COMIENZAPOR
                if (_str_Inicio_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_COMIENZAPOR.Codigo)
                {

                    //Verificar el ancho del texto a coger
                    int int_AnchoFinal = _str_Inicio_CodigoPostal_EXISTENTE.Length;

                    //Actual
                    if (_str_Inicio_CodigoPostal_ACTUAL.Length >= int_AnchoFinal)
                    {
                        string str_Inicio_CodigoPostal_ACTUAL_TRUNCADO = _str_Inicio_CodigoPostal_ACTUAL.Substring(0, int_AnchoFinal);
                        string str_Fin_CodigoPostal_ACTUAL_TRUNCADO = _str_Fin_CodigoPostal_ACTUAL != null && _str_Fin_CodigoPostal_ACTUAL.Length >= int_AnchoFinal ? _str_Fin_CodigoPostal_ACTUAL.Substring(0, int_AnchoFinal) : "";

                        //Si tiene segunda condicion
                        if (_str_Fin_Condicion_ACTUAL != null && _str_Fin_Condicion_ACTUAL.Trim().Length > 0)
                        {
                            #region MENORIGUALA
                            if (_str_Fin_Condicion_ACTUAL == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_MENORIGUALA.Codigo)
                            {
                                if (
                                        //MayorQue
                                        (
                                            String.Compare(_str_Inicio_CodigoPostal_EXISTENTE, str_Inicio_CodigoPostal_ACTUAL_TRUNCADO) == 0 ||
                                            String.Compare(_str_Inicio_CodigoPostal_EXISTENTE, str_Inicio_CodigoPostal_ACTUAL_TRUNCADO) > 0
                                        )
                                        &&
                                        //MenosQue
                                        (
                                            String.Compare(_str_Inicio_CodigoPostal_EXISTENTE, str_Fin_CodigoPostal_ACTUAL_TRUNCADO) == 0 ||
                                            String.Compare(_str_Inicio_CodigoPostal_EXISTENTE, str_Fin_CodigoPostal_ACTUAL_TRUNCADO) < 0
                                        )
                                    )
                                {
                                    bol_Existe = true;
                                }
                            }
                            #endregion
                        }
                        //Sin Condicion Final
                        else
                        {

                            if (String.Compare(str_Inicio_CodigoPostal_ACTUAL_TRUNCADO, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                String.Compare(str_Inicio_CodigoPostal_ACTUAL_TRUNCADO, _str_Inicio_CodigoPostal_EXISTENTE) < 0)
                            {
                                bol_Existe = true;
                            }
                        }
                        
                    }
                }
                #endregion
                #region OTROS POR RANGO
                else
                {
                    #region MAYORIGUALA (EXISTENTE)
                    if (_str_Inicio_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_MAYORIGUALA.Codigo)
                    {
                        //Condicion Auxiliar Final
                        string str_Condicion_AUX_Final = "9999999999";


                        //Si tiene segunda condicion
                        if (_str_Fin_Condicion_EXISTENTE != null && _str_Fin_Condicion_EXISTENTE.Trim().Length > 0)
                        {
                            #region MENORIGUALA
                            if (_str_Fin_Condicion_EXISTENTE == Variables.G_MDL_INTERNO_CODIGODESCRIPCION_TIPOBUSQUEDA_TEXTO_MENORIGUALA.Codigo)
                            {
                                //Si tiene segunda condicion(ACTUAL)
                                if (_str_Fin_Condicion_ACTUAL != null && _str_Fin_Condicion_ACTUAL.Trim().Length > 0)
                                {
                                    #region Rango Actual (ActualIncio -> Actual Fin) - > Rango Existente (ExistenteIncio -> ExistenteFin)
                                    if (

                                        (
                                            //Rango Inicio Actual es mayor/igual que Rango Inicio Existente
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) > 0
                                            )
                                            &&
                                            //Rango Inicio Actual es menor/igual que Rango Fin Existente
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Fin_CodigoPostal_EXISTENTE) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Fin_CodigoPostal_EXISTENTE) < 0
                                            )
                                        )
                                        ||
                                        (
                                            //Rango Inicio Actual es menor/igual que Rango Inicio Existente
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) < 0
                                            )
                                            &&
                                            //Rango Fin Actual es mayor/igual que Rango Inicio Existente
                                            (
                                                String.Compare(_str_Fin_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                String.Compare(_str_Fin_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) > 0
                                            )
                                        )
                                        ||
                                        (
                                            //Rango Inicio Actual es mayor/igual que Rango Inicio Existente
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) > 0
                                            )
                                            &&
                                            //Rango Fin Actual es menor/igual que Rango Fin Existente
                                            (
                                                String.Compare(_str_Fin_CodigoPostal_ACTUAL, _str_Fin_CodigoPostal_EXISTENTE) == 0 ||
                                                String.Compare(_str_Fin_CodigoPostal_ACTUAL, _str_Fin_CodigoPostal_EXISTENTE) < 0
                                            )
                                        )
                                    )
                                    {
                                        bol_Existe = true;
                                    }
                                    #endregion
                                }
                                //Sin Condicion Final (ACTUAL)
                                else
                                {
                                    #region Sin Condicion Final
                                    //Rango Actual (Actual ->99999999) - > Rango Existente (ExistenteInicio -> ExistenteFin)

                                    if (

                                            (
                                                //Rango Inicio Actual es mayor/igual que Rango Inicio Existente
                                                (
                                                    String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                    String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) > 0
                                                )
                                                &&
                                                //Rango Inicio Actual es menor/igual que Rango Fin Existente
                                                (
                                                    String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Fin_CodigoPostal_EXISTENTE) == 0 ||
                                                    String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Fin_CodigoPostal_EXISTENTE) < 0
                                                )
                                            )
                                            ||
                                            (
                                                //Rango Inicio Actual es menor/igual que Rango Inicio Existente
                                                (
                                                    String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                    String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) < 0
                                                )
                                                &&
                                                //Rango Fin Actual es mayor/igual que Rango Inicio Existente
                                                (
                                                    String.Compare(str_Condicion_AUX_Final, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                    String.Compare(str_Condicion_AUX_Final, _str_Inicio_CodigoPostal_EXISTENTE) > 0
                                                )
                                            )
                                            ||
                                            (
                                                //Rango Inicio Actual es mayor/igual que Rango Inicio Existente
                                                (
                                                    String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                    String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) > 0
                                                )
                                                &&
                                                //Rango Fin Actual es menor/igual que Rango Fin Existente
                                                (
                                                    String.Compare(str_Condicion_AUX_Final, _str_Fin_CodigoPostal_EXISTENTE) == 0 ||
                                                    String.Compare(str_Condicion_AUX_Final, _str_Fin_CodigoPostal_EXISTENTE) < 0
                                                )
                                            )
                                        )
                                    {
                                        bol_Existe = true;
                                    }
                                    #endregion
                                }
                                
                            }
                            #endregion
                        }
                        //Sin Condicion Final (Existente)
                        else
                        {
                            //Si tiene segunda condicion(ACTUAL)
                            if (_str_Fin_Condicion_ACTUAL != null && _str_Fin_Condicion_ACTUAL.Trim().Length > 0)
                            {
                                #region Rango Actual (ActualIncio -> Actual Fin) - > Rango Existente (Existente -> 999999999)
                                    if (

                                        (
                                            //Rango Inicio Actual es mayor/igual que Rango Inicio Existente
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) > 0
                                            )
                                            &&
                                            //Rango Inicio Actual es menor/igual que Rango Fin Existente
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Condicion_AUX_Final) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Condicion_AUX_Final) < 0
                                            )
                                        )
                                        ||
                                        (
                                            //Rango Inicio Actual es menor/igual que Rango Inicio Existente
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) < 0
                                            )
                                            &&
                                            //Rango Fin Actual es mayor/igual que Rango Inicio Existente
                                            (
                                                String.Compare(_str_Fin_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                String.Compare(_str_Fin_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) > 0
                                            )
                                        )
                                        ||
                                        (
                                            //Rango Inicio Actual es mayor/igual que Rango Inicio Existente
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) > 0
                                            )
                                            &&
                                            //Rango Fin Actual es menor/igual que Rango Fin Existente
                                            (
                                                String.Compare(_str_Fin_CodigoPostal_ACTUAL, str_Condicion_AUX_Final) == 0 ||
                                                String.Compare(_str_Fin_CodigoPostal_ACTUAL, str_Condicion_AUX_Final) < 0
                                            )
                                        )
                                    )
                                    {
                                        bol_Existe = true;
                                    }
                                    #endregion
                            }
                            //Sin Condicion Final (ACTUAL)
                            else
                            {
                                #region Sin Condicion Final
                                //Rango Actual (Actual ->99999999) - > Rango Existente (Existente -> 999999999)

                                if (
                                        
                                        (
                                            //Rango Inicio Actual es mayor/igual que Rango Inicio Existente
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) > 0
                                            )
                                            &&
                                            //Rango Inicio Actual es menor/igual que Rango Fin Existente
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Condicion_AUX_Final) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, str_Condicion_AUX_Final) < 0
                                            )
                                        )
                                        ||
                                        (
                                            //Rango Inicio Actual es menor/igual que Rango Inicio Existente
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) < 0
                                            )
                                            &&
                                            //Rango Fin Actual es mayor/igual que Rango Inicio Existente
                                            (
                                                String.Compare(str_Condicion_AUX_Final, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                String.Compare(str_Condicion_AUX_Final, _str_Inicio_CodigoPostal_EXISTENTE) > 0
                                            )
                                        )
                                        ||
                                        (
                                            //Rango Inicio Actual es mayor/igual que Rango Inicio Existente
                                            (
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE) == 0 ||
                                                String.Compare(_str_Inicio_CodigoPostal_ACTUAL, _str_Inicio_CodigoPostal_EXISTENTE)> 0
                                            )
                                            &&
                                            //Rango Fin Actual es menor/igual que Rango Fin Existente
                                            (
                                                String.Compare(str_Condicion_AUX_Final, str_Condicion_AUX_Final) == 0 ||
                                                String.Compare(str_Condicion_AUX_Final, str_Condicion_AUX_Final) < 0
                                            )
                                        )
                                    )
                                {
                                    bol_Existe = true;
                                }
                                #endregion
                            }
                        }
                    }
                    #endregion
                }
                #endregion

            }
            return bol_Existe;
        }
    }
}
