using Exferia_Aplicacion.General;
using Exferia_EntityFramework;
using Exferia_General;
using Exferia_Ventas._0_Modelos;
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 static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_Ventas._1_Datos
{
    public class VTA_AlbaranesCabecera_Anexos_2_Datos
    {

        #region MODELOS

        #region Modelo Simple
        private VTA_AlbaranesCabecera_Anexos_2 g_mdl_VTA_AlbaranesCabecera_Anexos_2 = null;
        private List<VTA_AlbaranesCabecera_Anexos_2> g_lst_mdl_VTA_AlbaranesCabecera_Anexos_2 = null;
        public VTA_AlbaranesCabecera_Anexos_2 Obtener_Modelo_Por_Id(long _lng_id,
                                                         bool _bol_Cargar_Soporte,
                                                         bool _bol_Cargar_TarifaLinea_Cliente,
                                                         bool _bol_Cargar_TarifaLinea_Agencia)
        {
            try
            {
                string str_SQL = Obtener_Consulta_Modelo() +
                                 //WHERE
                                 " WHERE " + nameof(VTA_AlbaranesCabecera_Anexos_2) + "." + nameof(VTA_AlbaranesCabecera_Anexos_2.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,
                                        _bol_Cargar_Soporte,
                                        _bol_Cargar_TarifaLinea_Cliente,
                                        _bol_Cargar_TarifaLinea_Agencia);
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(VTA_AlbaranesCabecera_Anexos_2_Datos) + "/" + nameof(Obtener_Modelo_Por_Id), true);
            }

            return g_lst_mdl_VTA_AlbaranesCabecera_Anexos_2.FirstOrDefault();
        }

        public List<VTA_AlbaranesCabecera_Anexos_2> Obtener_Modelos_Por_AlbaranCabecera(long _lng_idAlbaranCabecera,
                                                                                    bool _bol_Cargar_Soporte,
                                                                                    bool _bol_Cargar_TarifaLinea_Cliente,
                                                                                    bool _bol_Cargar_TarifaLinea_Agencia)
        {
            try
            {
                string str_SQL = Obtener_Consulta_Modelo() +
                                 //WHERE
                                 " WHERE " + nameof(VTA_AlbaranesCabecera_Anexos_2) + "." + nameof(VTA_AlbaranesCabecera_Anexos_2.idAlbaranCabecera) + "=@idAlbaranCabecera";

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

                //Ejecutar y rellenar el modelo
                Ejecutar_Consulta_Modelo(str_SQL,
                                         arr_Parametros,
                                        _bol_Cargar_Soporte,
                                        _bol_Cargar_TarifaLinea_Cliente,
                                        _bol_Cargar_TarifaLinea_Agencia);
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(VTA_AlbaranesCabecera_Anexos_2_Datos) + "/" + nameof(Obtener_Modelos_Por_AlbaranCabecera), true);
            }

            return g_lst_mdl_VTA_AlbaranesCabecera_Anexos_2;
        }

        #region Ejecutar Consulta Modelo

        private static int g_int_TotalHilos_Modelo = 3;
        private bool[] g_bol_Hilos_Terminados_Modelo = new bool[g_int_TotalHilos_Modelo];
        private void Ejecutar_Consulta_Modelo(string _str_SQL,
                                                object[] _arr_Parametros,
                                                bool _bol_Cargar_Soporte,
                                                bool _bol_Cargar_TarifaLinea_Cliente,
                                                bool _bol_Cargar_TarifaLinea_Agencia)
        {
            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_mdl_VTA_AlbaranesCabecera_Anexos_2 = obj_Exferia_Entities.Database.SqlQuery<VTA_AlbaranesCabecera_Anexos_2>(_str_SQL, _arr_Parametros).ToList();
                foreach(VTA_AlbaranesCabecera_Anexos_2 mdl_element in  g_lst_mdl_VTA_AlbaranesCabecera_Anexos_2)
                {
                    g_mdl_VTA_AlbaranesCabecera_Anexos_2 = mdl_element;
                    #region Rellenar Tablas Relacionadas
                    if (g_mdl_VTA_AlbaranesCabecera_Anexos_2 != null)
                    {
                        //reiniciar Valores de los hilos
                        for (int int_Contador = 0; int_Contador < g_int_TotalHilos_Modelo; int_Contador++)
                        {
                            g_bol_Hilos_Terminados_Modelo[int_Contador] = false;
                        }


                        //SGA_Soportes  ##########################################################################################
                        if (_bol_Cargar_Soporte)
                        {
                            ThreadStart obj_ThreadStart_SOPORTE = new ThreadStart(Obtener_Soporte_Modelo);
                            Thread obj_Thread_SOPORTE = new Thread(obj_ThreadStart_SOPORTE);
                            obj_Thread_SOPORTE.Start();
                        }
                        else
                        {
                            g_bol_Hilos_Terminados_Modelo[0] = true;
                        }

                        //HRM_TarifasLineas (Clientes)  ##########################################################################################
                        if (_bol_Cargar_TarifaLinea_Cliente)
                        {
                            ThreadStart obj_ThreadStart_TIPOTARIFALINEACLIENTE = new ThreadStart(Obtener_TipoTarifaLinea_Cliente_Modelo);
                            Thread obj_Thread_TIPOTARIFALINEACLIENTE = new Thread(obj_ThreadStart_TIPOTARIFALINEACLIENTE);
                            obj_Thread_TIPOTARIFALINEACLIENTE.Start();
                        }
                        else
                        {
                            g_bol_Hilos_Terminados_Modelo[1] = true;
                        }


                        //HRM_TarifasLineas (Agencia)  ##########################################################################################
                        if (_bol_Cargar_TarifaLinea_Agencia &&
                            g_mdl_VTA_AlbaranesCabecera_Anexos_2.idTarifaLinea_Agencia != null)
                        {
                            ThreadStart obj_ThreadStart_TIPOTARIFALINEAAGENCIA = new ThreadStart(Obtener_TipoTarifaLinea_Agencia_Modelo);
                            Thread obj_Thread_TIPOTARIFALINEAAGENCIA = new Thread(obj_ThreadStart_TIPOTARIFALINEAAGENCIA);
                            obj_Thread_TIPOTARIFALINEAAGENCIA.Start();
                        }
                        else
                        {
                            g_bol_Hilos_Terminados_Modelo[2] = 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_Modelo)
                            {
                                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(VTA_AlbaranesCabecera_Anexos_2_Datos) + "/" + nameof(Ejecutar_Consulta_Modelo), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
        }
        #region Tablas Relacionadas

        private void Obtener_Soporte_Modelo()
        {
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_SISTEMAGESTIONALMACEN + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_SISTEMAGESTIONALMACEN + "." + Variables.G_STR_LIBRERIA_DATOSSISTEMAGESTIONALMACEN);
                //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_SISTEMAGESTIONALMACEN_PROCEDIMIENTO_SGASOPORTES_OBTENERMODELO_POR_ID, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { g_mdl_VTA_AlbaranesCabecera_Anexos_2.idSoporte };
                //Pasamos los parametros al metodo y lo ejecutamos
                g_mdl_VTA_AlbaranesCabecera_Anexos_2.SGA_Soportes = (SGA_Soportes)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Modelo[0] = true;
            }
        }
        private void Obtener_TipoTarifaLinea_Cliente_Modelo()
        {
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_HERMES + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_HERMES + "." + Variables.G_STR_LIBRERIA_DATOSHERMES);
                //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_DATOSHERMES_PROCEDIMIENTO_HRMTARIFASLINEAS_OBTENER_MODELO_PORID, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { g_mdl_VTA_AlbaranesCabecera_Anexos_2.idTarifaLinea_Cliente };
                //Pasamos los parametros al metodo y lo ejecutamos
                g_mdl_VTA_AlbaranesCabecera_Anexos_2.HRM_TarifasLineas = (HRM_TarifasLineas)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Modelo[1] = true;
            }
        }

        private void Obtener_TipoTarifaLinea_Agencia_Modelo()
        {
            try
            {
                //Cargamos el ensamblado
                Assembly m_assembly = Assembly.LoadFrom(Variables.G_STR_LIBRERIA_RUTAINICIAL + @"\" + Variables.G_STR_LIBRERIA_HERMES + ".dll");
                //Obtenemos el tipo de la clase
                Type m_type = m_assembly.GetType(Variables.G_STR_LIBRERIA_HERMES + "." + Variables.G_STR_LIBRERIA_DATOSHERMES);
                //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_DATOSHERMES_PROCEDIMIENTO_HRMTARIFASLINEAS_OBTENER_MODELO_PORID, BindingFlags.Instance | BindingFlags.NonPublic);

                //Obtener valores
                object[] arr_Parametros = { g_mdl_VTA_AlbaranesCabecera_Anexos_2.idTarifaLinea_Agencia };
                //Pasamos los parametros al metodo y lo ejecutamos
                g_mdl_VTA_AlbaranesCabecera_Anexos_2.HRM_TarifasLineas1 = (HRM_TarifasLineas)obj_MethodInfo.Invoke(obj_Clase, arr_Parametros);
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Modelo[2] = true;
            }
        }

        #endregion

        #endregion
        #endregion

        #region Modelo Listado
        private List<VTA_AlbaranesCabecera_Anexos_2> g_lst_VTA_AlbaranesCabecera_Anexos_1 = null;

        public List<VTA_AlbaranesCabecera_Anexos_2> Obtener_ModeloListado_Por_Ids(List<long> _lst_idAlbaranCabecera)
        {
            try
            {
                string str_Filtro_IDS = Funciones.Formar_ContenidoIN_ParaConsultaWhere(nameof(VTA_AlbaranesCabecera_Anexos_2),
                                                                                        nameof(VTA_AlbaranesCabecera_Anexos_2.idAlbaranCabecera),
                                                                                        G_ENUM_FORMARCONTENIDOIN_CONDICIONANTES.NADA,
                                                                                         _lst_idAlbaranCabecera);

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

            return g_lst_VTA_AlbaranesCabecera_Anexos_1;
        }

        #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_VTA_AlbaranesCabecera_Anexos_1 = obj_Exferia_Entities.Database.SqlQuery<VTA_AlbaranesCabecera_Anexos_2>(_str_SQL, _arr_Parametros).ToList();
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(VTA_AlbaranesCabecera_Anexos_2_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(VTA_AlbaranesCabecera_Anexos_2.id)}, 
                    {nameof(VTA_AlbaranesCabecera_Anexos_2.idAlbaranCabecera)}, 
                    {nameof(VTA_AlbaranesCabecera_Anexos_2.idSoporte)}, 
                    {nameof(VTA_AlbaranesCabecera_Anexos_2.cantidad)}, 
                    {nameof(VTA_AlbaranesCabecera_Anexos_2.precio)},
                    {nameof(VTA_AlbaranesCabecera_Anexos_2.idTarifaLinea_Agencia)}, 
                    {nameof(VTA_AlbaranesCabecera_Anexos_2.idTarifaLinea_Cliente)}, 
                    {nameof(VTA_AlbaranesCabecera_Anexos_2.bruto)},  
                    {nameof(VTA_AlbaranesCabecera_Anexos_2.esAmericano)}, 
                    {nameof(VTA_AlbaranesCabecera_Anexos_2.esPremium)}
               FROM {nameof(VTA_AlbaranesCabecera_Anexos_2)}";
        }
        #endregion

        #region Obtener Para Listado Simple

        #region Listado
        private List<INTERNO_VTA_AlbaranesCabecera_Anexos_1_Listado_Modelo> g_lstINTERNO_VTA_AlbaranesCabecera_Anexos_1_Listado_Modelo_PARALISTADO = null;

        #region Ejecutar Consulta
        private void Ejecutar_Consulta_Modelo_Listado_PARALISTADO(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_lstINTERNO_VTA_AlbaranesCabecera_Anexos_1_Listado_Modelo_PARALISTADO = obj_Exferia_Entities.Database.SqlQuery<INTERNO_VTA_AlbaranesCabecera_Anexos_1_Listado_Modelo>(_str_SQL, _arr_Parametros).ToList();
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(VTA_AlbaranesCabecera_Anexos_2_Datos) + "/" + nameof(Ejecutar_Consulta_Modelo_Listado_PARALISTADO), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }
        }



        #endregion

        #endregion


        #endregion

        #region Grabar
        public INTERNO_ValorDevuelto_Modelo Grabar(VTA_AlbaranesCabecera_Anexos_2 _mdl_VTA_AlbaranesCabecera_Anexos_1)
        {
            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.ProxyCreationEnabled = true;

                VTA_AlbaranesCabecera_Anexos_2 mdl_VTA_AlbaranesCabecera_Anexos_1_DatosViejos = new VTA_AlbaranesCabecera_Anexos_2();

                // Ver si existe ######################################################################
                VTA_AlbaranesCabecera_Anexos_2 mdl_VTA_AlbaranesCabecera_Anexos_2_Final = null;//Obtener_Modelo_Por_Id(_mdl_VTA_AlbaranesCabecera_Anexos_1.id, false, false, false, false, false, false, false, false, false);
                //#####################################################################################

                //UPDATE
                if (_mdl_VTA_AlbaranesCabecera_Anexos_1.id > 0)
                {
                    mdl_VTA_AlbaranesCabecera_Anexos_2_Final = Obtener_Modelo_Por_Id(_mdl_VTA_AlbaranesCabecera_Anexos_1.id, false, false, false);
                    //Tipo de Accion que se va a realizar
                    mdl_INTERNO_ValorDevuelto_Modelo.TipoAccion = G_ENUM_TIPOACCION.INT_MODIFICAR;

                    //_mdl_VTA_AlbaranesCabecera_Anexos_1.id = mdl_VTA_AlbaranesCabecera_Anexos_2_Final.id;

                    //Datos viejos para la trazabilidad
                    Funciones.CopiarPropiedadesObjetos(mdl_VTA_AlbaranesCabecera_Anexos_2_Final, mdl_VTA_AlbaranesCabecera_Anexos_1_DatosViejos, false, false);

                    // Cargar los Datos Nuevos del Modelo
                    Funciones.CopiarPropiedadesObjetos(_mdl_VTA_AlbaranesCabecera_Anexos_1, mdl_VTA_AlbaranesCabecera_Anexos_2_Final, false, false);

                    #region Update
                    string str_SQL_Update = $@"UPDATE {nameof(VTA_AlbaranesCabecera_Anexos_2)}
                                            SET
                                                {nameof(VTA_AlbaranesCabecera_Anexos_2.idAlbaranCabecera)} = @idAlbaranCabecera,
                                                {nameof(VTA_AlbaranesCabecera_Anexos_2.idSoporte)} = @idSoporte,
                                                {nameof(VTA_AlbaranesCabecera_Anexos_2.cantidad)} = @cantidad,
                                                {nameof(VTA_AlbaranesCabecera_Anexos_2.precio)} = @precio,
                                                {nameof(VTA_AlbaranesCabecera_Anexos_2.idTarifaLinea_Cliente)} = @idTarifaLinea_Cliente,
                                                {nameof(VTA_AlbaranesCabecera_Anexos_2.idTarifaLinea_Agencia)} = @idTarifaLinea_Agencia,
                                                {nameof(VTA_AlbaranesCabecera_Anexos_2.bruto)} = @bruto,
                                                {nameof(VTA_AlbaranesCabecera_Anexos_2.esAmericano)} = @esAmericano,
                                                {nameof(VTA_AlbaranesCabecera_Anexos_2.esPremium)} = @esPremium
                                            WHERE
                                                {nameof(VTA_AlbaranesCabecera_Anexos_2.id)} = @id";
                    //Parametros
                    object[] arr_Parametros_Update = new object[]
                    {
                        new SqlParameter("@id", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.id),
                        new SqlParameter("@idAlbaranCabecera", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.idAlbaranCabecera),
                        new SqlParameter("@idSoporte", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.idSoporte),
                        new SqlParameter("@cantidad", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.cantidad),
                        new SqlParameter("@precio", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.precio),
                        new SqlParameter("@idTarifaLinea_Cliente", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.idTarifaLinea_Cliente ?? (dynamic) DBNull.Value),
                        new SqlParameter("@idTarifaLinea_Agencia", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.idTarifaLinea_Agencia ?? (dynamic) DBNull.Value),
                        new SqlParameter("@bruto", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.bruto),
                        new SqlParameter("@esAmericano", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.esAmericano),
                        new SqlParameter("@esPremium", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.esPremium),

                    };
                    #endregion

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

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

                    //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_VTA_AlbaranesCabecera_Anexos_1, mdl_VTA_AlbaranesCabecera_Anexos_2_Final, false, false);

                    #region INSERT
                    string str_SQL_Insert = $@"INSERT INTO {nameof(VTA_AlbaranesCabecera_Anexos_2)}
                                                (
                                                    {nameof(VTA_AlbaranesCabecera_Anexos_2.idAlbaranCabecera)},
                                                    {nameof(VTA_AlbaranesCabecera_Anexos_2.idSoporte)},
                                                    {nameof(VTA_AlbaranesCabecera_Anexos_2.cantidad)},
                                                    {nameof(VTA_AlbaranesCabecera_Anexos_2.precio)},
                                                    {nameof(VTA_AlbaranesCabecera_Anexos_2.idTarifaLinea_Cliente)},
                                                    {nameof(VTA_AlbaranesCabecera_Anexos_2.idTarifaLinea_Agencia)},
                                                    {nameof(VTA_AlbaranesCabecera_Anexos_2.bruto)},
                                                    {nameof(VTA_AlbaranesCabecera_Anexos_2.esAmericano)},
                                                    {nameof(VTA_AlbaranesCabecera_Anexos_2.esPremium)}
                                                )
                                                OUTPUT INSERTED.{nameof(VTA_AlbaranesFacturasLineas_Comentarios.id)}
                                                VALUES 
                                                (
                                                    @idAlbaranCabecera,
                                                    @idSoporte,
                                                    @cantidad,
                                                    @precio,
                                                    @idTarifaLinea_Cliente,
                                                    @idTarifaLinea_Agencia,
                                                    @bruto,
                                                    @esAmericano,
                                                    @esPremium
                                                )";
                    //Parametros
                    object[] arr_Parametros_Insert = new object[]
                    {
                        new SqlParameter("@idAlbaranCabecera", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.idAlbaranCabecera),
                        new SqlParameter("@idSoporte", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.idSoporte),
                        new SqlParameter("@cantidad", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.cantidad),
                        new SqlParameter("@precio", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.precio),
                        new SqlParameter("@idTarifaLinea_Cliente", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.idTarifaLinea_Cliente ?? (dynamic) DBNull.Value),
                        new SqlParameter("@idTarifaLinea_Agencia", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.idTarifaLinea_Agencia ?? (dynamic) DBNull.Value),
                        new SqlParameter("@bruto", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.bruto),
                        new SqlParameter("@esAmericano", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.esAmericano),
                        new SqlParameter("@esPremium", mdl_VTA_AlbaranesCabecera_Anexos_2_Final.esPremium),
                    };
                    #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(VTA_AlbaranesCabecera_Anexos_2), mdl_VTA_AlbaranesCabecera_Anexos_1_DatosViejos, mdl_VTA_AlbaranesCabecera_Anexos_2_Final, mdl_INTERNO_ValorDevuelto_Modelo.TipoAccion, obj_Exferia_Entities);
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(VTA_AlbaranesCabecera_Anexos_2_Datos) + "/" + nameof(Grabar), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        //public INTERNO_ValorDevuelto_Modelo Insertar(VTA_AlbaranesCabecera_Anexos_2 _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar)
        //{
        //    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.ProxyCreationEnabled = true;

        //        VTA_AlbaranesCabecera_Anexos_2 mdl_VTA_AlbaranesCabecera_Anexos_1_DatosViejos = new VTA_AlbaranesCabecera_Anexos_2();

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


        //        #region INSERT
        //        string str_SQL_Insert = " INSERT INTO " + nameof(VTA_AlbaranesCabecera_Anexos_2) +
        //                                       " (" +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.idAlbaranCabecera) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.idAgencia) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.entradaSalida) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.fechaHoraEntrega) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.idPais_Origen) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.codigoPostal_Origen) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.remitente_Origen) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.provincia_Origen) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.municipio_Origen) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.poblacion_Origen) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.direccion_Origen) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.idPais_Destino) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.codigoPostal_Destino) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.destinatario_Destino) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.provincia_Destino) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.municipio_Destino) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.poblacion_Destino) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.direccion_Destino) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.idAlbaranPerfilCabecera) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.tipoPortes) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.conCargoCliente_tipoPortes) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.largo) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.ancho) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.alto) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.volumen) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.idTipoTransporte_Cliente) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.idSoporte) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.cantidad) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.precio) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.totalPorte) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.idTarifaLinea_Cliente) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.idTipoTransporte_Agencia) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.idTarifaLinea_Agencia) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.incremento_Porcentaje) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.incremento_Importe) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.reembolso_Cantidad) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.reembolso_Comision) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.reembolso_Importe) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.reembolso_conCargoCliente) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.seguro_Cantidad) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.seguro_Comision) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.seguro_Importe) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.desembolso_conCargoCliente) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.desembolso_Importe) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.bruto) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.condiciones) + "," +
        //                                               nameof(VTA_AlbaranesCabecera_Anexos_2.totalPorteAgencia) +
        //                                       " ) " +
        //                                       " OUTPUT INSERTED." + nameof(VTA_AlbaranesCabecera_Anexos_2.id) +
        //                                       " VALUES " +
        //                                       " ( " +
        //                                           "@idAlbaranCabecera," +
        //                                           "@idAgencia," +
        //                                           "@entradaSalida," +
        //                                           "@fechaHoraEntrega," +
        //                                           "@idPais_Origen," +
        //                                           "@codigoPostal_Origen," +
        //                                           "@remitente_Origen," +
        //                                           "@provincia_Origen," +
        //                                           "@municipio_Origen," +
        //                                           "@poblacion_Origen," +
        //                                           "@direccion_Origen," +
        //                                           "@idPais_Destino," +
        //                                           "@codigoPostal_Destino," +
        //                                           "@destinatario_Destino," +
        //                                           "@provincia_Destino," +
        //                                           "@municipio_Destino," +
        //                                           "@poblacion_Destino," +
        //                                           "@direccion_Destino," +
        //                                           "@idAlbaranPerfilCabecera," +
        //                                           "@tipoPortes," +
        //                                           "@conCargoCliente_tipoPortes," +
        //                                           "@largo," +
        //                                           "@ancho," +
        //                                           "@alto," +
        //                                           "@volumen," +
        //                                           "@idTipoTransporte_Cliente," +
        //                                           "@idSoporte," +
        //                                           "@cantidad," +
        //                                           "@precio," +
        //                                           "@totalPorte," +
        //                                           "@idTarifaLinea_Cliente," +
        //                                           "@idTipoTransporte_Agencia," +
        //                                           "@idTarifaLinea_Agencia," +
        //                                           "@incremento_Porcentaje," +
        //                                           "@incremento_Importe," +
        //                                           "@reembolso_Cantidad," +
        //                                           "@reembolso_Comision," +
        //                                           "@reembolso_Importe," +
        //                                           "@reembolso_conCargoCliente," +
        //                                           "@seguro_Cantidad," +
        //                                           "@seguro_Comision," +
        //                                           "@seguro_Importe," +
        //                                           "@desembolso_conCargoCliente," +
        //                                           "@desembolso_Importe," +
        //                                           "@bruto," +
        //                                           "@condiciones," +
        //                                           "@totalPorteAgencia" +
        //                                       " ) ";
        //        //Parametros
        //        object[] arr_Parametros_Insert = new object[]
        //        {
        //                new SqlParameter("@idAlbaranCabecera", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.idAlbaranCabecera),
        //                new SqlParameter("@idAgencia", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.idAgencia),
        //                new SqlParameter("@entradaSalida", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.entradaSalida),
        //                new SqlParameter("@fechaHoraEntrega", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.fechaHoraEntrega),
        //                new SqlParameter("@idPais_Origen", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.idPais_Origen),
        //                new SqlParameter("@codigoPostal_Origen", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.codigoPostal_Origen),
        //                new SqlParameter("@remitente_Origen", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.remitente_Origen),
        //                new SqlParameter("@provincia_Origen", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.provincia_Origen),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.municipio_Origen != null
        //                    ?   new SqlParameter("@municipio_Origen", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.municipio_Origen)
        //                    :   new SqlParameter("@municipio_Origen",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.poblacion_Origen != null
        //                    ?   new SqlParameter("@poblacion_Origen", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.poblacion_Origen)
        //                    :   new SqlParameter("@poblacion_Origen",  DBNull.Value),
        //                 new SqlParameter("direccion_Origen", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.direccion_Origen),
        //                 new SqlParameter("idPais_Destino", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.idPais_Destino),
        //                 new SqlParameter("codigoPostal_Destino", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.codigoPostal_Destino),
        //                 new SqlParameter("destinatario_Destino", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.destinatario_Destino),
        //                 new SqlParameter("provincia_Destino", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.provincia_Destino),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.municipio_Destino != null
        //                    ?   new SqlParameter("@municipio_Destino", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.municipio_Destino)
        //                    :   new SqlParameter("@municipio_Destino",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.poblacion_Destino != null
        //                    ?   new SqlParameter("@poblacion_Destino", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.poblacion_Destino)
        //                    :   new SqlParameter("@poblacion_Destino",  DBNull.Value),
        //                new SqlParameter("direccion_Destino", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.direccion_Destino),
        //                new SqlParameter("idAlbaranPerfilCabecera", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.idAlbaranPerfilCabecera),
        //                new SqlParameter("tipoPortes", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.tipoPortes),
        //                new SqlParameter("conCargoCliente_tipoPortes", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.conCargoCliente_tipoPortes),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.largo != null
        //                    ?   new SqlParameter("@largo", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.largo)
        //                    :   new SqlParameter("@largo",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.ancho != null
        //                    ?   new SqlParameter("@ancho", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.ancho)
        //                    :   new SqlParameter("@ancho",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.alto != null
        //                    ?   new SqlParameter("@alto", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.alto)
        //                    :   new SqlParameter("@alto",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.volumen != null
        //                    ?   new SqlParameter("@volumen", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.volumen)
        //                    :   new SqlParameter("@volumen",  DBNull.Value),
        //                new SqlParameter("idTipoTransporte_Cliente", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.idTipoTransporte_Cliente),
        //                new SqlParameter("idSoporte", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.idSoporte),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.cantidad != null
        //                    ?   new SqlParameter("@cantidad", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.cantidad)
        //                    :   new SqlParameter("@cantidad",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.precio != null
        //                    ?   new SqlParameter("@precio", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.precio)
        //                    :   new SqlParameter("@precio",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.totalPorte != null
        //                    ?   new SqlParameter("@totalPorte", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.totalPorte)
        //                    :   new SqlParameter("@totalPorte",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.idTarifaLinea_Cliente != null
        //                    ?   new SqlParameter("@idTarifaLinea_Cliente", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.idTarifaLinea_Cliente)
        //                    :   new SqlParameter("@idTarifaLinea_Cliente",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.idTipoTransporte_Agencia != null
        //                    ?   new SqlParameter("@idTipoTransporte_Agencia", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.idTipoTransporte_Agencia)
        //                    :   new SqlParameter("@idTipoTransporte_Agencia",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.idTarifaLinea_Agencia != null
        //                    ?   new SqlParameter("@idTarifaLinea_Agencia", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.idTarifaLinea_Agencia)
        //                    :   new SqlParameter("@idTarifaLinea_Agencia",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.incremento_Porcentaje != null
        //                    ?   new SqlParameter("@incremento_Porcentaje", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.incremento_Porcentaje)
        //                    :   new SqlParameter("@incremento_Porcentaje",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.incremento_Importe != null
        //                    ?   new SqlParameter("@incremento_Importe", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.incremento_Importe)
        //                    :   new SqlParameter("@incremento_Importe",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.reembolso_Cantidad != null
        //                    ?   new SqlParameter("@reembolso_Cantidad", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.reembolso_Cantidad)
        //                    :   new SqlParameter("@reembolso_Cantidad",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.reembolso_Comision != null
        //                    ?   new SqlParameter("@reembolso_Comision", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.reembolso_Comision)
        //                    :   new SqlParameter("@reembolso_Comision",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.reembolso_Importe != null
        //                    ?   new SqlParameter("@reembolso_Importe", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.reembolso_Importe)
        //                    :   new SqlParameter("@reembolso_Importe",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.reembolso_conCargoCliente != null
        //                    ?   new SqlParameter("@reembolso_conCargoCliente", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.reembolso_conCargoCliente)
        //                    :   new SqlParameter("@reembolso_conCargoCliente",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.seguro_Cantidad != null
        //                    ?   new SqlParameter("@seguro_Cantidad", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.seguro_Cantidad)
        //                    :   new SqlParameter("@seguro_Cantidad",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.seguro_Comision != null
        //                    ?   new SqlParameter("@seguro_Comision", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.seguro_Comision)
        //                    :   new SqlParameter("@seguro_Comision",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.seguro_Importe != null
        //                    ?   new SqlParameter("@seguro_Importe", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.seguro_Importe)
        //                    :   new SqlParameter("@seguro_Importe",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.desembolso_conCargoCliente != null
        //                    ?   new SqlParameter("@desembolso_conCargoCliente", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.desembolso_conCargoCliente)
        //                    :   new SqlParameter("@desembolso_conCargoCliente",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.desembolso_Importe != null
        //                    ?   new SqlParameter("@desembolso_Importe", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.desembolso_Importe)
        //                    :   new SqlParameter("@desembolso_Importe",  DBNull.Value),
        //                new SqlParameter("bruto", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.bruto),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.condiciones != null
        //                    ?   new SqlParameter("@condiciones", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.condiciones)
        //                    :   new SqlParameter("@condiciones",  DBNull.Value),
        //                _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.totalPorteAgencia != null
        //                    ?   new SqlParameter("@totalPorteAgencia", _mdl_VTA_AlbaranesCabecera_Anexos_1_AGrabar.totalPorteAgencia)
        //                    :   new SqlParameter("@totalPorteAgencia",  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();
        //    }
        //    catch (Control_Errores)
        //    {
        //        throw;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw new Control_Errores("", ex, nameof(VTA_AlbaranesCabecera_Anexos_2_Datos) + "/" + nameof(Insertar), true);
        //    }
        //    finally
        //    {
        //        obj_Exferia_Entities.Database.Connection.Close();
        //        obj_Exferia_Entities.Dispose();
        //    }

        //    return mdl_INTERNO_ValorDevuelto_Modelo;
        //}
        #endregion

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

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


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

                #region Delete
                string str_SQL_Delete = " DELETE FROM  " + nameof(VTA_AlbaranesCabecera_Anexos_2) +
                                        " WHERE " +
                                            nameof(VTA_AlbaranesCabecera_Anexos_2.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);

                // Devolver también el Objeto
                mdl_INTERNO_ValorDevuelto_Modelo.Id = _lng_id;
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(VTA_AlbaranesCabecera_Anexos_2_Datos) + "/" + nameof(Borrar), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion
    }
}
