using Exferia_Aplicacion.General;
using Exferia_Aplicacion.Herencia.Capas;
using Exferia_Aplicacion.Modelos_MantenimientoSimple;
using Exferia_Contabilidad._0_Modelos;
using Exferia_EntityFramework;
using Exferia_General;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Transactions;
using static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_Contabilidad._1_Datos
{
    public class CTA_Inmovilizados_Datos : ABS_Datos
    {
        #region Listado
        private List<INTERNO_CTA_Inmovilizados_Listado_Modelo> g_lst_INTERNO_CTA_Inmovilizados_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_CTA = 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(CTA_Inmovilizados).Name), _lst_CamposConRelacionABuscar, -1,null, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                // ..............................................................

                if ((g_lst_INTERNO_CTA_Inmovilizados_Listado_Modelo != null) && (g_lst_INTERNO_CTA_Inmovilizados_Listado_Modelo.Count() > 0))
                {
                    lst_CTA = g_lst_INTERNO_CTA_Inmovilizados_Listado_Modelo.Cast<dynamic>().ToList();
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(CTA_Inmovilizados) + "/" + nameof(Obtener_Listado), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return lst_CTA;
        }
        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_CTA = 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(CTA_Inmovilizados).Name), _lst_CamposConRelacionABuscar, _lng_id, _lst_ids, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                // ..............................................................

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

        protected override void ConsultaRellenar_Listado(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)
        {
            try
            { 
                List<SqlParameter> lst_Parametros = new List<SqlParameter>();

                string str_Filtros_Empresas = Funciones.Formar_ContenidoIN_ParaConsultaWhere(_lst_idEmpresasRelacionadas);

                #region Filtros de Opciones
                //Datos del Padre si los tuviera .........................
                int int_Valor_Naturaleza = -1;
                string str_Opcion_Naturaleza = "";

                bool bol_Valor_NoAmortizar = false;
                string str_Opcion_NoAmortizar = "";

                bool bol_Valor_AmortizadoTerminado = false;
                long lng_idAmortizacionLinea_AmortizadoTerminado = -1;
                string str_Opcion_AmortizadoTerminado = "";

                DateTime? dtt_Valor_FechaAmortizacion = null;
                string str_Opcion_FechaAmortizacion = "";

                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)
                    {
                        //naturaleza
                        if (mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.naturaleza)))
                        {
                            int_Valor_Naturaleza = (int)mdl_INTERNO_Filtro_OpcionPadre_Modelo.VALOR_AUXILIAR;
                            str_Opcion_Naturaleza = mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO;
                        }
                        //noAmortizar
                        else if (mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.noAmortizar)))
                        {
                            bol_Valor_NoAmortizar = (bool)mdl_INTERNO_Filtro_OpcionPadre_Modelo.VALOR_AUXILIAR;
                            str_Opcion_NoAmortizar = mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO;
                        }
                        //amortizadoTerminado
                        else if (mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.amortizadoTerminado)))
                        {
                            lng_idAmortizacionLinea_AmortizadoTerminado = mdl_INTERNO_Filtro_OpcionPadre_Modelo.VALOR;
                            bol_Valor_AmortizadoTerminado = (bool)mdl_INTERNO_Filtro_OpcionPadre_Modelo.VALOR_AUXILIAR;
                            str_Opcion_AmortizadoTerminado = mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO;
                        }
                        //fechaInicioAmortizacion
                        else if (mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.fechaInicioAmortizacion)))
                        {
                            dtt_Valor_FechaAmortizacion = (DateTime)mdl_INTERNO_Filtro_OpcionPadre_Modelo.VALOR_AUXILIAR;
                            str_Opcion_FechaAmortizacion = mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO;
                        }
                    }
                }
                #endregion

                string str_SQL =
                       " SELECT " +
                           //CTA_Inmovilizados
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.id) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.id) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.numeroOrden) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.numeroOrden) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.concepto) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.concepto) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.fechaInicioAmortizacion) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.fechaInicioAmortizacion) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.importeAmortizable) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.importeAmortizable) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.importeAmortizadoEnAlta) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.importeAmortizadoEnAlta) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.rangoAmortizar) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.rangoAmortizar) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.tipoCalculoAmortizar) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.tipoCalculoAmortizar) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.tipoAmortizacion) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.tipoAmortizacion) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.tipoAmortizacionMaxima) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.tipoAmortizacionMaxima) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.fechaBaja) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.fechaBaja) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.noAmortizar) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.noAmortizar) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.naturaleza) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.naturaleza) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.amortizadoTerminado) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.amortizadoTerminado) + "," +
                            //ids
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.idDelegacion) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idDelegacion) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.idFacturaCompraCabecera) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idFacturaCompraCabecera) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.idMayor_CuentaInmovilizado) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayor_CuentaInmovilizado) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.idMayor_CuentaAmortizacionAcumulada) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayor_CuentaAmortizacionAcumulada) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.idMayor_CuentaDotacion) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayor_CuentaDotacion) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.idMayorAuxiliar) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayorAuxiliar) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.idDepartamento) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idDepartamento) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.idInmovilizadoMotivoBaja) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idInmovilizadoMotivoBaja) + "," +
                            nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.idEmpresa) + " = " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idEmpresa) + "," +
                            //Delegacion
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Delegacion)))
                                ?
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Delegacion_Codigo) + " = " + nameof(GEN_Delegaciones) + "." + nameof(GEN_Delegaciones.codigo) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Delegacion_Descripcion) + " = " + nameof(GEN_Delegaciones) + "." + nameof(GEN_Delegaciones.descripcion) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Delegacion_FechaBorrado) + " = " + nameof(GEN_Delegaciones) + "." + nameof(GEN_Delegaciones.fechaBorrado) + "," 
                                    )
                                :
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Delegacion_Codigo) + " = ''," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Delegacion_Descripcion) + "= '', " +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Delegacion_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //FacturaCompraCebecera
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.FacturaCompraCabecera_NumeroFactura)))
                                ?
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.FacturaCompraCabecera_NumeroFactura) + " = " + nameof(COM_FacturasCabecera) + "." + nameof(COM_FacturasCabecera.numeroFactura) + "," 
                                    )
                                :
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.FacturaCompraCabecera_NumeroFactura) + " = ''," 
                                    )
                            ) +
                            //Mayor_CuentaInmovilizado
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaInmovilizado)))
                                ?
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaInmovilizado_Codigo) + " = " + nameof(CTA_Mayor) + "." + nameof(CTA_Mayor.codigo) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaInmovilizado_Descripcion) + " = " + nameof(CTA_Mayor) + "." + nameof(CTA_Mayor.descripcion) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaInmovilizado_FechaBorrado) + " = " + nameof(CTA_Mayor) + "." + nameof(CTA_Mayor.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaInmovilizado_Codigo) + " = ''," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaInmovilizado_Descripcion) + "= '', " +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaInmovilizado_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //Mayor_CuentaAmortizacionAcumulada
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaAmortizacionAcumulada)))
                                ?
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaAmortizacionAcumulada_Codigo) + " = " + nameof(CTA_Mayor) + "_1." + nameof(CTA_Mayor.codigo) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaAmortizacionAcumulada_Descripcion) + " = " + nameof(CTA_Mayor) + "_1." + nameof(CTA_Mayor.descripcion) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaAmortizacionAcumulada_FechaBorrado) + " = " + nameof(CTA_Mayor) + "_1." + nameof(CTA_Mayor.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaAmortizacionAcumulada_Codigo) + " = ''," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaAmortizacionAcumulada_Descripcion) + "= '', " +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaAmortizacionAcumulada_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //Mayor_CuentaDotacion
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaDotacion)))
                                ?
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaDotacion_Codigo) + " = " + nameof(CTA_Mayor) + "_2." + nameof(CTA_Mayor.codigo) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaDotacion_Descripcion) + " = " + nameof(CTA_Mayor) + "_2." + nameof(CTA_Mayor.descripcion) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaDotacion_FechaBorrado) + " = " + nameof(CTA_Mayor) + "_2." + nameof(CTA_Mayor.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaDotacion_Codigo) + " = ''," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaDotacion_Descripcion) + "= '', " +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaDotacion_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //MayorAuxiliar
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.MayorAuxiliar)))
                                ?
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.MayorAuxiliar_Codigo) + " = " + nameof(CTA_MayorAuxiliar) + "." + nameof(CTA_MayorAuxiliar.codigo) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.MayorAuxiliar_Descripcion) + " = " + nameof(CTA_MayorAuxiliar) + "." + nameof(CTA_MayorAuxiliar.descripcion) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.MayorAuxiliar_FechaBorrado) + " = " + nameof(CTA_MayorAuxiliar) + "." + nameof(CTA_MayorAuxiliar.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.MayorAuxiliar_Codigo) + " = ''," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.MayorAuxiliar_Descripcion) + "= '', " +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.MayorAuxiliar_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //Departamento
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Departamento)))
                                ?
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Departamento_Codigo) + " = " + nameof(CTA_Departamentos) + "." + nameof(CTA_Departamentos.codigo) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Departamento_Descripcion) + " = " + nameof(CTA_Departamentos) + "." + nameof(CTA_Departamentos.descripcion) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Departamento_FechaBorrado) + " = " + nameof(CTA_Departamentos) + "." + nameof(CTA_Departamentos.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Departamento_Codigo) + " = ''," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Departamento_Descripcion) + "= '', " +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Departamento_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //InmovilizadoMotivoBaja
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.InmovilizadoMotivoBaja)))
                                ?
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.InmovilizadoMotivoBaja_Codigo) + " = " + nameof(CTA_InmovilizadosMotivosBaja) + "." + nameof(CTA_InmovilizadosMotivosBaja.codigo) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.InmovilizadoMotivoBaja_Descripcion) + " = " + nameof(CTA_InmovilizadosMotivosBaja) + "." + nameof(CTA_InmovilizadosMotivosBaja.descripcion) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.InmovilizadoMotivoBaja_FechaBorrado) + " = " + nameof(CTA_InmovilizadosMotivosBaja) + "." + nameof(CTA_InmovilizadosMotivosBaja.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.InmovilizadoMotivoBaja_Codigo) + " = ''," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.InmovilizadoMotivoBaja_Descripcion) + "= '', " +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.InmovilizadoMotivoBaja_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //Empresa
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Empresa)))
                                ?
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Empresa_Codigo) + " = " + nameof(GEN_Empresas) + "." + nameof(GEN_Empresas.codigo) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Empresa_Descripcion) + " = " + nameof(GEN_Empresas) + "." + nameof(GEN_Empresas.descripcion) + "," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Empresa_FechaBorrado) + " = " + nameof(GEN_Empresas) + "." + nameof(GEN_Empresas.fechaBorrado)
                                    )
                                :
                                    (
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Empresa_Codigo) + " = ''," +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Empresa_Descripcion) + "= '', " +
                                        nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Empresa_FechaBorrado) + " = NULL "
                                    )
                            ) +
                        " FROM " + nameof(CTA_Inmovilizados) +
                            //Delegacion
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Delegacion)))
                                ?(" LEFT JOIN " + nameof(GEN_Delegaciones) + " ON " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idDelegacion) + "=" + nameof(GEN_Delegaciones) + "." + nameof(GEN_Delegaciones.id))
                                : ("")
                            ) +
                            //FacturaCompraCabecera
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.FacturaCompraCabecera_NumeroFactura)))
                                ? (" LEFT JOIN " + nameof(COM_FacturasCabecera) + " ON " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idFacturaCompraCabecera) + "=" + nameof(COM_FacturasCabecera) + "." + nameof(COM_FacturasCabecera.id))
                                : ("")
                            ) +
                            //Mayor_CuentaInmovilizado
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaInmovilizado)))
                                ? (" LEFT JOIN " + nameof(CTA_Mayor) + " ON " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayor_CuentaInmovilizado) + "=" + nameof(CTA_Mayor) + "." + nameof(CTA_Mayor.id))
                                : ("")
                            ) +
                            //Mayor_CuentaAmortizacionAcumulada
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaAmortizacionAcumulada)))
                                ? (" LEFT JOIN " + nameof(CTA_Mayor) + " as " + nameof(CTA_Mayor) + "_1 ON " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayor_CuentaAmortizacionAcumulada) + "=" + nameof(CTA_Mayor) + "_1." + nameof(CTA_Mayor.id))
                                : ("")
                            ) +
                            //Mayor_CuentaDotacion
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Mayor_CuentaDotacion)))
                                ? (" LEFT JOIN " + nameof(CTA_Mayor) + " as " + nameof(CTA_Mayor) + "_2 ON " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayor_CuentaDotacion) + "=" + nameof(CTA_Mayor) + "_2." + nameof(CTA_Mayor.id))
                                : ("")
                            ) +
                            //MayorAuxiliar
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.MayorAuxiliar)))
                                ? (" LEFT JOIN " + nameof(CTA_MayorAuxiliar) + " ON " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayorAuxiliar) + "=" + nameof(CTA_MayorAuxiliar) + "." + nameof(CTA_MayorAuxiliar.id))
                                : ("")
                            ) +
                            //Departamento
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Departamento)))
                                ? (" LEFT JOIN " + nameof(CTA_Departamentos) + " ON " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idDepartamento) + "=" + nameof(CTA_Departamentos) + "." + nameof(CTA_Departamentos.id))
                                : ("")
                            ) +
                            //InmovilizadoMotivoBaja
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.InmovilizadoMotivoBaja)))
                                ? (" LEFT JOIN " + nameof(CTA_InmovilizadosMotivosBaja) + " ON " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idInmovilizadoMotivoBaja) + "=" + nameof(CTA_InmovilizadosMotivosBaja) + "." + nameof(CTA_InmovilizadosMotivosBaja.id))
                                : ("")
                            ) +
                            //Empresa
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.Empresa)))
                                ? (" LEFT JOIN " + nameof(GEN_Empresas) + " ON " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idEmpresa) + "=" + nameof(GEN_Empresas) + "." + nameof(GEN_Empresas.id))
                                : ("")
                            ) +
                         " WHERE " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.fechaBorrado) + " IS null AND " +
                               " ( " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idEmpresa) + "=@idEmpresa " +
                                    (
                                        (_lst_idEmpresasRelacionadas != null && _lst_idEmpresasRelacionadas.Count > 0)
                                            ? (" OR " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idEmpresa) + " in (" + str_Filtros_Empresas + ") ")
                                            : " "
                                    ) +
                                " ) AND " +
                              (
                             (_lng_id > -1)
                                 ? (nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.id) + " = " + _lng_id)
                                 : " 1 = 1  "
                              )
                               + " AND " +
                              //naturaleza
                              (
                                str_Opcion_Naturaleza.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.naturaleza))
                                    ? (nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.naturaleza) + "=@naturaleza")
                                    : (" 1 = 1 ")
                              ) + " AND " +
                              //noAmortizar
                              (
                                str_Opcion_NoAmortizar.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.noAmortizar))
                                    ? (bol_Valor_NoAmortizar)
                                        ? (nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.noAmortizar) + "=@noAmortizar")
                                        : ( "( " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.noAmortizar) + " is null OR  " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.noAmortizar) + "=@noAmortizar)")
                                    : (" 1 = 1 ")
                              ) + " AND " +
                              //amortizadoTerminado
                              (
                                str_Opcion_AmortizadoTerminado.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.amortizadoTerminado))
                                    ? " ( " + (nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.amortizadoTerminado) + "=@amortizadoTerminado OR " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.id) +"=@idFiltro)")
                                    : " 1 = 1 "
                              ) + " AND " +
                              //fechaInicioAmortizacion
                              (
                                str_Opcion_FechaAmortizacion.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.fechaInicioAmortizacion))
                                    ?  (nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.fechaInicioAmortizacion) + "<=@fechaAmortizacionCabecera")
                                    : " 1 = 1 "
                              );

                //Parametros
                lst_Parametros.Add(new SqlParameter("@idEmpresa", _lng_idEmpresaSeleccionada));

                //naturaleza
                if (str_Opcion_Naturaleza.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.naturaleza)))
                {
                    lst_Parametros.Add(new SqlParameter("@naturaleza", int_Valor_Naturaleza));
                }

                //noAmortizar
                if (str_Opcion_NoAmortizar.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.noAmortizar)))
                {
                    lst_Parametros.Add(new SqlParameter("@noAmortizar", bol_Valor_NoAmortizar));
                }

                //amortizadoTerminado
                if (str_Opcion_AmortizadoTerminado.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.amortizadoTerminado)))
                {
                    lst_Parametros.Add(new SqlParameter("@amortizadoTerminado", bol_Valor_AmortizadoTerminado));
                    lst_Parametros.Add(new SqlParameter("@idFiltro", lng_idAmortizacionLinea_AmortizadoTerminado));
                }

                //fechaInicioAmortizacion
                if (str_Opcion_FechaAmortizacion.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.fechaInicioAmortizacion)))
                {
                    lst_Parametros.Add(new SqlParameter("@fechaAmortizacionCabecera", dtt_Valor_FechaAmortizacion.Value));
                }

                object[] arr_Parametros = lst_Parametros.ToArray();


                //Rellenar el Modelo
                g_lst_INTERNO_CTA_Inmovilizados_Listado_Modelo = _obj_Exferia_Entities.Database.SqlQuery<INTERNO_CTA_Inmovilizados_Listado_Modelo>(str_SQL, arr_Parametros).ToList();
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(CTA_Inmovilizados_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_CTA_Inmovilizados_Listado_Modelo g_mdl_INTERNO_CTA_Inmovilizados_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_CTA = 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(CTA_Inmovilizados).Name), _str_CampoBusqueda, _str_filtro, -1, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                // ..............................................................

                if (g_mdl_INTERNO_CTA_Inmovilizados_Listado_Modelo_F3 != null)
                {
                    dnm_CTA = g_mdl_INTERNO_CTA_Inmovilizados_Listado_Modelo_F3;
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(CTA_Inmovilizados_Datos) + "/" + nameof(Obtener_F3), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return dnm_CTA;
        }
        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_CTA = 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(CTA_Inmovilizados).Name), "", "", _lng_id, _lst_INTERNO_Filtro_OpcionPadre_Modelo, _lst_INTERNO_Filtro_Modelo);
                // ..............................................................

                if (g_mdl_INTERNO_CTA_Inmovilizados_Listado_Modelo_F3 != null)
                {
                    dnm_CTA = g_mdl_INTERNO_CTA_Inmovilizados_Listado_Modelo_F3;
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(CTA_Inmovilizados_Datos) + "/" + nameof(Obtener_F3_PorId), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return dnm_CTA;
        }

        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
            {
                List<SqlParameter> lst_Parametros = new List<SqlParameter>();

                string str_Filtros_Empresa = Funciones.Formar_ContenidoIN_ParaConsultaWhere(_lst_idEmpresasRelacionas);

                #region Filtros de Opciones
                //Datos del Padre si los tuviera .........................
                int int_Valor_Naturaleza = -1;
                string str_Opcion_Naturaleza = "";

                bool bol_Valor_NoAmortizar = false;
                string str_Opcion_NoAmortizar = "";

                bool bol_Valor_AmortizadoTerminado = false;
                long lng_idAmortizacionLinea_AmortizadoTerminado = -1;
                string str_Opcion_AmortizadoTerminado = "";

                DateTime? dtt_Valor_FechaAmortizacion = null;
                string str_Opcion_FechaAmortizacion = "";

                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)
                    {
                        //naturaleza
                        if (mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.naturaleza)))
                        {
                            int_Valor_Naturaleza = (int)mdl_INTERNO_Filtro_OpcionPadre_Modelo.VALOR_AUXILIAR;
                            str_Opcion_Naturaleza = mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO;
                        }
                        //noAmortizar
                        else if (mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.noAmortizar)))
                        {
                            bol_Valor_NoAmortizar = (bool)mdl_INTERNO_Filtro_OpcionPadre_Modelo.VALOR_AUXILIAR;
                            str_Opcion_NoAmortizar = mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO;
                        }
                        //amortizadoTerminado
                        else if (mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.amortizadoTerminado)))
                        {
                            lng_idAmortizacionLinea_AmortizadoTerminado = mdl_INTERNO_Filtro_OpcionPadre_Modelo.VALOR;
                            bol_Valor_AmortizadoTerminado = (bool)mdl_INTERNO_Filtro_OpcionPadre_Modelo.VALOR_AUXILIAR;
                            str_Opcion_AmortizadoTerminado = mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO;
                        }
                        //fechaInicioAmortizacion
                        else if (mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.fechaInicioAmortizacion)))
                        {
                            dtt_Valor_FechaAmortizacion = (DateTime)mdl_INTERNO_Filtro_OpcionPadre_Modelo.VALOR_AUXILIAR;
                            str_Opcion_FechaAmortizacion = mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO;
                        }
                    }
                }
                #endregion

                string str_SQL =
                 " SELECT DISTINCT " +
                     nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.id) + " = " + nameof(CTA_Inmovilizados.id) + "," +
                     nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.numeroOrden) + " = " + nameof(CTA_Inmovilizados.numeroOrden) + "," +
                     nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.concepto) + " = " + nameof(CTA_Inmovilizados.concepto) +
                 " FROM " + nameof(CTA_Inmovilizados) +
                 " WHERE " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.fechaBorrado) + " IS NULL AND " +
                           " ( " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idEmpresa) + "=@idEmpresa " +
                                (
                                    (_lst_idEmpresasRelacionas != null && _lst_idEmpresasRelacionas.Count > 0)
                                        ? (" OR " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idEmpresa) + " in (" + str_Filtros_Empresa + ") ")
                                        : " "
                                ) +
                            " ) AND " +
                          (
                           (_lng_id > -1)
                             ? (nameof(CTA_Inmovilizados.id) + " = " + _lng_id)
                             : (
                                  //Filtrar por Codigo
                                  (_str_CampoBusqueda.Equals(nameof(CTA_Inmovilizados.numeroOrden)))
                                      ? (nameof(CTA_Inmovilizados.numeroOrden) + "=@Filtro")
                                      //Filtrar por Descripcion
                                      : (nameof(CTA_Inmovilizados.concepto) + "=@Filtro")
                               )
                          )
                          + " AND " +
                            //naturaleza
                            (
                            str_Opcion_Naturaleza.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.naturaleza))
                                ? (nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.naturaleza) + "=@naturaleza")
                                : (" 1 = 1 ")
                            ) + " AND " +
                            //noAmortizar
                            (
                            str_Opcion_NoAmortizar.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.noAmortizar))
                                ? (bol_Valor_NoAmortizar)
                                    ? (nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.noAmortizar) + "=@noAmortizar")
                                    : ("( " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.noAmortizar) + " is null OR  " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.noAmortizar) + "=@noAmortizar)")
                                : (" 1 = 1 ")
                            ) + " AND " +
                            //amortizadoTerminado
                            (
                            str_Opcion_AmortizadoTerminado.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.amortizadoTerminado))
                                ? " ( " + (nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.amortizadoTerminado) + "=@amortizadoTerminado OR " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.id) + "=@idFiltro)")
                                : " 1 = 1 "
                            ) + " AND " +
                            //fechaInicioAmortizacion
                            (
                            str_Opcion_FechaAmortizacion.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.fechaInicioAmortizacion))
                                ? (nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.fechaInicioAmortizacion) + "<=@fechaAmortizacionCabecera")
                                : " 1 = 1 "
                            );

                //Parametros
                lst_Parametros.Add(new SqlParameter("@idEmpresa", _lng_idEmpresaSeleccionada));
                lst_Parametros.Add(new SqlParameter("@Filtro", _str_Filtro));

                //naturaleza
                if (str_Opcion_Naturaleza.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.naturaleza)))
                {
                    lst_Parametros.Add(new SqlParameter("@naturaleza", int_Valor_Naturaleza));
                }

                //noAmortizar
                if (str_Opcion_NoAmortizar.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.noAmortizar)))
                {
                    lst_Parametros.Add(new SqlParameter("@noAmortizar", bol_Valor_NoAmortizar));
                }

                //amortizadoCompleto
                if (str_Opcion_AmortizadoTerminado.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.amortizadoTerminado)))
                {
                    lst_Parametros.Add(new SqlParameter("@amortizadoTerminado", bol_Valor_AmortizadoTerminado));
                    lst_Parametros.Add(new SqlParameter("@idFiltro", lng_idAmortizacionLinea_AmortizadoTerminado));
                }

                //fechaInicioAmortizacion
                if (str_Opcion_FechaAmortizacion.Equals(nameof(INTERNO_CTA_Inmovilizados_Listado_Modelo.fechaInicioAmortizacion)))
                {
                    lst_Parametros.Add(new SqlParameter("@fechaAmortizacionCabecera", dtt_Valor_FechaAmortizacion.Value));
                }

                object[] arr_Parametros = lst_Parametros.ToArray();


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

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

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

        private static int g_int_TotalHilos_Obtener = 8;
        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(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.id) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.numeroOrden) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.concepto) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idDelegacion) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.naturaleza) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idFacturaCompraCabecera) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.fechaInicioAmortizacion) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.importeAmortizable) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.importeAmortizadoEnAlta) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.rangoAmortizar) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.tipoCalculoAmortizar) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.tipoAmortizacion) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.tipoAmortizacionMaxima) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayor_CuentaInmovilizado) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayor_CuentaAmortizacionAcumulada) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayor_CuentaDotacion) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayorAuxiliar) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idDepartamento) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.fechaBaja) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.noAmortizar) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idInmovilizadoMotivoBaja) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idEmpresa) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.amortizadoTerminado) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.fechaBorrado) +
                    " FROM " + nameof(CTA_Inmovilizados) +
                    " WHERE " + nameof(CTA_Inmovilizados.fechaBorrado) + " IS NULL AND " +
                                nameof(CTA_Inmovilizados.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<CTA_Inmovilizados>(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;
                    }

                    //GEN_Delegaciones ##########################################################################################
                    ThreadStart obj_ThreadStart_DELEGACION = new ThreadStart(Obtener_Delegacion_Modelo_Obtener);
                    Thread obj_Thread_DELEGACION = new Thread(obj_ThreadStart_DELEGACION);
                    obj_Thread_DELEGACION.Start();
                    

                    //COM_FacturasCabecera ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idFacturaCompraCabecera != null)
                    {
                        ThreadStart obj_ThreadStart_FacturasCabecera = new ThreadStart(Obtener_FacturasCabecera_Modelo_Obtener);
                        Thread obj_Thread_FacturasCabecera = new Thread(obj_ThreadStart_FacturasCabecera);
                        obj_Thread_FacturasCabecera.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[1] = true;
                    }

                    //CTA_Mayor(Cuenta inmovilizada) ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idMayor_CuentaInmovilizado != null)
                    {
                        ThreadStart obj_ThreadStart_MAYOR = new ThreadStart(Obtener_MayorCuentaInmovilizada_Modelo_Obtener);
                        Thread obj_Thread_MAYOR = new Thread(obj_ThreadStart_MAYOR);
                        obj_Thread_MAYOR.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[2] = true;
                    }

                    //CTA_Mayor(Cuenta amortizada acumulada) ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idMayor_CuentaAmortizacionAcumulada != null)
                    {
                        ThreadStart obj_ThreadStart_MAYOR_1 = new ThreadStart(Obtener_MayorCuentaAmortizadaAcumulada_Modelo_Obtener);
                        Thread obj_Thread_MAYOR_1 = new Thread(obj_ThreadStart_MAYOR_1);
                        obj_Thread_MAYOR_1.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[3] = true;
                    }

                    //CTA_Mayor(Cuenta dotacion) ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idMayor_CuentaDotacion != null)
                    {
                        ThreadStart obj_ThreadStart_MAYOR_2 = new ThreadStart(Obtener_CuentaDotacion_Modelo_Obtener);
                        Thread obj_Thread_MAYOR_2 = new Thread(obj_ThreadStart_MAYOR_2);
                        obj_Thread_MAYOR_2.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[4] = true;
                    }

                    //CTA_MayorAuxiliar ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idMayorAuxiliar != null)
                    {
                        ThreadStart obj_ThreadStart_MAYORAUXILIAR = new ThreadStart(Obtener_CuentaAuxiliar_Modelo_Obtener);
                        Thread obj_Thread_MAYORAUXILIAR = new Thread(obj_ThreadStart_MAYORAUXILIAR);
                        obj_Thread_MAYORAUXILIAR.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[5] = true;
                    }

                    //CTA_Departamento ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idDepartamento != null)
                    {
                        ThreadStart obj_ThreadStart_DEPARTAMENTO = new ThreadStart(Obtener_Departamento_Modelo_Obtener);
                        Thread obj_Thread_DEPARTAMENTO = new Thread(obj_ThreadStart_DEPARTAMENTO);
                        obj_Thread_DEPARTAMENTO.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[6] = true;
                    }

                    //CTA_InmovilizadosMotivosBaja ##########################################################################################
                    if (g_dnm_Modelo_Obtener.idInmovilizadoMotivoBaja != null)
                    {
                        ThreadStart obj_ThreadStart_INMOVILIZADOMOTIVOBAJA = new ThreadStart(Obtener_InmovilizadoMotivoBaja_Modelo_Obtener);
                        Thread obj_Thread_INMOVILIZADOMOTIVOBAJA = new Thread(obj_ThreadStart_INMOVILIZADOMOTIVOBAJA);
                        obj_Thread_INMOVILIZADOMOTIVOBAJA.Start();
                    }
                    else
                    {
                        g_bol_Hilos_Terminados_Obtener[7] = 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(CTA_Inmovilizados_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_Delegacion_Modelo_Obtener()
        {
            try
            {
                g_dnm_Modelo_Obtener.GEN_Delegaciones = Datos_Generales.GEN_Delegaciones_Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idDelegacion);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[0] = true;
            }
        }
        private void Obtener_FacturasCabecera_Modelo_Obtener()
        {
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_COMPRAS + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_COMPRAS + "." + Variables.G_STR_LIBRERIA_DATOSCOMPRAS);
                //creamos la instancia
                var obj_Clase = Activator.CreateInstance(m_type);
                //Cargamos el metodo solicitado
                MethodInfo obj_MethodInfo = obj_Clase.GetType().GetMethod(Variables.G_STR_LIBRERIA_DATOSCOMPRAS_PROCEDIMIENTO_COMFACTURASCABECERA_OBTENERMODELO_POR_ID_AUX_1, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { g_dnm_Modelo_Obtener.idFacturaCompraCabecera,true,false,false};
                //Pasamos los parametros al metodo y lo ejecutamos
                g_dnm_Modelo_Obtener.COM_FacturasCabecera = (COM_FacturasCabecera)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[1] = true;
            }
        }
        private void Obtener_MayorCuentaInmovilizada_Modelo_Obtener()
        {
            try
            {
                CTA_Mayor_Datos obj_CTA_Mayor_Datos = new CTA_Mayor_Datos();
                g_dnm_Modelo_Obtener.CTA_Mayor = obj_CTA_Mayor_Datos.Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idMayor_CuentaInmovilizado);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[2] = true;
            }
        }
        private void Obtener_MayorCuentaAmortizadaAcumulada_Modelo_Obtener()
        {
            try
            {
                CTA_Mayor_Datos obj_CTA_Mayor_Datos = new CTA_Mayor_Datos();
                g_dnm_Modelo_Obtener.CTA_Mayor1 = obj_CTA_Mayor_Datos.Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idMayor_CuentaAmortizacionAcumulada);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[3] = true;
            }
        }
        private void Obtener_CuentaDotacion_Modelo_Obtener()
        {
            try
            {
                CTA_Mayor_Datos obj_CTA_Mayor_Datos = new CTA_Mayor_Datos();
                g_dnm_Modelo_Obtener.CTA_Mayor2 = obj_CTA_Mayor_Datos.Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idMayor_CuentaDotacion);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[4] = true;
            }
        }
        private void Obtener_CuentaAuxiliar_Modelo_Obtener()
        {
            try
            {
                CTA_MayorAuxiliar_Datos obj_CTA_MayorAuxiliar_Datos = new CTA_MayorAuxiliar_Datos();
                g_dnm_Modelo_Obtener.CTA_MayorAuxiliar = obj_CTA_MayorAuxiliar_Datos.Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idMayorAuxiliar);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[5] = true;
            }
        }
        private void Obtener_Departamento_Modelo_Obtener()
        {
            try
            {
                CTA_Departamentos_Datos obj_CTA_Departamentos_Datos = new CTA_Departamentos_Datos();
                g_dnm_Modelo_Obtener.CTA_Departamentos = obj_CTA_Departamentos_Datos.Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idDepartamento,false);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[6] = true;
            }
        }
        private void Obtener_InmovilizadoMotivoBaja_Modelo_Obtener()
        {
            try
            {
                CTA_InmovilizadosMotivosBaja_Datos obj_CTA_InmovilizadosMotivosBaja_Datos = new CTA_InmovilizadosMotivosBaja_Datos();
                g_dnm_Modelo_Obtener.CTA_InmovilizadosMotivosBaja = obj_CTA_InmovilizadosMotivosBaja_Datos.Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idInmovilizadoMotivoBaja);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[7] = 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 MODELOS

        #region Modelo Simple
        private CTA_Inmovilizados g_mdl_CTA_Inmovilizados = null;

        public CTA_Inmovilizados Obtener_Modelo_Por_Id(long _lng_id)
        {
            try
            {
                string str_SQL = Obtener_Consulta_Modelo() +
                                  //WHERE
                                  " WHERE " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.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(CTA_Inmovilizados) + "/" + nameof(Obtener_Modelo_Por_Id), true);
            }

            return g_mdl_CTA_Inmovilizados;
        }

        #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_CTA_Inmovilizados = obj_Exferia_Entities.Database.SqlQuery<CTA_Inmovilizados>(_str_SQL, _arr_Parametros).FirstOrDefault();
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(CTA_Inmovilizados_Datos) + "/" + nameof(Ejecutar_Consulta_Modelo), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();

            }
        }

        #endregion
        #endregion

        #region Modelo Listado
        private List<CTA_Inmovilizados> g_lst_CTA_Inmovilizados = null;

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

                    //Consulta
                    string str_SQL = Obtener_Consulta_Modelo() +
                        " WHERE " + str_Filtros_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(CTA_Inmovilizados_Datos) + "/" + nameof(Obtener_ModeloListado_Por_Ids), true);
            }

            return g_lst_CTA_Inmovilizados;
        }

        public List<CTA_Inmovilizados> Obtener_ModeloListado_Por_Filtros(int _int_Naturaleza,
                                                                         DateTime _dtt_FechaAmortizacion,
                                                                         List<long> _lst_Ids_NoContenidos,
                                                                         long? _lng_idDelegacion)
        {
            try
            {
                List<SqlParameter> lst_Parametros = new List<SqlParameter>();

                //ids que no deben estar
                string str_Filtros_NoContenidos = Funciones.Formar_ContenidoIN_ParaConsultaWhere(_lst_Ids_NoContenidos);
               
                //Consulta
                string str_SQL = Obtener_Consulta_Modelo() +
                                    //WHERE
                                    " WHERE " +
                                            nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.naturaleza) + "=@naturaleza AND " +
                                            " ( " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.noAmortizar) + " is null OR " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.noAmortizar) + "=@noAmortizar ) AND " +
                                            nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.amortizadoTerminado) + "=@amortizadoTerminado AND " +
                                            nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.fechaInicioAmortizacion) + "<=@fechaAmortizacionCabecera " +
                                            ((_lst_Ids_NoContenidos != null && _lst_Ids_NoContenidos.Count>0) ? (" AND ( not " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.id) + " in (" + str_Filtros_NoContenidos + ") )") : "") +
                                            (_lng_idDelegacion != null ? (" AND " + nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idDelegacion) + " =@idDelegacion ") : "");

                //Parametros
                lst_Parametros.Add(new SqlParameter("@naturaleza", _int_Naturaleza));
                lst_Parametros.Add(new SqlParameter("@noAmortizar", false));
                lst_Parametros.Add(new SqlParameter("@amortizadoTerminado", false));
                lst_Parametros.Add(new SqlParameter("@fechaAmortizacionCabecera", _dtt_FechaAmortizacion));
                if (_lng_idDelegacion != null)
                {
                    lst_Parametros.Add(new SqlParameter("@idDelegacion", _lng_idDelegacion));
                }

                object[] arr_Parametros = lst_Parametros.ToArray();

                //Ejecutar y rellenar el listado
                Ejecutar_Consulta_Modelo_Listado(str_SQL,
                                                    arr_Parametros);
                
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(CTA_Inmovilizados_Datos) + "/" + nameof(Obtener_ModeloListado_Por_Filtros), true);
            }

            return g_lst_CTA_Inmovilizados;
        }


        #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_CTA_Inmovilizados = obj_Exferia_Entities.Database.SqlQuery<CTA_Inmovilizados>(_str_SQL, _arr_Parametros).ToList();
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(CTA_Inmovilizados_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(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.id) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.numeroOrden) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.concepto) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idDelegacion) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.naturaleza) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idFacturaCompraCabecera) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.fechaInicioAmortizacion) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.importeAmortizable) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.importeAmortizadoEnAlta) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.rangoAmortizar) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.tipoCalculoAmortizar) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.tipoAmortizacion) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.tipoAmortizacionMaxima) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayor_CuentaInmovilizado) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayor_CuentaAmortizacionAcumulada) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayor_CuentaDotacion) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idMayorAuxiliar) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idDepartamento) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.fechaBaja) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.noAmortizar) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idInmovilizadoMotivoBaja) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.idEmpresa) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.amortizadoTerminado) + " , " +
                        nameof(CTA_Inmovilizados) + "." + nameof(CTA_Inmovilizados.fechaBorrado) +
                " FROM " + nameof(CTA_Inmovilizados);
        }
        #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;

                CTA_Inmovilizados mdl_CTA_Inmovilizados_AGrabar = (CTA_Inmovilizados)_mdl_obj;
                CTA_Inmovilizados mdl_CTA_Inmovilizados_DatosViejos = new CTA_Inmovilizados();

                CTA_Inmovilizados mdl_CTA_Inmovilizados_Final = Obtener_Modelo_Por_Id(mdl_CTA_Inmovilizados_AGrabar.id);

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

                    //Datos viejos para la trazabilidad
                    Funciones.CopiarPropiedadesObjetos(mdl_CTA_Inmovilizados_Final, mdl_CTA_Inmovilizados_DatosViejos, false, false);

                    //Cargar los Datos del Modelo
                    Funciones.CopiarPropiedadesObjetos(mdl_CTA_Inmovilizados_AGrabar, mdl_CTA_Inmovilizados_Final, false,false);

                    #region upate
                    string str_SQL_Update = " UPDATE " + nameof(CTA_Inmovilizados) +
                                           " SET " +
                                                nameof(CTA_Inmovilizados.numeroOrden) + "=@numeroOrden," +
                                                nameof(CTA_Inmovilizados.concepto) + "=@concepto," +
                                                nameof(CTA_Inmovilizados.idDelegacion) + "=@idDelegacion," +
                                                nameof(CTA_Inmovilizados.naturaleza) + "=@naturaleza," +
                                                nameof(CTA_Inmovilizados.idFacturaCompraCabecera) + "=@idFacturaCompraCabecera," +
                                                nameof(CTA_Inmovilizados.fechaInicioAmortizacion) + "=@fechaInicioAmortizacion," +
                                                nameof(CTA_Inmovilizados.importeAmortizable) + "=@importeAmortizable," +
                                                nameof(CTA_Inmovilizados.importeAmortizadoEnAlta) + "=@importeAmortizadoEnAlta," +
                                                nameof(CTA_Inmovilizados.rangoAmortizar) + "=@rangoAmortizar," +
                                                nameof(CTA_Inmovilizados.tipoCalculoAmortizar) + "=@tipoCalculoAmortizar," +
                                                nameof(CTA_Inmovilizados.tipoAmortizacion) + "=@tipoAmortizacion," +
                                                nameof(CTA_Inmovilizados.tipoAmortizacionMaxima) + "=@tipoAmortizacionMaxima," +
                                                nameof(CTA_Inmovilizados.idMayor_CuentaInmovilizado) + "=@idMayor_CuentaInmovilizado," +
                                                nameof(CTA_Inmovilizados.idMayor_CuentaAmortizacionAcumulada) + "=@idMayor_CuentaAmortizacionAcumulada," +
                                                nameof(CTA_Inmovilizados.idMayor_CuentaDotacion) + "=@idMayor_CuentaDotacion," +
                                                nameof(CTA_Inmovilizados.idMayorAuxiliar) + "=@idMayorAuxiliar," +
                                                nameof(CTA_Inmovilizados.idDepartamento) + "=@idDepartamento," +
                                                nameof(CTA_Inmovilizados.fechaBaja) + "=@fechaBaja," +
                                                nameof(CTA_Inmovilizados.noAmortizar) + "=@noAmortizar," +
                                                nameof(CTA_Inmovilizados.idInmovilizadoMotivoBaja) + "=@idInmovilizadoMotivoBaja," +
                                                nameof(CTA_Inmovilizados.idEmpresa) + "=@idEmpresa," +
                                                nameof(CTA_Inmovilizados.amortizadoTerminado) + "=@amortizadoTerminado," +
                                                nameof(CTA_Inmovilizados.fechaBorrado) + "=@fechaBorrado" +
                                           " WHERE " +
                                               nameof(CTA_Inmovilizados.id) + "=@id";

                    //Parametros
                    object[] arr_Parametros_Update = new object[]
                    {
                        new SqlParameter("@numeroOrden",  mdl_CTA_Inmovilizados_Final.numeroOrden),
                        new SqlParameter("@concepto", mdl_CTA_Inmovilizados_Final.concepto),
                        new SqlParameter("@idDelegacion", mdl_CTA_Inmovilizados_Final.idDelegacion),
                        new SqlParameter("@naturaleza", mdl_CTA_Inmovilizados_Final.naturaleza),
                        mdl_CTA_Inmovilizados_Final.idFacturaCompraCabecera != null
                            ?   new SqlParameter("@idFacturaCompraCabecera", mdl_CTA_Inmovilizados_Final.idFacturaCompraCabecera.Value)
                            :   new SqlParameter("@idFacturaCompraCabecera",  DBNull.Value),
                        new SqlParameter("@fechaInicioAmortizacion", mdl_CTA_Inmovilizados_Final.fechaInicioAmortizacion),
                        new SqlParameter("@importeAmortizable", mdl_CTA_Inmovilizados_Final.importeAmortizable),
                        new SqlParameter("@importeAmortizadoEnAlta", mdl_CTA_Inmovilizados_Final.importeAmortizadoEnAlta),
                        new SqlParameter("@rangoAmortizar", mdl_CTA_Inmovilizados_Final.rangoAmortizar),
                        new SqlParameter("@tipoCalculoAmortizar", mdl_CTA_Inmovilizados_Final.tipoCalculoAmortizar),
                        new SqlParameter("@tipoAmortizacion", mdl_CTA_Inmovilizados_Final.tipoAmortizacion),
                        new SqlParameter("@tipoAmortizacionMaxima", mdl_CTA_Inmovilizados_Final.tipoAmortizacionMaxima),
                        mdl_CTA_Inmovilizados_Final.idMayor_CuentaInmovilizado != null
                            ?   new SqlParameter("@idMayor_CuentaInmovilizado", mdl_CTA_Inmovilizados_Final.idMayor_CuentaInmovilizado.Value)
                            :   new SqlParameter("@idMayor_CuentaInmovilizado",  DBNull.Value),
                        mdl_CTA_Inmovilizados_Final.idMayor_CuentaAmortizacionAcumulada != null
                            ?   new SqlParameter("@idMayor_CuentaAmortizacionAcumulada", mdl_CTA_Inmovilizados_Final.idMayor_CuentaAmortizacionAcumulada.Value)
                            :   new SqlParameter("@idMayor_CuentaAmortizacionAcumulada",  DBNull.Value),
                        mdl_CTA_Inmovilizados_Final.idMayor_CuentaDotacion != null
                            ?   new SqlParameter("@idMayor_CuentaDotacion", mdl_CTA_Inmovilizados_Final.idMayor_CuentaDotacion.Value)
                            :   new SqlParameter("@idMayor_CuentaDotacion",  DBNull.Value),
                        mdl_CTA_Inmovilizados_Final.idMayorAuxiliar != null
                            ?   new SqlParameter("@idMayorAuxiliar", mdl_CTA_Inmovilizados_Final.idMayorAuxiliar.Value)
                            :   new SqlParameter("@idMayorAuxiliar",  DBNull.Value),
                        mdl_CTA_Inmovilizados_Final.idDepartamento != null
                            ?   new SqlParameter("@idDepartamento", mdl_CTA_Inmovilizados_Final.idDepartamento.Value)
                            :   new SqlParameter("@idDepartamento",  DBNull.Value),
                        mdl_CTA_Inmovilizados_Final.fechaBaja != null
                            ?   new SqlParameter("@fechaBaja", mdl_CTA_Inmovilizados_Final.fechaBaja.Value)
                            :   new SqlParameter("@fechaBaja",  DBNull.Value),
                        mdl_CTA_Inmovilizados_Final.noAmortizar != null
                            ?   new SqlParameter("@noAmortizar", mdl_CTA_Inmovilizados_Final.noAmortizar.Value)
                            :   new SqlParameter("@noAmortizar",  DBNull.Value),
                        mdl_CTA_Inmovilizados_Final.idInmovilizadoMotivoBaja != null
                            ?   new SqlParameter("@idInmovilizadoMotivoBaja", mdl_CTA_Inmovilizados_Final.idInmovilizadoMotivoBaja.Value)
                            :   new SqlParameter("@idInmovilizadoMotivoBaja",  DBNull.Value),
                        new SqlParameter("@idEmpresa", mdl_CTA_Inmovilizados_Final.idEmpresa),
                        new SqlParameter("@amortizadoTerminado", mdl_CTA_Inmovilizados_Final.amortizadoTerminado),
                        mdl_CTA_Inmovilizados_Final.fechaBorrado != null
                            ?   new SqlParameter("@fechaBorrado", mdl_CTA_Inmovilizados_Final.fechaBorrado.Value)
                            :   new SqlParameter("@fechaBorrado",  DBNull.Value),
                        new SqlParameter("@id", mdl_CTA_Inmovilizados_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_CTA_Inmovilizados_Final.id;
                }
                else
                {
                    mdl_CTA_Inmovilizados_Final = new CTA_Inmovilizados();

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

                    //Cargar los Datos del Modelo
                    Funciones.CopiarPropiedadesObjetos(mdl_CTA_Inmovilizados_AGrabar, mdl_CTA_Inmovilizados_Final, false,false);

                    #region INSERT
                    string str_SQL_Insert = " INSERT INTO " + nameof(CTA_Inmovilizados) +
                                               " (" +
                                                        nameof(CTA_Inmovilizados.numeroOrden) + "," +
                                                        nameof(CTA_Inmovilizados.concepto) + "," +
                                                        nameof(CTA_Inmovilizados.idDelegacion) + "," +
                                                        nameof(CTA_Inmovilizados.naturaleza) + "," +
                                                        nameof(CTA_Inmovilizados.idFacturaCompraCabecera) + "," +
                                                        nameof(CTA_Inmovilizados.fechaInicioAmortizacion) + "," +
                                                        nameof(CTA_Inmovilizados.importeAmortizable) + "," +
                                                        nameof(CTA_Inmovilizados.importeAmortizadoEnAlta) + "," +
                                                        nameof(CTA_Inmovilizados.rangoAmortizar) + "," +
                                                        nameof(CTA_Inmovilizados.tipoCalculoAmortizar) + "," +
                                                        nameof(CTA_Inmovilizados.tipoAmortizacion) + "," +
                                                        nameof(CTA_Inmovilizados.tipoAmortizacionMaxima) + "," +
                                                        nameof(CTA_Inmovilizados.idMayor_CuentaInmovilizado) + "," +
                                                        nameof(CTA_Inmovilizados.idMayor_CuentaAmortizacionAcumulada) + "," +
                                                        nameof(CTA_Inmovilizados.idMayor_CuentaDotacion) + "," +
                                                        nameof(CTA_Inmovilizados.idMayorAuxiliar) + "," +
                                                        nameof(CTA_Inmovilizados.idDepartamento) + "," +
                                                        nameof(CTA_Inmovilizados.fechaBaja) + "," +
                                                        nameof(CTA_Inmovilizados.noAmortizar) + "," +
                                                        nameof(CTA_Inmovilizados.idInmovilizadoMotivoBaja) + "," +
                                                        nameof(CTA_Inmovilizados.idEmpresa) + "," +
                                                        nameof(CTA_Inmovilizados.amortizadoTerminado) + "," +
                                                        nameof(CTA_Inmovilizados.fechaBorrado) +
                                               " ) " +
                                               " OUTPUT INSERTED." + nameof(CTA_Inmovilizados.id) +
                                               " VALUES " +
                                               " ( " +
                                                    "@numeroOrden," +
                                                    "@concepto," +
                                                    "@idDelegacion," +
                                                    "@naturaleza," +
                                                    "@idFacturaCompraCabecera," +
                                                    "@fechaInicioAmortizacion," +
                                                    "@importeAmortizable," +
                                                    "@importeAmortizadoEnAlta," +
                                                    "@rangoAmortizar," +
                                                    "@tipoCalculoAmortizar," +
                                                    "@tipoAmortizacion," +
                                                    "@tipoAmortizacionMaxima," +
                                                    "@idMayor_CuentaInmovilizado," +
                                                    "@idMayor_CuentaAmortizacionAcumulada," +
                                                    "@idMayor_CuentaDotacion," +
                                                    "@idMayorAuxiliar," +
                                                    "@idDepartamento," +
                                                    "@fechaBaja," +
                                                    "@noAmortizar," +
                                                    "@idInmovilizadoMotivoBaja," +
                                                    "@idEmpresa," +
                                                    "@amortizadoTerminado," +
                                                    "@fechaBorrado" +
                                               " ) ";

                    //Parametros
                    object[] arr_Parametros_Insert = new object[]
                    {
                        new SqlParameter("@numeroOrden",  mdl_CTA_Inmovilizados_Final.numeroOrden),
                        new SqlParameter("@concepto", mdl_CTA_Inmovilizados_Final.concepto),
                        new SqlParameter("@idDelegacion", mdl_CTA_Inmovilizados_Final.idDelegacion),
                        new SqlParameter("@naturaleza", mdl_CTA_Inmovilizados_Final.naturaleza),
                        mdl_CTA_Inmovilizados_Final.idFacturaCompraCabecera != null
                            ?   new SqlParameter("@idFacturaCompraCabecera", mdl_CTA_Inmovilizados_Final.idFacturaCompraCabecera.Value)
                            :   new SqlParameter("@idFacturaCompraCabecera",  DBNull.Value),
                        new SqlParameter("@fechaInicioAmortizacion", mdl_CTA_Inmovilizados_Final.fechaInicioAmortizacion),
                        new SqlParameter("@importeAmortizable", mdl_CTA_Inmovilizados_Final.importeAmortizable),
                        new SqlParameter("@importeAmortizadoEnAlta", mdl_CTA_Inmovilizados_Final.importeAmortizadoEnAlta),
                        new SqlParameter("@rangoAmortizar", mdl_CTA_Inmovilizados_Final.rangoAmortizar),
                        new SqlParameter("@tipoCalculoAmortizar", mdl_CTA_Inmovilizados_Final.tipoCalculoAmortizar),
                        new SqlParameter("@tipoAmortizacion", mdl_CTA_Inmovilizados_Final.tipoAmortizacion),
                        new SqlParameter("@tipoAmortizacionMaxima", mdl_CTA_Inmovilizados_Final.tipoAmortizacionMaxima),
                        mdl_CTA_Inmovilizados_Final.idMayor_CuentaInmovilizado != null
                            ?   new SqlParameter("@idMayor_CuentaInmovilizado", mdl_CTA_Inmovilizados_Final.idMayor_CuentaInmovilizado.Value)
                            :   new SqlParameter("@idMayor_CuentaInmovilizado",  DBNull.Value),
                        mdl_CTA_Inmovilizados_Final.idMayor_CuentaAmortizacionAcumulada != null
                            ?   new SqlParameter("@idMayor_CuentaAmortizacionAcumulada", mdl_CTA_Inmovilizados_Final.idMayor_CuentaAmortizacionAcumulada.Value)
                            :   new SqlParameter("@idMayor_CuentaAmortizacionAcumulada",  DBNull.Value),
                        mdl_CTA_Inmovilizados_Final.idMayor_CuentaDotacion != null
                            ?   new SqlParameter("@idMayor_CuentaDotacion", mdl_CTA_Inmovilizados_Final.idMayor_CuentaDotacion.Value)
                            :   new SqlParameter("@idMayor_CuentaDotacion",  DBNull.Value),
                        mdl_CTA_Inmovilizados_Final.idMayorAuxiliar != null
                            ?   new SqlParameter("@idMayorAuxiliar", mdl_CTA_Inmovilizados_Final.idMayorAuxiliar.Value)
                            :   new SqlParameter("@idMayorAuxiliar",  DBNull.Value),
                        mdl_CTA_Inmovilizados_Final.idDepartamento != null
                            ?   new SqlParameter("@idDepartamento", mdl_CTA_Inmovilizados_Final.idDepartamento.Value)
                            :   new SqlParameter("@idDepartamento",  DBNull.Value),
                        mdl_CTA_Inmovilizados_Final.fechaBaja != null
                            ?   new SqlParameter("@fechaBaja", mdl_CTA_Inmovilizados_Final.fechaBaja.Value)
                            :   new SqlParameter("@fechaBaja",  DBNull.Value),
                        mdl_CTA_Inmovilizados_Final.noAmortizar != null
                            ?   new SqlParameter("@noAmortizar", mdl_CTA_Inmovilizados_Final.noAmortizar.Value)
                            :   new SqlParameter("@noAmortizar",  DBNull.Value),
                        mdl_CTA_Inmovilizados_Final.idInmovilizadoMotivoBaja != null
                            ?   new SqlParameter("@idInmovilizadoMotivoBaja", mdl_CTA_Inmovilizados_Final.idInmovilizadoMotivoBaja.Value)
                            :   new SqlParameter("@idInmovilizadoMotivoBaja",  DBNull.Value),
                        new SqlParameter("@idEmpresa", mdl_CTA_Inmovilizados_Final.idEmpresa),
                        new SqlParameter("@amortizadoTerminado", mdl_CTA_Inmovilizados_Final.amortizadoTerminado),
                        mdl_CTA_Inmovilizados_Final.fechaBorrado != null
                            ?   new SqlParameter("@fechaBorrado", mdl_CTA_Inmovilizados_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(CTA_Inmovilizados), mdl_CTA_Inmovilizados_DatosViejos, mdl_CTA_Inmovilizados_Final, mdl_INTERNO_ValorDevuelto_Modelo.TipoAccion, obj_Exferia_Entities);
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(CTA_Inmovilizados_Datos) + "/" + nameof(Grabar), true);
            }
            finally
            {
                //Finalizar transaccion
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        public void Actualizar_AmortizadoTerminado_Por_idAmortizacionCabecera(long _lng_idAmortizacionCabecera, bool _bol_Terminado)
        {
            Exferia_Entities obj_Exferia_Entities = null;

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

                #region Update
                string str_SQL_Update = " UPDATE " + nameof(CTA_Inmovilizados) +
                                            " SET " +
                                                nameof(CTA_Inmovilizados.amortizadoTerminado) + "=@amortizadoTerminado " +
                                        " WHERE " +
                                            nameof(CTA_Inmovilizados.id) + " in " +
                                            " ( " +
                                                " SELECT " +
                                                    nameof(CTA_AmortizacionesLinea) + "." + nameof(CTA_AmortizacionesLinea.idInmovilizado) +
                                                " FROM " + nameof(CTA_AmortizacionesCabecera) +
                                                " INNER JOIN " + nameof(CTA_AmortizacionesLinea) + " ON " +nameof(CTA_AmortizacionesCabecera) + "." +nameof(CTA_AmortizacionesCabecera.id) + "=" + nameof(CTA_AmortizacionesLinea) + "." + nameof(CTA_AmortizacionesLinea.idAmortizacionCabecera) +
                                                " WHERE " + nameof(CTA_AmortizacionesCabecera) + "." + nameof(CTA_AmortizacionesCabecera.id) + "=@id" +
                                            " ) ";
                //Parametros
                object[] arr_Parametros_Update = new object[]
                {
                    new SqlParameter("@amortizadoTerminado", _bol_Terminado),
                    new SqlParameter("@id", _lng_idAmortizacionCabecera)
                };
                #endregion

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

            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(CTA_Inmovilizados_Datos) + "/" + nameof(Actualizar_AmortizadoTerminado_Por_idAmortizacionLinea), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
        }
        public void Actualizar_AmortizadoTerminado_Por_idAmortizacionLinea(long _lng_idAmortizacionLinea,bool _bol_Terminado)
        {
            Exferia_Entities obj_Exferia_Entities = null;

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

                #region Update
                string str_SQL_Update = " UPDATE " + nameof(CTA_Inmovilizados) +
                                            " SET " +
                                                nameof(CTA_Inmovilizados.amortizadoTerminado) + "=@amortizadoTerminado " +
                                        " WHERE " +
                                            nameof(CTA_Inmovilizados.id) + " in " +
                                            " ( " +
                                                " SELECT " +
                                                    nameof(CTA_AmortizacionesLinea) + "." + nameof(CTA_AmortizacionesLinea.idInmovilizado) +
                                                " FROM " + nameof(CTA_AmortizacionesLinea) +
                                                " WHERE " + nameof(CTA_AmortizacionesLinea) + "." + nameof(CTA_AmortizacionesLinea.id) + "=@id" +
                                            " ) ";
                //Parametros
                object[] arr_Parametros_Update = new object[]
                {
                    new SqlParameter("@amortizadoTerminado", _bol_Terminado),
                    new SqlParameter("@id", _lng_idAmortizacionLinea)
                };
                #endregion

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

            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(CTA_Inmovilizados_Datos) + "/" + nameof(Actualizar_AmortizadoTerminado_Por_idAmortizacionLinea), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
        }
        public void Actualizar_AmortizadoTerminado_Por_idsAmortizacionLinea(List<long> _lst_idAmortizacionLinea, bool _bol_Terminado)
        {
            Exferia_Entities obj_Exferia_Entities = null;

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

                if (_lst_idAmortizacionLinea!=null && _lst_idAmortizacionLinea.Count>0)
                {

                    List<SqlParameter> lst_Parametros = new List<SqlParameter>();

                    string str_Filtros_IDS = Funciones.Formar_ContenidoIN_ParaConsultaWhere(_lst_idAmortizacionLinea);

                    #region Update
                    string str_SQL_Update = " UPDATE " + nameof(CTA_Inmovilizados) +
                                                " SET " +
                                                    nameof(CTA_Inmovilizados.amortizadoTerminado) + "=@amortizadoTerminado " +
                                            " WHERE " +
                                                nameof(CTA_Inmovilizados.id) + " in " +
                                                " ( " +
                                                    " SELECT " +
                                                        nameof(CTA_AmortizacionesLinea) + "." + nameof(CTA_AmortizacionesLinea.idInmovilizado) +
                                                    " FROM " + nameof(CTA_AmortizacionesLinea) +
                                                    " WHERE " + nameof(CTA_AmortizacionesLinea) + "." + nameof(CTA_AmortizacionesLinea.id) + " in (" + str_Filtros_IDS + ")" +
                                                " ) ";
                    //Parametros
                    lst_Parametros.Add(new SqlParameter("@amortizadoTerminado", _bol_Terminado));
                    object[] arr_Parametros_Update = lst_Parametros.ToArray();
                    #endregion

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

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

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

            INTERNO_ValorDevuelto_Modelo mdl_ValorDevuelto_Modelo = new INTERNO_ValorDevuelto_Modelo();
            mdl_ValorDevuelto_Modelo.TodoCorrecto = true;
            //Tipo de Accion que se va a realizar
            mdl_ValorDevuelto_Modelo.TipoAccion = Enumerados.G_ENUM_TIPOACCION.INT_ELIMINAR;
            bool bol_ActualizarFechaBorrado = false;//Este campo se utiliza por si no se puede borrar, que actualice la fecha de borrado

            using (TransactionScope transaccion_SQL = new TransactionScope(TransactionScopeOption.Required))
            {
                try
                {
                    obj_Exferia_Entities = new Exferia_Entities();
                    obj_Exferia_Entities.Configuration.LazyLoadingEnabled = false;

                    // Ver si existe ######################################################################
                    CTA_Inmovilizados mdl_CTA_Inmovilizados_Final = Obtener_Modelo_Por_Id(_lng_id);
                    //######################################################################################

                    if (mdl_CTA_Inmovilizados_Final != null)
                    {
                        //Se intenta borrar, si diera un error porque esta relacionado se graba la fecha de baja
                        try
                        {
                            #region Delete
                            string str_SQL_Delete = " DELETE FROM  " + nameof(CTA_Inmovilizados) +
                                                    " WHERE " +
                                                        nameof(CTA_Inmovilizados.id) + "=@id";
                            //Parametros
                            object[] arr_Parametros_Delete = new object[]
                            {
                                new SqlParameter("@id", _lng_id)
                            };
                            #endregion

                            //Delete
                            obj_Exferia_Entities.Database.ExecuteSqlCommand(str_SQL_Delete, arr_Parametros_Delete);

                            //Grabar un registro de trazabailidad con los datos de la transaccion realizada.
                            Datos_Generales.USR_Trazabilidad_Grabar(typeof(CTA_Inmovilizados), null, mdl_CTA_Inmovilizados_Final, Enumerados.G_ENUM_TIPOACCION.INT_ELIMINAR, obj_Exferia_Entities);
                        }
                         catch (Exception ex)
                        {
                            var sqlException = ex.GetBaseException() as SqlException;
                            if (sqlException != null)
                            {
                                if (sqlException.Errors.Count > 0)
                                {
                                    switch (sqlException.Errors[0].Number)
                                    {
                                        case Control_Errores.G_INT_ERRORCONTROLADO_BORRAR_CONFLICTO_CLAVEFORANEA: // Foreign Key violation
                                            bol_ActualizarFechaBorrado = true;
                                            break;
                                        default:
                                            throw;
                                    }
                                }
                            }
                            else
                            {
                                throw;
                            }
                        }
                    }

                    //Actualizar la fecha de baja, al no poder borrarlo por tener relaciones
                    if (bol_ActualizarFechaBorrado)
                    {
                        #region Update
                        string str_SQL_Update = " UPDATE " + nameof(CTA_Inmovilizados) +
                                                    " SET " +
                                                    nameof(CTA_Inmovilizados.fechaBorrado) + "=@fechaBorrado " +
                                                " WHERE " +
                                                    nameof(CTA_Inmovilizados.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 trasaccion realizada
                        Datos_Generales.USR_Trazabilidad_Grabar(typeof(CTA_Inmovilizados), null, mdl_CTA_Inmovilizados_Final, Enumerados.G_ENUM_TIPOACCION.INT_ELIMINAR, obj_Exferia_Entities);
                    }

                    //Devolver tambien el Objeto
                    mdl_ValorDevuelto_Modelo.Id = mdl_CTA_Inmovilizados_Final.id;
                    
                    // se termina la Trasaccion Correctamente
                    transaccion_SQL.Complete();
                }
                catch (Control_Errores)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    throw new Control_Errores("", ex, nameof(CTA_Inmovilizados) + "/" + nameof(Borrar), true);
                }
                finally
                {
                    obj_Exferia_Entities.Database.Connection.Close();
                    obj_Exferia_Entities.Dispose();

                    // Finalizar transaccion
                    transaccion_SQL.Dispose();
                }
            }
            return mdl_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)
        {
            return null;
        }
        #endregion
    }
}

