IF EXISTS ( SELECT * 
            FROM   sysobjects 
            WHERE  id = object_id(N'dbo.CF_Produc_Precio_Lista') 
                   and type = 'FN')
BEGIN
    DROP FUNCTION dbo.CF_Produc_Precio_Lista
END
GO
 
CREATE FUNCTION [dbo].[CF_Produc_Precio_Lista](@pId_Lista_Precio SMALLINT, @pId_Producto VARCHAR(14), @Fecha DATETIME,  @Id_Usuario INT)
RETURNS DECIMAL(12,2)
AS
BEGIN
DECLARE @Precio									DECIMAL(12,2)
DECLARE @Flag_Existe_Lista_Precio				TINYINT
DECLARE @Flag_Existe_Producto					TINYINT
DECLARE @Flag_Existe_Producto_En_Lista_Precios	TINYINT   
Declare @Prioridad                              TINYINT
DECLARE @Id_lista_Precio_Padre				    INT
DECLARE @Coeficiente         					DECIMAL(12,5)
DECLARE @Id_Sucursal          			        INT
Declare @Filtro_Sucursal                        SMALLINT
/*=================================================================================*/

SET @Id_Sucursal = 0

If @Id_Usuario <> 0
   SET @Id_Sucursal = ISNULL((SELECT ISNULL(Id_Sucursal,0) from Seg_User S Where S.No = @Id_Usuario),0)


SET @Flag_Existe_Lista_Precio = ISNULL((SELECT 1 FROM Prod_Listas_Precios WHERE Id_Lista_Precio = @pId_Lista_Precio), 0)
IF(@pId_Lista_Precio = 0 OR @Flag_Existe_Lista_Precio = 0)
BEGIN
	SET @Precio = 0
	RETURN @Precio
END

SET @Flag_Existe_Producto = ISNULL((SELECT 1 FROM Productos WHERE Id_Producto = @pId_Producto), 0)
IF(@pId_Producto = '' OR @Flag_Existe_Producto = 0)
BEGIN
	SET @Precio = 0
	RETURN @Precio
END



SET @Flag_Existe_Producto_En_Lista_Precios = ISNULL((SELECT 1 FROM Prod_Listas_Precios_Items 
    WHERE Id_Lista_Precio = @pId_Lista_Precio AND Id_Producto = @pId_Producto), 0)
IF(@Flag_Existe_Producto_En_Lista_Precios = 0)
BEGIN
	SET @Precio = 0
	RETURN @Precio
END

SET @Id_lista_Precio_Padre = ISNULL((SELECT Id_lista_Precio_Padre FROM Prod_Listas_Precios WHERE Id_lista_Precio = @pId_Lista_Precio),@pId_Lista_Precio)

IF @Id_lista_Precio_Padre = 0
   SET @Id_lista_Precio_Padre = @pId_Lista_Precio

SET @Filtro_Sucursal =  ISNULL((SELECT COUNT(*) 
                    FROM Prod_Listas_Precios_Suc S, Prod_Listas_Precios_Asoc A, Prod_Listas_Precios L, Prod_Listas_Precios_Items I
                    WHERE A.Id_Lista_Precio_Padre = @Id_lista_Precio_Padre
					      AND A.Id_Lista_Precio = S.Id_Lista_Precio
						  AND S.Id_Lista_Precio = L.Id_Lista_Precio
						  AND I.Id_Lista_Precio = L.Id_Lista_Precio
						  and I.Id_Producto = @pId_Producto
						  and L.Fecha_Desde <= @Fecha and dateadd(dd,1,L.Fecha_Hasta) >= @Fecha ),0)


SET @Coeficiente = ISNULL((SELECT Coeficiente FROM Prod_Listas_Precios WHERE Id_lista_Precio = @pId_Lista_Precio),1)

IF @Coeficiente = 0
   SET @Coeficiente = 1

/*=================================================================================*/
--select Top 1 lp.id_lista_precio,I.id_Producto,pl.coeficiente,i.Precio, CAST(ROUND((i.Precio*pl.coeficiente) * (1+(T.Porc1/100)),0) AS DECIMAL(14,2)) as Precio_Lista
set @Precio = 0
IF @Filtro_Sucursal <> 0 AND @Id_Sucursal <> 0
   BEGIN
		select Top 1 @Precio = ISNULL(CAST(ROUND((i.Precio*@Coeficiente),0) AS DECIMAL(14,2)),0) 
				 from Prod_Listas_Precios PL, 
					  Prod_Listas_Precios_Asoc A,
					  Prod_Listas_Precios_Suc S,
					  Prod_Listas_Precios LP,
 					  Prod_Listas_Precios_Items I,
					  Productos p
				where PL.Id_lista_Precio = @pId_Lista_Precio
				and I.Id_Producto = @pId_Producto
				AND A.Id_lista_Precio_Padre = @Id_lista_Precio_Padre
			--	and PL.Id_lista_Precio_Padre = @Id_lista_Precio_Padre
				and A.Id_lista_Precio = LP.Id_lista_Precio
				and I.Id_lista_precio = LP.Id_lista_Precio
				and Lp.Fecha_Desde <= @Fecha and dateadd(dd,1,Lp.Fecha_Hasta) >= @Fecha 
				AND S.Id_Lista_Precio = A.Id_Lista_Precio
				AND S.Id_Sucursal = @Id_Sucursal
				and P.Id_Producto = I.Id_Producto
				order by A.Orden desc
    END
   ELSE
    BEGIN
		select Top 1 @Precio = ISNULL(CAST(ROUND((i.Precio*@Coeficiente),0) AS DECIMAL(14,2)),0) 
				 from Prod_Listas_Precios PL, 
					  Prod_Listas_Precios_Asoc A,
					  Prod_Listas_Precios LP,
 					  Prod_Listas_Precios_Items I,
					  Productos p
				where PL.Id_lista_Precio = @pId_Lista_Precio
				and I.Id_Producto = @pId_Producto
				AND A.Id_lista_Precio_Padre = @Id_lista_Precio_Padre
			--	and PL.Id_lista_Precio_Padre = @Id_lista_Precio_Padre
				and A.Id_lista_Precio = LP.Id_lista_Precio
				and I.Id_lista_precio = LP.Id_lista_Precio
				and Lp.Fecha_Desde <= @Fecha and dateadd(dd,1,Lp.Fecha_Hasta) >= @Fecha 
				and P.Id_Producto = I.Id_Producto
				order by A.Orden desc
	END

/*=================================================================================*/
IF @Precio = 0
	SELECT
	@Precio = Precio
	FROM Prod_Listas_Precios_Items 
	WHERE 
	Id_Lista_Precio = @pId_Lista_Precio 
	AND Id_Producto = @pId_Producto

/*=================================================================================*/

/*PARA CUALQUIER OTRA PARTICULARIDAD IMPLEMENTAR A PARTIR DE AQUI LA MODIFICACION DE LA VARIABLE @Precio*/

/*=================================================================================*/

RETURN ISNULL(@Precio, 0)
END

/*

 select dbo.CF_Produc_Precio_Lista(1,'69076','20221129',1273)


  select dbo.CF_Produc_Precio_Lista(1,'69076','20221129',259)

  EXEC SP_Stk_Depositos 1,1,0,'','','',1273

  select * from Prod_Listas_Precios_asoc
    select * from Prod_Listas_Precios_suc

 select * from seg_user order by lastname

*/