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

namespace Exferia_Mythos._1_Datos
{
    public class MYT_Liquidaciones_Datos : ABS_Datos
    {

        #region Listado
        public List<INTERNO_MYT_Liquidaciones_Listado_Modelo> g_lst_INTERNO_MYT_Liquidaciones_Listado_Modelo = null;

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

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

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

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

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

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

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

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


        protected override void ConsultaRellenar_Listado(Exferia_Entities _obj_Exferia_Entities, long _lng_idEmpresaSeleccionada, long _lng_idEjercicioActual, List<long> _lst_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);

                //Array de Ids para actualizar
                string str_Filtros_IDS = Funciones.Formar_ContenidoIN_ParaConsultaWhere(_lst_ids);


                bool bol_FiltrarEjercicio = false;
                DateTime? dtt_TemporadaInicio = null;
                DateTime? dtt_TemporadaFin = null;

                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)
                    {
                        //Ejercicio
                        if (mdl_INTERNO_Filtro_OpcionPadre_Modelo.NOMBRE_CAMPO.Equals(nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.idEjercicio)))
                        {
                            //Buscar el Modelo de Ejercicio
                            GEN_EjerciciosActivos_Empresa mdl_GEN_EjerciciosActivos_Empresa = Datos_Generales.GEN_EjerciciosActivos_Empresa_Obtener_Por_Id(mdl_INTERNO_Filtro_OpcionPadre_Modelo.VALOR);

                            if (mdl_GEN_EjerciciosActivos_Empresa != null)
                            {
                                bol_FiltrarEjercicio = true;
                                dtt_TemporadaInicio = mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaInicio;
                                dtt_TemporadaFin = mdl_GEN_EjerciciosActivos_Empresa.temporadaFechaFin;
                            }
                        }
                    }
                }

                string str_SQL =
                       " SELECT " +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.id) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.id) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.fechaHora_Inicio) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.fechaHora_Inicio) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.fechaHora_Fin) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.fechaHora_Fin) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.cajaInicial) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.cajaInicial) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.importeEntregado_Metalico) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.importeEntregado_Metalico) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.importeEntregado_Talon) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.importeEntregado_Talon) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.gastos) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.gastos) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.importeAEntregar_Metalico) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.importeAEntregar_Metalico) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.importeAEntregar_Talon) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.importeAEntregar_Talon) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.partes_Pendientes) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.partes_Pendientes) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.partes_Aplazados) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.partes_Aplazados) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.partes_Terminados) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.partes_Terminados) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.partes_TerminadosConIncidencias) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.partes_TerminadosConIncidencias) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.partes_Transferidos) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.partes_Transferidos) + "," +
                            //ids
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.idTerminal) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.idTerminal) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.idTecnico) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.idTecnico) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.idEmpresa) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.idEmpresa) + "," +
                            //Tecnico
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Tecnico)))
                                ?
                                    (
                                        nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Tecnico_Codigo) + " = " + nameof(MYT_Tecnicos) + "." + nameof(MYT_Tecnicos.codigo) + "," +
                                        nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Tecnico_Descripcion) + " =" + nameof(MYT_Tecnicos) + "." + nameof(MYT_Tecnicos.nombre) + "," +
                                        nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Tecnico_FechaBorrado) + " =" + nameof(MYT_Tecnicos) + "." + nameof(MYT_Tecnicos.fechaBorrado) + ","
                                    )
                                :
                                    (
                                        nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Tecnico_Codigo) + " = ''," +
                                        nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Tecnico_Descripcion) + " = ''," +
                                        nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Tecnico_FechaBorrado) + " = NULL, "
                                    )
                            ) +
                            //Terminal
                            (
                                (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Terminal)))
                                ?
                                    (
                                        nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Terminal_Codigo) + " = " + nameof(GEN_Terminales) + "." + nameof(GEN_Terminales.codigo) + "," +
                                        nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Terminal_Descripcion) + " =" + nameof(GEN_Terminales) + "." + nameof(GEN_Terminales.descripcion) + "," +
                                        nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Terminal_FechaBorrado) + " =" + nameof(GEN_Terminales) + "." + nameof(GEN_Terminales.fechaBorrado)
                                    )
                                :
                                    (
                                        nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Terminal_Codigo) + " = ''," +
                                        nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Terminal_Descripcion) + " = ''," +
                                        nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Terminal_FechaBorrado) + " = NULL "
                                    )
                            ) +
                    " FROM " + nameof(MYT_Liquidaciones) +
                    //Tecnico
                    (
                        (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Tecnico)))
                            ?
                                (
                                " LEFT JOIN " + nameof(MYT_Tecnicos) + " ON " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.idTecnico) + " = " + nameof(MYT_Tecnicos) + "." + nameof(MYT_Tecnicos.id)
                                )
                            : ("")
                    ) +
                    //Terminal
                    (
                        (_lst_CamposConRelacionABuscar.Contains(nameof(INTERNO_MYT_Liquidaciones_Listado_Modelo.Terminal)))
                            ?
                                (
                                " LEFT JOIN " + nameof(GEN_Terminales) + " ON " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.idTerminal) + " = " + nameof(GEN_Terminales) + "." + nameof(GEN_Terminales.id)
                                )
                            : ("")
                    ) +
                    " WHERE  " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.fechaBorrado) + " IS null AND " +
                             " ( " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.idEmpresa) + "=@idEmpresa " +
                                (
                                    (_lst_idEmpresasRelacionadas != null && _lst_idEmpresasRelacionadas.Count > 0)
                                        ? (" OR " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.idEmpresa) + " in (" + str_Filtros_Empresas + ") ")
                                        : " "
                                ) +
                            " ) AND " +
                            //Ejercicio
                            " ( " +
                                (
                                    bol_FiltrarEjercicio == true
                                        ? (
                                                " ( " +
                                                    nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.fechaHora_Fin) + "  IS NULL " +
                                                " ) " + 
                                                " OR " +
                                                " ( "+
                                                    nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.fechaHora_Fin) + " <=@TemporadaFin AND " +
                                                    nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.fechaHora_Fin) + " >=@TemporadaInicio " +
                                                " ) " 
                                            )
                                        : " 1 = 1 "
                                ) +
                            " ) and " +
                            (
                                (str_Filtros_IDS.Trim().Length > 0)
                                ? (nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.id) + " in (" + str_Filtros_IDS + ") ")
                                : (
                                    (_lng_id > -1)
                                    ?
                                    (nameof(MYT_Liquidaciones) + "." + (nameof(MYT_Liquidaciones.id) + "=@id"))
                                    : ("1 = 1"))
                            );


                //Parametros
                lst_Parametros.Add(new SqlParameter("@id", _lng_id));
                lst_Parametros.Add(new SqlParameter("@idEmpresa", _lng_idEmpresaSeleccionada));
                if (bol_FiltrarEjercicio)
                {
                    lst_Parametros.Add(new SqlParameter("@TemporadaFin", dtt_TemporadaFin.Value));
                    lst_Parametros.Add(new SqlParameter("@TemporadaInicio", dtt_TemporadaInicio.Value));
                }

                object[] arr_Parametros = lst_Parametros.ToArray();

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

                //Añadir los Ejercicios
                if (g_lst_INTERNO_MYT_Liquidaciones_Listado_Modelo != null && g_lst_INTERNO_MYT_Liquidaciones_Listado_Modelo.Count > 0)
                {
                    Agregar_Ejercicios(_lng_idEmpresaSeleccionada);
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Liquidaciones_Datos) + "/" + nameof(ConsultaRellenar_Listado), true);
            }
        }
        private void Agregar_Ejercicios(long _lng_idEmpresaSeleccionada)
        {
            try
            {
                List<GEN_EjerciciosActivos_Empresa> lst_GEN_EjerciciosActivos_Empresa = Datos_Generales.GEN_EjerciciosActivos_Empresa_Obtener_Listado_Por_Empresa(_lng_idEmpresaSeleccionada);

                if (lst_GEN_EjerciciosActivos_Empresa != null)
                {
                    DateTime dtt_FechaActual = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);

                    //Rellenar el Listado
                    foreach (INTERNO_MYT_Liquidaciones_Listado_Modelo mdl_INTERNO_MYT_Liquidaciones_Listado_Modelo in g_lst_INTERNO_MYT_Liquidaciones_Listado_Modelo)
                    {
                        mdl_INTERNO_MYT_Liquidaciones_Listado_Modelo.Ejercicios_Empresa = lst_GEN_EjerciciosActivos_Empresa.Where(m =>
                                                                                                                                        mdl_INTERNO_MYT_Liquidaciones_Listado_Modelo.fechaHora_Fin==null
                                                                                                                                        ?
                                                                                                                                            (
                                                                                                                                                m.temporadaFechaFin >= dtt_FechaActual &&
                                                                                                                                                m.temporadaFechaInicio <= dtt_FechaActual
                                                                                                                                            )
                                                                                                                                        :   (
                                                                                                                                                m.temporadaFechaFin >= mdl_INTERNO_MYT_Liquidaciones_Listado_Modelo.fechaHora_Fin.Value &&
                                                                                                                                                m.temporadaFechaInicio <= mdl_INTERNO_MYT_Liquidaciones_Listado_Modelo.fechaHora_Fin.Value
                                                                                                                                            )
                                                                                                                                )
                                                                                                                              .FirstOrDefault();
                    }
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Liquidaciones_Datos) + "/" + nameof(Agregar_Ejercicios), 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
        
        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)
        {
            return null;
        }

        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)
        {
            return null;
        }

        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)
        {}
        #endregion

        #region Obtener
        #region Obtener Simple

        private dynamic g_dnm_Modelo_Obtener = null;

        private static int g_int_TotalHilos_Obtener = 3;
        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(INTERNO_MYT_Liquidaciones_Modelo.id) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.id) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.idTerminal) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.idTerminal) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.idTecnico) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.idTecnico) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.fechaHora_Inicio) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.fechaHora_Inicio) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.fechaHora_Fin) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.fechaHora_Fin) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.observaciones) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.observaciones) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.firma) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.firma) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.firmanteObservaciones) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.firmanteObservaciones) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.guid) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.guid) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.cajaInicial) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.cajaInicial) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.arqueo_001) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_001) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.arqueo_002) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_002) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.arqueo_005) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_005) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.arqueo_010) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_010) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.arqueo_020) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_020) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.arqueo_050) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_050) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.arqueo_1) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_1) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.arqueo_2) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_2) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.arqueo_5) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_5) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.arqueo_10) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_10) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.arqueo_20) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_20) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.arqueo_50) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_50) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.arqueo_100) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_100) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.arqueo_200) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_200) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.arqueo_500) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_500) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.importeEntregado_Metalico) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.importeEntregado_Metalico) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.importeEntregado_Talon) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.importeEntregado_Talon) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.gastos) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.gastos) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.importeAEntregar_Metalico) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.importeAEntregar_Metalico) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.importeAEntregar_Talon) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.importeAEntregar_Talon) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.partes_Pendientes) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.partes_Pendientes) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.partes_Aplazados) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.partes_Aplazados) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.partes_Terminados) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.partes_Terminados) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.partes_TerminadosConIncidencias) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.partes_TerminadosConIncidencias) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.partes_Transferidos) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.partes_Transferidos) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.fechaBorrado) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.fechaBorrado) + "," +
                            nameof(INTERNO_MYT_Liquidaciones_Modelo.idEmpresa) + " = " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.idEmpresa) + 
               " FROM " + nameof(MYT_Liquidaciones) +
               " WHERE " + nameof(MYT_Liquidaciones.fechaBorrado) + " IS NULL AND " +
                           nameof(MYT_Liquidaciones.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<INTERNO_MYT_Liquidaciones_Modelo>(str_SQL, arr_Parametros).FirstOrDefault();

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

                    //MYT_Liquidaciones_VehiculosAsociados ##########################################################################################
                    ThreadStart obj_ThreadStart_VEHICULOSASOCIADOS = new ThreadStart(Obtener_VehiculosAsociados_Modelo_Obtener);
                    Thread obj_Thread_VEHICULOSASOCIADOS = new Thread(obj_ThreadStart_VEHICULOSASOCIADOS);
                    obj_Thread_VEHICULOSASOCIADOS.Start();

                    //MYT_Tecnicos ##########################################################################################
                    ThreadStart obj_ThreadStart_TECNICOS = new ThreadStart(Obtener_Tecnicos_Modelo_Obtener);
                    Thread obj_Thread_TECNICOS = new Thread(obj_ThreadStart_TECNICOS);
                    obj_Thread_TECNICOS.Start();

                    //GEN_Terminales ##########################################################################################
                    ThreadStart obj_ThreadStart_TERMINALES= new ThreadStart(Obtener_Terminales_Modelo_Obtener);
                    Thread obj_Thread_TERMINALES = new Thread(obj_ThreadStart_TERMINALES);
                    obj_Thread_TERMINALES.Start();

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

                        Thread.Sleep(10);
                    }
                    //.................................................................................
                }
                #endregion
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Liquidaciones_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_VehiculosAsociados_Modelo_Obtener()
        {
            try
            {
                MYT_Liquidaciones_VehiculosAsociados_Datos obj_MYT_Liquidaciones_VehiculosAsociados_Datos = new MYT_Liquidaciones_VehiculosAsociados_Datos();
                g_dnm_Modelo_Obtener.MYT_Liquidaciones_VehiculosAsociados = obj_MYT_Liquidaciones_VehiculosAsociados_Datos.Obtener_ModeloListado_Por_IdLiquidacion(g_dnm_Modelo_Obtener.id,true);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[0] = true;
            }
        }
        private void Obtener_Tecnicos_Modelo_Obtener()
        {
            try
            {
                MYT_Tecnicos_Datos obj_MYT_Tecnicos_Datos = new MYT_Tecnicos_Datos();
                g_dnm_Modelo_Obtener.MYT_Tecnicos = obj_MYT_Tecnicos_Datos.Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idTecnico, false, false);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[1] = true;
            }
        }
        private void Obtener_Terminales_Modelo_Obtener()
        {
            try
            {
                g_dnm_Modelo_Obtener.GEN_Terminales = Datos_Generales.GEN_Terminales_Obtener_Modelo_Por_Id(g_dnm_Modelo_Obtener.idTerminal);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Obtener[2] = 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 MYT_Liquidaciones g_mdl_MYT_Liquidaciones = null;
        public MYT_Liquidaciones Obtener_Modelo_Por_Id(long _lng_id)
        {
            try
            {

                string str_SQL = Obtener_Consulta_Modelo() +
                                   //WHERE
                                   " WHERE " + nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.id) + "=@id";

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

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

            return g_mdl_MYT_Liquidaciones;
        }
        private void Ejecutar_Consulta_Modelo(string _str_SQL,
                                              object[] _arr_Parametros)
        {
            Exferia_Entities obj_Exferia_Entities = null;

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


                //Rellenar el modelo
                g_mdl_MYT_Liquidaciones = obj_Exferia_Entities.Database.SqlQuery<MYT_Liquidaciones>(_str_SQL, _arr_Parametros).FirstOrDefault();

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

            }
        }
        #endregion

        #region Modelo Listado
        private List<MYT_Liquidaciones> g_lst_MYT_Liquidaciones = null;

        public List<MYT_Liquidaciones> Obtener_ModeloListado_Por_Ids(List<long> _lst_Ids)
        {
            try
            {
                if (_lst_Ids != null && _lst_Ids.Count > 0)
                {

                    string str_Filtro_IDS = Funciones.Formar_ContenidoIN_ParaConsultaWhere(nameof(MYT_Liquidaciones),
                                                                                            nameof(MYT_Liquidaciones.id),
                                                                                            G_ENUM_FORMARCONTENIDOIN_CONDICIONANTES.NADA,
                                                                                            _lst_Ids);

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


                    //Ejecutar y rellenar el listado
                    Ejecutar_Consulta_Modelo_Listado(str_SQL,
                                                    new object[] { });

                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(MYT_Liquidaciones_Datos) + "/" + nameof(Obtener_ModeloListado_Por_Ids), true);
            }

            return g_lst_MYT_Liquidaciones;
        }

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

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


                //Rellenar el modelo
                g_lst_MYT_Liquidaciones = obj_Exferia_Entities.Database.SqlQuery<MYT_Liquidaciones>(_str_SQL, _arr_Parametros).ToList();

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

        #endregion
        #endregion

        private string Obtener_Consulta_Modelo()
        {
            return
                " SELECT " +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.id) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.idTerminal) + "," +
                       nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.idTecnico) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.fechaHora_Inicio) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.fechaHora_Fin) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.observaciones) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.firma) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.firmanteObservaciones) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.guid) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.cajaInicial) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_001) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_002) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_005) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_010) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_020) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_050) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_1) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_2) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_5) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_10) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_20) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_50) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_100) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_200) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.arqueo_500) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.importeEntregado_Metalico) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.importeEntregado_Talon) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.gastos) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.importeAEntregar_Metalico) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.importeAEntregar_Talon) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.partes_Pendientes) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.partes_Aplazados) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.partes_Terminados) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.partes_TerminadosConIncidencias) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.partes_Transferidos) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.fechaBorrado) + "," +
                        nameof(MYT_Liquidaciones) + "." + nameof(MYT_Liquidaciones.idEmpresa) +
                " FROM " + nameof(MYT_Liquidaciones);
        }
        #endregion

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

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

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

                MYT_Liquidaciones mdl_MYT_Liquidaciones_AGrabar = (MYT_Liquidaciones)_mdl_obj;
                MYT_Liquidaciones mdl_MYT_Liquidaciones_DatosViejos = new MYT_Liquidaciones();

                // Ver si existe ######################################################################
                MYT_Liquidaciones mdl_MYT_Liquidaciones_Final = Obtener_Modelo_Por_Id(mdl_MYT_Liquidaciones_AGrabar.id);
                //#####################################################################################

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

                    //Datos viejos para la trazabilidad
                    Funciones.CopiarPropiedadesObjetos(mdl_MYT_Liquidaciones_Final, mdl_MYT_Liquidaciones_DatosViejos, false, false);

                    // Cargar los Datos Nuevos del Modelo
                    Funciones.CopiarPropiedadesObjetos(mdl_MYT_Liquidaciones_AGrabar, mdl_MYT_Liquidaciones_Final, false, false);

                    #region Update
                    string str_SQL_Update = " UPDATE " + nameof(MYT_Liquidaciones) +
                                           " SET " +
                                                nameof(MYT_Liquidaciones.idTerminal) + "=@idTerminal," +
                                                nameof(MYT_Liquidaciones.idTecnico) + "=@idTecnico," +
                                                nameof(MYT_Liquidaciones.fechaHora_Inicio) + "=@fechaHora_Inicio," +
                                                nameof(MYT_Liquidaciones.fechaHora_Fin) + "=@fechaHora_Fin," +
                                                nameof(MYT_Liquidaciones.observaciones) + "=@observaciones," +
                                                nameof(MYT_Liquidaciones.firma) + "=@firma," +
                                                nameof(MYT_Liquidaciones.firmanteObservaciones) + "=@firmanteObservaciones," +
                                                nameof(MYT_Liquidaciones.guid) + "=@guid," +
                                                nameof(MYT_Liquidaciones.cajaInicial) + "=@cajaInicial," +
                                                nameof(MYT_Liquidaciones.arqueo_001) + "=@arqueo_001," +
                                                nameof(MYT_Liquidaciones.arqueo_002) + "=@arqueo_002," +
                                                nameof(MYT_Liquidaciones.arqueo_005) + "=@arqueo_005," +
                                                nameof(MYT_Liquidaciones.arqueo_010) + "=@arqueo_010," +
                                                nameof(MYT_Liquidaciones.arqueo_020) + "=@arqueo_020," +
                                                nameof(MYT_Liquidaciones.arqueo_050) + "=@arqueo_050," +
                                                nameof(MYT_Liquidaciones.arqueo_1) + "=@arqueo_1," +
                                                nameof(MYT_Liquidaciones.arqueo_2) + "=@arqueo_2," +
                                                nameof(MYT_Liquidaciones.arqueo_5) + "=@arqueo_5," +
                                                nameof(MYT_Liquidaciones.arqueo_10) + "=@arqueo_10," +
                                                nameof(MYT_Liquidaciones.arqueo_20) + "=@arqueo_20," +
                                                nameof(MYT_Liquidaciones.arqueo_50) + "=@arqueo_50," +
                                                nameof(MYT_Liquidaciones.arqueo_100) + "=@arqueo_100," +
                                                nameof(MYT_Liquidaciones.arqueo_200) + "=@arqueo_200," +
                                                nameof(MYT_Liquidaciones.arqueo_500) + "=@arqueo_500," +
                                                nameof(MYT_Liquidaciones.importeEntregado_Metalico) + "=@importeEntregado_Metalico," +
                                                nameof(MYT_Liquidaciones.importeEntregado_Talon) + "=@importeEntregado_Talon," +
                                                nameof(MYT_Liquidaciones.gastos) + "=@gastos," +
                                                nameof(MYT_Liquidaciones.importeAEntregar_Metalico) + "=@importeAEntregar_Metalico," +
                                                nameof(MYT_Liquidaciones.importeAEntregar_Talon) + "=@importeAEntregar_Talon," +
                                                nameof(MYT_Liquidaciones.partes_Pendientes) + "=@partes_Pendientes," +
                                                nameof(MYT_Liquidaciones.partes_Aplazados) + "=@partes_Aplazados," +
                                                nameof(MYT_Liquidaciones.partes_Terminados) + "=@partes_Terminados," +
                                                nameof(MYT_Liquidaciones.partes_TerminadosConIncidencias) + "=@partes_TerminadosConIncidencias," +
                                                nameof(MYT_Liquidaciones.partes_Transferidos) + "=@partes_Transferidos," +
                                                nameof(MYT_Liquidaciones.fechaBorrado) + "=@fechaBorrado," +
                                                nameof(MYT_Liquidaciones.idEmpresa) + "=@idEmpresa" +
                                           " WHERE " +
                                               nameof(MYT_Liquidaciones.id) + "=@id";

                    //Parametros
                    SqlParameter obj_SqlParameter_Firma = new SqlParameter("@firma", SqlDbType.Binary);
                    if (mdl_MYT_Liquidaciones_Final.firma != null)
                    { obj_SqlParameter_Firma.Value = mdl_MYT_Liquidaciones_Final.firma; }
                    else
                    { obj_SqlParameter_Firma.Value = DBNull.Value; }

                    //Parametros
                    object[] arr_Parametros_Update = new object[]
                    {
                         new SqlParameter("@idTerminal",  mdl_MYT_Liquidaciones_Final.idTerminal),
                         new SqlParameter("@idTecnico",  mdl_MYT_Liquidaciones_Final.idTecnico),
                         new SqlParameter("@fechaHora_Inicio",  mdl_MYT_Liquidaciones_Final.fechaHora_Inicio),
                         mdl_MYT_Liquidaciones_Final.fechaHora_Fin != null
                            ?   new SqlParameter("@fechaHora_Fin", mdl_MYT_Liquidaciones_Final.fechaHora_Fin.Value)
                            :   new SqlParameter("@fechaHora_Fin",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.observaciones != null
                            ?   new SqlParameter("@observaciones", mdl_MYT_Liquidaciones_Final.observaciones)
                            :   new SqlParameter("@observaciones",  DBNull.Value),
                         obj_SqlParameter_Firma,
                         mdl_MYT_Liquidaciones_Final.firmanteObservaciones != null
                            ?   new SqlParameter("@firmanteObservaciones", mdl_MYT_Liquidaciones_Final.firmanteObservaciones)
                            :   new SqlParameter("@firmanteObservaciones",  DBNull.Value),
                         new SqlParameter("@guid",  mdl_MYT_Liquidaciones_Final.guid),
                         mdl_MYT_Liquidaciones_Final.cajaInicial != null
                            ?   new SqlParameter("@cajaInicial", mdl_MYT_Liquidaciones_Final.cajaInicial.Value)
                            :   new SqlParameter("@cajaInicial",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_001 != null
                            ?   new SqlParameter("@arqueo_001", mdl_MYT_Liquidaciones_Final.arqueo_001.Value)
                            :   new SqlParameter("@arqueo_001",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_002 != null
                            ?   new SqlParameter("@arqueo_002", mdl_MYT_Liquidaciones_Final.arqueo_002.Value)
                            :   new SqlParameter("@arqueo_002",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_005 != null
                            ?   new SqlParameter("@arqueo_005", mdl_MYT_Liquidaciones_Final.arqueo_005.Value)
                            :   new SqlParameter("@arqueo_005",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_010 != null
                            ?   new SqlParameter("@arqueo_010", mdl_MYT_Liquidaciones_Final.arqueo_010.Value)
                            :   new SqlParameter("@arqueo_010",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_020 != null
                            ?   new SqlParameter("@arqueo_020", mdl_MYT_Liquidaciones_Final.arqueo_020.Value)
                            :   new SqlParameter("@arqueo_020",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_050 != null
                            ?   new SqlParameter("@arqueo_050", mdl_MYT_Liquidaciones_Final.arqueo_050.Value)
                            :   new SqlParameter("@arqueo_050",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_1 != null
                            ?   new SqlParameter("@arqueo_1", mdl_MYT_Liquidaciones_Final.arqueo_1.Value)
                            :   new SqlParameter("@arqueo_1",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_2 != null
                            ?   new SqlParameter("@arqueo_2", mdl_MYT_Liquidaciones_Final.arqueo_2.Value)
                            :   new SqlParameter("@arqueo_2",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_5 != null
                            ?   new SqlParameter("@arqueo_5", mdl_MYT_Liquidaciones_Final.arqueo_5.Value)
                            :   new SqlParameter("@arqueo_5",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_10 != null
                            ?   new SqlParameter("@arqueo_10", mdl_MYT_Liquidaciones_Final.arqueo_10.Value)
                            :   new SqlParameter("@arqueo_10",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_20 != null
                            ?   new SqlParameter("@arqueo_20", mdl_MYT_Liquidaciones_Final.arqueo_20.Value)
                            :   new SqlParameter("@arqueo_20",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_50 != null
                            ?   new SqlParameter("@arqueo_50", mdl_MYT_Liquidaciones_Final.arqueo_50.Value)
                            :   new SqlParameter("@arqueo_50",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_100 != null
                            ?   new SqlParameter("@arqueo_100", mdl_MYT_Liquidaciones_Final.arqueo_100.Value)
                            :   new SqlParameter("@arqueo_100",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_200 != null
                            ?   new SqlParameter("@arqueo_200", mdl_MYT_Liquidaciones_Final.arqueo_200.Value)
                            :   new SqlParameter("@arqueo_200",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_500 != null
                            ?   new SqlParameter("@arqueo_500", mdl_MYT_Liquidaciones_Final.arqueo_500.Value)
                            :   new SqlParameter("@arqueo_500",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.importeEntregado_Metalico != null
                            ?   new SqlParameter("@importeEntregado_Metalico", mdl_MYT_Liquidaciones_Final.importeEntregado_Metalico.Value)
                            :   new SqlParameter("@importeEntregado_Metalico",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.importeEntregado_Talon != null
                            ?   new SqlParameter("@importeEntregado_Talon", mdl_MYT_Liquidaciones_Final.importeEntregado_Talon.Value)
                            :   new SqlParameter("@importeEntregado_Talon",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.gastos != null
                            ?   new SqlParameter("@gastos", mdl_MYT_Liquidaciones_Final.gastos.Value)
                            :   new SqlParameter("@gastos",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.importeAEntregar_Metalico != null
                            ?   new SqlParameter("@importeAEntregar_Metalico", mdl_MYT_Liquidaciones_Final.importeAEntregar_Metalico.Value)
                            :   new SqlParameter("@importeAEntregar_Metalico",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.importeAEntregar_Talon != null
                            ?   new SqlParameter("@importeAEntregar_Talon", mdl_MYT_Liquidaciones_Final.importeAEntregar_Talon.Value)
                            :   new SqlParameter("@importeAEntregar_Talon",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.partes_Pendientes != null
                            ?   new SqlParameter("@partes_Pendientes", mdl_MYT_Liquidaciones_Final.partes_Pendientes.Value)
                            :   new SqlParameter("@partes_Pendientes",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.partes_Aplazados != null
                            ?   new SqlParameter("@partes_Aplazados", mdl_MYT_Liquidaciones_Final.partes_Aplazados.Value)
                            :   new SqlParameter("@partes_Aplazados",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.partes_Terminados != null
                            ?   new SqlParameter("@partes_Terminados", mdl_MYT_Liquidaciones_Final.partes_Terminados.Value)
                            :   new SqlParameter("@partes_Terminados",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.partes_TerminadosConIncidencias != null
                            ?   new SqlParameter("@partes_TerminadosConIncidencias", mdl_MYT_Liquidaciones_Final.partes_TerminadosConIncidencias.Value)
                            :   new SqlParameter("@partes_TerminadosConIncidencias",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.partes_Transferidos != null
                            ?   new SqlParameter("@partes_Transferidos", mdl_MYT_Liquidaciones_Final.partes_Transferidos.Value)
                            :   new SqlParameter("@partes_Transferidos",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.fechaBorrado != null
                            ?   new SqlParameter("@fechaBorrado", mdl_MYT_Liquidaciones_Final.fechaBorrado.Value)
                            :   new SqlParameter("@fechaBorrado",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.idEmpresa != null
                            ?   new SqlParameter("@idEmpresa", mdl_MYT_Liquidaciones_Final.idEmpresa.Value)
                            :   new SqlParameter("@idEmpresa",  DBNull.Value),
                         new SqlParameter("@id", mdl_MYT_Liquidaciones_Final.id)
                    };
                    #endregion

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

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

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

                    // Cargar los Datos del Modelo
                    Funciones.CopiarPropiedadesObjetos(mdl_MYT_Liquidaciones_AGrabar, mdl_MYT_Liquidaciones_Final, false, false);

                    #region INSERT
                    string str_SQL_Insert = " INSERT INTO " + nameof(MYT_Liquidaciones) +
                                               " (" +
                                                        nameof(MYT_Liquidaciones.idTerminal) + "," +
                                                        nameof(MYT_Liquidaciones.idTecnico) + "," +
                                                        nameof(MYT_Liquidaciones.fechaHora_Inicio) + "," +
                                                        nameof(MYT_Liquidaciones.fechaHora_Fin) + "," +
                                                        nameof(MYT_Liquidaciones.observaciones) + "," +
                                                        nameof(MYT_Liquidaciones.firma) + "," +
                                                        nameof(MYT_Liquidaciones.firmanteObservaciones) + "," +
                                                        nameof(MYT_Liquidaciones.guid) + "," +
                                                        nameof(MYT_Liquidaciones.cajaInicial) + "," +
                                                        nameof(MYT_Liquidaciones.arqueo_001) + "," +
                                                        nameof(MYT_Liquidaciones.arqueo_002) + "," +
                                                        nameof(MYT_Liquidaciones.arqueo_005) + "," +
                                                        nameof(MYT_Liquidaciones.arqueo_010) + "," +
                                                        nameof(MYT_Liquidaciones.arqueo_020) + "," +
                                                        nameof(MYT_Liquidaciones.arqueo_050) + "," +
                                                        nameof(MYT_Liquidaciones.arqueo_1) + "," +
                                                        nameof(MYT_Liquidaciones.arqueo_2) + "," +
                                                        nameof(MYT_Liquidaciones.arqueo_5) + "," +
                                                        nameof(MYT_Liquidaciones.arqueo_10) + "," +
                                                        nameof(MYT_Liquidaciones.arqueo_20) + "," +
                                                        nameof(MYT_Liquidaciones.arqueo_50) + "," +
                                                        nameof(MYT_Liquidaciones.arqueo_100) + "," +
                                                        nameof(MYT_Liquidaciones.arqueo_200) + "," +
                                                        nameof(MYT_Liquidaciones.arqueo_500) + "," +
                                                        nameof(MYT_Liquidaciones.importeEntregado_Metalico) + "," +
                                                        nameof(MYT_Liquidaciones.importeEntregado_Talon) + "," +
                                                        nameof(MYT_Liquidaciones.gastos) + "," +
                                                        nameof(MYT_Liquidaciones.importeAEntregar_Metalico) + "," +
                                                        nameof(MYT_Liquidaciones.importeAEntregar_Talon) + "," +
                                                        nameof(MYT_Liquidaciones.partes_Pendientes) + "," +
                                                        nameof(MYT_Liquidaciones.partes_Aplazados) + "," +
                                                        nameof(MYT_Liquidaciones.partes_Terminados) + "," +
                                                        nameof(MYT_Liquidaciones.partes_TerminadosConIncidencias) + "," +
                                                        nameof(MYT_Liquidaciones.partes_Transferidos) + "," +
                                                        nameof(MYT_Liquidaciones.fechaBorrado) + "," +
                                                        nameof(MYT_Liquidaciones.idEmpresa) + 
                                               " ) " +
                                               " OUTPUT INSERTED." + nameof(MYT_Liquidaciones.id) +
                                               " VALUES " +
                                               " ( " +
                                                    "@idTerminal," +
                                                    "@idTecnico," +
                                                    "@fechaHora_Inicio," +
                                                    "@fechaHora_Fin," +
                                                    "@observaciones," +
                                                    "@firma," +
                                                    "@firmanteObservaciones," +
                                                    "@guid," +
                                                    "@cajaInicial," +
                                                    "@arqueo_001," +
                                                    "@arqueo_002," +
                                                    "@arqueo_005," +
                                                    "@arqueo_010," +
                                                    "@arqueo_020," +
                                                    "@arqueo_050," +
                                                    "@arqueo_1," +
                                                    "@arqueo_2," +
                                                    "@arqueo_5," +
                                                    "@arqueo_10," +
                                                    "@arqueo_20," +
                                                    "@arqueo_50," +
                                                    "@arqueo_100," +
                                                    "@arqueo_200," +
                                                    "@arqueo_500," +
                                                    "@importeEntregado_Metalico," +
                                                    "@importeEntregado_Talon," +
                                                    "@gastos," +
                                                    "@importeAEntregar_Metalico," +
                                                    "@importeAEntregar_Talon," +
                                                    "@partes_Pendientes," +
                                                    "@partes_Aplazados," +
                                                    "@partes_Terminados," +
                                                    "@partes_TerminadosConIncidencias," +
                                                    "@partes_Transferidos," +
                                                    "@fechaBorrado," +
                                                    "@idEmpresa" +
                                               " ) ";

                    //Parametros
                    SqlParameter obj_SqlParameter_Firma = new SqlParameter("@firma", SqlDbType.Binary);
                    if (mdl_MYT_Liquidaciones_Final.firma != null)
                    { obj_SqlParameter_Firma.Value = mdl_MYT_Liquidaciones_Final.firma; }
                    else
                    { obj_SqlParameter_Firma.Value = DBNull.Value; }

                    //Parametros
                    object[] arr_Parametros_Insert = new object[]
                    {
                         new SqlParameter("@idTerminal",  mdl_MYT_Liquidaciones_Final.idTerminal),
                         new SqlParameter("@idTecnico",  mdl_MYT_Liquidaciones_Final.idTecnico),
                         new SqlParameter("@fechaHora_Inicio",  mdl_MYT_Liquidaciones_Final.fechaHora_Inicio),
                         mdl_MYT_Liquidaciones_Final.fechaHora_Fin != null
                            ?   new SqlParameter("@fechaHora_Fin", mdl_MYT_Liquidaciones_Final.fechaHora_Fin.Value)
                            :   new SqlParameter("@fechaHora_Fin",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.observaciones != null
                            ?   new SqlParameter("@observaciones", mdl_MYT_Liquidaciones_Final.observaciones)
                            :   new SqlParameter("@observaciones",  DBNull.Value),
                         obj_SqlParameter_Firma,
                         mdl_MYT_Liquidaciones_Final.firmanteObservaciones != null
                            ?   new SqlParameter("@firmanteObservaciones", mdl_MYT_Liquidaciones_Final.firmanteObservaciones)
                            :   new SqlParameter("@firmanteObservaciones",  DBNull.Value),
                         new SqlParameter("@guid",  mdl_MYT_Liquidaciones_Final.guid),
                         mdl_MYT_Liquidaciones_Final.cajaInicial != null
                            ?   new SqlParameter("@cajaInicial", mdl_MYT_Liquidaciones_Final.cajaInicial.Value)
                            :   new SqlParameter("@cajaInicial",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_001 != null
                            ?   new SqlParameter("@arqueo_001", mdl_MYT_Liquidaciones_Final.arqueo_001.Value)
                            :   new SqlParameter("@arqueo_001",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_002 != null
                            ?   new SqlParameter("@arqueo_002", mdl_MYT_Liquidaciones_Final.arqueo_002.Value)
                            :   new SqlParameter("@arqueo_002",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_005 != null
                            ?   new SqlParameter("@arqueo_005", mdl_MYT_Liquidaciones_Final.arqueo_005.Value)
                            :   new SqlParameter("@arqueo_005",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_010 != null
                            ?   new SqlParameter("@arqueo_010", mdl_MYT_Liquidaciones_Final.arqueo_010.Value)
                            :   new SqlParameter("@arqueo_010",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_020 != null
                            ?   new SqlParameter("@arqueo_020", mdl_MYT_Liquidaciones_Final.arqueo_020.Value)
                            :   new SqlParameter("@arqueo_020",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_050 != null
                            ?   new SqlParameter("@arqueo_050", mdl_MYT_Liquidaciones_Final.arqueo_050.Value)
                            :   new SqlParameter("@arqueo_050",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_1 != null
                            ?   new SqlParameter("@arqueo_1", mdl_MYT_Liquidaciones_Final.arqueo_1.Value)
                            :   new SqlParameter("@arqueo_1",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_2 != null
                            ?   new SqlParameter("@arqueo_2", mdl_MYT_Liquidaciones_Final.arqueo_2.Value)
                            :   new SqlParameter("@arqueo_2",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_5 != null
                            ?   new SqlParameter("@arqueo_5", mdl_MYT_Liquidaciones_Final.arqueo_5.Value)
                            :   new SqlParameter("@arqueo_5",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_10 != null
                            ?   new SqlParameter("@arqueo_10", mdl_MYT_Liquidaciones_Final.arqueo_10.Value)
                            :   new SqlParameter("@arqueo_10",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_20 != null
                            ?   new SqlParameter("@arqueo_20", mdl_MYT_Liquidaciones_Final.arqueo_20.Value)
                            :   new SqlParameter("@arqueo_20",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_50 != null
                            ?   new SqlParameter("@arqueo_50", mdl_MYT_Liquidaciones_Final.arqueo_50.Value)
                            :   new SqlParameter("@arqueo_50",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_100 != null
                            ?   new SqlParameter("@arqueo_100", mdl_MYT_Liquidaciones_Final.arqueo_100.Value)
                            :   new SqlParameter("@arqueo_100",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_200 != null
                            ?   new SqlParameter("@arqueo_200", mdl_MYT_Liquidaciones_Final.arqueo_200.Value)
                            :   new SqlParameter("@arqueo_200",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.arqueo_500 != null
                            ?   new SqlParameter("@arqueo_500", mdl_MYT_Liquidaciones_Final.arqueo_500.Value)
                            :   new SqlParameter("@arqueo_500",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.importeEntregado_Metalico != null
                            ?   new SqlParameter("@importeEntregado_Metalico", mdl_MYT_Liquidaciones_Final.importeEntregado_Metalico.Value)
                            :   new SqlParameter("@importeEntregado_Metalico",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.importeEntregado_Talon != null
                            ?   new SqlParameter("@importeEntregado_Talon", mdl_MYT_Liquidaciones_Final.importeEntregado_Talon.Value)
                            :   new SqlParameter("@importeEntregado_Talon",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.gastos != null
                            ?   new SqlParameter("@gastos", mdl_MYT_Liquidaciones_Final.gastos.Value)
                            :   new SqlParameter("@gastos",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.importeAEntregar_Metalico != null
                            ?   new SqlParameter("@importeAEntregar_Metalico", mdl_MYT_Liquidaciones_Final.importeAEntregar_Metalico.Value)
                            :   new SqlParameter("@importeAEntregar_Metalico",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.importeAEntregar_Talon != null
                            ?   new SqlParameter("@importeAEntregar_Talon", mdl_MYT_Liquidaciones_Final.importeAEntregar_Talon.Value)
                            :   new SqlParameter("@importeAEntregar_Talon",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.partes_Pendientes != null
                            ?   new SqlParameter("@partes_Pendientes", mdl_MYT_Liquidaciones_Final.partes_Pendientes.Value)
                            :   new SqlParameter("@partes_Pendientes",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.partes_Aplazados != null
                            ?   new SqlParameter("@partes_Aplazados", mdl_MYT_Liquidaciones_Final.partes_Aplazados.Value)
                            :   new SqlParameter("@partes_Aplazados",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.partes_Terminados != null
                            ?   new SqlParameter("@partes_Terminados", mdl_MYT_Liquidaciones_Final.partes_Terminados.Value)
                            :   new SqlParameter("@partes_Terminados",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.partes_TerminadosConIncidencias != null
                            ?   new SqlParameter("@partes_TerminadosConIncidencias", mdl_MYT_Liquidaciones_Final.partes_TerminadosConIncidencias.Value)
                            :   new SqlParameter("@partes_TerminadosConIncidencias",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.partes_Transferidos != null
                            ?   new SqlParameter("@partes_Transferidos", mdl_MYT_Liquidaciones_Final.partes_Transferidos.Value)
                            :   new SqlParameter("@partes_Transferidos",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.fechaBorrado != null
                            ?   new SqlParameter("@fechaBorrado", mdl_MYT_Liquidaciones_Final.fechaBorrado.Value)
                            :   new SqlParameter("@fechaBorrado",  DBNull.Value),
                         mdl_MYT_Liquidaciones_Final.idEmpresa != null
                            ?   new SqlParameter("@idEmpresa", mdl_MYT_Liquidaciones_Final.idEmpresa.Value)
                            :   new SqlParameter("@idEmpresa",  DBNull.Value)
                    };
                    #endregion

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

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

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

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

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

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

            try
            {

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

                // Ver si existe ######################################################################
                MYT_Liquidaciones mdl_MYT_Liquidaciones_Final = Obtener_Modelo_Por_Id(_lng_id);
                //######################################################################################

                if (mdl_MYT_Liquidaciones_Final != null)
                {
                    if (mdl_MYT_Liquidaciones_Final.fechaHora_Fin==null)
                    {
                        mdl_ValorDevuelto_Modelo.TodoCorrecto = false;
                        mdl_ValorDevuelto_Modelo.Mensaje = Mensajes.G_STR_MENSAJES_LIQUIDACION_VALIDACION_NOTERMINADO();
                    }
                    else
                    {
                        #region Update
                        string str_SQL_Update = " UPDATE " + nameof(MYT_Liquidaciones) +
                                                    " SET " +
                                                    nameof(MYT_Liquidaciones.fechaBorrado) + "=@fechaBorrado " +
                                                " WHERE " +
                                                    nameof(MYT_Liquidaciones.id) + "=@id";
                        //Parametros
                        object[] arr_Parametros_Update = new object[]
                        {
                                 new SqlParameter("@fechaBorrado",  DateTime.Now),
                                new SqlParameter("@id", _lng_id)
                        };
                        #endregion

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

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

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

                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.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)
        {
            throw new NotImplementedException();
        }
        #endregion

    }
}
