using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Visualizacion;
using Exferia_Controles;
using Exferia_EntityFramework;
using Exferia_Formularios;
using Exferia_General;
using Exferia_General._3_Vistas.ListadosSeleccion;
using Exferia_GestionTasas._1_Datos;
using Exferia_GestionTasas._3_Vistas.ControlesPersonalizados_DentroPaneles;
using Exferia_GestionTasas.General;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Transactions;
using System.Windows.Forms;
using static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_GestionTasas._3_Vistas.Controladoras
{
    public class P_Concepto_Controladora
    {
        #region Variables Generales
        private P_Concepto g_frm_P_Concepto = 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

        //variable sacada de Obtener_Ejercicio() para usarlo en otros lugares del codigo
        public List<GEN_EjerciciosActivos_Empresa> g_lst_GEN_EjerciciosActivos_Empresa = new List<GEN_EjerciciosActivos_Empresa>();

        //Clases de Negocio Necesarias para la carga de datos
        private GTT_Conceptos_Datos g_obj_GTT_Conceptos_Datos = new GTT_Conceptos_Datos();
        private GTT_Conceptos_Ejercicio_Datos g_obj_GTT_Conceptos_Ejercicio_Datos = new GTT_Conceptos_Ejercicio_Datos();

        public GTT_Conceptos g_mdl_GTT_Conceptos = null;//Modelo de los datos de Conceptos, cargados

        public bool g_bol_Termino_CargaDatos_Inicial = false;//Se utiliza para saber cuando se termina la carga de datos estaticos inciales

        //Tareea Asincrona de carga de datos
        private BackgroundWorker g_obj_TareaAsincrona_CargarDatos;
        private bool g_bol_Cancelar_TareaAsincrona_CargarDatos = false;

        //Tareea Asincrona de grabar de datos
        private BackgroundWorker g_obj_TareaAsincrona_GrabarDatos;
        private bool g_bol_GrabarDatos_TerminoCorrectamente = true;
        private bool g_bol_GrabarDatos_VolverListado = true;

        //Tareea Asincrona de borrar de datos
        private BackgroundWorker g_obj_TareaAsincrona_BorrarDatos;
        private bool g_bol_BorrarDatos_VolverListado = true;

        public string g_str_Denominacion_Codigo = "";

        //Variables para la creacion de las Lineas ##############
        private int g_int_Lineas_PosicionY = 5;
        private int g_int_NumeroLineas = 0;
        private Dictionary<long, int> g_dct_Lineas = new Dictionary<long, int>();

        public bool g_bol_CampoCodigo_Numerico = false;
        #endregion

        public P_Concepto_Controladora(P_Concepto _frm_P_Concepto)
        {
            g_frm_P_Concepto = _frm_P_Concepto;

            Obtener_Ejercicios();

            g_bol_Termino_CargaDatos_Inicial = true;
        }

        public void VaciarDatos()
        {
            g_frm_P_Concepto.Exferia_TextBox_Codigo.Text = "";
            g_frm_P_Concepto.Exferia_TextBox_Descripcion.Text = "";
            g_frm_P_Concepto.Exferia_Label_SinColor_Denominacion_Valor.Text = "";
            g_frm_P_Concepto.Exferia_RadioButton_Tipo_ALTA.Checked = true;

            //Vaciar Valores
            CTU_P_Concepto_Tasa obj_CTU_P_Concepto_Tasa = null;
            if (g_dct_Lineas.Values.Count > 0)
            {
                foreach (int int_ValorLinea in g_dct_Lineas.Values)
                {
                    GTT_Conceptos_Ejercicio mdl_GTT_Conceptos_Ejercicio = new GTT_Conceptos_Ejercicio();

                    obj_CTU_P_Concepto_Tasa = (CTU_P_Concepto_Tasa)g_frm_P_Concepto.Exferia_Panel_Degradado_Tasas.Controls.Find("controlusuario_CTU_P_Concepto_Tasa" + int_ValorLinea, true).FirstOrDefault();

                    if (obj_CTU_P_Concepto_Tasa != null)
                    {
                        obj_CTU_P_Concepto_Tasa.Vaciar_Valores();
                    }
                }
            }

            string[] str_Separador = new string[] { " [" };
            //Si ya hay valores de objeto, los elimino para rellenarlos de nuevo
            if (g_frm_P_Concepto.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None).Count() > 1)
            {
                g_frm_P_Concepto.P_Base_TituloPantalla = (g_frm_P_Concepto.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_Concepto.Tag.ToString());
            //#################################################################################################
           
            g_mdl_GTT_Conceptos = null;
        }

        public INTERNO_ValorDevuelto_Modelo Buscar_CodigoSiguiente()
        {
            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                GTT_Conceptos obj_GTT_Conceptos;

                string str_CodigoSiguiente = Datos_Generales.Buscar_CodigoSiguiente(nameof(GTT_Conceptos),
                                                                                                     nameof(obj_GTT_Conceptos.codigo),
                                                                                                     "",
                                                                                                     -1,
                                                                                                     true,
                                                                                                     g_frm_P_Concepto.Exferia_TextBox_Codigo.Exferia_TextBox_MaxLength);

                if (!str_CodigoSiguiente.Equals("-1"))
                {
                    g_frm_P_Concepto.Exferia_TextBox_Codigo.Text = str_CodigoSiguiente;
                }
                else
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_CODIGOSIGUIENTE_LIMITEALCANZADO(g_frm_P_Concepto.Exferia_Label_Codigo.Text);
                }
            }
            catch (Control_Errores)
            {
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BUSCARCODIGOSIGUIENTE();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Concepto_Controladora) + "/" + nameof(Buscar_CodigoSiguiente));
                mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BUSCARCODIGOSIGUIENTE();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        public bool ComprobarCambios()
        {
            if (g_frm_P_Concepto.P_Base_SeModificoDatosPantalla)
            {
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_GUARDARCAMBIOS()))
                {
                    GrabarDatos(false);

                    //Te quedas espernado a que termine la tarea asincrona de grabar
                    while (g_obj_TareaAsincrona_GrabarDatos.IsBusy)
                        Application.DoEvents();

                    return g_bol_GrabarDatos_TerminoCorrectamente;
                }
            }
            return true;
        }

        #region Cargar Datos
        public void RecargarDatos()
        {
            try
            {
                //Bloquear el fomrulario para que no se pueda hacer nada hasta que termine
                g_frm_P_Concepto.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)
                {
                    g_bol_Cancelar_TareaAsincrona_CargarDatos = true;

                    while (g_obj_TareaAsincrona_CargarDatos.IsBusy)
                        Application.DoEvents();

                    //Vaciar
                    VaciarDatos();
                }
                else
                {
                    g_obj_TareaAsincrona_CargarDatos = new BackgroundWorker();
                    g_obj_TareaAsincrona_CargarDatos.DoWork += new DoWorkEventHandler(TareaAsincrona_CargarDatos_DoWork);
                    g_obj_TareaAsincrona_CargarDatos.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_CargarDatos_ProgressChanged);
                    g_obj_TareaAsincrona_CargarDatos.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_CargarDatos_Completed);
                    g_obj_TareaAsincrona_CargarDatos.WorkerReportsProgress = true;
                }

                g_bol_Cancelar_TareaAsincrona_CargarDatos = false;

                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_obj_TareaAsincrona_CargarDatos.RunWorkerAsync();
                //#################################################################################################

                g_frm_PE_Esperando.ShowDialog();

            }
            catch (Exception ex)
            {
                g_frm_P_Concepto.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_Concepto_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_Concepto.P_Base_id) == false)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA();
                }

                if (g_mdl_GTT_Conceptos != null)
                {
                    //Crear las lineas de Ejercicios
                    if (g_mdl_GTT_Conceptos.GTT_Conceptos_Ejercicio != null && g_mdl_GTT_Conceptos.GTT_Conceptos_Ejercicio.Count() > 0)
                    {
                        foreach (GTT_Conceptos_Ejercicio mdl_GTT_Conceptos_Ejercicio in g_mdl_GTT_Conceptos.GTT_Conceptos_Ejercicio)
                        {
                            ((BackgroundWorker)sender).ReportProgress(1, mdl_GTT_Conceptos_Ejercicio);
                        }
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Concepto_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.Message, ex, nameof(P_Concepto_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_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                //Actualizar datos de las tasas
                GTT_Conceptos_Ejercicio mdl_GTT_Conceptos_Ejercicio = (GTT_Conceptos_Ejercicio)e.UserState;
                int int_PosicionObjeto = g_dct_Lineas[mdl_GTT_Conceptos_Ejercicio.idEjercicio];
                CTU_P_Concepto_Tasa obj_CTU_P_Concepto_Tasa_ACTUALIZAR = (CTU_P_Concepto_Tasa)g_frm_P_Concepto.Exferia_Panel_Degradado_Tasas.Controls.Find("controlusuario_CTU_P_Concepto_Tasa" + int_PosicionObjeto, false).FirstOrDefault();

                if (obj_CTU_P_Concepto_Tasa_ACTUALIZAR != null)
                {
                    obj_CTU_P_Concepto_Tasa_ACTUALIZAR.Actualizar_Valores(mdl_GTT_Conceptos_Ejercicio);
                }

            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Concepto_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_ProgressChanged));
            }
        }
        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_Concepto.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)
                {
                    Mensajes.MostrarMensaje(mdl_ValorDevuelto_Modelo_Resultado.Mensaje);
                    g_frm_P_Concepto.Salir_P_Base();
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Concepto_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());

                g_frm_P_Concepto.Salir_P_Base();
            }
            finally
            {
                //Hacemos foco al primer control.
                g_frm_P_Concepto.Exferia_TextBox_Codigo.Exferia_TextBox_Foco();
            }
        }
        public bool CargarDatos(long _lng_id)
        {
            bool bol_ValorDevuelto = true;
            try
            {
                g_mdl_GTT_Conceptos = g_obj_GTT_Conceptos_Datos.Obtener(_lng_id);

                //Si no es nulo cargo los datos
                if (g_mdl_GTT_Conceptos != null)
                {
                    //Paginador ................................................................................
                    if (g_frm_P_Concepto.P_Base_PantallaOrigen != null &&
                        g_frm_P_Concepto.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados != null &&
                        g_frm_P_Concepto.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.Count > 0)
                    {
                        long lng_id_ParaPaginacion = g_mdl_GTT_Conceptos.id;
                        int int_PaginaDelObjeto = g_frm_P_Concepto.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.IndexOf(g_frm_P_Concepto.P_Base_PantallaOrigen.P_Base_Objetos_Filtrados.Where(n => n.ID.Equals(lng_id_ParaPaginacion)).FirstOrDefault());

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

                    //TextBox
                    g_frm_P_Concepto.Exferia_TextBox_Codigo.Text = g_mdl_GTT_Conceptos.codigo;
                    g_frm_P_Concepto.Exferia_TextBox_Descripcion.Text = g_mdl_GTT_Conceptos.descripcion;

                    //Se cancelo la carga .....................
                    if (g_bol_Cancelar_TareaAsincrona_CargarDatos)
                    {
                        return true;
                    }
                    //........................................

                    // RadioButton
                    if (g_mdl_GTT_Conceptos.tipo==2)
                    {
                        g_frm_P_Concepto.Exferia_RadioButton_Tipo_PERMANENCIA.Checked = true;
                    }
                    else if (g_mdl_GTT_Conceptos.tipo == 3)
                    {
                        g_frm_P_Concepto.Exferia_RadioButton_Tipo_OTRA.Checked = true;
                    }
                    else
                    {
                        g_frm_P_Concepto.Exferia_RadioButton_Tipo_ALTA.Checked = true;
                    }

                    //Denominacion
                    INTERNO_CodigoDescripcion_Modelo mdl_Denominacion_INTERNO_CodigoDescripcion_Modelo = Variables.G_LST_DENOMINACIONES.Where(m => m.Codigo.Equals(g_mdl_GTT_Conceptos.denominacionCodigo)).FirstOrDefault();
                    if (mdl_Denominacion_INTERNO_CodigoDescripcion_Modelo != null)
                    {
                        g_str_Denominacion_Codigo = mdl_Denominacion_INTERNO_CodigoDescripcion_Modelo.Codigo;
                        g_frm_P_Concepto.Exferia_Label_SinColor_Denominacion_Valor.Text = mdl_Denominacion_INTERNO_CodigoDescripcion_Modelo.Descripcion;
                    }

                    // Mostrar Campo en el Titulo de mantenimiento
                    string str_MenuSuperior_Codigo = "";
                    if (g_frm_P_Concepto.g_mdl_PRV_OpcionesDetalle != null &&
                        g_frm_P_Concepto.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento != null &&
                        g_frm_P_Concepto.g_mdl_PRV_OpcionesDetalle.camposMostrar_TituloMantenimiento.Trim().Length > 0)
                    {
                        //Obtener el Array de Campos
                        string[] arr_Campos = g_frm_P_Concepto.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_Concepto.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None).Count() > 1)
                        {
                            g_frm_P_Concepto.P_Base_TituloPantalla = (g_frm_P_Concepto.P_Base_TituloPantalla.Split(str_Separador, StringSplitOptions.None))[0];
                        }

                        dynamic dnm_Objeto = g_mdl_GTT_Conceptos;
                        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;
                            }

                            // codigo
                            if (str_campo.Equals(nameof(g_mdl_GTT_Conceptos.codigo)))
                            {
                                str_MenuSuperior_Codigo = g_mdl_GTT_Conceptos.codigo;
                            }
                        }
                        if (str_ValorAMostrarFinal != "")
                        {
                            g_frm_P_Concepto.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_Concepto.Tag.ToString(), str_MenuSuperior_Codigo);
                    //#################################################################################################

                    g_frm_P_Concepto.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Control_Errores)
            {
                bol_ValorDevuelto = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Concepto_Controladora) + "/" + nameof(CargarDatos));
                bol_ValorDevuelto = false;
            }

            return bol_ValorDevuelto;
        }
        #endregion

        #region Grabar Datos
        public void GrabarDatos(bool _bol_VolverAlListado)
        {
            try
            {
                g_bol_GrabarDatos_VolverListado = _bol_VolverAlListado;

                g_bol_GrabarDatos_TerminoCorrectamente = true;

                g_frm_P_Concepto.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_Concepto.Enabled = true;

                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Concepto_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_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

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

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

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_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_Concepto.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 tuvoel problema en validar
                        if (mdl_ValorDevuelto_Modelo_Resultado.Objeto != null)
                        {
                            Funciones.Poner_Foco_Objeto(g_frm_P_Concepto, mdl_ValorDevuelto_Modelo_Resultado.Objeto);
                        }
                    }

                    g_bol_GrabarDatos_TerminoCorrectamente = false;
                }
                else
                {
                    // Devolver al Listado el Row Añadido/Modificado
                    if (g_frm_P_Concepto.P_Base_PantallaOrigen != null)
                    {
                        g_frm_P_Concepto.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }
                    else if (g_frm_P_Concepto.P_Base_F3Origen != null)
                    {
                        g_frm_P_Concepto.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }

                    if (g_bol_GrabarDatos_VolverListado)
                    {
                        g_frm_P_Concepto.P_Base_SeModificoDatosPantalla = false;
                        g_frm_P_Concepto.Salir_P_Base();
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Concepto_Controladora) + "/" + nameof(TareaAsincrona_GrabarDatos_Completed));
            }
        }
        public INTERNO_ValorDevuelto_Modelo ValidarDatos()
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            //Solo se Utiliza para ver el Nombre de los campos
            GTT_Conceptos mdl_GTT_Conceptos;
            try
            {
                //Si el codigo esta vacio y se intenta buscar el ultimo numerico y llego al limite de base de datos
                if (g_frm_P_Concepto.Exferia_TextBox_Codigo.Text.Trim().Length == 0)
                {
                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = Buscar_CodigoSiguiente();

                    if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto == false)
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = mdl_INTERNO_ValorDevuelto_Modelo.Mensaje;
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Concepto.Exferia_TextBox_Codigo;
                    }
                }

                // El codigo no puede estar Repetido
                if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    string str_Codigo = g_frm_P_Concepto.Exferia_TextBox_Codigo.Text.Trim();
                    if (g_bol_CampoCodigo_Numerico)
                    {
                        int int_Codigo = int.Parse(str_Codigo);
                        str_Codigo = int_Codigo.ToString();
                    }

                    if (Datos_Generales.Buscar_CodigoRepetido(nameof(GTT_Conceptos), nameof(mdl_GTT_Conceptos.codigo), str_Codigo, nameof(mdl_GTT_Conceptos.id), (g_mdl_GTT_Conceptos != null ? g_mdl_GTT_Conceptos.id : -1), "", g_frm_P_Concepto.P_Base_ValoresGenerales.lng_idEmpresa, true))
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_REPETIDO(g_frm_P_Concepto.Exferia_Label_Codigo.Text);
                        mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Concepto.Exferia_TextBox_Codigo;
                    }
                }

                // La decripcion no puede estar vacía
                if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && (g_frm_P_Concepto.Exferia_TextBox_Descripcion.Text.Trim().Length == 0))
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Concepto.Exferia_Label_Descripcion.Text);
                    mdl_ValorDevuelto_Modelo.Objeto = g_frm_P_Concepto.Exferia_TextBox_Descripcion;
                }

                // La Denominacion no puede estar vacía
                if ((mdl_ValorDevuelto_Modelo.TodoCorrecto) && g_str_Denominacion_Codigo.Trim().Length==0)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Concepto.Exferia_Label_Denominacion.Text);
                }
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_VALIDARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Concepto_Controladora) + "/" + nameof(ValidarDatos));

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

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

            //Iniciar transaccion
            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required))
            {
                try
                {
                    GTT_Conceptos mdl_GTT_Concepto = new GTT_Conceptos();
                    mdl_GTT_Concepto.id = g_mdl_GTT_Conceptos != null ? g_mdl_GTT_Conceptos.id : -1;

                    //Si el codigo está vacio, buscar el siguiente automaticamente
                    if (g_frm_P_Concepto.Exferia_TextBox_Codigo.Text.Trim().Length == 0)
                    {
                        Buscar_CodigoSiguiente();
                    }

                    //TextBox
                    mdl_GTT_Concepto.codigo = g_frm_P_Concepto.Exferia_TextBox_Codigo.Text.Trim();

                    mdl_GTT_Concepto.descripcion = g_frm_P_Concepto.Exferia_TextBox_Descripcion.Text.Trim();            

                    mdl_GTT_Concepto.denominacionCodigo = g_str_Denominacion_Codigo;

                    //RadioButton
                    if (g_frm_P_Concepto.Exferia_RadioButton_Tipo_PERMANENCIA.Checked)
                    {
                        mdl_GTT_Concepto.tipo = 2;
                    }
                    else if (g_frm_P_Concepto.Exferia_RadioButton_Tipo_OTRA.Checked)
                    {
                        mdl_GTT_Concepto.tipo = 3;
                    }
                    else 
                    {
                        mdl_GTT_Concepto.tipo = 1;
                    }

                    //Se graba el modelo ya relleno
                    mdl_ValorDevuelto_Modelo = g_obj_GTT_Conceptos_Datos.Grabar(mdl_GTT_Concepto);

                    if (mdl_ValorDevuelto_Modelo.TodoCorrecto)
                    {
                        long lng_idConcepto = mdl_ValorDevuelto_Modelo.Id;

                        //BORRO LAS LINEAS SI HUBIERA ALGUNA PA BORRAR
                        List<long> lst_BORRAR = Obtener_Conceptos_Ejercicio_Panel_BORRAR();
                        if (lst_BORRAR!=null && lst_BORRAR.Count > 0)
                        {
                            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_BORRAR = new INTERNO_ValorDevuelto_Modelo();
                            foreach (long lng_id in lst_BORRAR)
                            {
                                mdl_INTERNO_ValorDevuelto_Modelo_BORRAR = g_obj_GTT_Conceptos_Ejercicio_Datos.Borrar(lng_id);

                                if (mdl_INTERNO_ValorDevuelto_Modelo_BORRAR.TodoCorrecto == false)
                                {
                                    transaccion_SQL.Dispose();
                                    return mdl_INTERNO_ValorDevuelto_Modelo_BORRAR;
                                }
                            }
                        }

                        //GRABAR LAS LINEAS SI HUBIERA ALGUNA PA BORRAR
                        List<GTT_Conceptos_Ejercicio> lst_GTT_Conceptos_Ejercicio_GRABAR= Obtener_Conceptos_Ejercicio_Panel_GRABAR(lng_idConcepto);
                        if (lst_GTT_Conceptos_Ejercicio_GRABAR != null && lst_GTT_Conceptos_Ejercicio_GRABAR.Count > 0)
                        {
                            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_GRABAR = new INTERNO_ValorDevuelto_Modelo();
                            foreach (GTT_Conceptos_Ejercicio mdl_GTT_Conceptos_Ejercicio in lst_GTT_Conceptos_Ejercicio_GRABAR)
                            {
                                mdl_INTERNO_ValorDevuelto_Modelo_GRABAR = g_obj_GTT_Conceptos_Ejercicio_Datos.Grabar(mdl_GTT_Conceptos_Ejercicio);

                                if (mdl_INTERNO_ValorDevuelto_Modelo_GRABAR.TodoCorrecto == false)
                                {
                                    transaccion_SQL.Dispose();
                                    return mdl_INTERNO_ValorDevuelto_Modelo_GRABAR;
                                }
                            }
                        }

                        //Termino Transaccion
                        transaccion_SQL.Complete();
                    }

                    transaccion_SQL.Dispose();

                    return mdl_ValorDevuelto_Modelo;
                }
                catch (Control_Errores)
                {
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
                    transaccion_SQL.Dispose();
                }
                catch (Exception ex)
                {
                    Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Concepto_Controladora) + "/" + nameof(GrabarDatos_Final));
                    mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_GRABARDATOSPANTALLA();
                    transaccion_SQL.Dispose();
                }
            }
            return mdl_ValorDevuelto_Modelo;
        }
        #endregion

        #region Borrar Datos
        public void BorrarDatos(bool _bol_VolverAlListado)
        {
            try
            {
                // Preguntar si esta Seguro de Borrar
                if (Mensajes.MostrarMensaje_Pregunta(Mensajes.G_STR_MENSAJES_GENERAL_PREGUNTA_BORRAR()))
                {
                    g_bol_BorrarDatos_VolverListado = _bol_VolverAlListado;
                    g_frm_P_Concepto.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_Concepto.Enabled = true;

                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Concepto_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_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                //Borrar
                e.Result = BorrarDatos_Final();
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Concepto_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_DoWork));

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

                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            finally
            {
                e.Result = mdl_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_Concepto.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
                    if (g_frm_P_Concepto.P_Base_PantallaOrigen != null)
                    {
                        g_frm_P_Concepto.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }
                    else if (g_frm_P_Concepto.P_Base_F3Origen != null)
                    {
                        g_frm_P_Concepto.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }

                    if (g_bol_BorrarDatos_VolverListado)
                    {
                        g_frm_P_Concepto.P_Base_SeModificoDatosPantalla = false;
                        g_frm_P_Concepto.Salir_P_Base();
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Concepto_Controladora) + "/" + nameof(TareaAsincrona_BorrarDatos_Completed));
            }
        }
        private INTERNO_ValorDevuelto_Modelo BorrarDatos_Final()
        {
            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            try
            {
                mdl_ValorDevuelto_Modelo = g_obj_GTT_Conceptos_Datos.Borrar(g_mdl_GTT_Conceptos != null ? g_mdl_GTT_Conceptos.id : -1);

                return mdl_ValorDevuelto_Modelo;
            }
            catch (Control_Errores)
            {
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Concepto_Controladora) + "/" + nameof(BorrarDatos_Final));
                mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_GENERAL_ERROR_BORRARDATOSPANTALLA();
            }

            return mdl_ValorDevuelto_Modelo;
        }
        #endregion

        #region Lineas
        private void Obtener_Ejercicios()
        {
            try
            {
                 g_lst_GEN_EjerciciosActivos_Empresa = Datos_Generales.GEN_EjerciciosActivos_Empresa_Obtener_Listado_Por_Empresa(g_frm_P_Concepto.P_Base_ValoresGenerales.lng_idEmpresa);

                if (g_lst_GEN_EjerciciosActivos_Empresa != null)
                {
                    foreach (GEN_EjerciciosActivos_Empresa mdl_GEN_EjerciciosActivos_Empresa in g_lst_GEN_EjerciciosActivos_Empresa.OrderByDescending(m=>m.anioControl))
                    {
                        Crear_Linea(mdl_GEN_EjerciciosActivos_Empresa);
                    }
                }
            }
            catch (Control_Errores)
            {}
            catch (Exception ex)
            {
                Control_Errores.Errores_Log(ex.Message, ex, nameof(P_Concepto_Controladora) + "/" + nameof(Obtener_Ejercicios));
            }
        }
        private void Crear_Linea(GEN_EjerciciosActivos_Empresa _mdl_GEN_EjerciciosActivos_Empresa)
        {
            //Añadir control creado en subproceso en el hilo principal ....................................................
            if (g_frm_P_Concepto.InvokeRequired) //Line #1
            {
                g_frm_P_Concepto.Invoke((MethodInvoker)delegate
                {
                    Crear_Linea(_mdl_GEN_EjerciciosActivos_Empresa);
                });
                return;
            }

            g_int_NumeroLineas += 1;

            //Calcular tamaño el panel #############################
            int int_AnchoPanelPrincipal = (624 * g_frm_P_Concepto.Exferia_Panel_Degradado_Tasas.Width) / 634;
            if (g_frm_P_Concepto.Exferia_Panel_Degradado_Tasas.Controls != null && g_frm_P_Concepto.Exferia_Panel_Degradado_Tasas.Controls.Count > 0 && g_dct_Lineas.Count > 0)
            {
                int_AnchoPanelPrincipal = g_frm_P_Concepto.Exferia_Panel_Degradado_Tasas.Controls.Find("controlusuario_CTU_P_Concepto_Tasa" + g_dct_Lineas.Values.FirstOrDefault(), false).FirstOrDefault().Width;
            }
           
            //Objeto Personalizado
            int int_posicionRelativa = g_int_Lineas_PosicionY + (g_frm_P_Concepto.Exferia_Panel_Degradado_Tasas.DisplayRectangle.Y + 5);
            CTU_P_Concepto_Tasa controlusuario_CTU_P_Concepto_Tasa = new CTU_P_Concepto_Tasa(g_frm_P_Concepto, g_int_NumeroLineas, _mdl_GEN_EjerciciosActivos_Empresa);
            controlusuario_CTU_P_Concepto_Tasa.Name = "controlusuario_CTU_P_Concepto_Tasa" + g_int_NumeroLineas;
            controlusuario_CTU_P_Concepto_Tasa.Size = new Size(int_AnchoPanelPrincipal, 370);
            controlusuario_CTU_P_Concepto_Tasa.Location = new Point(5, int_posicionRelativa);
            controlusuario_CTU_P_Concepto_Tasa.Anchor = (AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Left);
            controlusuario_CTU_P_Concepto_Tasa.TextBox_P_Concepto_Tasa_TextChanged += new EventHandler(TextBox_Changed);

            //Añadir al panel Principal
            g_frm_P_Concepto.Exferia_Panel_Degradado_Tasas.Controls.Add(controlusuario_CTU_P_Concepto_Tasa);
            g_dct_Lineas.Add(_mdl_GEN_EjerciciosActivos_Empresa.id,g_int_NumeroLineas);

            g_int_Lineas_PosicionY = controlusuario_CTU_P_Concepto_Tasa.Location.Y + controlusuario_CTU_P_Concepto_Tasa.Height + 5;

        }

        private List<long> Obtener_Conceptos_Ejercicio_Panel_BORRAR()
        {
            List<long> lst_idConcepto_Ejercicio = new List<long>();
            CTU_P_Concepto_Tasa obj_CTU_P_Concepto_Tasa = null;
            if (g_dct_Lineas.Values.Count > 0)
            {
                foreach (int int_ValorLinea in g_dct_Lineas.Values)
                {
                    GTT_Conceptos_Ejercicio mdl_GTT_Conceptos_Ejercicio = new GTT_Conceptos_Ejercicio();

                    obj_CTU_P_Concepto_Tasa = (CTU_P_Concepto_Tasa)g_frm_P_Concepto.Exferia_Panel_Degradado_Tasas.Controls.Find("controlusuario_CTU_P_Concepto_Tasa" + int_ValorLinea, true).FirstOrDefault();

                    if (obj_CTU_P_Concepto_Tasa != null)
                    {
                        //id
                        if (obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_Tasa_id > -1 &&
                            obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_TextoDescriptivo_Inicial.Trim().Length==0 &&
                            obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_Tasa_TasaInicial==null &&
                            obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_TextoDescriptivo_Permanencia.Trim().Length == 0 &&
                            obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_Tasa_TasaPermanencia == null &&
                            obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_TextoDescriptivo_Permanencia.Trim().Length == 0 &&
                            obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_Tasa_TasaPermanencia == null)
                        {
                            lst_idConcepto_Ejercicio.Add(obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_Tasa_id);
                        } 
                    }
                }
            }

            return lst_idConcepto_Ejercicio;
        }

        private List<GTT_Conceptos_Ejercicio> Obtener_Conceptos_Ejercicio_Panel_GRABAR(long _lng_idConcepto)
        {
            List<GTT_Conceptos_Ejercicio> lst_GTT_Conceptos_Ejercicio = new List<GTT_Conceptos_Ejercicio>();
            CTU_P_Concepto_Tasa obj_CTU_P_Concepto_Tasa = null;
            if (g_dct_Lineas.Values.Count > 0)
            {
                foreach (int int_ValorLinea in g_dct_Lineas.Values)
                {
                    GTT_Conceptos_Ejercicio mdl_GTT_Conceptos_Ejercicio = new GTT_Conceptos_Ejercicio();

                    obj_CTU_P_Concepto_Tasa = (CTU_P_Concepto_Tasa)g_frm_P_Concepto.Exferia_Panel_Degradado_Tasas.Controls.Find("controlusuario_CTU_P_Concepto_Tasa" + int_ValorLinea, true).FirstOrDefault();

                    if (obj_CTU_P_Concepto_Tasa != null)
                    {
                        //id
                        if (obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_TextoDescriptivo_Inicial.Trim().Length > 0 ||
                            obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_Tasa_TasaInicial != null ||
                            obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_TextoDescriptivo_Permanencia.Trim().Length > 0 ||
                            obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_Tasa_TasaPermanencia != null ||
                            obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_TextoDescriptivo_Permanencia.Trim().Length > 0 ||
                            obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_Tasa_TasaPermanencia != null)
                        {
                            //id
                            mdl_GTT_Conceptos_Ejercicio.id = obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_Tasa_id;

                            //idEjercicio
                            mdl_GTT_Conceptos_Ejercicio.idEjercicio = obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_Tasa_idEjercicio;

                            //idConcepto
                            mdl_GTT_Conceptos_Ejercicio.idConcepto = _lng_idConcepto;

                            //Tasa Inicial
                            mdl_GTT_Conceptos_Ejercicio.tasa_Inicial = obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_Tasa_TasaInicial;

                            //textoIncluidoRecibos Inicial
                            mdl_GTT_Conceptos_Ejercicio.textoIncluidoRecibos_Inicial = obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_TextoDescriptivo_Inicial;

                            //Tasa Permanencia
                            mdl_GTT_Conceptos_Ejercicio.tasa_Permanencia = obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_Tasa_TasaPermanencia;

                            //textoIncluidoRecibos Permanencia
                            mdl_GTT_Conceptos_Ejercicio.textoIncluidoRecibos_Permanencia = obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_TextoDescriptivo_Permanencia;

                            //Tasa Solicitud
                            mdl_GTT_Conceptos_Ejercicio.tasa_Solicitud = obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_Tasa_TasaSolicitud;

                            //textoIncluidoRecibos Solicitud
                            mdl_GTT_Conceptos_Ejercicio.textoIncluidoRecibos_Solicitud= obj_CTU_P_Concepto_Tasa.CTU_P_Concepto_TextoDescriptivo_Solicitud;

                            //Añadir al listado
                            lst_GTT_Conceptos_Ejercicio.Add(mdl_GTT_Conceptos_Ejercicio);
                        }
                    }
                }
            }

            return lst_GTT_Conceptos_Ejercicio;
        }

        private void TextBox_Changed(object sender, EventArgs e)
        {
            g_frm_P_Concepto.P_Base_SeModificoDatosPantalla = true;
        }
        #endregion
    }
}

