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.Tasks;
using static Exferia_Aplicacion.General.Enumerados;

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

        public List<INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo> Obtener_Listado(List<long> _lst_idPedidoLineaTarifaPromocion)
        {
            Exferia_Entities obj_Exferia_Entities = null;

            List<INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo> lst_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo = null;

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

                if (_lst_idPedidoLineaTarifaPromocion != null && _lst_idPedidoLineaTarifaPromocion.Count > 0)
                {
                    string str_Filtro_PedidoLineaTarifaPromocion = Funciones.Formar_ContenidoIN_ParaConsultaWhere(nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes),
                                                                                                                         nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.idPedidoLineaTarifaPromocion),
                                                                                                                         G_ENUM_FORMARCONTENIDOIN_CONDICIONANTES.NADA,
                                                                                                                         _lst_idPedidoLineaTarifaPromocion);

                    string str_SQL =
                    " SELECT " +
                            nameof(INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Id_Auxiliar) + "=" + nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.idPedidoLineaTarifaPromocion) + "," +
                            nameof(INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Desde_Operador) + "=" + nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Desde_Operador) + "," +
                            nameof(INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Desde_Valor) + "=" + nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Desde_Valor) + "," +
                            nameof(INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Hasta_Operador) + "=" + nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Hasta_Operador) + "," +
                            nameof(INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Cantidad_Hasta_Valor) + "=" + nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Hasta_Valor) + "," +
                            nameof(INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Y_O) + "=" + nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.condicionante_Y_O) + "," +
                            nameof(INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Importe_Desde_Operador) + "=" + nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Desde_Operador) + "," +
                            nameof(INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Importe_Desde_Valor) + "=" + nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Desde_Valor) + "," +
                            nameof(INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Importe_Hasta_Operador) + "=" + nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Hasta_Operador) + "," +
                            nameof(INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo.Condicionante_Importe_Hasta_Valor) + "=" + nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Hasta_Valor) +
                    " FROM " + nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes) +
                    " WHERE " +
                           str_Filtro_PedidoLineaTarifaPromocion;

                    //Ejecutar
                    lst_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo = obj_Exferia_Entities.Database.SqlQuery<INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo>(str_SQL, new object[] { }).ToList();
                }
            }
            catch (Control_Errores)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new Control_Errores("", ex, nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes_Datos) + "/" + nameof(Obtener_Listado), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }

            return lst_INTERNO_TarifaPromocion_CompraVenta_Condicionantes_Modelo;
        }

        #endregion

        #region Insertar
        public INTERNO_ValorDevuelto_Modelo Insertar(VTA_PedidosLineas_TarifasPromociones_Condicionantes _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes)
        {
            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;

                VTA_PedidosLineas_TarifasPromociones_Condicionantes mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes_DatosViejos = new VTA_PedidosLineas_TarifasPromociones_Condicionantes();

                //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_PedidosLineas_TarifasPromociones_Condicionantes) +
                                            " (" +
                                                    nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.idPedidoLineaTarifaPromocion) + "," +
                                                    nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Desde_Operador) + "," +
                                                    nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Desde_Valor) + "," +
                                                    nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Hasta_Operador) + "," +
                                                    nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Hasta_Valor) + "," +
                                                    nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.condicionante_Y_O) + "," +
                                                    nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Desde_Operador) + "," +
                                                    nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Desde_Valor) + "," +
                                                    nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Hasta_Operador) + "," +
                                                    nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Hasta_Valor) +
                                            " ) " +
                                            " OUTPUT INSERTED." + nameof(VTA_PedidosLineas_TarifasPromociones_Condicionantes.id) +
                                            " VALUES " +
                                            " ( " +
                                                "@idPedidoLineaTarifaPromocion," +
                                                "@cantidad_Desde_Operador," +
                                                "@cantidad_Desde_Valor," +
                                                "@cantidad_Hasta_Operador," +
                                                "@cantidad_Hasta_Valor," +
                                                "@condicionante_Y_O," +
                                                "@importe_Desde_Operador," +
                                                "@importe_Desde_Valor," +
                                                "@importe_Hasta_Operador," +
                                                "@importe_Hasta_Valor" +
                                            " ) ";
                //Parametros
                object[] arr_Parametros_Insert = new object[]
                {
                        new SqlParameter("@idPedidoLineaTarifaPromocion", _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.idPedidoLineaTarifaPromocion),
                        _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Desde_Operador != null
                            ?   new SqlParameter("@cantidad_Desde_Operador", _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Desde_Operador)
                            :   new SqlParameter("@cantidad_Desde_Operador",  DBNull.Value),
                         _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Desde_Valor != null
                            ?   new SqlParameter("@cantidad_Desde_Valor", _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Desde_Valor.Value)
                            :   new SqlParameter("@cantidad_Desde_Valor",  DBNull.Value),
                        _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Hasta_Operador != null
                            ?   new SqlParameter("@cantidad_Hasta_Operador", _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Hasta_Operador)
                            :   new SqlParameter("@cantidad_Hasta_Operador",  DBNull.Value),
                        _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Hasta_Valor != null
                            ?   new SqlParameter("@cantidad_Hasta_Valor", _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.cantidad_Hasta_Valor.Value)
                            :   new SqlParameter("@cantidad_Hasta_Valor",  DBNull.Value),
                        _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.condicionante_Y_O != null
                            ?   new SqlParameter("@condicionante_Y_O", _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.condicionante_Y_O.Value)
                            :   new SqlParameter("@condicionante_Y_O",  DBNull.Value),
                        _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Desde_Operador != null
                            ?   new SqlParameter("@importe_Desde_Operador", _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Desde_Operador)
                            :   new SqlParameter("@importe_Desde_Operador",  DBNull.Value),
                        _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Desde_Valor != null
                            ?   new SqlParameter("@importe_Desde_Valor", _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Desde_Valor.Value)
                            :   new SqlParameter("@importe_Desde_Valor",  DBNull.Value),
                        _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Hasta_Operador != null
                            ?   new SqlParameter("@importe_Hasta_Operador", _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Hasta_Operador)
                            :   new SqlParameter("@importe_Hasta_Operador",  DBNull.Value),
                        _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Hasta_Valor != null
                            ?   new SqlParameter("@importe_Hasta_Valor", _mdl_VTA_PedidosLineas_TarifasPromociones_Condicionantes.importe_Hasta_Valor.Value)
                            :   new SqlParameter("@importe_Hasta_Valor",  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_PedidosLineas_TarifasPromociones_Condicionantes_Datos) + "/" + nameof(Insertar), true);
            }
            finally
            {
                obj_Exferia_Entities.Database.Connection.Close();
                obj_Exferia_Entities.Dispose();
            }

            return mdl_INTERNO_ValorDevuelto_Modelo;
        }
        #endregion

    }
}
