/****** Object:  UserDefinedFunction [dbo].[UFD_EST_PROD_COMIS_QTDE_VALORES]    Script Date: 10/09/2012 14:18:21 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[UFD_EST_PROD_COMIS_QTDE_VALORES]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[UFD_EST_PROD_COMIS_QTDE_VALORES]
GO  
--SELECT * FROM UFD_EST_PROD_COMIS_QTDE_VALORES (1,2,23014,1,0,5)
CREATE FUNCTION [dbo].[UFD_EST_PROD_COMIS_QTDE_VALORES]  (@CD_EMP  INT,      
															@CD_FILIAL INT,  
															@CD_PROD INT,      
															@CD_FUN  INT,  
															@TP_VALOR INT,
															@QTDE_PROD MONEY)  
            
 RETURNS @RS_TAB_COMIS TABLE (CD_TBL_COMIS  INT,  
								FLAG_DESC_OUTR_TBL INT,  
								PERC_COMIS	MONEY,   
								TP_NIVEL	INT,  
								CD_PROD		INT,  
								CD_FILIAL   INT,  
								CD_EMP		INT)  
  
WITH ENCRYPTION AS                
BEGIN                
          
DECLARE @RS_TAB_ATIVA AS TABLE (CD_EMP INT, 
								 CD_TBL_COMIS INT
								 UNIQUE CLUSTERED (CD_EMP, CD_TBL_COMIS) ) 

DECLARE @RS_DADOS_TBL_COMIS AS TABLE (CD_TBL_COMIS		INT,  
										TP_VALOR		INT,  
										FLAG_DESC_OUTR_TBL INT,  
										PERC_COMIS		MONEY,   
										TP_NIVEL		INT)  

DECLARE @CD_GRP_ECON INT
SET @CD_GRP_ECON = (SELECT TOP 1 CD_GRP_ECON
					FROM PRC_GRP_ECON_PRC_FILIAL
					WHERE
						CD_EMP =@CD_EMP
						AND CD_FILIAL =@CD_FILIAL)

 -------------------------------------------------------------------------------------------------------------------------------      
 --DECLARANDO TABELA DE ARVORE MERCADOLOGICA DO PRODUTO      
 -------------------------------------------------------------------------------------------------------------------------------      
 DECLARE @EST_PROD_ARV_MERC TABLE (  CD_EMP     INT,      
          CD_PROD   INT,      
          CD_ARV_MERC_CATEG INT,      
          CD_ARV_MERC_SEG INT,      
          CD_ARV_MERC_PAPEL INT,      
          CD_ARV_MERC_MIX INT,      
          CD_ARV_MERC_CONSUMO INT,      
          CD_ARV_MERC_LINHA INT,      
          CD_ARV_MERC_MTZ_BCG INT,      
          CD_MC   INT,      
          CD_ARV_MERC_FAMILIA INT,              
          CD_APRES   INT,          
          CD_ARV_MERC_EQUI INT,      
          CD_GRP_EXPO  INT,      
          CD_FABRIC   INT)      
      
      
 -------------------------------------------------------------------------------------------------------------------------------      
 --BUSCANDO ARVORE MERC. DO PRODUTO      
 -------------------------------------------------------------------------------------------------------------------------------       
	INSERT INTO @EST_PROD_ARV_MERC      
	SELECT       
		ARV.CD_EMP     ,      
		ARV.CD_PROD     ,      
		ARV.CD_ARV_MERC_CATEG  ,      
		ARV.CD_ARV_MERC_SEG   ,      
		ARV.CD_ARV_MERC_PAPEL  ,      
		ARV.CD_ARV_MERC_MIX   ,      
		ARV.CD_ARV_MERC_CONSUMO  ,      
		ARV.CD_ARV_MERC_LINHA  ,      
		ARV.CD_ARV_MERC_MTZ_BCG  ,      
		ARV.CD_MC     ,      
		ARV.CD_ARV_MERC_FAMILIA  ,              
		ARV.CD_APRES    ,          
		ARV.CD_ARV_MERC_EQUI  ,      
		ARV.CD_GRP_EXPO    ,      
		P.CD_FABRIC       
	FROM 
		EST_PROD_EST_ARV_MERCADOLOGICA ARV 
		INNER JOIN EST_PROD P ON      
		ARV.CD_EMP  = P.CD_EMP      
		AND ARV.CD_PROD = P.CD_PROD      
	WHERE   
		P.CD_EMP = @CD_EMP       
		AND P.CD_PROD = @CD_PROD;
           
 -------------------------------------------------------------------------------      
 --CONSUTA TABELAS DE COMISSÃO PELO TIPO(%/R$) DE COMISSÃO  
 -------------------------------------------------------------------------------      
	INSERT INTO @RS_TAB_ATIVA      
	SELECT  DISTINCT 
		COMIS.CD_EMP,      
		COMIS.CD_TBL_COMIS  
	FROM 
		FP_CARGO_EST_PROD_TBL_COMIS COMIS   
		INNER JOIN EST_PROD_TBL_COMIS A ON  
		COMIS.CD_EMP = A.CD_EMP AND  
		COMIS.CD_TBL_COMIS = A.CD_TBL_COMIS  
		INNER JOIN FP_FUNC FUN ON  
		COMIS.CD_EMP = FUN.CD_EMP AND  
		COMIS.CD_CARGO = FUN.CD_CARGO  
	WHERE 
		A.CD_EMP = @CD_EMP 
		AND A.STS_TBL = 0 
		AND FUN.CD_FUN = @CD_FUN 
		AND A.TP_VALOR = @TP_VALOR  
		AND COMIS.CD_GRP_ECON=@CD_GRP_ECON
                     
 -------------------------------------------------------------------------------------------------------------------------------      
 --Consultando as tbls de COMISSÃO no NÍVEL 1 - PRODUTOS      
 -------------------------------------------------------------------------------------------------------------------------------      
	INSERT INTO @RS_DADOS_TBL_COMIS       
	SELECT TOP 1      
		A.CD_TBL_COMIS AS CD_TBL_COMIS,      
		A.TP_VALOR AS TP_VALOR,      
		A.FLAG_DESC_OUTR_TBL AS FLAG_DESC_OUTR_TBL,      
		B.PERC_COMIS AS PERC_COMIS,  
		1 AS TP_NIVEL      
	FROM 
		EST_PROD_TBL_COMIS A      
		INNER JOIN EST_PROD_TBL_COMIS_EST_PROD_QTDE B ON      
		A.CD_EMP = B.CD_EMP AND      
		A.CD_TBL_COMIS = B.CD_TBL_COMIS      
		INNER JOIN EST_PROD_TBL_COMIS_PRC_FILIAL FIL ON      
		B.CD_EMP = FIL.CD_EMP AND      
		B.CD_TBL_COMIS = FIL.CD_TBL_COMIS      
		INNER JOIN @RS_TAB_ATIVA RS_TAB_ATIVA ON      
		B.CD_EMP = RS_TAB_ATIVA.CD_EMP AND      
		B.CD_TBL_COMIS = RS_TAB_ATIVA.CD_TBL_COMIS       
		INNER JOIN @EST_PROD_ARV_MERC ARV ON      
		B.CD_EMP = ARV.CD_EMP AND      
		B.CD_PROD = ARV.CD_PROD             
	WHERE       
		FIL.CD_FILIAL = @CD_FILIAL      
		AND B.QTDE_PROD <= @QTDE_PROD
		AND NOT EXISTS (SELECT 
						T.CD_TBL_COMIS 
					 FROM 
						@RS_DADOS_TBL_COMIS T 
					 WHERE 
						T.CD_TBL_COMIS = A.CD_TBL_COMIS)      
   ORDER BY 
		A.DT_CAD DESC, 
		B.PERC_COMIS DESC  
      
 -------------------------------------------------------------------------------------------------------------------------------      
 --Consultando as tbls de COMISSÃO no NÍVEL 2 - FAMÍLIAS      
 -------------------------------------------------------------------------------------------------------------------------------      
	--INSERT INTO @RS_DADOS_TBL_COMIS       
	--SELECT TOP 1      
	--	A.CD_TBL_COMIS AS CD_TBL_COMIS,      
	--	A.TP_VALOR AS TP_VALOR,      
	--	A.FLAG_DESC_OUTR_TBL AS FLAG_DESC_OUTR_TBL,      
	--	B.PERC_COMIS AS PERC_COMIS,     
	--	2 AS TP_NIVEL      
	--FROM 
	--	EST_PROD_TBL_COMIS A      
	--	INNER JOIN EST_PROD_TBL_COMIS_EST_ARV_MERC_FAMILIA B ON      
	--	A.CD_EMP = B.CD_EMP AND      
	--	A.CD_TBL_COMIS = B.CD_TBL_COMIS      
	--	INNER JOIN EST_PROD_TBL_COMIS_PRC_FILIAL FIL ON      
	--	B.CD_EMP = FIL.CD_EMP AND      
	--	B.CD_TBL_COMIS = FIL.CD_TBL_COMIS      
	--	INNER JOIN @EST_PROD_ARV_MERC ARV ON      
	--	B.CD_EMP = ARV.CD_EMP AND      
	--	B.CD_ARV_MERC_FAMILIA = ARV.CD_ARV_MERC_FAMILIA      
	--	INNER JOIN @RS_TAB_ATIVA RS_TAB_ATIVA ON      
	--	A.CD_EMP = RS_TAB_ATIVA.CD_EMP AND      
	--	B.CD_TBL_COMIS = RS_TAB_ATIVA.CD_TBL_COMIS          
	--WHERE       
	--	FIL.CD_FILIAL = @CD_FILIAL AND         
	--	NOT EXISTS (SELECT 
	--					T.CD_TBL_COMIS 
	--				FROM 
	--					@RS_DADOS_TBL_COMIS T 
	--				WHERE 
	--					T.CD_TBL_COMIS = A.CD_TBL_COMIS)      
	--	ORDER BY 
	--		A.DT_CAD DESC, 
	--		B.PERC_COMIS DESC     
          
 -------------------------------------------------------------------------------------------------------------------------------          
 --Consultando as tbls de COMISSÃO no NÍVEL 3 - MARCAS      
 -------------------------------------------------------------------------------------------------------------------------------      
	--INSERT INTO @RS_DADOS_TBL_COMIS       
	--SELECT TOP 1      
	--	A.CD_TBL_COMIS AS CD_TBL_COMIS,      
	--	A.TP_VALOR AS TP_VALOR,      
	--	A.FLAG_DESC_OUTR_TBL AS FLAG_DESC_OUTR_TBL,      
	--	B.PERC_COMIS AS PERC_COMIS,      
	--	3 AS TP_NIVEL      
	--FROM 
	--	EST_PROD_TBL_COMIS A     
	--	INNER JOIN EST_PROD_TBL_COMIS_EST_MC B ON      
	--	A.CD_EMP = B.CD_EMP AND      
	--	A.CD_TBL_COMIS = B.CD_TBL_COMIS      
	--	INNER JOIN EST_PROD_TBL_COMIS_PRC_FILIAL FIL ON      
	--	B.CD_EMP = FIL.CD_EMP AND      
	--	B.CD_TBL_COMIS = FIL.CD_TBL_COMIS      
	--	INNER JOIN @EST_PROD_ARV_MERC ARV ON      
	--	B.CD_EMP = ARV.CD_EMP AND      
	--	B.CD_MC = ARV.CD_MC      
	--	INNER JOIN @RS_TAB_ATIVA RS_TAB_ATIVA ON      
	--	A.CD_EMP = RS_TAB_ATIVA.CD_EMP AND      
	--	B.CD_TBL_COMIS = RS_TAB_ATIVA.CD_TBL_COMIS          
	--WHERE       
	--	FIL.CD_FILIAL = @CD_FILIAL 
	--	AND NOT EXISTS (SELECT T.CD_TBL_COMIS 
	--						FROM @RS_DADOS_TBL_COMIS T 
	--						WHERE T.CD_TBL_COMIS = A.CD_TBL_COMIS)      
	--ORDER BY 
	--	A.DT_CAD DESC, 
	--	B.PERC_COMIS DESC;
      
 -------------------------------------------------------------------------------------------------------------------------------      
 --Consultando as tbls de COMISSÃO no NÍVEL 4 - FABRICANTES      
 -------------------------------------------------------------------------------------------------------------------------------      
	--INSERT INTO @RS_DADOS_TBL_COMIS       
	--SELECT TOP 1      
	--	A.CD_TBL_COMIS AS CD_TBL_COMIS,      
	--	A.TP_VALOR AS TP_VALOR,      
	--	A.FLAG_DESC_OUTR_TBL AS FLAG_DESC_OUTR_TBL,      
	--	B.PERC_COMIS AS PERC_COMIS,     
	--	4 AS TP_NIVEL      
	--FROM 
	--	EST_PROD_TBL_COMIS A      
	--	INNER JOIN EST_PROD_TBL_COMIS_EST_PROD_QTDE_FABRIC B ON      
	--	A.CD_EMP = B.CD_EMP AND      
	--	A.CD_TBL_COMIS = B.CD_TBL_COMIS      
	--	INNER JOIN EST_PROD_TBL_COMIS_PRC_FILIAL FIL ON      
	--	B.CD_EMP = FIL.CD_EMP AND      
	--	B.CD_TBL_COMIS = FIL.CD_TBL_COMIS      
	--	INNER JOIN @EST_PROD_ARV_MERC ARV ON      
	--	B.CD_EMP = ARV.CD_EMP AND      
	--	B.CD_FABRIC = ARV.CD_FABRIC       
	--	INNER JOIN @RS_TAB_ATIVA RS_TAB_ATIVA ON      
	--	B.CD_EMP = RS_TAB_ATIVA.CD_EMP AND      
	--	B.CD_TBL_COMIS = RS_TAB_ATIVA.CD_TBL_COMIS          
	--WHERE       
	--	FIL.CD_FILIAL = @CD_FILIAL 
	--	AND NOT EXISTS (SELECT 
	--						T.CD_TBL_COMIS 
	--					FROM 
	--						@RS_DADOS_TBL_COMIS T 
	--					WHERE T.CD_TBL_COMIS = A.CD_TBL_COMIS)      
	--ORDER BY 
	--	A.DT_CAD DESC, 
	--	B.PERC_COMIS DESC;

-------------------------------------------------------------------------------------------------------------------------------      
 --Consultando as tbls de COMISSÃO no NÍVEL 5 - CATEGORIAS      
 -------------------------------------------------------------------------------------------------------------------------------      
	--INSERT INTO @RS_DADOS_TBL_COMIS       
	--SELECT TOP 1      
	--	A.CD_TBL_COMIS AS CD_TBL_COMIS,      
	--	A.TP_VALOR AS TP_VALOR,      
	--	A.FLAG_DESC_OUTR_TBL AS FLAG_DESC_OUTR_TBL,      
	--	B.PERC_COMIS AS PERC_COMIS,      
	--	6 AS TP_NIVEL      
	--FROM 
	--	EST_PROD_TBL_COMIS A      
	--	INNER JOIN EST_PROD_TBL_COMIS_EST_ARV_MERC_CATEGORIA B ON      
	--	A.CD_EMP = B.CD_EMP AND      
	--	A.CD_TBL_COMIS = B.CD_TBL_COMIS      
	--	INNER JOIN EST_PROD_TBL_COMIS_PRC_FILIAL FIL ON      
	--	B.CD_EMP = FIL.CD_EMP AND      
	--	B.CD_TBL_COMIS = FIL.CD_TBL_COMIS      
	--	INNER JOIN @EST_PROD_ARV_MERC ARV ON      
	--	B.CD_EMP = ARV.CD_EMP AND      
	--	B.CD_ARV_MERC_CATEG = ARV.CD_ARV_MERC_CATEG      
	--	INNER JOIN @RS_TAB_ATIVA RS_TAB_ATIVA ON      
	--	A.CD_EMP = RS_TAB_ATIVA.CD_EMP AND      
	--	B.CD_TBL_COMIS = RS_TAB_ATIVA.CD_TBL_COMIS          
	--WHERE       
	--	FIL.CD_FILIAL = @CD_FILIAL AND         
	--	NOT EXISTS (SELECT 
	--				T.CD_TBL_COMIS 
	--				FROM 
	--				@RS_DADOS_TBL_COMIS T 
	--				WHERE 
	--				T.CD_TBL_COMIS = A.CD_TBL_COMIS)      
	--ORDER BY 
	--	A.DT_CAD DESC, 
	--	B.PERC_COMIS DESC;
		
 ------------------------------------------------------------------------------------------------------------------------------      
 --Consultando as tbls de COMISSÃO no NÍVEL 6 - LINHAS      
 -------------------------------------------------------------------------------------------------------------------------------      
	--INSERT INTO @RS_DADOS_TBL_COMIS       
	--SELECT TOP 1      
	--	A.CD_TBL_COMIS AS CD_TBL_COMIS,      
	--	A.TP_VALOR AS TP_VALOR,      
	--	A.FLAG_DESC_OUTR_TBL AS FLAG_DESC_OUTR_TBL,      
	--	B.PERC_COMIS AS PERC_COMIS,      
	--	5 AS TP_NIVEL      
	--FROM 
	--	EST_PROD_TBL_COMIS A      
	--	INNER JOIN EST_PROD_TBL_COMIS_EST_ARV_MERC_LINHA B ON      
	--	A.CD_EMP = B.CD_EMP AND      
	--	A.CD_TBL_COMIS = B.CD_TBL_COMIS      
	--	INNER JOIN EST_PROD_TBL_COMIS_PRC_FILIAL FIL ON      
	--	B.CD_EMP = FIL.CD_EMP AND      
	--	B.CD_TBL_COMIS = FIL.CD_TBL_COMIS      
	--	INNER JOIN @EST_PROD_ARV_MERC ARV ON      
	--	B.CD_EMP = ARV.CD_EMP AND         
	--	B.CD_ARV_MERC_LINHA = ARV.CD_ARV_MERC_LINHA      
	--	INNER JOIN @RS_TAB_ATIVA RS_TAB_ATIVA ON      
	--	A.CD_EMP = RS_TAB_ATIVA.CD_EMP AND      
	--	B.CD_TBL_COMIS = RS_TAB_ATIVA.CD_TBL_COMIS          
	--WHERE       
	--	FIL.CD_FILIAL = @CD_FILIAL AND       
	--	NOT EXISTS (SELECT 
	--				T.CD_TBL_COMIS 
	--				FROM 
	--				@RS_DADOS_TBL_COMIS T 
	--				WHERE 
	--				T.CD_TBL_COMIS = A.CD_TBL_COMIS)      
	--ORDER BY 
	--	A.DT_CAD DESC, 
	--	B.PERC_COMIS DESC;
 
 -------------------------------------------------------------------------------------------------------------------------------      
 --Consultando as tbls de COMISSÃO no NÍVEL 7 - FILIAL      
 -------------------------------------------------------------------------------------------------------------------------------      
	--INSERT INTO @RS_DADOS_TBL_COMIS       
	--SELECT TOP 1      
	--	A.CD_TBL_COMIS AS CD_TBL_COMIS,      
	--	A.TP_VALOR AS TP_VALOR,      
	--	A.FLAG_DESC_OUTR_TBL AS FLAG_DESC_OUTR_TBL,      
	--	B.PERC_COMIS AS PERC_COMIS,     
	--	7 AS TP_NIVEL      
	--FROM 
	--	EST_PROD_TBL_COMIS A      
	--	INNER JOIN EST_PROD_TBL_COMIS_PRC_FILIAL B ON      
	--	A.CD_EMP = B.CD_EMP AND      
	--	A.CD_TBL_COMIS = B.CD_TBL_COMIS      
	--	INNER JOIN @RS_TAB_ATIVA RS_TAB_ATIVA ON      
	--	A.CD_EMP = RS_TAB_ATIVA.CD_EMP AND      
	--	B.CD_TBL_COMIS = RS_TAB_ATIVA.CD_TBL_COMIS          
	--WHERE       
	--	B.CD_FILIAL = @CD_FILIAL 
	--	AND NOT EXISTS (SELECT 
	--					T.CD_TBL_COMIS 
	--					FROM 
	--					@RS_DADOS_TBL_COMIS T 
	--					WHERE 
	--					T.CD_TBL_COMIS = A.CD_TBL_COMIS)      
	--ORDER BY 
	--	A.DT_CAD DESC, 
	--	B.PERC_COMIS DESC;
    
	INSERT INTO @RS_TAB_COMIS   
	SELECT TOP 1 
		CD_TBL_COMIS,  
		FLAG_DESC_OUTR_TBL,  
		PERC_COMIS,   
		TP_NIVEL,  
		@CD_PROD AS CD_PROD,  
		@CD_FILIAL AS CD_FILIAL,  
		@CD_EMP AS CD_EMP  
	FROM 
		@RS_DADOS_TBL_COMIS A  
	ORDER BY 
		TP_NIVEL ASC, 
		PERC_COMIS DESC  
  
RETURN  
  
END        
  