using Exferia_Aplicacion.General;
using Exferia_EntityFramework;
using Exferia_Formularios;
using Exferia_General;
using Exferia_Mythos._0_Modelos;
using Exferia_Mythos._1_Datos;
using Exferia_Mythos._3_Vistas.Listados;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Globalization;
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_Mythos._3_Vistas.Controladoras
{
    public class P_Inspeccion_Controladora
    {
        #region Varibales Generales
        private P_Inspeccion g_frm_P_Inspeccion = null;//Variables 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 MYT_Inspecciones_Datos g_obj_MYT_Inspecciones_Datos = new MYT_Inspecciones_Datos();
        private MYT_InstalacionesCabecera_Datos g_obj_MYT_InstalacionesCabecera_Datos = new MYT_InstalacionesCabecera_Datos();
        private MYT_InstalacionesLineas_Datos g_obj_MYT_InstalacionesLineas_Datos = new MYT_InstalacionesLineas_Datos();

        public MYT_Inspecciones g_mdl_MYT_Inspecciones=null;//Modelo de los datos cargados

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

        //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 bool g_bol_CampoCodigo_Numerico = false;

        #region Inspecciones Relacionadas
        //Tarea Asincrona para la Rellenar DataGridView de InspeccionesRelacionadas
        private BackgroundWorker g_TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas;

        //Listado de InspeccionesRealacionadas
        public List<INTERNO_MYT_Inspecciones_Listado_Modelo> g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo = null;

        //Listado de Columnas
        public List<INTERNO_ABS_Listado_ColumnasDatos_Modelo> g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Inspecciones_Columnas;

        //Para el filtrado del listado de MYT_Inspecciones
        public List<string> g_lst_ColumnasAMostrar_MYT_Inspecciones = new List<string>();
        public ABS_Listado_MYT_Inspecciones_P_Inspeccion g_obj_ABS_Listado_MYT_Inspecciones_P_Inspeccion = new ABS_Listado_MYT_Inspecciones_P_Inspeccion();
        public Dictionary<string, object> g_dct_ListadoFiltros_MYT_Inspecciones = new Dictionary<string, object>();
        private int g_int_TotalRegistrosInsertados_InspeccionesRelacionadas = 0;
        private int g_int_TotalRegistros_InspeccionesRelacionadas = 0;
        #endregion

        #endregion

        #region Constructor
        public P_Inspeccion_Controladora(P_Inspeccion _frm_P_Inspeccion)
        {
            g_frm_P_Inspeccion = _frm_P_Inspeccion;

            g_bol_Termino_CargaDatos_Inicial = true;
        }
        #endregion

        #region VaciarDatos
        private void VaciarDatos()
        {
            //Codigo
            g_frm_P_Inspeccion.Exferia_TextBox_Codigo.Text = "";

            //Cliente
            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_FechaBorrado = null;

            //InstalacionCabecera
            g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Id = -1;
            g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Codigo = "";
            g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Descripcion = "";
            g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_FechaBorrado = null;
            g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_RELACIONADOS = null;

            //InstalacionLinea
            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Id = -1;
            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Codigo = "";
            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Descripcion = "";
            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_FechaBorrado = null;
            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_RELACIONADOS = null;

            //OrganismoCertificador
            g_frm_P_Inspeccion.Exferia_F3_OrganismoCertificador.Exferia_F3_Id = -1;
            g_frm_P_Inspeccion.Exferia_F3_OrganismoCertificador.Exferia_F3_Codigo = "";
            g_frm_P_Inspeccion.Exferia_F3_OrganismoCertificador.Exferia_F3_Descripcion = "";
            g_frm_P_Inspeccion.Exferia_F3_OrganismoCertificador.Exferia_F3_FechaBorrado = null;

            //InspeccionRelacionada
            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_Id = -1;
            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_Codigo = "";
            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_FechaBorrado = null;

            //FechaRecibiAviso
            g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibiAviso.Exferia_FechaSeleccion_Fecha = "";

            //FechaRealizacionInspeccion
            g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRealizacionInspeccion.Exferia_FechaSeleccion_Fecha = "";

            //FechaLlegadaInforme
            g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaLlegadaInforme.Exferia_FechaSeleccion_Fecha = "";

            //Inspector_Codigo
            g_frm_P_Inspeccion.Exferia_TextBox_Inspector_Nombre.Text = "";

            //Inspector_Telefono
            g_frm_P_Inspeccion.Exferia_TextBox_Inspector_Telefono.Text = "";

            //Inspector_Email
            g_frm_P_Inspeccion.Exferia_TextBox_Inspector_Email.Text = "";

            //Resultado
            g_frm_P_Inspeccion.Exferia_F3_Resultado.Exferia_F3_Id = -1;
            g_frm_P_Inspeccion.Exferia_F3_Resultado.Exferia_F3_Codigo = "";
            g_frm_P_Inspeccion.Exferia_F3_Resultado.Exferia_F3_Descripcion = "";
            g_frm_P_Inspeccion.Exferia_F3_Resultado.Exferia_F3_FechaBorrado = null;

            Resultado_Fechas_BloquearDesbloquear(true);

            //EmpresaInstaladora
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Codigo.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_CIF.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_RazonSocial.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_NombreComercial.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Telefono1.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Telefono2.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Fax.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Email.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Web.Text = "";

            //Observaciones
            g_frm_P_Inspeccion.Exferia_TextBox_Observaciones.Text = "";

            //EmpresaInstaladora
            EmpresaInstaladora_VaciarDatos();

            //InspeccionesRelacionadas ................................................................................................................................................
            g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo = new List<INTERNO_MYT_Inspecciones_Listado_Modelo>();
            g_frm_P_Inspeccion.Exferia_DataGridView_InspeccionesRelacionadas.Rows.Clear();
            g_int_TotalRegistrosInsertados_InspeccionesRelacionadas = 0;
            g_int_TotalRegistros_InspeccionesRelacionadas = 0;
            g_frm_P_Inspeccion.Exferia_BarraProgreso_InspeccionesRelacionadas_BarraProgreso.Exferia_BarraProgreso_Total = g_int_TotalRegistros_InspeccionesRelacionadas;
            g_frm_P_Inspeccion.Exferia_BarraProgreso_InspeccionesRelacionadas_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_InspeccionesRelacionadas;

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

            g_mdl_MYT_Inspecciones = null;
        }
       
        #endregion

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

            try
            {
                string str_CodigoSiguiente = Datos_Generales.Buscar_CodigoSiguiente(nameof(MYT_Inspecciones),
                                                                                    nameof(MYT_Inspecciones.codigo),
                                                                                    "",
                                                                                    Datos_Generales.GEN_Empresas_Devolver_IdEmpresa_AGrabar(g_frm_P_Inspeccion.P_Base_ValoresGenerales.lng_idEmpresa, nameof(MYT_Inspecciones)),
                                                                                    true,
                                                                                    g_frm_P_Inspeccion.Exferia_TextBox_Codigo.Exferia_TextBox_MaxLength);
                if (!str_CodigoSiguiente.Equals("-1"))
                {
                    g_frm_P_Inspeccion.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_Inspeccion.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, nameof(P_Inspeccion_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;
        }
        #endregion

        #region Comprobar Cambios
        public bool ComprobarCambios()
        {
            if (g_frm_P_Inspeccion.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;
        }
        #endregion

        #region Cargar Datos
        public void RecargarDatos()
        {
            try
            {
                //Bloquear el formulario para que no se pueda hacer nada hasta que termine
                g_frm_P_Inspeccion.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.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_CargarDatos_Completed);
                    g_obj_TareaAsincrona_CargarDatos.WorkerReportsProgress = false;
                }

                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_Inspeccion.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_Inspeccion_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_Inspeccion.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_Inspeccion_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_Inspeccion_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_Inspeccion.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_Inspeccion.Salir_P_Base();
                    }
                }
                else
                {
                    if (g_mdl_MYT_Inspecciones.MYT_InspeccionesTiposResultados!=null &&
                        g_mdl_MYT_Inspecciones.MYT_InspeccionesTiposResultados.inspeccionFinalizada!=null &&
                        g_mdl_MYT_Inspecciones.MYT_InspeccionesTiposResultados.inspeccionFinalizada.Value)
                    {
                        Resultado_Fechas_BloquearDesbloquear(false);
                    }

                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Enabled = true;

                    Rellenar_DataGrid_InspeccionesRelacionadas(g_mdl_MYT_Inspecciones.id,true);
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Inspeccion_Controladora) + "/" + nameof(TareaAsincrona_CargarDatos_Completed));
                Mensajes.MostrarMensaje(Mensajes.G_STR_MENSAJES_GENERAL_ERROR_CARGARDATOSPANTALLA());

                g_frm_P_Inspeccion.Salir_P_Base();
            }
            finally
            {
                //Hacemos foco al primer control.
                g_frm_P_Inspeccion.Exferia_TextBox_Codigo.Exferia_TextBox_Foco();
            }
        }

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

            try
            {
                g_mdl_MYT_Inspecciones = g_obj_MYT_Inspecciones_Datos.Obtener(_lng_id);

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

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

                    //Codigo
                    g_frm_P_Inspeccion.Exferia_TextBox_Codigo.Text = g_mdl_MYT_Inspecciones.codigo;

                    //Cliente
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Id = g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.MYT_InstalacionesCabecera.MAE_Clientes.id;
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Codigo = g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.MYT_InstalacionesCabecera.MAE_Clientes.codigo;
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.MYT_InstalacionesCabecera.MAE_Clientes.razonSocial;
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.MYT_InstalacionesCabecera.MAE_Clientes.fechaBorrado;
                    
                    //InstalacionesCabecera
                    g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Id = g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.MYT_InstalacionesCabecera.id;
                    g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Codigo = g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.MYT_InstalacionesCabecera.codigo;
                    g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Descripcion = g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.MYT_InstalacionesCabecera.descripcion;
                    g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_FechaBorrado = g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.MYT_InstalacionesCabecera.fechaBorrado;

                    //InstalacionesLinea
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Id = g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.id;
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Codigo = g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.codigo;
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Descripcion = g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.descripcion;
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_FechaBorrado = g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.fechaBorrado;

                    //OrganismosCertificadores
                    if (g_mdl_MYT_Inspecciones.MYT_OrganismosCertificadores!=null)
                    {
                        g_frm_P_Inspeccion.Exferia_F3_OrganismoCertificador.Exferia_F3_Id = g_mdl_MYT_Inspecciones.MYT_OrganismosCertificadores.id;
                        g_frm_P_Inspeccion.Exferia_F3_OrganismoCertificador.Exferia_F3_Codigo = g_mdl_MYT_Inspecciones.MYT_OrganismosCertificadores.codigo;
                        g_frm_P_Inspeccion.Exferia_F3_OrganismoCertificador.Exferia_F3_Descripcion = g_mdl_MYT_Inspecciones.MYT_OrganismosCertificadores.razonSocial;
                        g_frm_P_Inspeccion.Exferia_F3_OrganismoCertificador.Exferia_F3_FechaBorrado = g_mdl_MYT_Inspecciones.MYT_OrganismosCertificadores.fechaBorrado;
                    }

                    //InspeccionRelacionada
                    if (g_mdl_MYT_Inspecciones.MYT_Inspecciones2 != null)
                    {
                        g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_Id = g_mdl_MYT_Inspecciones.MYT_Inspecciones2.id;
                        g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_Codigo = g_mdl_MYT_Inspecciones.MYT_Inspecciones2.codigo;
                        g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_FechaBorrado = g_mdl_MYT_Inspecciones.MYT_Inspecciones2.fechaBorrado;
                    }

                    //fechaRecibiAviso
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibiAviso.Exferia_FechaSeleccion_Fecha = g_mdl_MYT_Inspecciones.fechaRecibiAviso != null ? g_mdl_MYT_Inspecciones.fechaRecibiAviso.Value.ToString("dd/MM/yyyy") : "";

                    //fechaRealizacionInspeccion
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRealizacionInspeccion.Exferia_FechaSeleccion_Fecha = g_mdl_MYT_Inspecciones.fechaRealizacionInspeccion != null ? g_mdl_MYT_Inspecciones.fechaRealizacionInspeccion.Value.ToString("dd/MM/yyyy") : "";

                    //fechaLlegadaInforme
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaLlegadaInforme.Exferia_FechaSeleccion_Fecha = g_mdl_MYT_Inspecciones.fechaLlegadaInforme != null ? g_mdl_MYT_Inspecciones.fechaLlegadaInforme.Value.ToString("dd/MM/yyyy") : "";

                    //inspectorNombre
                    g_frm_P_Inspeccion.Exferia_TextBox_Inspector_Nombre.Text = g_mdl_MYT_Inspecciones.inspectorNombre;

                    //inspectorTelefono
                    g_frm_P_Inspeccion.Exferia_TextBox_Inspector_Telefono.Text = g_mdl_MYT_Inspecciones.inspectorTelefono;

                    //inspectorEmail
                    g_frm_P_Inspeccion.Exferia_TextBox_Inspector_Email.Text = g_mdl_MYT_Inspecciones.inspectorEmail;

                    //InspeccionesTiposResultados
                    if (g_mdl_MYT_Inspecciones.MYT_InspeccionesTiposResultados != null)
                    {
                        g_frm_P_Inspeccion.Exferia_F3_Resultado.Exferia_F3_Id = g_mdl_MYT_Inspecciones.MYT_InspeccionesTiposResultados.id;
                        g_frm_P_Inspeccion.Exferia_F3_Resultado.Exferia_F3_Codigo = g_mdl_MYT_Inspecciones.MYT_InspeccionesTiposResultados.codigo;
                        g_frm_P_Inspeccion.Exferia_F3_Resultado.Exferia_F3_Descripcion = g_mdl_MYT_Inspecciones.MYT_InspeccionesTiposResultados.descripcion;
                        g_frm_P_Inspeccion.Exferia_F3_Resultado.Exferia_F3_FechaBorrado = g_mdl_MYT_Inspecciones.MYT_InspeccionesTiposResultados.fechaBorrado;
                    }

                    //fechaPlazo
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPlazo.Exferia_FechaSeleccion_Fecha = g_mdl_MYT_Inspecciones.fechaPlazo != null ? g_mdl_MYT_Inspecciones.fechaPlazo.Value.ToString("dd/MM/yyyy") : "";

                    //fechaRecibiPresupuestoDefecto
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibipresupuesto.Exferia_FechaSeleccion_Fecha = g_mdl_MYT_Inspecciones.fechaRecibiPresupuestoDefecto != null ? g_mdl_MYT_Inspecciones.fechaRecibiPresupuestoDefecto.Value.ToString("dd/MM/yyyy") : "";

                    //fechaComprobacionDefectos
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaComprobacionDefectos.Exferia_FechaSeleccion_Fecha = g_mdl_MYT_Inspecciones.fechaComprobacionDefectos != null ? g_mdl_MYT_Inspecciones.fechaComprobacionDefectos.Value.ToString("dd/MM/yyyy") : "";

                    //fechaPresupuestoFirmado
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPresupuestoFirmado.Exferia_FechaSeleccion_Fecha = g_mdl_MYT_Inspecciones.fechaPresupuestoFirmado != null ? g_mdl_MYT_Inspecciones.fechaPresupuestoFirmado.Value.ToString("dd/MM/yyyy") : "";

                    //fechaPeticionSegundaInspeccion
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPeticiónSegundaInspeccion.Exferia_FechaSeleccion_Fecha = g_mdl_MYT_Inspecciones.fechaPeticionSegundaInspeccion != null ? g_mdl_MYT_Inspecciones.fechaPeticionSegundaInspeccion.Value.ToString("dd/MM/yyyy") : "";

                    //EmpresaInstaladora
                    EmpresaInstaladora_Rellenar(g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.MYT_InstalacionesCabecera.MYT_EmpresasInstaladoras);

                    //observaciones
                    g_frm_P_Inspeccion.Exferia_TextBox_Observaciones.Text = g_mdl_MYT_Inspecciones.observaciones;

                    #region Asignar Filtros

                    #region Instalacion linea
                    List<INTERNO_Filtro_OpcionPadre_Modelo> lst_INTERNO_Filtro_OpcionPadre_Modelo = new List<INTERNO_Filtro_OpcionPadre_Modelo>();

                    lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MYT_INSTALACIONESCABECERA, g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.idInstalacionCabecera));
                    lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MAE_CLIENTE, g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.MYT_InstalacionesCabecera.idCliente));

                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo;
                    #endregion

                    #region Instalacion cabecera
                    List<INTERNO_Filtro_OpcionPadre_Modelo> lst_INTERNO_Filtro_OpcionPadre_Modelo_IntalacionCabecera = new List<INTERNO_Filtro_OpcionPadre_Modelo>();
                   
                    lst_INTERNO_Filtro_OpcionPadre_Modelo_IntalacionCabecera.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MAE_CLIENTE, g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.MYT_InstalacionesCabecera.idCliente));

                    g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo_IntalacionCabecera;
                    #endregion

                    #region Inspecciones relacionadas
                    List<INTERNO_Filtro_OpcionPadre_Modelo> lst_INTERNO_Filtro_OpcionPadre_Modelo_InspeccionesRelacionadas = new List<INTERNO_Filtro_OpcionPadre_Modelo>();

                    lst_INTERNO_Filtro_OpcionPadre_Modelo_InspeccionesRelacionadas.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MYT_INSTALACIONESLINEAS, g_mdl_MYT_Inspecciones.MYT_InstalacionesLineas.id));
                    lst_INTERNO_Filtro_OpcionPadre_Modelo_InspeccionesRelacionadas.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MYT_INSPECCIONES, g_mdl_MYT_Inspecciones.id));

                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo_InspeccionesRelacionadas;
                    #endregion

                    #endregion

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

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

                        dynamic dnm_Objeto = g_mdl_MYT_Inspecciones;
                        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_MYT_Inspecciones.codigo)))
                            {
                                str_MenuSuperior_Codigo = g_mdl_MYT_Inspecciones.codigo;
                            }
                        }

                        if (str_ValorAMostrarFinal != "")
                        {
                            g_frm_P_Inspeccion.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_Inspeccion.Tag.ToString(), str_MenuSuperior_Codigo);
                    //#################################################################################################

                    g_frm_P_Inspeccion.P_Base_SeModificoDatosPantalla = false;
                }
            }
            catch (Control_Errores)
            {
                bol_ValorDevuelto = false;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Inspeccion_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_Inspeccion.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_Inspeccion.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Inspeccion_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, nameof(P_Inspeccion_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, nameof(P_Inspeccion_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_Inspeccion.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_Inspeccion, mdl_ValorDevuelto_Modelo_Resultado.Objeto);
                        }
                    }

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

                    g_frm_P_Inspeccion.P_Base_SeModificoDatosPantalla = false;

                    if (g_bol_GrabarDatos_VolverListado)
                    {
                        g_frm_P_Inspeccion.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Inspeccion_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
            {
                //Si el codigo esta vacio y se intenta buscar el ultimo numerico y llego al limite de base de datos
                if (g_frm_P_Inspeccion.Exferia_TextBox_Codigo.Text.Trim().Length == 0)
                {
                    INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo_AUX = Buscar_CodigoSiguiente();

                    if (mdl_INTERNO_ValorDevuelto_Modelo_AUX.TodoCorrecto == false)
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = mdl_INTERNO_ValorDevuelto_Modelo_AUX.Mensaje;
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_TextBox_Codigo;
                    }
                }

                // El codigo no puede estar Repetido
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    string str_Codigo = g_frm_P_Inspeccion.Exferia_TextBox_Codigo.Text.Trim();

                    if (Datos_Generales.Buscar_CodigoRepetido(nameof(MYT_Inspecciones), nameof(MYT_Inspecciones.codigo), str_Codigo, nameof(MYT_Inspecciones.id), (g_mdl_MYT_Inspecciones != null ? g_mdl_MYT_Inspecciones.id : 0), "", g_frm_P_Inspeccion.P_Base_ValoresGenerales.lng_idEmpresa, true))
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_REPETIDO(g_frm_P_Inspeccion.Exferia_Label_Codigo.Text);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_TextBox_Codigo;
                    }
                }

                // Instalacionlinea no puede estar Vacio (Obligatorio)
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Codigo.Trim().Length == 0 &&
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length == 0)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Instalacionlinea validar que es Correcto
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Codigo.Trim().Length != 0 ||
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Descripcion.Trim().Length != 0) && g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_PRINCIPAL_TextBox_Codigo;
                }

                //Si hay OrganismoCertificador Validar que es correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Inspeccion.Exferia_F3_OrganismoCertificador.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Inspeccion.Exferia_F3_OrganismoCertificador.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Inspeccion.Exferia_F3_OrganismoCertificador.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Inspeccion.Exferia_F3_OrganismoCertificador.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_F3_OrganismoCertificador.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // Si hay Inspeccion relacionada validar que es Correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_Codigo.Trim().Length != 0) && g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_F3_INCORRECTO(g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_PRINCIPAL_TextBox_Codigo;
                }

                // La fecha recibi aviso  no puede estar vacia y debe ser correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibiAviso.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_fechaAlta_Respuesta == 1)//Vacia
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibiAviso.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibiAviso;
                    }
                    else if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibiAviso.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibiAviso;
                    }
                }

                // La FechaRealizacionInspeccion aviso  no puede estar vacia y debe ser correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRealizacionInspeccion.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRealizacionInspeccion.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRealizacionInspeccion;
                    }
                }

                // La FechaLlegadaInforme aviso  no puede estar vacia y debe ser correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaLlegadaInforme.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaLlegadaInforme.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaLlegadaInforme;
                    }
                }

                //Si hay Resultado Validar que es correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto && (g_frm_P_Inspeccion.Exferia_F3_Resultado.Exferia_F3_Codigo.Trim().Length != 0 ||
                    g_frm_P_Inspeccion.Exferia_F3_Resultado.Exferia_F3_Descripcion.Trim().Length != 0) && g_frm_P_Inspeccion.Exferia_F3_Resultado.Exferia_F3_Id == -1)
                {
                    mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                    mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_VACIO(g_frm_P_Inspeccion.Exferia_F3_Resultado.Exferia_F3_Titulo);
                    mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_F3_Resultado.Exferia_F3_PRINCIPAL_TextBox_Codigo;
                }

                // La FechaPlazo aviso  no puede estar vacia y debe ser correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPlazo.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPlazo.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPlazo;
                    }
                }

                // La FechaRecibipresupuesto aviso  no puede estar vacia y debe ser correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibipresupuesto.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibipresupuesto.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibipresupuesto;
                    }
                }

                // La FechaComprobacionDefectos aviso  no puede estar vacia y debe ser correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaComprobacionDefectos.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaComprobacionDefectos.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaComprobacionDefectos;
                    }
                }

                // La FechaPresupuestoFirmado aviso  no puede estar vacia y debe ser correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPresupuestoFirmado.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPresupuestoFirmado.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPresupuestoFirmado;
                    }
                }

                // La FechaPeticiónSegundaInspeccion aviso  no puede estar vacia y debe ser correcta
                if (mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto)
                {
                    int int_fechaAlta_Respuesta = Funciones.Fecha_Validacion(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPeticiónSegundaInspeccion.Exferia_FechaSeleccion_Fecha.Trim(' ', '/'));

                    if (int_fechaAlta_Respuesta == 2)//Incorrecta
                    {
                        mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_INTERNO_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_GENERAL_VALIDACIONES_FECHA_INCORRECTA(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPeticiónSegundaInspeccion.Exferia_FechaSeleccion_Descripcion);
                        mdl_INTERNO_ValorDevuelto_Modelo.Objeto = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPeticiónSegundaInspeccion;
                    }
                }
            }
            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_Inspeccion_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
            {
                DateTime? dtt_FechaNula = null;

                MYT_Inspecciones mdl_MYT_Inspecciones = new MYT_Inspecciones();

                //id
                mdl_MYT_Inspecciones.id = g_mdl_MYT_Inspecciones != null ? g_frm_P_Inspeccion.P_Base_id : -1;

                //codigo
                mdl_MYT_Inspecciones.codigo = g_frm_P_Inspeccion.Exferia_TextBox_Codigo.Text.Trim();

                //idOrganismoCertificador
                if (g_frm_P_Inspeccion.Exferia_F3_OrganismoCertificador.Exferia_F3_Id>-1)
                {
                    mdl_MYT_Inspecciones.idOrganismoCertificador = g_frm_P_Inspeccion.Exferia_F3_OrganismoCertificador.Exferia_F3_Id;
                }
                else
                {
                    mdl_MYT_Inspecciones.idOrganismoCertificador = null;
                }

                //idInspeccionRelacionada
                if (g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_Id > -1)
                {
                    mdl_MYT_Inspecciones.idInspeccionRelacionada = g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_Id;
                }
                else
                {
                    mdl_MYT_Inspecciones.idInspeccionRelacionada = null;
                }

                //idInstalacionLinea
                mdl_MYT_Inspecciones.idInstalacionLinea = g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Id;

                //idInspeccionTipoResultado
                if (g_frm_P_Inspeccion.Exferia_F3_Resultado.Exferia_F3_Id > -1)
                {
                    mdl_MYT_Inspecciones.idInspeccionTipoResultado = g_frm_P_Inspeccion.Exferia_F3_Resultado.Exferia_F3_Id;
                }
                else
                {
                    mdl_MYT_Inspecciones.idInspeccionTipoResultado = null;
                }

                //inspectorNombre
                mdl_MYT_Inspecciones.inspectorNombre = g_frm_P_Inspeccion.Exferia_TextBox_Inspector_Nombre.Text;

                //inspectorTelefono
                mdl_MYT_Inspecciones.inspectorTelefono = g_frm_P_Inspeccion.Exferia_TextBox_Inspector_Telefono.Text;

                //inspectorEmail
                mdl_MYT_Inspecciones.inspectorEmail = g_frm_P_Inspeccion.Exferia_TextBox_Inspector_Email.Text;

                //fechaRecibiAviso
                mdl_MYT_Inspecciones.fechaRecibiAviso = DateTime.ParseExact(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibiAviso.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture);

                //fechaRealizacionInspeccion
                mdl_MYT_Inspecciones.fechaRealizacionInspeccion = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRealizacionInspeccion.Exferia_FechaSeleccion_Fecha.Trim(' ', '/') != "" ? DateTime.ParseExact(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRealizacionInspeccion.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture) : dtt_FechaNula;

                //fechaLlegadaInforme
                mdl_MYT_Inspecciones.fechaLlegadaInforme = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaLlegadaInforme.Exferia_FechaSeleccion_Fecha.Trim(' ', '/') != "" ? DateTime.ParseExact(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaLlegadaInforme.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture) : dtt_FechaNula;

                //fechaPlazo
                mdl_MYT_Inspecciones.fechaPlazo = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPlazo.Exferia_FechaSeleccion_Fecha.Trim(' ', '/') != "" ? DateTime.ParseExact(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPlazo.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture) : dtt_FechaNula;

                //fechaRecibiPresupuestoDefecto
                mdl_MYT_Inspecciones.fechaRecibiPresupuestoDefecto = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibipresupuesto.Exferia_FechaSeleccion_Fecha.Trim(' ', '/') != "" ? DateTime.ParseExact(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibipresupuesto.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture) : dtt_FechaNula;

                //fechaPresupuestoFirmado
                mdl_MYT_Inspecciones.fechaPresupuestoFirmado = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPresupuestoFirmado.Exferia_FechaSeleccion_Fecha.Trim(' ', '/') != "" ? DateTime.ParseExact(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPresupuestoFirmado.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture) : dtt_FechaNula;

                //fechaComprobacionDefectos
                mdl_MYT_Inspecciones.fechaComprobacionDefectos = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaComprobacionDefectos.Exferia_FechaSeleccion_Fecha.Trim(' ', '/') != "" ? DateTime.ParseExact(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaComprobacionDefectos.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture) : dtt_FechaNula;

                //fechaPeticionSegundaInspeccion
                mdl_MYT_Inspecciones.fechaPeticionSegundaInspeccion = g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPeticiónSegundaInspeccion.Exferia_FechaSeleccion_Fecha.Trim(' ', '/') != "" ? DateTime.ParseExact(g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPeticiónSegundaInspeccion.Exferia_FechaSeleccion_Fecha, "dd/MM/yyyy", CultureInfo.InvariantCulture) : dtt_FechaNula;

                //observaciones
                mdl_MYT_Inspecciones.observaciones = g_frm_P_Inspeccion.Exferia_TextBox_Observaciones.Text;

                //Se graba el modelo ya relleno
                mdl_INTERNO_ValorDevuelto_Modelo = g_obj_MYT_Inspecciones_Datos.Grabar(mdl_MYT_Inspecciones);
            }
            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_Inspeccion_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(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_Inspeccion.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_Inspeccion.Enabled = true;

                Control_Errores.Errores_Log("", ex, nameof(P_Inspeccion_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 
                mdl_ValorDevuelto_Modelo = BorrarDatos_Final();
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Inspeccion_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, nameof(P_Inspeccion_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_Inspeccion.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_Inspeccion.P_Base_PantallaOrigen != null)
                    {
                        g_frm_P_Inspeccion.P_Base_PantallaOrigen.P_Base_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }
                    else if (g_frm_P_Inspeccion.P_Base_F3Origen != null)
                    {
                        g_frm_P_Inspeccion.P_Base_F3Origen.Exferia_F3_ActualizarRegistro(mdl_ValorDevuelto_Modelo_Resultado.Id, mdl_ValorDevuelto_Modelo_Resultado.TipoAccion);
                    }

                    if (g_bol_BorrarDatos_VolverListado)
                    {
                        g_frm_P_Inspeccion.P_Base_SeModificoDatosPantalla = false;
                        g_frm_P_Inspeccion.Salir_P_Base();
                    }
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Inspeccion_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_MYT_Inspecciones_Datos.Borrar(g_mdl_MYT_Inspecciones != null ? g_mdl_MYT_Inspecciones.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_Inspeccion_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

        #region EmpresaInstaladora
        private void EmpresaInstaladora_VaciarDatos()
        {
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Codigo.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_CIF.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_RazonSocial.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_NombreComercial.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Telefono1.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Telefono2.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Fax.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Email.Text = "";
            g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Web.Text = "";
        }

        private void EmpresaInstaladora_Rellenar(MYT_EmpresasInstaladoras _mdl_MYT_EmpresasInstaladoras)
        {
            if (_mdl_MYT_EmpresasInstaladoras!=null)
            {
                g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Codigo.Text = _mdl_MYT_EmpresasInstaladoras.codigo;
                g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_CIF.Text = _mdl_MYT_EmpresasInstaladoras.cif;
                g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_RazonSocial.Text = _mdl_MYT_EmpresasInstaladoras.razonSocial;
                g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_NombreComercial.Text = _mdl_MYT_EmpresasInstaladoras.nombreComercial;
                g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Telefono1.Text = _mdl_MYT_EmpresasInstaladoras.telefono1;
                g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Telefono2.Text = _mdl_MYT_EmpresasInstaladoras.telefono2;
                g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Fax.Text = _mdl_MYT_EmpresasInstaladoras.fax;
                g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Email.Text = _mdl_MYT_EmpresasInstaladoras.email;
                g_frm_P_Inspeccion.Exferia_TextBox_EmpresaInstaladora_Web.Text = _mdl_MYT_EmpresasInstaladoras.web;
            }
            else
            {
                EmpresaInstaladora_VaciarDatos();
            }
        }
        #endregion

        #region Fechas Resultado
        public void Resultado_Fechas_BloquearDesbloquear(bool _bol_Bloquear)
        {
            try
            {
                //Bloquear
                if (_bol_Bloquear)
                {
                    //FechaPlazo
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPlazo.Exferia_FechaSeleccion_Fecha = "";
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPlazo.Enabled = false;

                    //FechaRecibipresupuesto
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibipresupuesto.Exferia_FechaSeleccion_Fecha = "";
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibipresupuesto.Enabled = false;
                    
                    //FechaComprobacionDefectos
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaComprobacionDefectos.Exferia_FechaSeleccion_Fecha = "";
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaComprobacionDefectos.Enabled = false;
                    
                    //FechaPresupuestoFirmado
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPresupuestoFirmado.Exferia_FechaSeleccion_Fecha = "";
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPresupuestoFirmado.Enabled = false;
                    
                    //FechaPeticiónSegundaInspeccion
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPeticiónSegundaInspeccion.Exferia_FechaSeleccion_Fecha = "";
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPeticiónSegundaInspeccion.Enabled = false;
                }
                else
                {
                    //FechaPlazo
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPlazo.Enabled = true;

                    //FechaRecibipresupuesto
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaRecibipresupuesto.Enabled = true;

                    //FechaComprobacionDefectos
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaComprobacionDefectos.Enabled = true;

                    //FechaPresupuestoFirmado
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPresupuestoFirmado.Enabled = true;

                    //FechaPeticiónSegundaInspeccion
                    g_frm_P_Inspeccion.Exferia_FechaSeleccion_FechaPeticiónSegundaInspeccion.Enabled = true;
                }
            }
            catch(Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Inspeccion_Controladora) + "/" + nameof(Resultado_Fechas_BloquearDesbloquear));
            }
        }
        #endregion

        #region Modificar Valores F3 Busqueda
        public void Cliente_Modificado()
        {
            try
            {
                //InstalacionCabecera
                g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Id = -1;
                g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Codigo = "";
                g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Descripcion = "";
                g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_FechaBorrado = null;

                //InstalacionLinea
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Id = -1;
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Codigo = "";
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Descripcion = "";
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_FechaBorrado = null;

                //Inspeccion Relacionada
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_Id = -1;
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_Codigo = "";
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_FechaBorrado = null;
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_RELACIONADOS = null;
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Enabled = false;
                Rellenar_DataGrid_InspeccionesRelacionadas(g_mdl_MYT_Inspecciones != null ? g_mdl_MYT_Inspecciones.id : -1,true);

                //Asignar el idCliente a la cabecera y a la linea
                if (g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Id > -1)
                {
                    //Filtrado de Opciones del Padre
                    List<INTERNO_Filtro_OpcionPadre_Modelo> lst_INTERNO_Filtro_OpcionPadre_Modelo = new List<INTERNO_Filtro_OpcionPadre_Modelo>();

                    //Para que busque con el Filtro cliente
                    lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MAE_CLIENTE, g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Id));

                    //Filtros 
                    g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo;
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo;
                }
                //Quitar el idCliente de la Cabecera y de la linea
                else
                {
                    g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_RELACIONADOS = null;
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_RELACIONADOS = null;
                    
                    //EmpresaInstaladora
                    EmpresaInstaladora_VaciarDatos();
                }
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Inspeccion_Controladora) + "/" + nameof(Cliente_Modificado));
            }
        }
        public void InstalacionCabecera_Modificado()
        {
            try
            {
                //InstalacionLinea
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Id = -1;
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Codigo = "";
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Descripcion = "";
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_FechaBorrado = null;

                //Inspeccion Relacionada
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_Id = -1;
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_Codigo = "";
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_FechaBorrado = null;
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_RELACIONADOS = null;
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Enabled = false;
                Rellenar_DataGrid_InspeccionesRelacionadas(g_mdl_MYT_Inspecciones != null ? g_mdl_MYT_Inspecciones.id : -1,true);

                //Si no tiene un Cliente Seleccionado se busca, segun la Instalacioncabecera
                MYT_InstalacionesCabecera mdl_MYT_InstalacionesCabecera = g_obj_MYT_InstalacionesCabecera_Datos.Obtener_Modelo_Por_Id(g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Id, true, true);
                if (mdl_MYT_InstalacionesCabecera != null)
                {
                    if (g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Id <= 0 &&
                        g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Id > -1)
                    {
                        if (mdl_MYT_InstalacionesCabecera.MAE_Clientes != null)
                        {
                            //Cliente
                            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Id = mdl_MYT_InstalacionesCabecera.MAE_Clientes.id;
                            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Codigo = mdl_MYT_InstalacionesCabecera.MAE_Clientes.codigo;
                            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Descripcion = mdl_MYT_InstalacionesCabecera.MAE_Clientes.razonSocial;
                            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_FechaBorrado = mdl_MYT_InstalacionesCabecera.MAE_Clientes.fechaBorrado;
                        }
                    }

                    //EmpresaInstaladora
                    EmpresaInstaladora_Rellenar(mdl_MYT_InstalacionesCabecera.MYT_EmpresasInstaladoras);
                }
                else
                {
                    //EmpresaInstaladora
                    EmpresaInstaladora_VaciarDatos();
                }

                //Asignar el idInstalacionCabecera y el idCliente a la linea
                if (g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Id > -1)
                {
                    //Filtrado de Opciones del Padre
                    List<INTERNO_Filtro_OpcionPadre_Modelo> lst_INTERNO_Filtro_OpcionPadre_Modelo = new List<INTERNO_Filtro_OpcionPadre_Modelo>();

                    //Para que busque con el Filtro de la instalacion cabecera
                    lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MYT_INSTALACIONESCABECERA, g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Id));

                    //Para que busque con el Filtro del cliente
                    if (g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Id>-1)
                    {
                        lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MAE_CLIENTE, g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Id));
                    }

                    //Filtros 
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo;
                }
                //Quitar el idCliente de la Cabecera y de la linea
                else
                {
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_RELACIONADOS = null;

                    //Para que busque con el Filtro del cliente
                    if (g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Id > -1)
                    {
                        List<INTERNO_Filtro_OpcionPadre_Modelo> lst_INTERNO_Filtro_OpcionPadre_Modelo = new List<INTERNO_Filtro_OpcionPadre_Modelo>();
                       
                        //Cliente
                        lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MAE_CLIENTE, g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Id));
                        
                        //Filtros 
                        g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo;
                    }
                }

            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Inspeccion_Controladora) + "/" + nameof(InstalacionCabecera_Modificado));
            }
        }
        public void InstalacionLinea_Modificado()
        {
            try
            {

                //Si no tiene una Caebecera Seleccionada se busca, segun la InstalacionLinea
                if (g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Id <= 0 &&
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Id > -1)
                {
                    MYT_InstalacionesLineas mdl_MYT_InstalacionesLineas = g_obj_MYT_InstalacionesLineas_Datos.Obtener_Modelo_Por_Id(g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Id, true,true);
                    if (mdl_MYT_InstalacionesLineas != null &&
                        mdl_MYT_InstalacionesLineas.MYT_InstalacionesCabecera != null)
                    {
                        //InstalacionCabecera
                        g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Id = mdl_MYT_InstalacionesLineas.MYT_InstalacionesCabecera.id;
                        g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Codigo = mdl_MYT_InstalacionesLineas.MYT_InstalacionesCabecera.codigo;
                        g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Descripcion = mdl_MYT_InstalacionesLineas.MYT_InstalacionesCabecera.descripcion;
                        g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_FechaBorrado = mdl_MYT_InstalacionesLineas.MYT_InstalacionesCabecera.fechaBorrado;

                        if (mdl_MYT_InstalacionesLineas.MYT_InstalacionesCabecera.MAE_Clientes != null)
                        {
                            //Cliente
                            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Id = mdl_MYT_InstalacionesLineas.MYT_InstalacionesCabecera.MAE_Clientes.id;
                            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Codigo = mdl_MYT_InstalacionesLineas.MYT_InstalacionesCabecera.MAE_Clientes.codigo;
                            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Descripcion = mdl_MYT_InstalacionesLineas.MYT_InstalacionesCabecera.MAE_Clientes.razonSocial;
                            g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_FechaBorrado = mdl_MYT_InstalacionesLineas.MYT_InstalacionesCabecera.MAE_Clientes.fechaBorrado;
                        }


                        //EmpresaInstaladora
                        EmpresaInstaladora_Rellenar(mdl_MYT_InstalacionesLineas.MYT_InstalacionesCabecera.MYT_EmpresasInstaladoras);
                    }
                }

                //Asignar el idInstalacionCabecera y el idCliente a la linea
                //Filtrado de Opciones del Padre
                List<INTERNO_Filtro_OpcionPadre_Modelo> lst_INTERNO_Filtro_OpcionPadre_Modelo = new List<INTERNO_Filtro_OpcionPadre_Modelo>();

                //Para que busque con el Filtro de la instalacion cabecera
                if (g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Id > -1)
                {
                    lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MYT_INSTALACIONESCABECERA, g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_Id));
                }

                //Para que busque con el Filtro del cliente
                if (g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Id > -1)
                {
                    lst_INTERNO_Filtro_OpcionPadre_Modelo.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MAE_CLIENTE, g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Id));

                    #region Instalacion cabecera
                    //Filtrado de Opciones del Padre
                    List<INTERNO_Filtro_OpcionPadre_Modelo> lst_INTERNO_Filtro_OpcionPadre_Modelo_IntalacionCabecera = new List<INTERNO_Filtro_OpcionPadre_Modelo>();

                    //Para que busque con el Filtro cliente
                    lst_INTERNO_Filtro_OpcionPadre_Modelo_IntalacionCabecera.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MAE_CLIENTE, g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Cliente.Exferia_F3_SoloSeleccion_Id));

                    //Filtros 
                    g_frm_P_Inspeccion.Exferia_F3_InstalacionCabecera.Exferia_F3_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo_IntalacionCabecera;
                    #endregion
                }

                //Filtros 
                if (lst_INTERNO_Filtro_OpcionPadre_Modelo.Count>0)
                {
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo;
                }
                else
                {
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_RELACIONADOS = null;
                }

                #region Inspeccion relacionada
                //Vaciar el F3 de Inspeccion Relacionada
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_Id = -1;
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_Codigo = "";
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_FechaBorrado = null;
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_RELACIONADOS = null;
                g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Enabled = false;

                if (g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Id>-1)
                {
                    //Filtrado de Opciones del Padre
                    List<INTERNO_Filtro_OpcionPadre_Modelo> lst_INTERNO_Filtro_OpcionPadre_Modelo_InspeccionRelacionada = new List<INTERNO_Filtro_OpcionPadre_Modelo>();

                    //Para que busque con el Filtro instalacioneslinea
                    lst_INTERNO_Filtro_OpcionPadre_Modelo_InspeccionRelacionada.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MYT_INSTALACIONESLINEAS, g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_InstalacionLinea.Exferia_F3_SoloSeleccion_Id));

                    if (g_mdl_MYT_Inspecciones!=null)
                    {
                        lst_INTERNO_Filtro_OpcionPadre_Modelo_InspeccionRelacionada.Add(new INTERNO_Filtro_OpcionPadre_Modelo(Variables.G_STR_OPCION_MYT_INSPECCIONES, g_mdl_MYT_Inspecciones.id));
                    }

                    //Filtros 
                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Exferia_F3_SoloSeleccion_Simple_RELACIONADOS = lst_INTERNO_Filtro_OpcionPadre_Modelo_InspeccionRelacionada;

                    g_frm_P_Inspeccion.Exferia_F3_SoloSeleccion_Simple_InspeccionRelacionada.Enabled = true;
                }

                Rellenar_DataGrid_InspeccionesRelacionadas(g_mdl_MYT_Inspecciones != null ? g_mdl_MYT_Inspecciones.id : -1,true);
                #endregion
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Inspeccion_Controladora) + "/" + nameof(InstalacionLinea_Modificado));
            }
        }
        #endregion

        #region Inspecciones Relacionadas
        #region Rellenar DataGrid InspeccionesRelacionadas
        public void Rellenar_DataGrid_InspeccionesRelacionadas(long _lng_idInspeccion,bool _bol_Recargar_BD)
        {
            try
            {
                if (g_TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas != null)
                {
                    g_TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas.CancelAsync();
                    while (g_TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas.IsBusy)
                    {
                        Application.DoEvents();
                    }
                }
                else
                {
                    g_TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas = new BackgroundWorker();
                    g_TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas.DoWork += new DoWorkEventHandler(TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas_DoWork);
                    g_TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas.ProgressChanged += new ProgressChangedEventHandler(TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas_ProgressChanged);
                    g_TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas.RunWorkerCompleted += new RunWorkerCompletedEventHandler(TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas_Completed);
                    g_TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas.WorkerReportsProgress = true;
                    g_TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas.WorkerSupportsCancellation = true;
                }

                //Vaciar el Listado
                g_frm_P_Inspeccion.Exferia_DataGridView_InspeccionesRelacionadas.Rows.Clear();
                g_int_TotalRegistrosInsertados_InspeccionesRelacionadas = 0;
                g_int_TotalRegistros_InspeccionesRelacionadas = 0;
                g_frm_P_Inspeccion.Exferia_BarraProgreso_InspeccionesRelacionadas_BarraProgreso.Exferia_BarraProgreso_Total = g_int_TotalRegistros_InspeccionesRelacionadas;
                g_frm_P_Inspeccion.Exferia_BarraProgreso_InspeccionesRelacionadas_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_InspeccionesRelacionadas;

                List<object> lst_Argumentos = new List<object>();
                lst_Argumentos.Add(_lng_idInspeccion);
                lst_Argumentos.Add(_bol_Recargar_BD);


                //(Tarea Asincrona) Cargar Datos ##################################################################
                g_TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas.RunWorkerAsync(lst_Argumentos);
                //#################################################################################################
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Inspeccion_Controladora) + "/" + nameof(Rellenar_DataGrid_InspeccionesRelacionadas));
            }
        }

        private void TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                //Argumento
                List<object> lst_Argumentos = (List<object>)e.Argument;
                long lng_idInspeccion = (long)lst_Argumentos[0];
                bool bol_Recargar_BD = (bool)lst_Argumentos[1];


                //Buscar en BD
                if (bol_Recargar_BD)
                {
                    g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo = g_obj_MYT_Inspecciones_Datos.Obtener_Registros_Para_Listado_Por_Inspeccion(lng_idInspeccion);
                }

                List<INTERNO_MYT_Inspecciones_Listado_Modelo> lst_INTERNO_MYT_Inspecciones_Listado_Modelo_Filtradas = Filtrar_InspeccionesRelacionadas();

                //Total
                if (lst_INTERNO_MYT_Inspecciones_Listado_Modelo_Filtradas != null)
                {
                    g_int_TotalRegistros_InspeccionesRelacionadas = lst_INTERNO_MYT_Inspecciones_Listado_Modelo_Filtradas.Count;

                    //Recorrer campos Long_Text para saber si lo pongo tipo text o tipo long
                    foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Inspecciones_Columnas.Where(m => m.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG_TEXT)).ToList())
                    {
                        int int_HayTextos = lst_INTERNO_MYT_Inspecciones_Listado_Modelo_Filtradas.Select(m => m.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(m)).ToList().Where(m => !Funciones.IsNumeric(m.ToString())).Count();

                        if (int_HayTextos > 0)
                        {
                            mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato = G_ENUM_TIPOSDATOS.TEXT;

                            g_obj_ABS_Listado_MYT_Inspecciones_P_Inspeccion.LISTADO_COLUMNAS().Where(m => m.Key.Equals(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna)).FirstOrDefault().Value.TipoDato = G_ENUM_TIPOSDATOS.TEXT;
                        }
                    }

                    foreach (INTERNO_MYT_Inspecciones_Listado_Modelo mdl_INTERNO_MYT_Inspecciones_Listado_Modelo in lst_INTERNO_MYT_Inspecciones_Listado_Modelo_Filtradas)
                    {
                        //Se Cancelo la tarea asincrona #########################
                        if (((BackgroundWorker)sender).CancellationPending)
                        {
                            e.Cancel = true;
                            return;
                        }

                        //Progreso
                        g_int_TotalRegistrosInsertados_InspeccionesRelacionadas += 1;


                        //Añadir al DataGridView
                        ((BackgroundWorker)sender).ReportProgress(2, Transformar_Modelo_A_Row_InspeccionesRelacionadas(mdl_INTERNO_MYT_Inspecciones_Listado_Modelo, null));

                        //Esperar un poco
                        Thread.Sleep(1);
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Inspeccion_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas_DoWork));
                e.Cancel = true;
            }
            catch (Control_Errores)
            {
                e.Cancel = true;
            }
            catch (Exception ex)
            {
                Control_Errores.Errores_Log("", ex, nameof(P_Inspeccion_Controladora) + "/" + nameof(TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas_DoWork));
            }
        }
        private void TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            try
            {
                //Añadir Linea al DataGrid de InspeccionesRelacionadas
                g_frm_P_Inspeccion.Exferia_DataGridView_InspeccionesRelacionadas.Rows.Add((DataGridViewRow)e.UserState);

                //Barra de Progreso
                g_frm_P_Inspeccion.Exferia_BarraProgreso_InspeccionesRelacionadas_BarraProgreso.Exferia_BarraProgreso_Total = g_int_TotalRegistros_InspeccionesRelacionadas;
                g_frm_P_Inspeccion.Exferia_BarraProgreso_InspeccionesRelacionadas_BarraProgreso.Exferia_BarraProgreso_Actualizar = g_int_TotalRegistrosInsertados_InspeccionesRelacionadas;

            }
            catch (Exception)
            { }
        }
        private void TareaAsincrona_Rellenar_DataGrid_InspeccionesRelacionadas_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!e.Cancelled)
            {
                g_frm_P_Inspeccion.Ordenar_DataGridView_InspeccionesRelacionadas();
            }
        }

        public DataGridViewRow Transformar_Modelo_A_Row_InspeccionesRelacionadas(INTERNO_MYT_Inspecciones_Listado_Modelo _mdl_INTERNO_MYT_Inspecciones_Listado_Modelo, DataGridViewRow _obj_DataGridViewRow)
        {
            DataGridViewRow obj_DataGridViewRow = _obj_DataGridViewRow;

            if (obj_DataGridViewRow == null)
            {

                obj_DataGridViewRow = (DataGridViewRow)g_frm_P_Inspeccion.Exferia_DataGridView_InspeccionesRelacionadas.RowTemplate.Clone();
                obj_DataGridViewRow.CreateCells(g_frm_P_Inspeccion.Exferia_DataGridView_InspeccionesRelacionadas);
            }

            int int_ContadorFila = 0;
            foreach (INTERNO_ABS_Listado_ColumnasDatos_Modelo mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo in g_lst_INTERNO_ABS_Listado_ColumnasDatos_Modelo_Inspecciones_Columnas)
            {
                //Segun el Tipo
                if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DATETIME))
                {
                    DateTime? dtt_Valor = (DateTime?)_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo, null);
                    if (dtt_Valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = dtt_Valor.Value;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.BOOLEAN))
                {
                    bool? bol_Valor = (bool?)_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo, null);
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = bol_Valor != null && bol_Valor.Value ? "X" : "";
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.DECIMAL))
                {
                    decimal? dcm_valor = (decimal?)_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo, null);
                    if (dcm_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = dcm_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG))
                {
                    long? lng_valor = (long?)_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo, null);
                    if (lng_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = lng_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.INT))
                {
                    int? int_valor = (int?)_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo, null);
                    if (int_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = int_valor;
                    }
                }
                else if (mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.TipoDato.Equals(G_ENUM_TIPOSDATOS.LONG_TEXT))
                {
                    string str_Valor = (string)_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo, null);

                    long? lng_valor = long.Parse(str_Valor);
                    if (lng_valor != null)
                    {
                        obj_DataGridViewRow.Cells[int_ContadorFila].Value = lng_valor;
                    }
                }
                else
                {
                    obj_DataGridViewRow.Cells[int_ContadorFila].Value = _mdl_INTERNO_MYT_Inspecciones_Listado_Modelo.GetType().GetProperty(mdl_INTERNO_ABS_Listado_ColumnasDatos_Modelo.Descripcion_Interna).GetValue(_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo, null);
                }

                int_ContadorFila += 1;
            }

            return obj_DataGridViewRow;
        }

        public List<INTERNO_MYT_Inspecciones_Listado_Modelo> Filtrar_InspeccionesRelacionadas()
        {
            //Filtros Avanzados
            if (g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo != null)
            {
                if (g_dct_ListadoFiltros_MYT_Inspecciones != null && g_dct_ListadoFiltros_MYT_Inspecciones.Count > 0)
                {
                    return g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo.AsQueryable().Where(Funciones_Lambda.Formar_EmpresionLambda_Filtrado<INTERNO_MYT_Inspecciones_Listado_Modelo>(g_dct_ListadoFiltros_MYT_Inspecciones, g_obj_ABS_Listado_MYT_Inspecciones_P_Inspeccion)).ToList();
                }
                else
                {
                    return g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo.AsQueryable().ToList();
                }
            }
            else
            {
                return null;
            }
        }
        #endregion
        #endregion

    }
}
