 
IF  EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[P_GERA_PIS_COFINS_EST_NF_SAI]') AND TYPE IN (N'P', N'PC'))
DROP PROCEDURE [DBO].[P_GERA_PIS_COFINS_EST_NF_SAI]
GO
-- VERSAO 2782
/*

EXEC P_GERA_PIS_COFINS_EST_NF_SAI 1,2,'20230207','20230207',0,'',0

*/
/*
=======================================================================================
'Job.................:  
'Função..............: 
'Objetivo............:  
'Tabelas.............: 
'Dt Modificação......: 25/05/2021
'Modificação.........: Tag #A001 Atualizar PIS_COFINS de acordo com TP_TRIB da tabela CST_PIS_COFINS
'=======================================================================================
Tag #A001 - Alteração do codigo  
Tag #I001 - Inclusão de novo codigo 
*/

CREATE PROCEDURE [DBO].[P_GERA_PIS_COFINS_EST_NF_SAI] (@CD_EMP INT, 
													   @CD_FILIAL INT, 
													   @DT_INI DATETIME,
													   @DT_FIM DATETIME,
													   @VISUALIZAR INT = 0,
													   @CODIGO VARCHAR(200)= '',
													   @FLAG_REPROCESSAR INT=0)  WITH ENCRYPTION AS 
													   



SET NOCOUNT ON 

--DECLARE @DEDUZIR_ICMS_NORMAL_BASE_PISCOFINS INT = NULL 
--DECLARE @DATADEDUZIR DATE = NULL

--	SET @DEDUZIR_ICMS_NORMAL_BASE_PISCOFINS= ISNULL ( (SELECT DEDUZIR_ICMS_NORMAL_BASE_PISCOFINS FROM PRC_FILIAL WHERE CD_FILIAL = @CD_FILIAL ), 0)
--	SET @DATADEDUZIR = ISNULL((SELECT DBO.UFD_BUSCA_PARAM_SISTEMA(1, 'DT_INICIO_EXCLUSAO_ICMS_PIS_COFINS', 1, @CD_FILIAL)),0)


/*
=======================================================================================
'Job.................: Itec - Geração PIS e Cofins
'Função..............: 
'Objetivo............: Gera pis cofins dos itens na Saida
'Tabelas.............: EST_NF_SAI_IT
'Dt Modificação......: 20/11/2020
'Modificação.........: Tag #A001 - Remoção do codigo , pois, a execução da rotina já existe em job.Estava ocorrendo conflitos.  
'=======================================================================================
Tag #A001 - Alteração do codigo  
Tag #I001 - Inclusão de novo codigo 

*/
--VERIFICA BLOQUEIO CONTÁBIL
IF EXISTS( SELECT TOP 1 CD_EMP
    FROM
         CTB_CONTROLE_EXPORTACAO
    WHERE LIBERADO = 'N'
          AND DT_EXPORT >= @DT_INI
          AND CD_EMP = @CD_EMP
          AND CD_FILIAL = @CD_FILIAL
)
    BEGIN
        PRINT 'DATA BASE COM BLOQUEIO CONTABIL - TIME : '+CONVERT(VARCHAR, GETDATE(), 108);
        RAISERROR('DATA BASE COM BLOQUEIO CONTABIL', 9, 1);
        RETURN;
    END;

--VERIFICA BLOQUEIO FISCAL

IF EXISTS( SELECT TOP 1
           CD_EMP
    FROM
         CTB_EXP_CTR
    WHERE LIBERADO = 'N'
          AND CD_EMP = @CD_EMP
          AND DT_EXP >= @DT_INI
          AND CD_FILIAL = @CD_FILIAL
          AND TP_EXP = 0
)
    BEGIN
        PRINT 'DATA BASE COM BLOQUEIO CONTABIL - TIME : '+CONVERT(VARCHAR, GETDATE(), 108);
        RAISERROR('DATA BASE COM BLOQUEIO FISCAL', 9, 1);
        RETURN;
    END;

CREATE TABLE #RSSAIDAS (	CD_EMP INT,
							CD_FILIAL INT,
							CD_NF INT,
							CD_IT INT,
							CD_PROD INT,
							QT_IT MONEY,
							VLR_IT MONEY,
							VLR_DESC MONEY,
							VLR_BASE_ICMS MONEY,
							ISENTO INT,
							SUBS_TRIB_ANT INT,
							ICMS INT,
							SUBS_TRIB INT,
							ICMS_RD INT,
							PIS_COFINS_RECALCULADO INT,
							CST_PIS INT,
							PERC_ALIQ_PIS  MONEY,
							VLR_BASE_PIS  MONEY,
							VLR_PIS  MONEY,
							CST_COFINS INT,
							PERC_ALIQ_COFINS  MONEY,
							VLR_BASE_COFINS  MONEY,
							VLR_COFINS MONEY,
							REGIME_TRIBUTARIO INT,
							PIS_COFINS INT
							)

-- Tag #A001
--GERANDO TABELA INICIAL COM O CALCULO PADRAO DE PIS/COFINS
INSERT INTO #RSSAIDAS
SELECT
	EST_NF_SAI.CD_EMP,
	EST_NF_SAI.CD_FILIAL,
	EST_NF_SAI.CD_NF,
	EST_NF_SAI_IT.CD_IT,
	EST_NF_SAI_IT.CD_PROD,
	EST_NF_SAI_IT.QT_IT,
	EST_NF_SAI_IT.VLR_IT,
	EST_NF_SAI_IT.VLR_DESC_IT,
	EST_NF_SAI_IT.VLR_BASE_ICMS_IT,
	EST_TRIB.ISENTO,
	EST_TRIB.SUBS_TRIB_ANT,
	EST_TRIB.ICMS,
	EST_TRIB.SUBS_TRIB,
	EST_TRIB.ICMS_RD,
	1 AS PIS_COFINS_RECALCULADO,
	B.CD_CST_PIS,
	B.PERC_PIS,
	B.VLR_BASE_PIS,
	B.VLR_PIS,
	B.CD_CST_COFINS,
	B.PERC_COFINS,
	B.VLR_BASE_COFINS,   --ALTER TABLE EST_NF_SAI ADD REGIME_TRIBUTARIO INT NULL
	B.VLR_COFINS,
	ISNULL(EST_NF_SAI.REGIME_TRIBUTARIO,0),
	--B.PROD_PIS_COFINS
	B.CST_TP_TRIB_PIS
FROM
	EST_NF_SAI INNER JOIN EST_NF_SAI_IT ON
	EST_NF_SAI.CD_EMP = EST_NF_SAI_IT.CD_EMP AND
	EST_NF_SAI.CD_FILIAL = EST_NF_SAI_IT.CD_FILIAL AND
	EST_NF_SAI.CD_NF = EST_NF_SAI_IT.CD_NF
	INNER JOIN EST_TRIB ON
	EST_NF_SAI_IT.CD_TRIB = EST_TRIB.CD_TRIB
	--OUTER APPLY UFD_EST_PROD_TRIB_PIS_COFINS(EST_NF_SAI.CD_EMP,EST_NF_SAI.CD_FILIAL,EST_NF_SAI.CD_NT_MOV,CD_PROD,EST_NF_SAI_IT.CD_NT_OP,
	--(EST_NF_SAI_IT.VLR_TOT_IT-EST_NF_SAI_IT.VLR_DESC_IT), ISNULL(EST_NF_SAI.REGIME_TRIBUTARIO,0)) B
	LEFT JOIN GLB_NT_OP OP ON OP.CD_NT_OP = EST_NF_SAI_IT.CD_NT_OP		
		OUTER APPLY DBO.UFD_EST_PROD_TRIB_PIS_COFINS(EST_NF_SAI.CD_EMP,EST_NF_SAI.CD_FILIAL,
				    EST_NF_SAI.CD_NT_MOV,
				    CD_PROD,
				    EST_NF_SAI_IT.CD_NT_OP,
				    ((EST_NF_SAI_IT.VLR_TOT_IT)-(EST_NF_SAI_IT.VLR_DESC_IT   )),0, EST_NF_SAI.CD_NF, 0, 0) B




WHERE
	EST_NF_SAI.CD_EMP = @CD_EMP 
	AND EST_NF_SAI.CD_FILIAL = @CD_FILIAL 
	AND EST_NF_SAI.DT_EMI_NF BETWEEN @DT_INI AND @DT_FIM

--Tag #A001
--ALTERANDO A ENTRADA DE ACORDO COM O NOVO CALCULO CRIADO
IF @VISUALIZAR =0 
BEGIN
	UPDATE
		S
	SET 
		S.VLR_BASE_PIS = SNV.VLR_BASE_PIS, 
		S.VLR_PIS=SNV.VLR_PIS,		
		S.PERC_ALIQ_PIS=SNV.PERC_ALIQ_PIS,	
		S.VLR_BASE_COFINS=SNV.VLR_BASE_COFINS,
		S.VLR_COFINS=SNV.VLR_COFINS,
		S.PERC_ALIQ_COFINS=SNV.PERC_ALIQ_COFINS, 
		S.CST_PIS=SNV.CST_PIS,		
		S.CST_COFINS=SNV.CST_COFINS,
		S.PIS_COFINS = SNV.PIS_COFINS,
		S.PIS_COFINS_RECALCULADO=SNV.PIS_COFINS_RECALCULADO,
		S.VLR_ISENTO = CASE WHEN SNV.ISENTO = 1 THEN
							CASE WHEN ((S.QT_IT * S.VLR_IT) - S.VLR_DESC_IT) > 0 THEN
								(S.QT_IT * S.VLR_IT) - S.VLR_DESC_IT
							ELSE
								0
							END
					   ELSE
							0
					   END,
		S.VLR_OUTROS =CASE WHEN SNV.SUBS_TRIB_ANT = 1 THEN 
							CASE WHEN ((S.QT_IT * S.VLR_IT) - S.VLR_DESC_IT) > 0 THEN
								((S.QT_IT * S.VLR_IT) - S.VLR_DESC_IT)
							ELSE
								0
							END
					  ELSE
						CASE WHEN (SNV.ICMS + SNV.SUBS_TRIB + SNV.ICMS_RD)  > 1 THEN 
										CASE WHEN ((S.QT_IT * S.VLR_IT) - S.VLR_DESC_IT) - S.VLR_BASE_ICMS_IT > 0 THEN
											((S.QT_IT * S.VLR_IT) - S.VLR_DESC_IT) - S.VLR_BASE_ICMS_IT 
										ELSE
											0
										END
						ELSE
							0
						END
					  END		
	FROM
		#RSSAIDAS SNV INNER JOIN EST_NF_SAI_IT S ON
		SNV.CD_EMP = S.CD_EMP AND
		SNV.CD_FILIAL = S.CD_FILIAL AND 
		SNV.CD_NF = S.CD_NF AND
		SNV.CD_PROD = S.CD_PROD AND
		SNV.CD_IT = S.CD_IT 
END

/*
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-- Tag #A001
IF  @VISUALIZAR =0
BEGIN
	WHILE @DT_INI <=@DT_FIM
		BEGIN
			EXEC P_EST_MOVIMENTO_VENDAS 1, @DT_INI, @CD_FILIAL ,1
			SET @DT_INI = DATEADD(DAY,1,@DT_INI) 
		 
		END
END
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*/



IF @VISUALIZAR =1 
BEGIN
--ALTERANDO A ENTRADA DE ACORDO COM O NOVO CALCULO CRIADO
SELECT
*
FROM
	#RSSAIDAS 
END
DROP TABLE #RSSAIDAS;
