using Exferia_Aplicacion.Herencia.Capas;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Exferia_Aplicacion.General;
using Exferia_EntityFramework;
using System.Runtime.CompilerServices;
using Exferia_General;
using Exferia_Mythos._0_Modelos;
using Exferia_Aplicacion.Modelos_MantenimientoSimple;
using static Exferia_Aplicacion.General.Enumerados;
using Exferia_General._1_Datos;
using System.Transactions;
using System.Data.SqlClient;
using System.Threading;

namespace Exferia_Mythos._1_Datos
{
    public class MYT_Inspecciones_Datos : ABS_Datos
    {

        #region Listado
        private List<INTERNO_MYT_Inspecciones_Listado_Modelo> g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo = null;

        public override List<dynamic> Obtener_Listado(long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<string> _lst_CamposConRelacionABuscar, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            Exferia_Entities obj_Exferia_Entities = null;
            List<dynamic> lst_MYT = null;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                //Consulta...........................................
                ConsultaRellenar_Listado(obj_Exferia_Entities, _lng_idEmpresaSeleccionada, _lng_idEjercicioActual, Datos_Generales.GEN_Empresas_Devolver_EmpresasCompartidas_SegunFichero(_lng_idEmpresaSeleccionada, typeof(MYT_Inspecciones).Name), _lst_CamposConRelacionABuscar, -1, null, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                //...................................................

                if ((g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo != null) && (g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo.Count() > 0))
                {
                    lst_MYT = g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo.Cast<dynamic>().ToList();
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(Obtener_Listado), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return lst_MYT;
        }

        public override dynamic Obtener_RegistroListado(long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<string> _lst_CamposConRelacionABuscar, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo, long _lng_id, List<long> _lst_ids)
        {
            Exferia_Entities obj_Exferia_Entities = null;
            dynamic dnm_MYT = null;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                //Consulta..................................................
                ConsultaRellenar_Listado(obj_Exferia_Entities, _lng_idEmpresaSeleccionada, _lng_idEjercicioActual, Datos_Generales.GEN_Empresas_Devolver_EmpresasCompartidas_SegunFichero(_lng_idEmpresaSeleccionada, typeof(MYT_Inspecciones).Name), _lst_CamposConRelacionABuscar, _lng_id, _lst_ids, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                //..........................................................

                if ((g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo != null) && (g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo.Count() > 0))
                {
                    dnm_MYT = g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo.Cast<dynamic>().ToList();
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(Obtener_RegistroListado), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return dnm_MYT;
        }

        protected override void ConsultaRellenar_Listado(Exferia_Entities _obj_Exferia_Entities, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<long> _lst_idEmpresasRelacionas, List<string> _lst_CamposConRelacionABuscar, long _lng_id, List<long> _lst_ids, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            try
            {
                //Datos del Padre si los tuviera .........................
                long lng_Padre_idInstalacionLinea = -1;
                string str_Padre_Opcion_INSTALACIONESLINEAS = "";

                long lng_Padre_idInspeccion = -1;
                string str_Padre_Opcion_INSPECCION = "";

                if (_lst_INTERNO_Filtro_OpcionPadre_Modelo != null && _lst_INTERNO_Filtro_OpcionPadre_Modelo.Count > 0)
                {
                    foreach (INTERNO_Filtro_OpcionPadre_Modelo mdl_INTERNO_Filtro_OpcionPadre_Modelo in _lst_INTERNO_Filtro_OpcionPadre_Modelo)
                    {
                        //InstalacionLinea
                        if (mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO == Variables.G_STR_OPCION_MYT_INSTALACIONESLINEAS)
                        {
                            lng_Padre_idInstalacionLinea = mdl_INTERNO_Filtro_OpcionPadre_Modelo.VALOR;
                            str_Padre_Opcion_INSTALACIONESLINEAS = mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO;
                        }
                        //Inspeccion
                        else if (mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO == Variables.G_STR_OPCION_MYT_INSPECCIONES)
                        {
                            lng_Padre_idInspeccion = mdl_INTERNO_Filtro_OpcionPadre_Modelo.VALOR;
                            str_Padre_Opcion_INSPECCION = mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO;
                        }
                    }
                }

                string str_SQL =
                   " SELECT " +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.id) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.id) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.codigo) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.codigo) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.inspectorNombre) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.inspectorNombre) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.inspectorTelefono) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.inspectorTelefono) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.inspectorEmail) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.inspectorEmail) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaRecibiAviso) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaRecibiAviso) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaRealizacionInspeccion) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaRealizacionInspeccion) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaLlegadaInforme) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaLlegadaInforme) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaPlazo) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaPlazo) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaRecibiPresupuestoDefecto) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaRecibiPresupuestoDefecto) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaPresupuestoFirmado) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaPresupuestoFirmado) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaComprobacionDefectos) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaComprobacionDefectos) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaPeticionSegundaInspeccion) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaPeticionSegundaInspeccion) + "," +
                        //ids
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.idOrganismoCertificador) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idOrganismoCertificador) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.idInspeccionRelacionada) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInspeccionRelacionada) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.idInstalacionLinea) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInstalacionLinea) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.idInspeccionTipoResultado) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInspeccionTipoResultado) + "," +
                        //OrganismoCertificador
                        (
                            (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.OrganismoCertificador)))
                            ?
                                (
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.OrganismoCertificador_Codigo) + " = " + nameof(MYT_OrganismosCertificadores) + "." + nameof(MYT_OrganismosCertificadores.codigo) + "," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.OrganismoCertificador_Descripcion) + " =" + nameof(MYT_OrganismosCertificadores) + "." + nameof(MYT_OrganismosCertificadores.razonSocial) + "," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.OrganismoCertificador_FechaBorrado) + " =" + nameof(MYT_OrganismosCertificadores) + "." + nameof(MYT_OrganismosCertificadores.fechaBorrado) + "," 
                                )
                            :
                                (
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.OrganismoCertificador_Codigo) + " = ''," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.OrganismoCertificador_Descripcion) + " = ''," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.OrganismoCertificador_FechaBorrado) + " = NULL, "
                                )
                        ) +
                        //InstalacionCabecera
                        (
                            (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionCabecera)))
                            ?
                                (
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionCabecera_Id) + " = " + nameof(MYT_InstalacionesCabecera) + "." + nameof(MYT_InstalacionesCabecera.id) + "," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionCabecera_Codigo) + " = " + nameof(MYT_InstalacionesCabecera) + "." + nameof(MYT_InstalacionesCabecera.codigo) + "," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionCabecera_Descripcion) + " =" + nameof(MYT_InstalacionesCabecera) + "." + nameof(MYT_InstalacionesCabecera.descripcion) + "," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionCabecera_FechaBorrado) + " =" + nameof(MYT_InstalacionesCabecera) + "." + nameof(MYT_InstalacionesCabecera.fechaBorrado) + ","
                                )
                            :
                                (
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionCabecera_Id) + " = NULL, " +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionCabecera_Codigo) + " = ''," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionCabecera_Descripcion) + " = ''," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionCabecera_FechaBorrado) + " = NULL, "
                                )
                        ) +
                        //Cliente
                        (
                            (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.Cliente)))
                            ?
                                (
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.Cliente_Id) + " = " + nameof(MAE_Clientes) + "." + nameof(MAE_Clientes.id) + "," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.Cliente_Codigo) + " = " + nameof(MAE_Clientes) + "." + nameof(MAE_Clientes.codigo) + "," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.Cliente_Descripcion) + " =" + nameof(MAE_Clientes) + "." + nameof(MAE_Clientes.razonSocial) + "," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.Cliente_FechaBorrado) + " =" + nameof(MAE_Clientes) + "." + nameof(MAE_Clientes.fechaBorrado) + ","
                                )
                            :
                                (
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.Cliente_Id) + " = NULL, " +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.Cliente_Codigo) + " = ''," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.Cliente_Descripcion) + " = ''," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.Cliente_FechaBorrado) + " = NULL, "
                                )
                        ) +
                        //InstalacionLinea
                        (
                            (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionLinea)))
                            ?
                                (
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionLinea_Codigo) + " = " + nameof(MYT_InstalacionesLineas) + "." + nameof(MYT_InstalacionesLineas.codigo) + "," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionLinea_Descripcion) + " =" + nameof(MYT_InstalacionesLineas) + "." + nameof(MYT_InstalacionesLineas.descripcion) + "," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionLinea_FechaBorrado) + " =" + nameof(MYT_InstalacionesLineas) + "." + nameof(MYT_InstalacionesLineas.fechaBorrado) + ","
                                )
                            :
                                (
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionLinea_Codigo) + " = ''," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionLinea_Descripcion) + " = ''," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionLinea_FechaBorrado) + " = NULL, "
                                )
                        ) +
                        //TipoResultado
                        (
                            (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.TipoResultado)))
                            ?
                                (
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.TipoResultado_Codigo) + " = " + nameof(MYT_InspeccionesTiposResultados) + "." + nameof(MYT_InspeccionesTiposResultados.codigo) + "," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.TipoResultado_Descripcion) + " =" + nameof(MYT_InspeccionesTiposResultados) + "." + nameof(MYT_InspeccionesTiposResultados.descripcion) + "," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.TipoResultado_FechaBorrado) + " =" + nameof(MYT_InspeccionesTiposResultados) + "." + nameof(MYT_InspeccionesTiposResultados.fechaBorrado) 
                                )
                            :
                                (
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.TipoResultado_Codigo) + " = ''," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.TipoResultado_Descripcion) + " = ''," +
                                    nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.TipoResultado_FechaBorrado) + " = NULL "
                                )
                        ) +
               " FROM " + nameof(MYT_Inspecciones) +
                        //OrganismoCertificador
                        (
                             (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.OrganismoCertificador)))
                                ?
                                    (
                                     " LEFT JOIN " + nameof(MYT_OrganismosCertificadores) + " ON " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idOrganismoCertificador) + " = " + nameof(MYT_OrganismosCertificadores) + "." + nameof(MYT_OrganismosCertificadores.id)
                                    )
                                : ("")
                        ) +
                        //InstalacionCabecera.Cliente o  InstalacionLinea
                        (
                             (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionCabecera)) ||
                             _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.Cliente)) ||
                              _lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionLinea))
                             )
                                ?
                                    (
                                     " LEFT JOIN " + nameof(MYT_InstalacionesLineas) + " ON " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInstalacionLinea) + " = " + nameof(MYT_InstalacionesLineas) + "." + nameof(MYT_InstalacionesLineas.id) +
                                     " LEFT JOIN " + nameof(MYT_InstalacionesCabecera) + " ON " + nameof(MYT_InstalacionesLineas) + "." + nameof(MYT_InstalacionesLineas.idInstalacionCabecera) + " = " + nameof(MYT_InstalacionesCabecera) + "." + nameof(MYT_InstalacionesCabecera.id) +
                                     " LEFT JOIN " + nameof(MAE_Clientes) + " ON " + nameof(MYT_InstalacionesCabecera) + "." + nameof(MYT_InstalacionesCabecera.idCliente) + " = " + nameof(MAE_Clientes) + "." + nameof(MAE_Clientes.id)
                                    )
                                : ("")
                        ) +
                        //TipoResultado
                        (
                             (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.TipoResultado)))
                                ?
                                    (
                                     " LEFT JOIN " + nameof(MYT_InspeccionesTiposResultados) + " ON " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInspeccionTipoResultado) + " = " + nameof(MYT_InspeccionesTiposResultados) + "." + nameof(MYT_InspeccionesTiposResultados.id)
                                    )
                                : ("")
                        ) +
               " WHERE " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaBorrado) + " IS null AND " +
                        //Filtro InstalacionLinea
                        (
                            !str_Padre_Opcion_INSTALACIONESLINEAS.Equals("")
                                ? (nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInstalacionLinea) + " = " + lng_Padre_idInstalacionLinea)
                                : " 1 = 1 "
                        ) + " AND " +
                        //Filtro Inspeccion
                        (
                            !str_Padre_Opcion_INSPECCION.Equals("")
                                ? (nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.id) + " <> " + lng_Padre_idInspeccion)
                                : " 1 = 1 "
                        ) + " AND " +
                       (_lng_id > -1 ? (nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.id) + "=@id") : "1 = 1");

                //Parametros
                object[] arr_Parametros = new object[]
                {
                     new SqlParameter("@id",  _lng_id)
                };

                //Rellenar el Modelo
                g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo = _obj_Exferia_Entities.Database.SqlQuery<INTERNO_MYT_Inspecciones_Listado_Modelo>(str_SQL, arr_Parametros).ToList();

            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(ConsultaRellenar_Listado), true);
            }
        }
        #endregion

        #region Listado Secundario
        public override List<dynamic> Obtener_Listado_Secundario(long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<string> _lst_CamposConRelacionABuscar, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            return null;
        }
        public override dynamic Obtener_RegistroListado_Secundario(long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<string> _lst_CamposConRelacionABuscar, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo, long _lng_id, List<long> _lst_ids)
        {
            return null;
        }
        protected override void ConsultaRellenar_Listado_Secundario(Exferia_Entities _obj_Exferia_Entities, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<long> _lst_idEmpresasRelacionadas, List<string> _lst_CamposConRelacionABuscar, long _lng_id, List<long> _lst_ids, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        { }
        #endregion

        #region F3
        private INTERNO_MYT_Inspecciones_Listado_Modelo g_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo_F3 = null;

        public override dynamic Obtener_F3(string _str_filtro, string _str_CampoBusqueda, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            Exferia_Entities obj_Exferia_Entities = null;
            dynamic dnm_MYT = null;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                //Consulta...........................................................
                ConsultaRellenar_F3(obj_Exferia_Entities, _lng_idEmpresaSeleccionada, _lng_idEjercicioActual, Datos_Generales.GEN_Empresas_Devolver_EmpresasCompartidas_SegunFichero(_lng_idEmpresaSeleccionada, typeof(MYT_Inspecciones).Name), _str_CampoBusqueda, _str_filtro, -1, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                //...................................................................

                if (g_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo_F3 != null)
                {
                    dnm_MYT = g_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo_F3;
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(Obtener_F3), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return dnm_MYT;
        }

        public override dynamic Obtener_F3_PorId(long _lng_id, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            Exferia_Entities obj_Exferia_Entities = null;
            dynamic dnm_MYT = null;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                //Consulta
                ConsultaRellenar_F3(obj_Exferia_Entities, _lng_idEmpresaSeleccionada, _lng_idEjercicioActual, Datos_Generales.GEN_Empresas_Devolver_EmpresasCompartidas_SegunFichero(_lng_idEmpresaSeleccionada, typeof(MYT_Inspecciones).Name), "", "", _lng_id, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                //....................

                if (g_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo_F3 != null)
                {
                    dnm_MYT = g_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo_F3;
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(Obtener_F3), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return dnm_MYT;
        }

       
        protected override void ConsultaRellenar_F3(Exferia_Entities _obj_Exferia_Entities, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<long> _lst_idEmpresasRelacionas, string _str_CampoBusqueda, string _str_Filtro, long _lng_id, List<INTERNO_Filtro_OpcionPadre_Modelo> _lst_INTERNO_Filtro_OpcionPadre_Modelo, List<INTERNO_Filtro_Modelo> _lst_INTERNO_Filtro_Modelo)
        {
            try
            {
                //Datos del Padre si los tuviera .........................
                long lng_Padre_idInstalacionLinea = -1;
                string str_Padre_Opcion_INSTALACIONESLINEAS = "";

                long lng_Padre_idInspeccion = -1;
                string str_Padre_Opcion_INSPECCION = "";

                if (_lst_INTERNO_Filtro_OpcionPadre_Modelo != null && _lst_INTERNO_Filtro_OpcionPadre_Modelo.Count > 0)
                {
                    foreach (INTERNO_Filtro_OpcionPadre_Modelo mdl_INTERNO_Filtro_OpcionPadre_Modelo in _lst_INTERNO_Filtro_OpcionPadre_Modelo)
                    {
                        //InstalacionLinea
                        if (mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO == Variables.G_STR_OPCION_MYT_INSTALACIONESLINEAS)
                        {
                            lng_Padre_idInstalacionLinea = mdl_INTERNO_Filtro_OpcionPadre_Modelo.VALOR;
                            str_Padre_Opcion_INSTALACIONESLINEAS = mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO;
                        }
                        //Inspeccion
                        else if (mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO == Variables.G_STR_OPCION_MYT_INSPECCIONES)
                        {
                            lng_Padre_idInspeccion = mdl_INTERNO_Filtro_OpcionPadre_Modelo.VALOR;
                            str_Padre_Opcion_INSPECCION = mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO;
                        }
                    }
                }

                string str_SQL =
                   " SELECT distinct " +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.id) + " = " + nameof(MYT_Inspecciones.id) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.codigo) + " = " + nameof(MYT_Inspecciones.codigo) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaRecibiAviso) + " = " + nameof(MYT_Inspecciones.fechaRecibiAviso) + 
               " FROM " + nameof(MYT_Inspecciones) +
               " WHERE " + nameof(MYT_Inspecciones.fechaBorrado) + " IS null AND " +
                        //Filtro InstalacionLinea
                        (
                            !str_Padre_Opcion_INSTALACIONESLINEAS.Equals("")
                                ? (nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInstalacionLinea) + " = " + lng_Padre_idInstalacionLinea)
                                : " 1 = 1 "
                        ) + " AND " +
                        //Filtro Inspeccion
                        (
                            !str_Padre_Opcion_INSPECCION.Equals("")
                                ? (nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.id) + " <> " + lng_Padre_idInspeccion)
                                : " 1 = 1 "
                        ) + " AND " +
                       (
                        (_lng_id > -1)
                          ? (nameof(MYT_Inspecciones.id) + " = " + _lng_id)
                          : (
                               //Filtrar por Codigo
                               (_str_CampoBusqueda.Equals(nameof(MYT_Inspecciones.codigo)))
                                   ? (nameof(MYT_Inspecciones.codigo) + "=@Filtro")
                                   //Filtrar por Descripcion
                                   : "1<>1"
                           )
                       );

                //Parametros
                object[] arr_Parametros = new object[]
                {
                     new SqlParameter("@Filtro",  _str_Filtro)
                };

                //Rellenar el Modelo
                g_mdl_INTERNO_MYT_Inspecciones_Listado_Modelo_F3 = _obj_Exferia_Entities.Database.SqlQuery<INTERNO_MYT_Inspecciones_Listado_Modelo>(str_SQL, arr_Parametros).FirstOrDefault();

            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(ConsultaRellenar_F3), true);
            }
        }
        #endregion

        #region Obtener
        #region Obtener Simple
        private dynamic g_dnm_Modelo_Obtener = null;

        private static int g_int_TotalHilos_Obtener = 4;
        private bool[] g_bol_Hilos_Terminados_Obtener = new bool[g_int_TotalHilos_Obtener];

        public override dynamic Obtener(long _lng_id)
        {
            Exferia_Entities obj_Exferia_Entities = null;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                string str_SQL =
                          " SELECT " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.id) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.codigo) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idOrganismoCertificador) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInspeccionRelacionada) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInstalacionLinea) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInspeccionTipoResultado) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.inspectorNombre) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.inspectorTelefono) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.inspectorEmail) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaRecibiAviso) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaRealizacionInspeccion) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaLlegadaInforme) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaPlazo) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaRecibiPresupuestoDefecto) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaPresupuestoFirmado) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaComprobacionDefectos) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaPeticionSegundaInspeccion) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.observaciones) + " , " +
                                nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaBorrado) + 
                        " FROM " + nameof(MYT_Inspecciones) +
                        " WHERE  " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaBorrado) + " IS null AND " +
                                     nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.id) + "=@id ";

                //Parametros
                object[] arr_Parametros = new object[]
                {
                     new SqlParameter("@id",  _lng_id)
                };

                //Rellenar el Modelo
                g_dnm_Modelo_Obtener = obj_Exferia_Entities.Database.SqlQuery<MYT_Inspecciones>(str_SQL, arr_Parametros).FirstOrDefault();

                #region Rellenar tablas Relacionadas
                if (g_dnm_Modelo_Obtener != null)
                {
                    //reiniciar Valores de los hilos
                    for (int int_Contador = 0; int_Contador < g_int_TotalHilos_Obtener; int_Contador++)
                    {
                        g_bol_Hilos_Terminados_Obtener[int_Contador] = false;
                    }

                    //MYT_OrganismosCertificadores ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idOrganismoCertificador != null)
                    {
                        ThreadStart obj_ThreadStart_ORGANISMOCERTIFICADOR = new ThreadStart(Obtener_OrganismoCertificador_Modelo_Obtener);
                        Thread obj_Thread_ORGANISMOCERTIFICADOR = new Thread(obj_ThreadStart_ORGANISMOCERTIFICADOR);
                        obj_Thread_ORGANISMOCERTIFICADOR.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[0] = true;
                    }

                    //MYT_Inspecciones ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idInspeccionRelacionada != null)
                    {
                        ThreadStart obj_ThreadStart_INSPECCIONRELACIONADA = new ThreadStart(Obtener_InspeccionRelacionada_Modelo_Obtener);
                        Thread obj_Thread_INSPECCIONRELACIONADA = new Thread(obj_ThreadStart_INSPECCIONRELACIONADA);
                        obj_Thread_INSPECCIONRELACIONADA.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[1] = true;
                    }

                    //MYT_InstalacionesLineas ##########################################################################################
                    ThreadStart obj_ThreadStart_INSTALACIONLINEA = new ThreadStart(Obtener_InstalacionesLineas_Modelo_Obtener);
                    Thread obj_Thread_INSTALACIONLINEA = new Thread(obj_ThreadStart_INSTALACIONLINEA);
                    obj_Thread_INSTALACIONLINEA.Start();

                    //MYT_InspeccionesTiposResultados ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idInspeccionTipoResultado != null)
                    {
                        ThreadStart obj_ThreadStart_INSPECCIONTIPORESULTADO = new ThreadStart(Obtener_InspeccionesTiposResultados_Modelo_Obtener);
                        Thread obj_Thread_INSPECCIONTIPORESULTADO = new Thread(obj_ThreadStart_INSPECCIONTIPORESULTADO);
                        obj_Thread_INSPECCIONTIPORESULTADO.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[3] = true;
                    }

                    //Esperando a que terminen todos los hilos .........................................
                    bool bol_Termino = false;
                    while (bol_Termino == false)
                    {
                        bol_Termino = true;
                        foreach (bool bol_Termino_Hilo in g_bol_Hilos_Terminados_Obtener)
                        {
                            if (bol_Termino_Hilo == false)
                            {
                                bol_Termino = false;
                                break;
                            }
                        }

                        Thread.Sleep(10);
                    }
                    //.................................................................................
                }
                #endregion
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(Obtener), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return g_dnm_Modelo_Obtener;
        }
        #region Tablas Relacionadas
        private void Obtener_OrganismoCertificador_Modelo_Obtener()
        {
            try
            {
                MYT_OrganismosCertificadores_Datos obj_MYT_OrganismosCertificadores_Datos = new MYT_OrganismosCertificadores_Datos();
                g_dnm_Modelo_Obtener.MYT_OrganismosCertificadores = obj_MYT_OrganismosCertificadores_Datos.Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idOrganismoCertificador);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[0] = true;
            }
        }
        private void Obtener_InspeccionRelacionada_Modelo_Obtener()
        {
            try
            {
                g_dnm_Modelo_Obtener.MYT_Inspecciones2 = Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idInspeccionRelacionada);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[1] = true;
            }
        }
        private void Obtener_InstalacionesLineas_Modelo_Obtener()
        {
            try
            {
                MYT_InstalacionesLineas_Datos obj_MYT_InstalacionesLineas_Datos = new MYT_InstalacionesLineas_Datos();
                g_dnm_Modelo_Obtener.MYT_InstalacionesLineas = obj_MYT_InstalacionesLineas_Datos.Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idInstalacionLinea,true,true);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[2] = true;
            }
        }
        private void Obtener_InspeccionesTiposResultados_Modelo_Obtener()
        {
            try
            {
                MYT_InspeccionesTiposResultados_Datos obj_MYT_InspeccionesTiposResultados_Datos = new MYT_InspeccionesTiposResultados_Datos();
                g_dnm_Modelo_Obtener.MYT_InspeccionesTiposResultados = obj_MYT_InspeccionesTiposResultados_Datos.Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idInspeccionTipoResultado);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[3] = true;
            }
        }
        #endregion

        #endregion

        public override dynamic Obtener_Registro_PorCampo(string _str_Filtro, string _str_CampoBusqueda, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual)
        {
            throw new NotImplementedException();
        }
        #endregion

        #region Para Listado
        private List<INTERNO_MYT_Inspecciones_Listado_Modelo> g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo_PARALISTADO = null;

        public List<INTERNO_MYT_Inspecciones_Listado_Modelo> Obtener_Registros_Para_Listado_Por_InstalacionLinea(long _lng_idInstalacionLinea)
        {
            try
            {
                g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo_PARALISTADO = new List<INTERNO_MYT_Inspecciones_Listado_Modelo>();

                MYT_Inspecciones mdl_MYT_Inspecciones=Obtener_Modelo_Por_IdInstalacionLinea(_lng_idInstalacionLinea);
                if (mdl_MYT_Inspecciones!=null)
                {
                    Obtener_Registros_Para_Listado_Por_Inspeccion(mdl_MYT_Inspecciones.id);
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(Obtener_Registros_Para_Listado_Por_InstalacionLinea), true);
            }

            return g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo_PARALISTADO;
        }
        public List<INTERNO_MYT_Inspecciones_Listado_Modelo> Obtener_Registros_Para_Listado_Por_Inspeccion(long _lng_idInspeccion)
        {
            Exferia_Entities obj_Exferia_Entities = null;
            g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo_PARALISTADO = new List<INTERNO_MYT_Inspecciones_Listado_Modelo>();

            try
            {
                //Conexion
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                //Buscar Hijos
                InspeccionRelacionada_Hijos_Recursivo(obj_Exferia_Entities, _lng_idInspeccion);

                //Buscar Padres
                InspeccionRelacionada_Padre_Recursivo(obj_Exferia_Entities, _lng_idInspeccion);

            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(Obtener_Registros_Para_Listado_Por_Inspeccion), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }

            return g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo_PARALISTADO;
        }
        public void InspeccionRelacionada_Hijos_Recursivo(Exferia_Entities _obj_Exferia_Entities,long _lng_idInspeccion)
        {
            try
            {
                string str_SQL = Obtener_Consulta_Para_Listado() +
                                    " WHERE " +
                                        nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaBorrado) + " is null and " +
                                        nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.id) + "=@id ";
                //Parametros
                //Parametros
                object[] arr_Parametros = new object[]
                {
                    new SqlParameter("@id",  _lng_idInspeccion)
                };

                //Rellenar el Modelo
                INTERNO_MYT_Inspecciones_Listado_Modelo mdl_INTERNO_MYT_Inspecciones_Listado_Modelo = _obj_Exferia_Entities.Database.SqlQuery<INTERNO_MYT_Inspecciones_Listado_Modelo>(str_SQL, arr_Parametros).FirstOrDefault();

                if (mdl_INTERNO_MYT_Inspecciones_Listado_Modelo != null)
                {
                    //Añado al listado
                    g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo_PARALISTADO.Add(mdl_INTERNO_MYT_Inspecciones_Listado_Modelo);

                    //Ver si tiene una inspeccion Relacionada para que la busque
                    if (mdl_INTERNO_MYT_Inspecciones_Listado_Modelo.idInspeccionRelacionada!=null)
                    {
                        InspeccionRelacionada_Hijos_Recursivo(_obj_Exferia_Entities,mdl_INTERNO_MYT_Inspecciones_Listado_Modelo.idInspeccionRelacionada.Value);
                    }
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(InspeccionRelacionada_Hijos_Recursivo), true);
            }
        }
        public void InspeccionRelacionada_Padre_Recursivo(Exferia_Entities _obj_Exferia_Entities, long _lng_idInspeccion)
        {
            try
            {
                string str_SQL = Obtener_Consulta_Para_Listado() +
                                    " WHERE " +
                                        nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaBorrado) + " is null and " +
                                        nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInspeccionRelacionada) + "=@idInspeccionRelacionada ";
                //Parametros
                //Parametros
                object[] arr_Parametros = new object[]
                {
                    new SqlParameter("@idInspeccionRelacionada",  _lng_idInspeccion)
                };

                //Rellenar el Modelo
                List<INTERNO_MYT_Inspecciones_Listado_Modelo> lst_INTERNO_MYT_Inspecciones_Listado_Modelo = _obj_Exferia_Entities.Database.SqlQuery<INTERNO_MYT_Inspecciones_Listado_Modelo>(str_SQL, arr_Parametros).ToList();

                if (lst_INTERNO_MYT_Inspecciones_Listado_Modelo != null &&
                    lst_INTERNO_MYT_Inspecciones_Listado_Modelo.Count>0)
                {
                    foreach (INTERNO_MYT_Inspecciones_Listado_Modelo mdl_INTERNO_MYT_Inspecciones_Listado_Modelo in lst_INTERNO_MYT_Inspecciones_Listado_Modelo)
                    {
                        //Añado al listado
                        g_lst_INTERNO_MYT_Inspecciones_Listado_Modelo_PARALISTADO.Add(mdl_INTERNO_MYT_Inspecciones_Listado_Modelo);

                        InspeccionRelacionada_Padre_Recursivo(_obj_Exferia_Entities, mdl_INTERNO_MYT_Inspecciones_Listado_Modelo.id);
                    }
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(InspeccionRelacionada_Padre_Recursivo), true);
            }
        }

        private string Obtener_Consulta_Para_Listado()
        {
            return
                 " SELECT " +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.id) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.id) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.codigo) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.codigo) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.inspectorNombre) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.inspectorNombre) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.inspectorTelefono) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.inspectorTelefono) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.inspectorEmail) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.inspectorEmail) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaRecibiAviso) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaRecibiAviso) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaRealizacionInspeccion) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaRealizacionInspeccion) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaLlegadaInforme) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaLlegadaInforme) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaPlazo) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaPlazo) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaRecibiPresupuestoDefecto) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaRecibiPresupuestoDefecto) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaPresupuestoFirmado) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaPresupuestoFirmado) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaComprobacionDefectos) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaComprobacionDefectos) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.fechaPeticionSegundaInspeccion) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaPeticionSegundaInspeccion) + "," +
                        //ids
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.idOrganismoCertificador) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idOrganismoCertificador) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.idInspeccionRelacionada) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInspeccionRelacionada) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.idInstalacionLinea) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInstalacionLinea) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.idInspeccionTipoResultado) + " = " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInspeccionTipoResultado) + "," +
                        //OrganismoCertificador
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.OrganismoCertificador_Codigo) + " = " + nameof(MYT_OrganismosCertificadores) + "." + nameof(MYT_OrganismosCertificadores.codigo) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.OrganismoCertificador_Descripcion) + " =" + nameof(MYT_OrganismosCertificadores) + "." + nameof(MYT_OrganismosCertificadores.razonSocial) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.OrganismoCertificador_FechaBorrado) + " =" + nameof(MYT_OrganismosCertificadores) + "." + nameof(MYT_OrganismosCertificadores.fechaBorrado) + "," +
                        //InstalacionCabecera
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionCabecera_Id) + " = " + nameof(MYT_InstalacionesCabecera) + "." + nameof(MYT_InstalacionesCabecera.id) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionCabecera_Codigo) + " = " + nameof(MYT_InstalacionesCabecera) + "." + nameof(MYT_InstalacionesCabecera.codigo) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionCabecera_Descripcion) + " =" + nameof(MYT_InstalacionesCabecera) + "." + nameof(MYT_InstalacionesCabecera.descripcion) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionCabecera_FechaBorrado) + " =" + nameof(MYT_InstalacionesCabecera) + "." + nameof(MYT_InstalacionesCabecera.fechaBorrado) + "," +
                        //Cliente
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.Cliente_Id) + " = " + nameof(MAE_Clientes) + "." + nameof(MAE_Clientes.id) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.Cliente_Codigo) + " = " + nameof(MAE_Clientes) + "." + nameof(MAE_Clientes.codigo) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.Cliente_Descripcion) + " =" + nameof(MAE_Clientes) + "." + nameof(MAE_Clientes.razonSocial) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.Cliente_FechaBorrado) + " =" + nameof(MAE_Clientes) + "." + nameof(MAE_Clientes.fechaBorrado) + "," +
                        //InstalacionLinea
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionLinea_Codigo) + " = " + nameof(MYT_InstalacionesLineas) + "." + nameof(MYT_InstalacionesLineas.codigo) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionLinea_Descripcion) + " =" + nameof(MYT_InstalacionesLineas) + "." + nameof(MYT_InstalacionesLineas.descripcion) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.InstalacionLinea_FechaBorrado) + " =" + nameof(MYT_InstalacionesLineas) + "." + nameof(MYT_InstalacionesLineas.fechaBorrado) + "," +
                        //TipoResultado
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.TipoResultado_Codigo) + " = " + nameof(MYT_InspeccionesTiposResultados) + "." + nameof(MYT_InspeccionesTiposResultados.codigo) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.TipoResultado_Descripcion) + " =" + nameof(MYT_InspeccionesTiposResultados) + "." + nameof(MYT_InspeccionesTiposResultados.descripcion) + "," +
                        nameof(INTERNO_MYT_Inspecciones_Listado_Modelo.TipoResultado_FechaBorrado) + " =" + nameof(MYT_InspeccionesTiposResultados) + "." + nameof(MYT_InspeccionesTiposResultados.fechaBorrado) +
                    " FROM " + nameof(MYT_Inspecciones) +
                    " LEFT JOIN " + nameof(MYT_OrganismosCertificadores) + " ON " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idOrganismoCertificador) + " = " + nameof(MYT_OrganismosCertificadores) + "." + nameof(MYT_OrganismosCertificadores.id) +
                    " LEFT JOIN " + nameof(MYT_InstalacionesLineas) + " ON " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInstalacionLinea) + " = " + nameof(MYT_InstalacionesLineas) + "." + nameof(MYT_InstalacionesLineas.id) +
                    " LEFT JOIN " + nameof(MYT_InstalacionesCabecera) + " ON " + nameof(MYT_InstalacionesLineas) + "." + nameof(MYT_InstalacionesLineas.idInstalacionCabecera) + " = " + nameof(MYT_InstalacionesCabecera) + "." + nameof(MYT_InstalacionesCabecera.id) +
                    " LEFT JOIN " + nameof(MAE_Clientes) + " ON " + nameof(MYT_InstalacionesCabecera) + "." + nameof(MYT_InstalacionesCabecera.idCliente) + " = " + nameof(MAE_Clientes) + "." + nameof(MAE_Clientes.id) +
                    " LEFT JOIN " + nameof(MYT_InspeccionesTiposResultados) + " ON " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInspeccionTipoResultado) + " = " + nameof(MYT_InspeccionesTiposResultados) + "." + nameof(MYT_InspeccionesTiposResultados.id);
        }
        #endregion

        #region MODELOS

        #region Modelo Simple
        private MYT_Inspecciones g_mdl_MYT_Inspecciones = null;

        public MYT_Inspecciones Obtener_Modelo_Por_Id(long _lng_id)
        {
            try
            {
                string str_SQL = Obtener_Consulta_Modelo() +
                                      //WHERE
                                      " WHERE " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.id) + "=@id";

                //Parametros
                object[] arr_Parametros = new object[]
                {
                     new SqlParameter("@id",  _lng_id)
                };

                //Ejecutar y rellenar el modelo
                Ejecutar_Consulta_Modelo(str_SQL,
                                         arr_Parametros);
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(Obtener_Modelo_Por_Id), true);
            }

            return g_mdl_MYT_Inspecciones;
        }
        public MYT_Inspecciones Obtener_Modelo_Por_IdInstalacionLinea(long _lng_idInstalacionLinea)
        {
            try
            {
                string str_SQL = Obtener_Consulta_Modelo() +
                                      //WHERE
                                      " WHERE " +
                                            nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaBorrado) + " is null and " +
                                            nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.idInstalacionLinea) + "=@idInstalacionLinea";

                //Parametros
                object[] arr_Parametros = new object[]
                {
                     new SqlParameter("@idInstalacionLinea",  _lng_idInstalacionLinea)
                };

                //Ejecutar y rellenar el modelo
                Ejecutar_Consulta_Modelo(str_SQL,
                                         arr_Parametros);
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(Obtener_Modelo_Por_Id), true);
            }

            return g_mdl_MYT_Inspecciones;
        }
        #region Ejecutar Consulta
        private void Ejecutar_Consulta_Modelo(string _str_SQL,
                                              object[] _arr_Parametros)
        {
            Exferia_Entities obj_Exferia_Entities = null;

            try
            {
                //Conexion
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                //Rellenar el Modelo
                g_mdl_MYT_Inspecciones = obj_Exferia_Entities.Database.SqlQuery<MYT_Inspecciones>(_str_SQL, _arr_Parametros).FirstOrDefault();
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(Ejecutar_Consulta_Modelo), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
        }

        #endregion
        #endregion

        #region Modelo Listado
        private List<MYT_Inspecciones> g_lst_MYT_Inspecciones = null;

        public List<MYT_Inspecciones> Obtener_ModeloListado_Por_Ids(List<long> _lst_Ids)
        {
            try
            {
                if (_lst_Ids != null && _lst_Ids.Count > 0)
                {
                    string str_Filtro_IDS = Funciones.Formar_ContenidoIN_ParaConsultaWhere(nameof(MYT_Inspecciones),
                                                                                             nameof(MYT_Inspecciones.id),
                                                                                             G_ENUM_FORMARCONTENIDOIN_CONDICIONANTES.NADA,
                                                                                             _lst_Ids);

                    //Consulta
                    string str_SQL = Obtener_Consulta_Modelo() +
                                                " WHERE " +
                                                    str_Filtro_IDS;

                    //Ejecutar y rellenar el listado
                    Ejecutar_Consulta_Modelo_Listado(str_SQL,
                                                     new object[] { });
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(Obtener_ModeloListado_Por_Ids), true);
            }

            return g_lst_MYT_Inspecciones;
        }

        public List<MYT_Inspecciones> Obtener_ModeloListado()
        {
            try
            {
                //Consulta
                string str_SQL = Obtener_Consulta_Modelo() +
                                   //WHERE
                                   " WHERE  " + nameof(MYT_Inspecciones) + "." + nameof(MYT_Inspecciones.fechaBorrado) + " IS null ";

                //Ejecutar y rellenar el listado
                Ejecutar_Consulta_Modelo_Listado(str_SQL,
                                                 new object[] { });
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(Obtener_ModeloListado), true);
            }

            return g_lst_MYT_Inspecciones;
        }

        #region Ejecutar Consulta
        private void Ejecutar_Consulta_Modelo_Listado(string _str_SQL,
                                                     object[] _arr_Parametros)
        {
            Exferia_Entities obj_Exferia_Entities = null;

            try
            {
                //Conexion
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;


                //Rellenar el modelo
                g_lst_MYT_Inspecciones = obj_Exferia_Entities.Database.SqlQuery<MYT_Inspecciones>(_str_SQL, _arr_Parametros).ToList();
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(Ejecutar_Consulta_Modelo_Listado), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
        }

        #endregion
        #endregion

        private string Obtener_Consulta_Modelo()
        {
            return
                " SELECT " +
                    nameof(MYT_Inspecciones.id) + " , " +
                    nameof(MYT_Inspecciones.codigo) + " , " +
                    nameof(MYT_Inspecciones.idOrganismoCertificador) + " , " +
                    nameof(MYT_Inspecciones.idInspeccionRelacionada) + " , " +
                    nameof(MYT_Inspecciones.idInstalacionLinea) + " , " +
                    nameof(MYT_Inspecciones.idInspeccionTipoResultado) + " , " +
                    nameof(MYT_Inspecciones.inspectorNombre) + " , " +
                    nameof(MYT_Inspecciones.inspectorTelefono) + " , " +
                    nameof(MYT_Inspecciones.inspectorEmail) + " , " +
                    nameof(MYT_Inspecciones.fechaRecibiAviso) + " , " +
                    nameof(MYT_Inspecciones.fechaRealizacionInspeccion) + " , " +
                    nameof(MYT_Inspecciones.fechaLlegadaInforme) + " , " +
                    nameof(MYT_Inspecciones.fechaPlazo) + " , " +
                    nameof(MYT_Inspecciones.fechaRecibiPresupuestoDefecto) + " , " +
                    nameof(MYT_Inspecciones.fechaPresupuestoFirmado) + " , " +
                    nameof(MYT_Inspecciones.fechaComprobacionDefectos) + " , " +
                    nameof(MYT_Inspecciones.fechaPeticionSegundaInspeccion) + " , " +
                    nameof(MYT_Inspecciones.observaciones) + " , " +
                    nameof(MYT_Inspecciones.fechaBorrado) +
                " FROM " + nameof(MYT_Inspecciones);
        }
        #endregion

        #region Grabar
        public override INTERNO_ValorDevuelto_Modelo Grabar(object _mdl_obj)
        {
            Exferia_Entities obj_Exferia_Entities = null;

            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                MYT_Inspecciones mdl_MYT_Inspecciones_AGrabar = (MYT_Inspecciones)_mdl_obj;
                MYT_Inspecciones mdl_MYT_Inspecciones_DatosViejos = new MYT_Inspecciones();

                // Ver si existe ######################################################################
                MYT_Inspecciones mdl_MYT_Inspecciones_Final = Obtener_Modelo_Por_Id(mdl_MYT_Inspecciones_AGrabar.id);
                //######################################################################################

                //UPDATE
                if (mdl_MYT_Inspecciones_Final != null)
                {
                    //Tipo de Accion que se va a realizar
                    mdl_INTERNO_ValorDevuelto_Modelo.TipoAccion = G_ENUM_TIPOACCION.INT_MODIFICAR;

                    //Datos viejos para la trazabilidad
                    Funciones.CopiarPropiedadesObjetos(mdl_MYT_Inspecciones_Final, mdl_MYT_Inspecciones_DatosViejos, false, false);

                    // Cargar los Datos Nuevos del Modelo
                    Funciones.CopiarPropiedadesObjetos(mdl_MYT_Inspecciones_AGrabar, mdl_MYT_Inspecciones_Final, false, false);

                    #region Update
                    string str_SQL_Update = " UPDATE " + nameof(MYT_Inspecciones) +
                                           " SET " +
                                                nameof(MYT_Inspecciones.codigo) + "=@codigo," +
                                                nameof(MYT_Inspecciones.idOrganismoCertificador) + "=@idOrganismoCertificador," +
                                                nameof(MYT_Inspecciones.idInspeccionRelacionada) + "=@idInspeccionRelacionada," +
                                                nameof(MYT_Inspecciones.idInstalacionLinea) + "=@idInstalacionLinea," +
                                                nameof(MYT_Inspecciones.idInspeccionTipoResultado) + "=@idInspeccionTipoResultado," +
                                                nameof(MYT_Inspecciones.inspectorNombre) + "=@inspectorNombre," +
                                                nameof(MYT_Inspecciones.inspectorTelefono) + "=@inspectorTelefono," +
                                                nameof(MYT_Inspecciones.inspectorEmail) + "=@inspectorEmail," +
                                                nameof(MYT_Inspecciones.fechaRecibiAviso) + "=@fechaRecibiAviso," +
                                                nameof(MYT_Inspecciones.fechaRealizacionInspeccion) + "=@fechaRealizacionInspeccion," +
                                                nameof(MYT_Inspecciones.fechaLlegadaInforme) + "=@fechaLlegadaInforme," +
                                                nameof(MYT_Inspecciones.fechaPlazo) + "=@fechaPlazo," +
                                                nameof(MYT_Inspecciones.fechaRecibiPresupuestoDefecto) + "=@fechaRecibiPresupuestoDefecto," +
                                                nameof(MYT_Inspecciones.fechaPresupuestoFirmado) + "=@fechaPresupuestoFirmado," +
                                                nameof(MYT_Inspecciones.fechaComprobacionDefectos) + "=@fechaComprobacionDefectos," +
                                                nameof(MYT_Inspecciones.fechaPeticionSegundaInspeccion) + "=@fechaPeticionSegundaInspeccion," +
                                                nameof(MYT_Inspecciones.observaciones) + "=@observaciones," +
                                                nameof(MYT_Inspecciones.fechaBorrado) + "=@fechaBorrado " +
                                           " WHERE " +
                                               nameof(MYT_Inspecciones.id) + "=@id";

                    //Parametros
                    object[] arr_Parametros_Update = new object[]
                    {
                         new SqlParameter("@codigo",  mdl_MYT_Inspecciones_Final.codigo),
                         mdl_MYT_Inspecciones_Final.idOrganismoCertificador!=null
                            ?   new SqlParameter("@idOrganismoCertificador", mdl_MYT_Inspecciones_Final.idOrganismoCertificador.Value)
                            :   new SqlParameter("@idOrganismoCertificador",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.idInspeccionRelacionada!=null
                            ?   new SqlParameter("@idInspeccionRelacionada", mdl_MYT_Inspecciones_Final.idInspeccionRelacionada.Value)
                            :   new SqlParameter("@idInspeccionRelacionada",  DBNull.Value),
                         new SqlParameter("@idInstalacionLinea",  mdl_MYT_Inspecciones_Final.idInstalacionLinea),
                         mdl_MYT_Inspecciones_Final.idInspeccionTipoResultado!=null
                            ?   new SqlParameter("@idInspeccionTipoResultado", mdl_MYT_Inspecciones_Final.idInspeccionTipoResultado.Value)
                            :   new SqlParameter("@idInspeccionTipoResultado",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.inspectorNombre!=null
                            ?   new SqlParameter("@inspectorNombre", mdl_MYT_Inspecciones_Final.inspectorNombre)
                            :   new SqlParameter("@inspectorNombre",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.inspectorTelefono!=null
                            ?   new SqlParameter("@inspectorTelefono", mdl_MYT_Inspecciones_Final.inspectorTelefono)
                            :   new SqlParameter("@inspectorTelefono",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.inspectorEmail!=null
                            ?   new SqlParameter("@inspectorEmail", mdl_MYT_Inspecciones_Final.inspectorEmail)
                            :   new SqlParameter("@inspectorEmail",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaRecibiAviso!=null
                            ?   new SqlParameter("@fechaRecibiAviso", mdl_MYT_Inspecciones_Final.fechaRecibiAviso.Value)
                            :   new SqlParameter("@fechaRecibiAviso",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaRealizacionInspeccion!=null
                            ?   new SqlParameter("@fechaRealizacionInspeccion", mdl_MYT_Inspecciones_Final.fechaRealizacionInspeccion.Value)
                            :   new SqlParameter("@fechaRealizacionInspeccion",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaLlegadaInforme!=null
                            ?   new SqlParameter("@fechaLlegadaInforme", mdl_MYT_Inspecciones_Final.fechaLlegadaInforme.Value)
                            :   new SqlParameter("@fechaLlegadaInforme",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaPlazo!=null
                            ?   new SqlParameter("@fechaPlazo", mdl_MYT_Inspecciones_Final.fechaPlazo.Value)
                            :   new SqlParameter("@fechaPlazo",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaRecibiPresupuestoDefecto!=null
                            ?   new SqlParameter("@fechaRecibiPresupuestoDefecto", mdl_MYT_Inspecciones_Final.fechaRecibiPresupuestoDefecto.Value)
                            :   new SqlParameter("@fechaRecibiPresupuestoDefecto",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaPresupuestoFirmado!=null
                            ?   new SqlParameter("@fechaPresupuestoFirmado", mdl_MYT_Inspecciones_Final.fechaPresupuestoFirmado.Value)
                            :   new SqlParameter("@fechaPresupuestoFirmado",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaComprobacionDefectos!=null
                            ?   new SqlParameter("@fechaComprobacionDefectos", mdl_MYT_Inspecciones_Final.fechaComprobacionDefectos.Value)
                            :   new SqlParameter("@fechaComprobacionDefectos",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaPeticionSegundaInspeccion!=null
                            ?   new SqlParameter("@fechaPeticionSegundaInspeccion", mdl_MYT_Inspecciones_Final.fechaPeticionSegundaInspeccion.Value)
                            :   new SqlParameter("@fechaPeticionSegundaInspeccion",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.observaciones!=null
                            ?   new SqlParameter("@observaciones", mdl_MYT_Inspecciones_Final.observaciones)
                            :   new SqlParameter("@observaciones",  DBNull.Value),
                          mdl_MYT_Inspecciones_Final.fechaBorrado!=null
                            ?   new SqlParameter("@fechaBorrado", mdl_MYT_Inspecciones_Final.fechaBorrado.Value)
                            :   new SqlParameter("@fechaBorrado",  DBNull.Value),
                         new SqlParameter("@id",  mdl_MYT_Inspecciones_Final.id)
                    };
                    #endregion

                    //Update
                    obj_Exferia_Entities.Database.ExecuteSqlCommand(str_SQL_Update, arr_Parametros_Update);

                    //Id de la tabla
                    mdl_INTERNO_ValorDevuelto_Modelo.Id = mdl_MYT_Inspecciones_Final.id;
                }
                //INSERT
                else
                {
                    mdl_MYT_Inspecciones_Final = new MYT_Inspecciones();

                    //Tipo de Accion que se va a realizar
                    mdl_INTERNO_ValorDevuelto_Modelo.TipoAccion = G_ENUM_TIPOACCION.INT_INSERTAR;

                    // Cargar los Datos del Modelo
                    Funciones.CopiarPropiedadesObjetos(mdl_MYT_Inspecciones_AGrabar, mdl_MYT_Inspecciones_Final, false, false);

                    #region INSERT
                    string str_SQL_Insert = " INSERT INTO " + nameof(MYT_Inspecciones) +
                                              " (" +
                                                    nameof(MYT_Inspecciones.codigo) + "," +
                                                    nameof(MYT_Inspecciones.idOrganismoCertificador) + "," +
                                                    nameof(MYT_Inspecciones.idInspeccionRelacionada) + "," +
                                                    nameof(MYT_Inspecciones.idInstalacionLinea) + "," +
                                                    nameof(MYT_Inspecciones.idInspeccionTipoResultado) + "," +
                                                    nameof(MYT_Inspecciones.inspectorNombre) + "," +
                                                    nameof(MYT_Inspecciones.inspectorTelefono) + "," +
                                                    nameof(MYT_Inspecciones.inspectorEmail) + "," +
                                                    nameof(MYT_Inspecciones.fechaRecibiAviso) + "," +
                                                    nameof(MYT_Inspecciones.fechaRealizacionInspeccion) + "," +
                                                    nameof(MYT_Inspecciones.fechaLlegadaInforme) + "," +
                                                    nameof(MYT_Inspecciones.fechaPlazo) + "," +
                                                    nameof(MYT_Inspecciones.fechaRecibiPresupuestoDefecto) + "," +
                                                    nameof(MYT_Inspecciones.fechaPresupuestoFirmado) + "," +
                                                    nameof(MYT_Inspecciones.fechaComprobacionDefectos) + "," +
                                                    nameof(MYT_Inspecciones.fechaPeticionSegundaInspeccion) + "," +
                                                    nameof(MYT_Inspecciones.observaciones) + "," +
                                                    nameof(MYT_Inspecciones.fechaBorrado) +
                                              " ) " +
                                              " OUTPUT INSERTED." + nameof(MYT_Inspecciones.id) +
                                              " VALUES " +
                                              " ( " +
                                                    "@codigo," +
                                                    "@idOrganismoCertificador," +
                                                    "@idInspeccionRelacionada," +
                                                    "@idInstalacionLinea," +
                                                    "@idInspeccionTipoResultado," +
                                                    "@inspectorNombre," +
                                                    "@inspectorTelefono," +
                                                    "@inspectorEmail," +
                                                    "@fechaRecibiAviso," +
                                                    "@fechaRealizacionInspeccion," +
                                                    "@fechaLlegadaInforme," +
                                                    "@fechaPlazo," +
                                                    "@fechaRecibiPresupuestoDefecto," +
                                                    "@fechaPresupuestoFirmado," +
                                                    "@fechaComprobacionDefectos," +
                                                    "@fechaPeticionSegundaInspeccion," +
                                                    "@observaciones," +
                                                    "@fechaBorrado" +
                                              " ) ";

                    //Parametros
                    object[] arr_Parametros_Insert = new object[]
                    {
                        new SqlParameter("@codigo",  mdl_MYT_Inspecciones_Final.codigo),
                         mdl_MYT_Inspecciones_Final.idOrganismoCertificador!=null
                            ?   new SqlParameter("@idOrganismoCertificador", mdl_MYT_Inspecciones_Final.idOrganismoCertificador.Value)
                            :   new SqlParameter("@idOrganismoCertificador",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.idInspeccionRelacionada!=null
                            ?   new SqlParameter("@idInspeccionRelacionada", mdl_MYT_Inspecciones_Final.idInspeccionRelacionada.Value)
                            :   new SqlParameter("@idInspeccionRelacionada",  DBNull.Value),
                         new SqlParameter("@idInstalacionLinea",  mdl_MYT_Inspecciones_Final.idInstalacionLinea),
                         mdl_MYT_Inspecciones_Final.idInspeccionTipoResultado!=null
                            ?   new SqlParameter("@idInspeccionTipoResultado", mdl_MYT_Inspecciones_Final.idInspeccionTipoResultado.Value)
                            :   new SqlParameter("@idInspeccionTipoResultado",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.inspectorNombre!=null
                            ?   new SqlParameter("@inspectorNombre", mdl_MYT_Inspecciones_Final.inspectorNombre)
                            :   new SqlParameter("@inspectorNombre",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.inspectorTelefono!=null
                            ?   new SqlParameter("@inspectorTelefono", mdl_MYT_Inspecciones_Final.inspectorTelefono)
                            :   new SqlParameter("@inspectorTelefono",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.inspectorEmail!=null
                            ?   new SqlParameter("@inspectorEmail", mdl_MYT_Inspecciones_Final.inspectorEmail)
                            :   new SqlParameter("@inspectorEmail",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaRecibiAviso!=null
                            ?   new SqlParameter("@fechaRecibiAviso", mdl_MYT_Inspecciones_Final.fechaRecibiAviso.Value)
                            :   new SqlParameter("@fechaRecibiAviso",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaRealizacionInspeccion!=null
                            ?   new SqlParameter("@fechaRealizacionInspeccion", mdl_MYT_Inspecciones_Final.fechaRealizacionInspeccion.Value)
                            :   new SqlParameter("@fechaRealizacionInspeccion",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaLlegadaInforme!=null
                            ?   new SqlParameter("@fechaLlegadaInforme", mdl_MYT_Inspecciones_Final.fechaLlegadaInforme.Value)
                            :   new SqlParameter("@fechaLlegadaInforme",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaPlazo!=null
                            ?   new SqlParameter("@fechaPlazo", mdl_MYT_Inspecciones_Final.fechaPlazo.Value)
                            :   new SqlParameter("@fechaPlazo",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaRecibiPresupuestoDefecto!=null
                            ?   new SqlParameter("@fechaRecibiPresupuestoDefecto", mdl_MYT_Inspecciones_Final.fechaRecibiPresupuestoDefecto.Value)
                            :   new SqlParameter("@fechaRecibiPresupuestoDefecto",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaPresupuestoFirmado!=null
                            ?   new SqlParameter("@fechaPresupuestoFirmado", mdl_MYT_Inspecciones_Final.fechaPresupuestoFirmado.Value)
                            :   new SqlParameter("@fechaPresupuestoFirmado",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaComprobacionDefectos!=null
                            ?   new SqlParameter("@fechaComprobacionDefectos", mdl_MYT_Inspecciones_Final.fechaComprobacionDefectos.Value)
                            :   new SqlParameter("@fechaComprobacionDefectos",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.fechaPeticionSegundaInspeccion!=null
                            ?   new SqlParameter("@fechaPeticionSegundaInspeccion", mdl_MYT_Inspecciones_Final.fechaPeticionSegundaInspeccion.Value)
                            :   new SqlParameter("@fechaPeticionSegundaInspeccion",  DBNull.Value),
                         mdl_MYT_Inspecciones_Final.observaciones!=null
                            ?   new SqlParameter("@observaciones", mdl_MYT_Inspecciones_Final.observaciones)
                            :   new SqlParameter("@observaciones",  DBNull.Value),
                          mdl_MYT_Inspecciones_Final.fechaBorrado!=null
                            ?   new SqlParameter("@fechaBorrado", mdl_MYT_Inspecciones_Final.fechaBorrado.Value)
                            :   new SqlParameter("@fechaBorrado",  DBNull.Value)
                    };
                    #endregion

                    //Id de la tabla
                    mdl_INTERNO_ValorDevuelto_Modelo.Id = obj_Exferia_Entities.Database.SqlQuery<long>(str_SQL_Insert, arr_Parametros_Insert).Single();
                }

                // Grabar un registro de trazabilidad con los datos de la transaccion realizada.
                Datos_Generales.USR_Trazabilidad_Grabar(typeof(MYT_Inspecciones), mdl_MYT_Inspecciones_DatosViejos, mdl_MYT_Inspecciones_Final, mdl_INTERNO_ValorDevuelto_Modelo.TipoAccion, obj_Exferia_Entities);
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(Grabar), true);
            }
            finally
            {

                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        #endregion

        #region Borrar
        public override INTERNO_ValorDevuelto_Modelo Borrar(long _lng_id)
        {
            Exferia_Entities obj_Exferia_Entities = null;

            INTERNO_ValorDevuelto_Modelo mdl_INTERNO_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_INTERNO_ValorDevuelto_Modelo.TodoCorrecto = true;
            //Tipo de Accion que se va a realizar
            mdl_INTERNO_ValorDevuelto_Modelo.TipoAccion = G_ENUM_TIPOACCION.INT_ELIMINAR;

            try
            {
                obj_Exferia_Entities = new Exferia_Entities();
                obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                // Ver si existe ######################################################################
                MYT_Inspecciones mdl_MYT_Inspecciones_Final = Obtener_Modelo_Por_Id(_lng_id);
                //######################################################################################

                if (mdl_MYT_Inspecciones_Final != null)
                {
                    #region Update
                    string str_SQL_Update = " UPDATE " + nameof(MYT_Inspecciones) +
                                                " SET " +
                                                nameof(MYT_Inspecciones.fechaBorrado) + "=@fechaBorrado " +
                                            " WHERE " +
                                                nameof(MYT_Inspecciones.id) + "=@id";
                    //Parametros
                    object[] arr_Parametros_Update = new object[]
                    {
                        new SqlParameter("@fechaBorrado",  DateTime.Now),
                        new SqlParameter("@id", _lng_id)
                    };
                    #endregion

                    //Update
                    obj_Exferia_Entities.Database.ExecuteSqlCommand(str_SQL_Update, arr_Parametros_Update);

                    // Grabar un registro de trazabilidad con los datos de la transaccion realizada.
                    Datos_Generales.USR_Trazabilidad_Grabar(typeof(MYT_Inspecciones), null, mdl_MYT_Inspecciones_Final, G_ENUM_TIPOACCION.INT_ELIMINAR, obj_Exferia_Entities);
                }

                //Devolver también el objeto
                mdl_INTERNO_ValorDevuelto_Modelo.Id = _lng_id;
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Inspecciones_Datos) + "/" + nameof(Borrar), true);
            }
            finally
            {

                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        public override INTERNO_ValorDevuelto_Modelo Borrar(long _lng_id, long _lng_idAuxiliar)
        {
            throw new NotImplementedException();
        }

        public override INTERNO_ValorDevuelto_Modelo Borrar(object _mdl_obj)
        {
            throw new NotImplementedException();
        }
        #endregion
    }
}
