PRINT '> PRODUCAO - SCRIPT #0009';

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[P_GERA_LOTE_NFE_ANTIGO]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[P_GERA_LOTE_NFE_ANTIGO]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[P_GERA_LOTE_NFE_ANTIGO]         
AS        
	    
	---VERSAO 1830
	CREATE TABLE #NF_LOTE (NR_LOTE INT);          
	    
	DECLARE @LOTE INT;          
	DECLARE @HOJE AS DATETIME         
	SET @HOJE = CONVERT(VARCHAR, GETDATE(),112)        

	--VALIDA FILIAIS HABILITADAS PARA USO DO NFE  
	PRINT '> VALIDA FILIAIS HABILITADAS PARA USO DO NFE...';        
	BEGIN TRY DROP TABLE #TMP_F_HAB; END TRY BEGIN CATCH END CATCH;  

	SELECT   
		F.CD_FILIAL  
		INTO #TMP_F_HAB  
	FROM 
		PRC_FILIAL F  
	LEFT JOIN NFE..EST_NF_NFE_LICENCAS L ON  
		L.CD_FILIAL = F.CD_FILIAL  
	WHERE  
		F.FLAG_NFE_HABILITADA = 1   
		AND ((L.CHAVE IS NULL) OR (L.UF IS NULL) OR (L.CNPJ IS NULL));  

	IF EXISTS(SELECT 1 FROM #TMP_F_HAB)  
	BEGIN  
		PRINT '  < *** ATENCAO - DESABILITANDO FILIAIS SEM LICENCA CADASTRADA! ***';  
		UPDATE PRC_FILIAL SET FLAG_NFE_HABILITADA = 0   
		WHERE   
			CD_FILIAL IN (SELECT CD_FILIAL FROM #TMP_F_HAB)  
	END  
	ELSE  
		PRINT '  < OK - SEM FILIAIS HABILITADAS INDEVIDAMENTE';  

	BEGIN TRY DROP TABLE #TMP_F_HAB; END TRY BEGIN CATCH END CATCH;  
	--...FIM VALIDACAO FILIAIS.

	PRINT '> VERIFICANDO PENDENCIAS...';        
	    
	SELECT                 
		 TOP 500  A.CD_EMP,        
		A.CD_FILIAL,        
		(CASE        
			WHEN A.TIPO_NF IN (0, 1) THEN 0        
			WHEN A.TIPO_NF IN (2, 3) THEN 1        
			WHEN A.TIPO_NF IN (4, 5) THEN 2        
			WHEN A.TIPO_NF IN (6) THEN 3        
			WHEN A.TIPO_NF IN (7) THEN 4        
			WHEN A.TIPO_NF IN (8) THEN 5        
		END) TIPO_LOTE,        
		A.TIPO_NF,        
		B.NM_FANT        
	INTO #RS_NF_PENDENTES        
	FROM        
		V_EST_NF_NFE_PENDENTE_EMISSAO A        
	INNER JOIN PRC_FILIAL B ON        
		A.CD_EMP = B.CD_EMP        
		AND A.CD_FILIAL = B.CD_FILIAL        
	WHERE        
		A.CD_EMP = 1         
		AND A.PEND_SOLUC = 0        
		AND A.TIPO_NF in (0, 1, 2, 3, 4, 5, 7, 8)         
		AND B.FLAG_NFE_HABILITADA = 1        
	ORDER BY        
		A.CD_FILIAL;
	  
	    
	IF NOT EXISTS(SELECT * FROM #RS_NF_PENDENTES)        
	BEGIN        
		PRINT '  - REMOVER LOTES DE ENTRADA DA PENDENCIA QUE JÁ FORAM REGISTRADOS';      
		DELETE NFE_LOTE_PENDENTE FROM      
		NFE_LOTE_PENDENTE      
		LEFT JOIN EST_NFE_LOTE_ENT ON      
			EST_NFE_LOTE_ENT.CD_NFE_LOTE = NFE_LOTE_PENDENTE.CD_NFE_LOTE      
		LEFT JOIN EST_NF_ENT_ARQ_DANFE ON      
			EST_NF_ENT_ARQ_DANFE.CD_EMP = EST_NFE_LOTE_ENT.CD_EMP      
			AND EST_NF_ENT_ARQ_DANFE.CD_FILIAL = EST_NFE_LOTE_ENT.CD_FILIAL      
			AND EST_NF_ENT_ARQ_DANFE.CD_NF = EST_NFE_LOTE_ENT.CD_NF      
		WHERE      
			(NFE_LOTE_PENDENTE.TP_LOTE = 0)      
			AND (NFE_LOTE_PENDENTE.TP_NF = 0)      
			AND (EST_NF_ENT_ARQ_DANFE.ARQUIVO_DANFE IS NOT NULL);      
	  
	  
		PRINT '  - REMOVER LOTES DE SAIDA DA PENDENCIA QUE JÁ FORAM REGISTRADOS';      
		DELETE NFE_LOTE_PENDENTE FROM        
		NFE_LOTE_PENDENTE       
		LEFT JOIN EST_NFE_LOTE_SAI ON      
			EST_NFE_LOTE_SAI.CD_NFE_LOTE = NFE_LOTE_PENDENTE.CD_NFE_LOTE      
		LEFT JOIN EST_NF_SAI_ARQ_DANFE ON      
			EST_NF_SAI_ARQ_DANFE.CD_EMP = EST_NFE_LOTE_SAI.CD_EMP      
			AND EST_NF_SAI_ARQ_DANFE.CD_FILIAL = EST_NFE_LOTE_SAI.CD_FILIAL      
			AND EST_NF_SAI_ARQ_DANFE.CD_NF = EST_NFE_LOTE_SAI.CD_NF      
		WHERE       
			(NFE_LOTE_PENDENTE.TP_LOTE = 0)      
			AND (NFE_LOTE_PENDENTE.TP_NF = 1)      
			AND (EST_NF_SAI_ARQ_DANFE.ARQUIVO_DANFE IS NOT NULL);      
	  


		PRINT '  - REMOVER LOTES DE ENTRADA DA PENDENCIA QUE SEJAM DE FILIAIS DESABILITADAS PARA NFE';
		DELETE NFE_LOTE_PENDENTE FROM       
			NFE_LOTE_PENDENTE
		INNER JOIN EST_NFE_LOTE_ENT NF ON
			NF.CD_NFE_LOTE = NFE_LOTE_PENDENTE.CD_NFE_LOTE
		INNER JOIN PRC_FILIAL FL ON
				FL.CD_EMP = NF.CD_EMP
			AND FL.CD_FILIAL = NF.CD_FILIAL
			AND FL.FLAG_NFE_HABILITADA = 0
		WHERE
				(NFE_LOTE_PENDENTE.TP_LOTE = 0)
			AND (NFE_LOTE_PENDENTE.TP_NF = 0);

		PRINT '  - REMOVER LOTES DE SAIDA DA PENDENCIA QUE SEJAM DE FILIAIS DESABILITADAS PARA NFE';
		DELETE NFE_LOTE_PENDENTE FROM       
			NFE_LOTE_PENDENTE
		INNER JOIN EST_NFE_LOTE_SAI NF ON
			NF.CD_NFE_LOTE = NFE_LOTE_PENDENTE.CD_NFE_LOTE
		INNER JOIN PRC_FILIAL FL ON
				FL.CD_EMP = NF.CD_EMP
			AND FL.CD_FILIAL = NF.CD_FILIAL
			AND FL.FLAG_NFE_HABILITADA = 0
		WHERE
				(NFE_LOTE_PENDENTE.TP_LOTE = 0)
			AND (NFE_LOTE_PENDENTE.TP_NF = 1);
	  
	  
		PRINT 'NENHUMA PENDENCIA DETECTADA!';        
		SELECT * FROM #NF_LOTE
		RETURN          
	END          
	    
	DECLARE @CD_EMP INT;          
	DECLARE @CD_FILIAL INT;          
	DECLARE @CD_LOTE INT;          
	DECLARE @TIPO_LOTE INT;          
	DECLARE @TIPO_NF INT;        
	DECLARE @CD_NF INT;        
	DECLARE @CONTIGENCIA INT        
	    
	DECLARE @xCD_EMP INT;          
	DECLARE @xCD_FILIAL INT;          
	DECLARE @xCD_NF INT;        
	DECLARE @xTIPO_NF INT;        
	    
	SET NOCOUNT ON            
	DECLARE NOTAS CURSOR FAST_FORWARD FOR SELECT CD_EMP, CD_FILIAL, TIPO_LOTE, TIPO_NF FROM #RS_NF_PENDENTES        
	OPEN NOTAS          
	FETCH NEXT FROM NOTAS INTO @CD_EMP, @CD_FILIAL, @TIPO_LOTE, @TIPO_NF          
	WHILE @@FETCH_STATUS = 0          
	BEGIN          
	    
		SET @LOTE = (SELECT ISNULL(MAX(CD_NFE_LOTE), 0) + 1 FROM EST_NFE_LOTE);          
	      
		SET @CONTIGENCIA = ISNULL((	SELECT TOP 1 1 AS CONT           
									FROM         
										EST_CONTINGENCIA        
									WHERE        
										CONVERT(DATETIME, CONVERT(VARCHAR, DT_CONTINGENCIA, 112)) = @HOJE        
										AND CD_FILIAL = @CD_FILIAL), 0);
		IF (@CONTIGENCIA = 1)
		BEGIN
			PRINT ' *** ATENCAO *** MODO DE CONTINGENCIA ATIVO PARA ESTA FILIAL';
		END;


		PRINT 'CRIADO NOVO LOTE '+CAST(@LOTE AS VARCHAR(10));        
		PRINT 'FILIAL.......: '+CAST(@CD_FILIAL AS VARCHAR(10));        
		PRINT 'TIPO DE LOTE.: '+CAST(@TIPO_LOTE AS VARCHAR(10));        
		PRINT 'TIPO DE NF...: '+CAST(@TIPO_NF AS VARCHAR(10));        
		      
		----CANCELANDO NOTAS SEM ITENS  **********************************************************
		BEGIN TRY DROP TABLE #NOTAS_A_CANCELAR_ENT; END TRY BEGIN CATCH END CATCH;        
	    
		SELECT        
			P.CD_EMP        
			, P.CD_FILIAL        
			, P.TIPO_NF        
			, P.CD_NF        
			, P.DS_TIPO        
		INTO #NOTAS_A_CANCELAR_ENT        
		FROM        
			V_EST_NF_NFE_PENDENTE_EMISSAO P         
		INNER JOIN EST_NF_ENT ENT ON          
			P.CD_EMP = ENT.CD_EMP          
			AND P.CD_FILIAL = ENT.CD_FILIAL          
			AND P.CD_NF = ENT.CD_NF          
		LEFT JOIN EST_NF_ENT_IT ON        
			EST_NF_ENT_IT.CD_EMP = P.CD_EMP        
			AND EST_NF_ENT_IT.CD_FILIAL = P.CD_FILIAL        
			AND EST_NF_ENT_IT.CD_NF = P.CD_NF        
		WHERE        
			P.CD_EMP = @CD_EMP        
			AND P.CD_FILIAL = @CD_FILIAL        
			AND P.TIPO_NF = @TIPO_NF        
			AND PEND_SOLUC = 0        
			AND EST_NF_ENT_IT.CD_NF IS NULL;        
	    
		SET NOCOUNT ON        
		DECLARE INDEX_CANCELAR CURSOR FAST_FORWARD FOR SELECT CD_EMP, CD_FILIAL, CD_NF, TIPO_NF FROM #NOTAS_A_CANCELAR_ENT        
		OPEN INDEX_CANCELAR        
		FETCH NEXT FROM INDEX_CANCELAR INTO @xCD_EMP, @xCD_FILIAL, @xCD_NF, @xTIPO_NF        
		WHILE @@FETCH_STATUS = 0        
		BEGIN        
	    
			PRINT '*** CANCELANDO NOTA SEM ITENS - ENTRADA ***';          
			PRINT 'FILIAL.......: '+CAST(@xCD_FILIAL AS VARCHAR(10));          
			PRINT 'TIPO DE NF...: '+CAST(@xTIPO_NF AS VARCHAR(10));          
			PRINT 'CD NF........: '+CAST(@xCD_NF AS VARCHAR(10));          
	       
			UPDATE ENT SET STS_NF = 1          
			FROM        
				V_EST_NF_NFE_PENDENTE_EMISSAO          
			INNER JOIN EST_NF_ENT ENT ON          
				V_EST_NF_NFE_PENDENTE_EMISSAO.CD_EMP = ENT.CD_EMP          
				AND V_EST_NF_NFE_PENDENTE_EMISSAO.CD_FILIAL = ENT.CD_FILIAL          
				AND V_EST_NF_NFE_PENDENTE_EMISSAO.CD_NF = ENT.CD_NF 
				INNER JOIN EST_NF_ENT_EF_NF_CTR_NF ON
				ENT.CD_EMP = EST_NF_ENT_EF_NF_CTR_NF.CD_EMP          
				AND ENT.CD_FILIAL = EST_NF_ENT_EF_NF_CTR_NF.CD_FILIAL          
				AND ENT.CD_NF = EST_NF_ENT_EF_NF_CTR_NF.CD_NF_ENT
			LEFT JOIN EST_NF_ENT_IT ON        
				EST_NF_ENT_IT.CD_EMP = V_EST_NF_NFE_PENDENTE_EMISSAO.CD_EMP        
				AND EST_NF_ENT_IT.CD_FILIAL = V_EST_NF_NFE_PENDENTE_EMISSAO.CD_FILIAL        
				AND EST_NF_ENT_IT.CD_NF = V_EST_NF_NFE_PENDENTE_EMISSAO.CD_NF        
			WHERE        
				V_EST_NF_NFE_PENDENTE_EMISSAO.CD_EMP = @xCD_EMP        
				AND V_EST_NF_NFE_PENDENTE_EMISSAO.CD_FILIAL = @xCD_FILIAL        
				AND V_EST_NF_NFE_PENDENTE_EMISSAO.TIPO_NF = 0        
				AND V_EST_NF_NFE_PENDENTE_EMISSAO.CD_NF = @xCD_NF        
				AND PEND_SOLUC = 0        
				AND EST_NF_ENT_IT.CD_NF IS NULL;        
	    
	FETCH NEXT FROM INDEX_CANCELAR INTO @xCD_EMP, @xCD_FILIAL, @xCD_NF, @xTIPO_NF        
	END        
	--FECHANDO CURSOS        
	CLOSE INDEX_CANCELAR;        
	--DESALOCANDO CURSOS DA MEMORIA        
	DEALLOCATE INDEX_CANCELAR;        
	      
	BEGIN TRY DROP TABLE #NOTAS_A_CANCELAR_ENT; END TRY BEGIN CATCH END CATCH;        
	    
	--CANCELAMENTO DE NOTAS DE SAIDA        
	SELECT        
		P.CD_EMP        
		, P.CD_FILIAL        
		, P.TIPO_NF        
		, P.CD_NF        
		, P.DS_TIPO        
	INTO #NOTAS_A_CANCELAR_SAI        
	FROM        
		V_EST_NF_NFE_PENDENTE_EMISSAO P         
	INNER JOIN EST_NF_SAI SAI ON          
		P.CD_EMP = SAI.CD_EMP          
		AND P.CD_FILIAL = SAI.CD_FILIAL          
		AND P.CD_NF = SAI.CD_NF          
	LEFT JOIN EST_NF_SAI_IT ON        
		EST_NF_SAI_IT.CD_EMP = P.CD_EMP        
		AND EST_NF_SAI_IT.CD_FILIAL = P.CD_FILIAL        
		AND EST_NF_SAI_IT.CD_NF = P.CD_NF        
	WHERE        
		P.CD_EMP = @CD_EMP        
		AND P.CD_FILIAL = @CD_FILIAL        
		AND P.TIPO_NF = @TIPO_NF        
		AND PEND_SOLUC = 0        
		AND EST_NF_SAI_IT.CD_NF IS NULL;        

	SET NOCOUNT ON        
	DECLARE INDEX_CANCELAR CURSOR FAST_FORWARD FOR SELECT CD_EMP, CD_FILIAL, CD_NF, TIPO_NF FROM #NOTAS_A_CANCELAR_SAI        
	OPEN INDEX_CANCELAR        
	FETCH NEXT FROM INDEX_CANCELAR INTO @xCD_EMP, @xCD_FILIAL, @xCD_NF, @xTIPO_NF        
	WHILE @@FETCH_STATUS = 0        
	BEGIN        
	    
		PRINT '*** CANCELANDO NOTA SEM ITENS - SAIDA ***';          
		PRINT 'FILIAL.......: '+CAST(@xCD_FILIAL AS VARCHAR(10));          
		PRINT 'TIPO DE NF...: '+CAST(@xTIPO_NF AS VARCHAR(10));          
		PRINT 'CD NF........: '+CAST(@xCD_NF AS VARCHAR(10));          
	       
		UPDATE SAI SET STS_NF = 1          
		FROM        
			V_EST_NF_NFE_PENDENTE_EMISSAO          
		INNER JOIN EST_NF_SAI SAI ON          
			V_EST_NF_NFE_PENDENTE_EMISSAO.CD_EMP = SAI.CD_EMP          
			AND V_EST_NF_NFE_PENDENTE_EMISSAO.CD_FILIAL = SAI.CD_FILIAL          
			AND V_EST_NF_NFE_PENDENTE_EMISSAO.CD_NF = SAI.CD_NF          
		LEFT JOIN EST_NF_SAI_IT ON        
			EST_NF_SAI_IT.CD_EMP = V_EST_NF_NFE_PENDENTE_EMISSAO.CD_EMP        
			AND EST_NF_SAI_IT.CD_FILIAL = V_EST_NF_NFE_PENDENTE_EMISSAO.CD_FILIAL        
			AND EST_NF_SAI_IT.CD_NF = V_EST_NF_NFE_PENDENTE_EMISSAO.CD_NF        
		WHERE        
			V_EST_NF_NFE_PENDENTE_EMISSAO.CD_EMP = @xCD_EMP        
			AND V_EST_NF_NFE_PENDENTE_EMISSAO.CD_FILIAL = @xCD_FILIAL        
			AND V_EST_NF_NFE_PENDENTE_EMISSAO.TIPO_NF = 1        
			AND V_EST_NF_NFE_PENDENTE_EMISSAO.CD_NF = @xCD_NF        
			AND PEND_SOLUC = 0        
			AND EST_NF_SAI_IT.CD_NF IS NULL;        
	    
	FETCH NEXT FROM INDEX_CANCELAR INTO @xCD_EMP, @xCD_FILIAL, @xCD_NF, @xTIPO_NF        
	END        
	--FECHANDO CURSOS        
	CLOSE INDEX_CANCELAR;        
	--DESALOCANDO CURSOS DA MEMORIA        
	DEALLOCATE INDEX_CANCELAR;        
	      
	BEGIN TRY DROP TABLE #NOTAS_A_CANCELAR_SAI; END TRY BEGIN CATCH END CATCH;        
	----CANCELANDO NOTAS SEM ITENS  *************************************************************************************************************************        
	    
	    
	--NOTAS DE ENTRADA-------------------------------------------------------------------------------          
	IF @TIPO_NF in (0)          
	BEGIN            
		PRINT '- NOTA DE ENTRADA';

		SET @CONTIGENCIA = ISNULL((	SELECT TOP 1 1 AS CONT           
									FROM         
										EST_CONTINGENCIA        
									WHERE        
										CONVERT(DATETIME, CONVERT(VARCHAR, DT_CONTINGENCIA, 112)) = @HOJE        
										AND CD_FILIAL = @CD_FILIAL), 0);
		IF (@CONTIGENCIA = 1)
		BEGIN
			PRINT ' *** ATENCAO *** MODO DE CONTINGENCIA ATIVO PARA ESTA FILIAL';
		END;

		SELECT         
			DISTINCT
			TOP 1
			@LOTE AS LOTE
			, ROW_NUMBER() OVER (ORDER BY CD_NF) as LOTE_IT
			, CD_EMP
			, CD_FILIAL
			, CD_NF
		INTO #INSERT_ENTRADA
		FROM
			V_EST_NF_NFE_PENDENTE_EMISSAO
		WHERE
			CD_EMP = @CD_EMP
			AND CD_FILIAL = @CD_FILIAL
			AND TIPO_NF = @TIPO_NF
			AND PEND_SOLUC = 0
			AND EXISTS (
							SELECT 
								CD_EMP 
							FROM 
								EST_NF_ENT_IT
							WHERE 
								CD_EMP = V_EST_NF_NFE_PENDENTE_EMISSAO.CD_EMP 
								AND CD_FILIAL = V_EST_NF_NFE_PENDENTE_EMISSAO.CD_FILIAL 
								AND CD_NF = V_EST_NF_NFE_PENDENTE_EMISSAO.CD_NF
						);

		--IF (@CONTIGENCIA = 1)
		--BEGIN
		--	DELETE FROM A
		--	FROM
		--		#INSERT_ENTRADA A
		--	INNER JOIN EST_NF_ENT B ON
		--		A.CD_EMP = B.CD_EMP 
		--		AND A.CD_NF = B.CD_NF 
		--		AND A.CD_FILIAL = B.CD_FILIAL
		--	INNER JOIN EST_NF_SERIE S ON
		--		B.CD_NF_SERIE = S.CD_NF_SERIE
		--	WHERE
		--		S.CONTIGENCIA = 0
		--END;

		IF EXISTS(SELECT * FROM #INSERT_ENTRADA)
		BEGIN
			PRINT '  - INSERINDO DADOS NO LOTE...';
			
			SET  @LOTE = (SELECT ISNULL(MAX(CD_NFE_LOTE), 0) + 1 FROM EST_NFE_LOTE); 
			
			INSERT INTO EST_NFE_LOTE (CD_NFE_LOTE, CD_EMP, CD_FILIAL, TP_LOTE, DT_CAD, HR_CAD, CD_USU, REG_CONTG)
			VALUES (@LOTE, @CD_EMP, @CD_FILIAL, @TIPO_LOTE, GETDATE(), (SELECT CONVERT(CHAR(10), GETDATE(), 108)) , 1,@CONTIGENCIA);

			INSERT INTO NFE_LOTE_PENDENTE SELECT @LOTE, @TIPO_LOTE, @TIPO_NF;

			INSERT INTO EST_NFE_LOTE_ENT (CD_NFE_LOTE, CD_NFE_LOTE_ENT, CD_EMP, CD_FILIAL, CD_NF) SELECT * FROM #INSERT_ENTRADA;        
		END;

		BEGIN TRY DROP TABLE #INSERT_ENTRADA; END TRY BEGIN CATCH END CATCH;
	END;

	--CANCELAMENTO DE NOTAS DE ENTRADA---------------------------------------------------------------          
	IF @TIPO_NF in (3)          
	BEGIN             
		PRINT '- CANCELAMENTO DE NOTAS DE ENTRADA';        

		SELECT          
			TOP 1          
			@LOTE AS LOTE
			, ROW_NUMBER() OVER (ORDER BY CD_NF) as LOTE_IT
			, CD_EMP
			, CD_FILIAL
			, CD_NF
		INTO #INSERT_CANCELAMENTO_ENTRADA
		FROM
			V_EST_NF_NFE_PENDENTE_EMISSAO
		WHERE
			CD_EMP = @CD_EMP
			AND CD_FILIAL = @CD_FILIAL
			AND TIPO_NF = @TIPO_NF
			AND PEND_SOLUC = 0
		ORDER BY
			CD_FILIAL, TIPO_NF;
	    
		IF EXISTS(SELECT * FROM #INSERT_CANCELAMENTO_ENTRADA)          
		BEGIN         
			PRINT '  - INSERINDO DADOS NO LOTE...';

			INSERT INTO EST_NFE_LOTE (CD_NFE_LOTE, CD_EMP, CD_FILIAL, TP_LOTE, DT_CAD, HR_CAD, CD_USU, REG_CONTG) 
			VALUES (@LOTE, @CD_EMP, @CD_FILIAL, @TIPO_LOTE, GETDATE(), (SELECT CONVERT(CHAR(10), GETDATE(), 108)) , 1, 0);

			INSERT INTO NFE_LOTE_PENDENTE SELECT @LOTE, @TIPO_LOTE, @TIPO_NF;           

			INSERT INTO EST_NFE_LOTE_ENT (CD_NFE_LOTE, CD_NFE_LOTE_ENT, CD_EMP, CD_FILIAL, CD_NF) SELECT * FROM #INSERT_CANCELAMENTO_ENTRADA;        
		END;

		BEGIN TRY DROP TABLE #INSERT_CATAELAMENTO_ENTRADA; END TRY BEGIN CATCH END CATCH;
	END           
	    
	--CARTA DE CORREÇÃO DE NOTAS DE ENTRADA---------------------------------------------------------------          
	IF @TIPO_NF in (5)          
	BEGIN             
		PRINT '- CARTA DE CORRECAO DE NOTAS DE ENTRADA';        

		SELECT          
			TOP 1          
			@LOTE AS LOTE
			, CC_ENT.CD_CTR_CARTA_CORRECAO
			, 1 AS CD_USU
		INTO #INSERT_CDC_ENTRADA        
		FROM          
			EST_NFE_CARTA_CORRECAO_PEND CC                   
		INNER JOIN EST_NFE_CARTA_CORRECAO_EST_NF_ENT CC_ENT ON         
			CC.CD_CTR_CARTA_CORRECAO = CC_ENT.CD_CTR_CARTA_CORRECAO        
		WHERE          
			CD_EMP = @CD_EMP          
			AND CD_FILIAL = @CD_FILIAL          
		ORDER BY         
			CD_FILIAL;        
		    
		IF EXISTS(SELECT * FROM #INSERT_CDC_ENTRADA)          
		BEGIN         
			PRINT '  - INSERINDO DADOS NO LOTE...';

			INSERT INTO EST_NFE_LOTE (CD_NFE_LOTE, CD_EMP, CD_FILIAL, TP_LOTE, DT_CAD, HR_CAD, CD_USU, REG_CONTG)         
			VALUES (@LOTE, @CD_EMP, @CD_FILIAL, @TIPO_LOTE, GETDATE(), (SELECT CONVERT(CHAR(10), GETDATE(), 108)) , 1, 0);          

			INSERT INTO NFE_LOTE_PENDENTE SELECT @LOTE, @TIPO_LOTE, @TIPO_NF;           

			INSERT INTO EST_NFE_CARTA_CORRECAO_EST_NFE_LOTE( CD_NFE_LOTE, CD_CTR_CARTA_CORRECAO,CD_USU) SELECT * FROM #INSERT_CDC_ENTRADA;        
		END;

		BEGIN TRY DROP TABLE #INSERT_CDC_ENTRADA; END TRY BEGIN CATCH END CATCH;
	END


	--NOTAS DE SAIDA---------------------------------------------------------------------------------          
	IF @TIPO_NF in (1)          
	BEGIN            
	       
		SET @CONTIGENCIA = ISNULL((	SELECT TOP 1 1 AS CONT           
									FROM         
										EST_CONTINGENCIA        
									WHERE        
										CONVERT(DATETIME, CONVERT(VARCHAR, DT_CONTINGENCIA, 112)) = @HOJE        
										AND CD_FILIAL = @CD_FILIAL), 0);
		IF (@CONTIGENCIA = 1)
		BEGIN
			PRINT ' *** ATENCAO *** MODO DE CONTINGENCIA ATIVO PARA ESTA FILIAL';
		END;

		PRINT '- NOTA DE SAIDA';

		SELECT
			TOP 1
			@LOTE AS LOTE
			, ROW_NUMBER() OVER (ORDER BY CD_NF) as LOTE_IT
			, CD_EMP
			, CD_FILIAL
			, CD_NF
		INTO #INSERT_SAIDA        
		FROM        
			V_EST_NF_NFE_PENDENTE_EMISSAO        
		WHERE        
			CD_EMP = @CD_EMP        
			AND CD_FILIAL = @CD_FILIAL    
			AND TIPO_NF = @TIPO_NF    
			AND PEND_SOLUC = 0 
			AND EXISTS (
						SELECT 
							CD_EMP
						FROM 
							EST_NF_SAI_IT         
						WHERE 
							CD_EMP = V_EST_NF_NFE_PENDENTE_EMISSAO.CD_EMP
							AND CD_FILIAL = V_EST_NF_NFE_PENDENTE_EMISSAO.CD_FILIAL
							AND CD_NF = V_EST_NF_NFE_PENDENTE_EMISSAO.CD_NF
						)
		                 
	        
		IF EXISTS(SELECT * FROM #INSERT_SAIDA)
		BEGIN
			PRINT '  - INSERINDO DADOS NO LOTE...';
            SET  @LOTE = (SELECT ISNULL(MAX(CD_NFE_LOTE), 0) + 1 FROM EST_NFE_LOTE);     
			
			INSERT INTO EST_NFE_LOTE (CD_NFE_LOTE, CD_EMP, CD_FILIAL, TP_LOTE, DT_CAD, HR_CAD, CD_USU, REG_CONTG)
			VALUES (@LOTE, @CD_EMP, @CD_FILIAL, @TIPO_LOTE, GETDATE(), (SELECT CONVERT(CHAR(10), GETDATE(), 108)) , 1, @CONTIGENCIA);

			PRINT '  - INSERIU EST_NFE_LOTE...';        
			INSERT INTO NFE_LOTE_PENDENTE SELECT @LOTE, @TIPO_LOTE, @TIPO_NF;           

			PRINT '  - INSERIU NFE_LOTE_PENDENTE...';        
			INSERT INTO EST_NFE_LOTE_SAI (CD_NFE_LOTE, CD_NFE_LOTE_SAI, CD_EMP, CD_FILIAL, CD_NF, NR_AUTORIZADOR) 
            
			
			SELECT @LOTE, LOTE_IT, CD_EMP, CD_FILIAL, CD_NF, '' FROM #INSERT_SAIDA;        

			PRINT '  - INSERIU EST_NFE_LOTE_SAI...';        
		END    
		ELSE    
			PRINT '  - NENHUMA NOTA FOI RELACIONADA!'    

		BEGIN TRY DROP TABLE #INSERT_SAIDA; END TRY BEGIN CATCH END CATCH        
	END          
	    
	--CANCELAMENTO DE NOTAS DE SAIDA-----------------------------------------------------------------          
	IF @TIPO_NF in (2)          
	BEGIN                   
		PRINT '- CANCELAMENTO DE NOTA DE SAIDA';        
		SELECT           
			TOP 1            
			@LOTE AS LOTE
			, ROW_NUMBER() OVER (ORDER BY CD_NF) as LOTE_IT
			, CD_EMP
			, CD_FILIAL
			, CD_NF
		INTO #INSERT_CANCELAMENTO_SAIDA        
		FROM          
			V_EST_NF_NFE_PENDENTE_EMISSAO          
		WHERE          
			CD_EMP = @CD_EMP          
			AND CD_FILIAL = @CD_FILIAL          
			AND TIPO_NF = @TIPO_NF          
			AND PEND_SOLUC = 0;          

		IF EXISTS(SELECT * FROM #INSERT_CANCELAMENTO_SAIDA)
		BEGIN
			PRINT '  - INSERINDO DADOS NO LOTE...';

			INSERT INTO EST_NFE_LOTE (CD_NFE_LOTE, CD_EMP, CD_FILIAL, TP_LOTE, DT_CAD, HR_CAD, CD_USU, REG_CONTG)
			VALUES (@LOTE, @CD_EMP, @CD_FILIAL, @TIPO_LOTE, GETDATE(), (SELECT CONVERT(CHAR(10), GETDATE(), 108)) , 1, 0);

			INSERT INTO NFE_LOTE_PENDENTE SELECT @LOTE, @TIPO_LOTE, @TIPO_NF;

			INSERT INTO EST_NFE_LOTE_SAI (CD_NFE_LOTE, CD_NFE_LOTE_SAI, CD_EMP, CD_FILIAL, CD_NF) SELECT * FROM #INSERT_CANCELAMENTO_SAIDA;
		END        
		        
		BEGIN TRY DROP TABLE #INSERT_CANCELAMENTO_SAIDA; END TRY BEGIN CATCH END CATCH        
	END        
	    
	--CARTA DE CORREÇÃO DE NOTAS DE SAIDA-----------------------------------------------------------------          
	IF @TIPO_NF in (4)          
	BEGIN                   
		PRINT '- CARTA DE CORRECAO DE NOTAS DE SAIDA';        
		SELECT           
			TOP 1
			@LOTE AS LOTE
			, CC.CD_CTR_CARTA_CORRECAO
			, 1 AS CD_USU
		INTO #INSERT_CDC_SAIDA
		FROM
			EST_NFE_CARTA_CORRECAO_PEND CC
		INNER JOIN EST_NFE_CARTA_CORRECAO_EST_NF_SAI CC_SAI ON
			CC_SAI.CD_CTR_CARTA_CORRECAO = CC.CD_CTR_CARTA_CORRECAO
		WHERE
			CD_EMP = @CD_EMP
			AND CD_FILIAL = @CD_FILIAL;
	    
		IF EXISTS(SELECT * FROM #INSERT_CDC_SAIDA)          
		BEGIN
			PRINT '  - INSERINDO DADOS NO LOTE...';

			INSERT INTO EST_NFE_LOTE (CD_NFE_LOTE, CD_EMP, CD_FILIAL, TP_LOTE, DT_CAD, HR_CAD, CD_USU, REG_CONTG)
			VALUES (@LOTE, @CD_EMP, @CD_FILIAL, @TIPO_LOTE, GETDATE(), (SELECT CONVERT(CHAR(10), GETDATE(), 108)) , 1, 0);

			INSERT INTO NFE_LOTE_PENDENTE SELECT @LOTE, @TIPO_LOTE, @TIPO_NF;

			INSERT INTO EST_NFE_CARTA_CORRECAO_EST_NFE_LOTE (CD_NFE_LOTE, CD_CTR_CARTA_CORRECAO,CD_USU) SELECT * FROM #INSERT_CDC_SAIDA;

			DROP TABLE #INSERT_CDC_SAIDA;            
		END;

		BEGIN TRY DROP TABLE #INSERT_CDC_SAIDA; END TRY BEGIN CATCH END CATCH;
	END          
	    
	--MANIFESTO DE CONFIRMAÇÃO DA OPERAÇÃO        
	IF @TIPO_NF in (7)          
	BEGIN            
		PRINT 'LISTANDO MANIFESTO FILIAL '+CAST(@CD_FILIAL AS VARCHAR(10));        
		SELECT         
			TOP 10        
			@LOTE AS LOTE
			, ROW_NUMBER() OVER (ORDER BY CD_NF) AS LOTE_IT
			, CD_EMP
			, CD_FILIAL
			, CD_NF
		INTO #INSERT_MANIFESTO        
		FROM         
			EST_NF_ENT_DANFE_PROVISORIO_EST_NF_ENT_MANIFESTO_PENDENTE        
		WHERE        
			CD_EMP = @CD_EMP        
			AND CD_FILIAL = @CD_FILIAL        
			AND DT_CAD >= '2013-05-29 00:01:00'        
		ORDER BY 
			CD_FILIAL;         
	    
		IF EXISTS(SELECT * FROM #INSERT_MANIFESTO)          
		BEGIN         
			PRINT '  - INSERINDO DADOS NO LOTE...';

			INSERT INTO EST_NFE_LOTE (CD_NFE_LOTE, CD_EMP, CD_FILIAL, TP_LOTE, DT_CAD, HR_CAD, CD_USU, REG_CONTG)
			VALUES (@LOTE, @CD_EMP, @CD_FILIAL, @TIPO_LOTE, GETDATE(), (SELECT CONVERT(CHAR(10), GETDATE(), 108)) , 1, 0);

			INSERT INTO NFE_LOTE_PENDENTE SELECT @LOTE, @TIPO_LOTE, @TIPO_NF;

			INSERT INTO EST_NFE_LOTE_ENT (CD_NFE_LOTE, CD_NFE_LOTE_ENT, CD_EMP, CD_FILIAL, CD_NF) SELECT * FROM #INSERT_MANIFESTO;        
		END;
		    
		BEGIN TRY DROP TABLE #INSERT_MANIFESTO; END TRY BEGIN CATCH END CATCH;
	END               
	    
	IF (@TIPO_NF=8) --INUTILIZAÇÃO
	BEGIN
		PRINT '- INUTILIZACAO';
		SELECT
			TOP 10        
			@LOTE AS LOTE
			, CD_NF
			, 1 AS CD_USU
		INTO #INSERT_INUTILIZACAO
		FROM
			V_EST_NF_NFE_PENDENTE_EMISSAO
		WHERE
			CD_EMP = @CD_EMP
			AND CD_FILIAL = @CD_FILIAL
			AND TIPO_NF  = @TIPO_NF
			AND PEND_SOLUC = 0;

		IF EXISTS(SELECT * FROM #INSERT_INUTILIZACAO)
		BEGIN
			PRINT '  - INSERINDO DADOS NO LOTE...';

			INSERT INTO EST_NFE_LOTE (CD_NFE_LOTE, CD_EMP, CD_FILIAL, TP_LOTE, DT_CAD, HR_CAD, CD_USU, REG_CONTG) 
			VALUES (@LOTE, @CD_EMP, @CD_FILIAL, @TIPO_LOTE, GETDATE(), (SELECT CONVERT(CHAR(10), GETDATE(), 108)) , 1, 0);

			INSERT INTO NFE_LOTE_PENDENTE SELECT @LOTE, @TIPO_LOTE, @TIPO_NF;

			INSERT INTO EST_NFE_LOTE_EST_NF_NFE_INU (CD_NFE_LOTE, CD_INU, CD_USU) SELECT * FROM #INSERT_INUTILIZACAO;
		END;
		    
		BEGIN TRY DROP TABLE #INSERT_INUTILIZACAO; END TRY BEGIN CATCH END CATCH;
	END;

	    
	FETCH NEXT FROM NOTAS INTO @CD_EMP, @CD_FILIAL, @TIPO_LOTE, @TIPO_NF          
	END          
	--FECHANDO CURSOS          
	CLOSE NOTAS;          
	--DESALOCANDO CURSOS DA MEMORIA            
	DEALLOCATE NOTAS;

	PRINT '  - REMOVER LOTES DE ENTRADA DA PENDENCIA QUE JÁ FORAM REGISTRADOS';
	DELETE NFE_LOTE_PENDENTE FROM
		NFE_LOTE_PENDENTE
	LEFT JOIN EST_NFE_LOTE_ENT ON
		EST_NFE_LOTE_ENT.CD_NFE_LOTE = NFE_LOTE_PENDENTE.CD_NFE_LOTE
	LEFT JOIN EST_NF_ENT_ARQ_DANFE ON
		EST_NF_ENT_ARQ_DANFE.CD_EMP = EST_NFE_LOTE_ENT.CD_EMP
		AND EST_NF_ENT_ARQ_DANFE.CD_FILIAL = EST_NFE_LOTE_ENT.CD_FILIAL
		AND EST_NF_ENT_ARQ_DANFE.CD_NF = EST_NFE_LOTE_ENT.CD_NF
	WHERE
		(NFE_LOTE_PENDENTE.TP_LOTE = 0)
		AND (NFE_LOTE_PENDENTE.TP_NF = 0)
		AND (EST_NF_ENT_ARQ_DANFE.ARQUIVO_DANFE IS NOT NULL);


	PRINT '  - REMOVER LOTES DE SAIDA DA PENDENCIA QUE JÁ FORAM REGISTRADOS';
	DELETE NFE_LOTE_PENDENTE FROM 	
		NFE_LOTE_PENDENTE 
	LEFT JOIN EST_NFE_LOTE_SAI ON
		EST_NFE_LOTE_SAI.CD_NFE_LOTE = NFE_LOTE_PENDENTE.CD_NFE_LOTE
	LEFT JOIN EST_NF_SAI_ARQ_DANFE ON
		EST_NF_SAI_ARQ_DANFE.CD_EMP = EST_NFE_LOTE_SAI.CD_EMP
		AND EST_NF_SAI_ARQ_DANFE.CD_FILIAL = EST_NFE_LOTE_SAI.CD_FILIAL
		AND EST_NF_SAI_ARQ_DANFE.CD_NF = EST_NFE_LOTE_SAI.CD_NF
	WHERE 
		(NFE_LOTE_PENDENTE.TP_LOTE = 0)
		AND (NFE_LOTE_PENDENTE.TP_NF = 1)
		AND (EST_NF_SAI_ARQ_DANFE.ARQUIVO_DANFE IS NOT NULL);


	PRINT '  - REMOVER LOTES DE ENTRADA DA PENDENCIA QUE SEJAM DE FILIAIS DESABILITADAS PARA NFE';
	DELETE NFE_LOTE_PENDENTE FROM       
		NFE_LOTE_PENDENTE
	INNER JOIN EST_NFE_LOTE_ENT NF ON
		NF.CD_NFE_LOTE = NFE_LOTE_PENDENTE.CD_NFE_LOTE
	INNER JOIN PRC_FILIAL FL ON
			FL.CD_EMP = NF.CD_EMP
		AND FL.CD_FILIAL = NF.CD_FILIAL
		AND FL.FLAG_NFE_HABILITADA = 0
	WHERE
			(NFE_LOTE_PENDENTE.TP_LOTE = 0)
		AND (NFE_LOTE_PENDENTE.TP_NF = 0);

	PRINT '  - REMOVER LOTES DE SAIDA DA PENDENCIA QUE SEJAM DE FILIAIS DESABILITADAS PARA NFE';
	DELETE NFE_LOTE_PENDENTE FROM       
		NFE_LOTE_PENDENTE
	INNER JOIN EST_NFE_LOTE_SAI NF ON
		NF.CD_NFE_LOTE = NFE_LOTE_PENDENTE.CD_NFE_LOTE
	INNER JOIN PRC_FILIAL FL ON
			FL.CD_EMP = NF.CD_EMP
		AND FL.CD_FILIAL = NF.CD_FILIAL
		AND FL.FLAG_NFE_HABILITADA = 0
	WHERE
			(NFE_LOTE_PENDENTE.TP_LOTE = 0)
		AND (NFE_LOTE_PENDENTE.TP_NF = 1);

GO


PRINT '    < [OK]';
