using Exferia_Aplicacion.Calculos.VentasCompras;
using Exferia_Aplicacion.General;
using Exferia_EntityFramework;
using Exferia_General;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static Exferia_Aplicacion.General.Enumerados;

namespace Exferia_Ventas._1_Datos
{
    public class VTA_AlbaranesFacturasLineas_TarifasPromociones_Datos
    {
        #region Obtener

        private List<INTERNO_TarifaPromocion_VentasCompras_Modelo> g_lst_INTERNO_TarifaPromocion_VentasCompras_Modelo = null;

        //Listado de modelos Relacionados
        private List<INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo> g_lst_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo = null;

        //Hilos
        private static int g_int_TotalHilos_Modelo_Listado = 1;
        private bool[] g_bol_Hilos_Terminados_Modelo_Listado = new bool[g_int_TotalHilos_Modelo_Listado];

        public List<INTERNO_TarifaPromocion_VentasCompras_Modelo> Obtener_Listado(long _lng_idAlbaranFacturaLinea)
        {
            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_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Id) + " = convert(bigint,-1) ," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Codigo) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.codigo) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descripcion) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.descripcion) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_1) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_1) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_2) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_2) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_3) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_3) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_4) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_4) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Descuento_5) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_5) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Incremento) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.incremento) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_NumeroRedondeo) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.numeroRedondeo) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_ClienteProveedor) + "=" +  Variables.G_INT_TIPOCLIENTEPROVEEDOR_CLIENTE_CODIGO + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AportacionProveedor_Porcentaje) + "=null," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AportacionProveedor_Tipo) + "=null," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Tipo) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.tipo) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_PrecioFijoDinamico) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.precioFijoDinamico) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_Precio) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.precio) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_DescuentoMoneda) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.descuentoMoneda) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Cantidad_A) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cantidad_A) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Cantidad_B) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cantidad_B) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Porcentaje) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Porcentaje) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Cancelado) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cancelado) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.Id) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.id) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.Orden) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.orden) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.LibreObligatorio) + "=null," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.NoAplicarTarifa) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.noAplicarTarifa) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.Mensaje_Error) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.mensaje_Error) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.Modificable) + "=convert(bit,1)," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.Desactivado) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.desactivado) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.AplicadaEnLinea) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.aplicadaEnLinea) + "," +
                            //Nomenclatura
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_NomenclaturaPrecio_Id) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.idNomenclaturaPrecio) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_NomenclaturaPrecio_Codigo) + "=" + nameof(MAE_NomenclaturasPrecios) + "." + nameof(MAE_NomenclaturasPrecios.codigo) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_NomenclaturaPrecio_Descripcion) + "=" + nameof(MAE_NomenclaturasPrecios) + "." + nameof(MAE_NomenclaturasPrecios.descripcion) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_NomenclaturaPrecio_FechaBorrado) + "=" + nameof(MAE_NomenclaturasPrecios) + "." + nameof(MAE_NomenclaturasPrecios.fechaBorrado) + "," +
                            //Articulo
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Articulo_id) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_idArticulo) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Articulo_Codigo) + "=" + nameof(MAE_Articulos) + "." + nameof(MAE_Articulos.codigo) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Articulo_Descripcion) + "=" + nameof(MAE_Articulos) + "." + nameof(MAE_Articulos.descripcion) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Articulo_FechaBorrado) + "=" + nameof(MAE_Articulos) + "." + nameof(MAE_Articulos.fechaBorrado) + "," +
                            //Embalaje
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Embalaje_id) + "=" + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_idEmbalaje) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Embalaje_Codigo) + "=" + nameof(MAE_Embalajes) + "." + nameof(MAE_Embalajes.codigo) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Embalaje_Descripcion) + "=" + nameof(MAE_Embalajes) + "." + nameof(MAE_Embalajes.descripcion) + "," +
                            nameof(INTERNO_TarifaPromocion_VentasCompras_Modelo.TarifaPromocion_AB_Embalaje_FechaBorrado) + "=" + nameof(MAE_Embalajes) + "." + nameof(MAE_Embalajes.fechaBorrado) + 
                        " FROM " + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) +
                        " LEFT JOIN " + nameof(MAE_NomenclaturasPrecios) + " ON " + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.idNomenclaturaPrecio) + "=" + nameof(MAE_NomenclaturasPrecios) + "." +nameof(MAE_NomenclaturasPrecios.id) +
                        " LEFT JOIN " + nameof(MAE_Articulos) + " ON " + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_idArticulo) + "=" + nameof(MAE_Articulos) + "." + nameof(MAE_Articulos.id) +
                        " LEFT JOIN " + nameof(MAE_Embalajes) + " ON " + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_idEmbalaje) + "=" + nameof(MAE_Embalajes) + "." + nameof(MAE_Embalajes.id) +
                        " WHERE " +
                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) + "." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.idAlbaranFacturaLinea) + " =@idAlbaranFacturaLinea ";

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

                //Rellenar el Modelo
                g_lst_INTERNO_TarifaPromocion_VentasCompras_Modelo = obj_Exferia_Entities.Database.SqlQuery<INTERNO_TarifaPromocion_VentasCompras_Modelo>(str_SQL, arr_Parametros).ToList();

                #region Rellenar tablas Relacionadas
                if (g_lst_INTERNO_TarifaPromocion_VentasCompras_Modelo != null && g_lst_INTERNO_TarifaPromocion_VentasCompras_Modelo.Count > 0)
                {
                    
                    #region PRIMERO BUSCO LOS DATOS DE LAS TABLAS RELACIONADAS
                    //reiniciar Valores de los hilos
                    for (int int_Contador = 0; int_Contador < g_int_TotalHilos_Modelo_Listado; int_Contador++)
                    {
                        g_bol_Hilos_Terminados_Modelo_Listado[int_Contador] = false;
                    }

                    //VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes #############################################
                    ThreadStart obj_ThreadStart_CONDICIONANTES = new ThreadStart(Obtener_Condicionantes_Modelo_Listado);
                    Thread obj_Thread_CONDICIONANTES = new Thread(obj_ThreadStart_CONDICIONANTES);
                    obj_Thread_CONDICIONANTES.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_Modelo_Listado)
                        {
                            if (bol_Termino_Hilo == false)
                            {
                                bol_Termino = false;
                                break;
                            }
                        }

                        Thread.Sleep(10);
                    }
                    //.................................................................................

                    #endregion

                    #region DESPUES SE LO VOY ASIGNANDO A LOS REGISTRO UNO A UNO
                    foreach (INTERNO_TarifaPromocion_VentasCompras_Modelo mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo in g_lst_INTERNO_TarifaPromocion_VentasCompras_Modelo)
                    {
                        //VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes #############################################
                        if (g_lst_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo != null &&
                            g_lst_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Count > 0)
                        {
                            mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Condicionantes = g_lst_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Where(m => m.Id_Auxiliar == mdl_INTERNO_TarifaPromocion_VentasCompras_Modelo.Id).ToList();
                        }
                    }
                    #endregion

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

            return g_lst_INTERNO_TarifaPromocion_VentasCompras_Modelo;
        }
        #region TablasRelacionadas
        private void Obtener_Condicionantes_Modelo_Listado()
        {
            try
            {
                VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes_Datos obj_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes_Datos = new VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes_Datos();
                g_lst_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo = obj_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes_Datos.Obtener_Listado(g_lst_INTERNO_TarifaPromocion_VentasCompras_Modelo.Select(x => x.Id).ToList());
            }
            catch (Control_Errores)
            { }
            finally
            {
                g_bol_Hilos_Terminados_Modelo_Listado[0] = true;
            }
        }
        #endregion
        #endregion

        #region Grabar
        public INTERNO_ValorDevuelto_Modelo Insertar(VTA_AlbaranesFacturasLineas_TarifasPromociones _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones)
        {
            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();

                VTA_AlbaranesFacturasLineas_TarifasPromociones mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_DatosViejos = new VTA_AlbaranesFacturasLineas_TarifasPromociones();

                //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_AlbaranesFacturasLineas_TarifasPromociones) +
                                            " (" +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.idAlbaranFacturaLinea) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.codigo) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.descripcion) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_1) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_2) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_3) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_4) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_5) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.incremento) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.numeroRedondeo) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.tipo) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.precioFijoDinamico) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.precio) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.idNomenclaturaPrecio) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.descuentoMoneda) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cantidad_A) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cantidad_B) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Porcentaje) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_idArticulo) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_idEmbalaje) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cancelado) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.orden) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.mensaje_Error) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.desactivado) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.noAplicarTarifa) + "," +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.aplicadaEnLinea) +
                                            " ) " +
                                            " OUTPUT INSERTED." + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.id) +
                                            " VALUES " +
                                            " ( " +
                                                "@idAlbaranFacturaLinea," +
                                                "@codigo," +
                                                "@descripcion," +
                                                "@descuento_1," +
                                                "@descuento_2," +
                                                "@descuento_3," +
                                                "@descuento_4," +
                                                "@descuento_5," +
                                                "@incremento," +
                                                "@numeroRedondeo," +
                                                "@tipo," +
                                                "@precioFijoDinamico," +
                                                "@precio," +
                                                "@idNomenclaturaPrecio," +
                                                "@descuentoMoneda," +
                                                "@AB_Cantidad_A," +
                                                "@AB_Cantidad_B," +
                                                "@AB_Porcentaje," +
                                                "@AB_idArticulo," +
                                                "@AB_idEmbalaje," +
                                                "@AB_Cancelado," +
                                                "@orden," +
                                                "@mensaje_Error," +
                                                "@desactivado," +
                                                "@noAplicarTarifa," +
                                                "@aplicadaEnLinea" +
                                            " ) ";
                //Parametros
                object[] arr_Parametros_Insert = new object[]
                {
                        new SqlParameter("@idAlbaranFacturaLinea", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.idAlbaranFacturaLinea),
                        new SqlParameter("@codigo", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.codigo),
                        new SqlParameter("@descripcion", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descripcion),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_1 != null
                            ?   new SqlParameter("@descuento_1", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_1.Value)
                            :   new SqlParameter("@descuento_1",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_2 != null
                            ?   new SqlParameter("@descuento_2", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_2.Value)
                            :   new SqlParameter("@descuento_2",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_3 != null
                            ?   new SqlParameter("@descuento_3", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_3.Value)
                            :   new SqlParameter("@descuento_3",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_4 != null
                            ?   new SqlParameter("@descuento_4", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_4.Value)
                            :   new SqlParameter("@descuento_4",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_5 != null
                            ?   new SqlParameter("@descuento_5", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuento_5.Value)
                            :   new SqlParameter("@descuento_5",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.incremento != null
                            ?   new SqlParameter("@incremento", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.incremento.Value)
                            :   new SqlParameter("@incremento",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.numeroRedondeo != null
                            ?   new SqlParameter("@numeroRedondeo", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.numeroRedondeo.Value)
                            :   new SqlParameter("@numeroRedondeo",  DBNull.Value),
                        new SqlParameter("@tipo", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.tipo),
                        new SqlParameter("@precioFijoDinamico", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.precioFijoDinamico),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.precio != null
                            ?   new SqlParameter("@precio", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.precio.Value)
                            :   new SqlParameter("@precio",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.idNomenclaturaPrecio != null
                            ?   new SqlParameter("@idNomenclaturaPrecio", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.idNomenclaturaPrecio.Value)
                            :   new SqlParameter("@idNomenclaturaPrecio",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuentoMoneda != null
                            ?   new SqlParameter("@descuentoMoneda", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.descuentoMoneda.Value)
                            :   new SqlParameter("@descuentoMoneda",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cantidad_A != null
                            ?   new SqlParameter("@AB_Cantidad_A", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cantidad_A.Value)
                            :   new SqlParameter("@AB_Cantidad_A",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cantidad_B != null
                            ?   new SqlParameter("@AB_Cantidad_B", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cantidad_B.Value)
                            :   new SqlParameter("@AB_Cantidad_B",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Porcentaje != null
                            ?   new SqlParameter("@AB_Porcentaje", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Porcentaje.Value)
                            :   new SqlParameter("@AB_Porcentaje",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_idArticulo != null
                            ?   new SqlParameter("@AB_idArticulo", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_idArticulo.Value)
                            :   new SqlParameter("@AB_idArticulo",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_idEmbalaje != null
                            ?   new SqlParameter("@AB_idEmbalaje", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_idEmbalaje.Value)
                            :   new SqlParameter("@AB_idEmbalaje",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cancelado != null
                            ?   new SqlParameter("@AB_Cancelado", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cancelado.Value)
                            :   new SqlParameter("@AB_Cancelado",  DBNull.Value),
                        new SqlParameter("@orden", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.orden),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.mensaje_Error != null
                            ?   new SqlParameter("@mensaje_Error", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.mensaje_Error)
                            :   new SqlParameter("@mensaje_Error",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.desactivado != null
                            ?   new SqlParameter("@desactivado", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.desactivado.Value)
                            :   new SqlParameter("@desactivado",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.noAplicarTarifa != null
                            ?   new SqlParameter("@noAplicarTarifa", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.noAplicarTarifa.Value)
                            :   new SqlParameter("@noAplicarTarifa",  DBNull.Value),
                        _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.aplicadaEnLinea != null
                            ?   new SqlParameter("@aplicadaEnLinea", _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.aplicadaEnLinea.Value)
                            :   new SqlParameter("@aplicadaEnLinea",  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();

                #region Condicionantes
                if (_mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes!=null &&
                    _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.Count>0)
                {
                    VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes_Datos obj_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes_Datos = new VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes_Datos();

                    foreach (VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes in _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones.VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes)
                    {
                        //Añadir el idAlbaranFacturaLineaTarifaPromocion
                        mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes.idAlbaranFacturaLineaTarifaPromocion = mdl_INTERNO_ValorDevuelto_Modelo.Id;

                        //Insertar
                        obj_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes_Datos.Insertar(mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_Condicionantes);
                    }
                }
                #endregion

                // Grabar un registro de trazabilidad con los datos de la transaccion realizada.
                Datos_Generales.USR_Trazabilidad_Grabar(typeof(VTA_AlbaranesFacturasLineas_TarifasPromociones), mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones_DatosViejos, _mdl_VTA_AlbaranesFacturasLineas_TarifasPromociones, mdl_INTERNO_ValorDevuelto_Modelo.TipoAccion, obj_Exferia_Entities);

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

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }

        public INTERNO_ValorDevuelto_Modelo Desactivar(List<long> _lst_idAlbaranFacturaLinea)
        {
            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;

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

                    string str_Filtro_AlbaranFacturaLinea = Funciones.Formar_ContenidoIN_ParaConsultaWhere(nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones),
                                                                                                 nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.idAlbaranFacturaLinea),
                                                                                                 G_ENUM_FORMARCONTENIDOIN_CONDICIONANTES.AND_FIN,
                                                                                                 _lst_idAlbaranFacturaLinea);

                    string str_SQL = " UPDATE " + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) +
                                        " SET " + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cancelado) + "= 1 " +
                                        " WHERE " + str_Filtro_AlbaranFacturaLinea +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cantidad_A) + " is not null AND " +
                                                    nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.AB_Cantidad_A) + " <> 0 ";

                    //Ejecutar
                    obj_Exferia_Entities.Database.ExecuteSqlCommand(str_SQL, new object[] { });
                }
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones_Datos) + "/" + nameof(Desactivar), 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_idAlbaranFacturaLinea)
        {
            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;

                string str_SQL = " DELETE FROM " + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones) +
                                    " WHERE " + nameof(VTA_AlbaranesFacturasLineas_TarifasPromociones.idAlbaranFacturaLinea) + "=" + _lng_idAlbaranFacturaLinea;

                obj_Exferia_Entities.Database.ExecuteSqlCommand(str_SQL);

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

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion
    }
}
