CREATE OR REPLACE
PROCEDURE EAM_IMPORTAR_ATIVOS(
	P_CDEMPRESA			IN EMPRESA.CDEMPRESA%TYPE,
	P_NRSEQCAPAENTBEM	IN CAPAENTRADABEM.NRSEQCAPAENTBEM%TYPE,
	P_DTINI				IN DATE,
	P_DTFIN				IN DATE,
	P_CDFORNECED		IN FORNECEDOR.CDFORNECED%TYPE,
	P_TCDFORNECED		IN VARCHAR2,
	P_CDFILIAL			IN FILIAL.CDFILIAL%TYPE,
	P_TCDFILIAL			IN VARCHAR2,
	P_CDSERIEENTR		IN NOTAFISCAL.CDSERIEENTR%TYPE,
	P_TCDSERIEENTR		IN VARCHAR2,
	P_NRNOTAFISCAL		IN NOTAFISCAL.NRNOTAFISC%TYPE,
	P_TNRNOTAFISCAL		IN VARCHAR2,
	P_PRODUTO			IN PRODUTO.CDPRODUTO%TYPE,
	P_TPRODUTO			IN VARCHAR2,
	P_TIPOOPER			IN NOTAFISCAL.CDTIPOOPER%TYPE,
	P_TTIPOOPER			IN VARCHAR2,
	P_OPRESPCAPA		IN OPERADOR.CDOPERADOR%TYPE,
	P_NRORG				IN NUMBER,
	P_TIPOINSERT		IN VARCHAR2,
	P_RETORNO			OUT VARCHAR2)
AS
	V_SEQCAPA		VARCHAR2(20);
	V_SEQITCAPA		VARCHAR2(20);
	V_TAXAFINAL		FLOAT;
	V_TAXABASICA	FLOAT;
	V_VRUNIT		FLOAT;
	V_DEPRECIA		GRUPOBEM.IDDEPRECIAGRBEM%TYPE;
	V_DEPRECIAFI	GRUPOBEM.IDDEPRECIAGRBEM%TYPE;
	V_MESES			FLOAT;
	V_MESESFI		FLOAT;
	V_VIDAUTIL		FLOAT;
	V_VIDAUTILFI	FLOAT;
	V_CONT			INTEGER;
BEGIN
	V_CONT := 0;
	P_RETORNO := NULL;
	
	IF (P_TIPOINSERT = 'NF') THEN
	
		IF P_NRSEQCAPAENTBEM IS NULL THEN
			NOVO_CODIGO_SC('CAPAENTRADABEM'||P_CDEMPRESA, V_SEQCAPA, 1, P_NRORG);
			V_SEQCAPA := SUBSTR(V_SEQCAPA,-10);
			INSERT INTO CAPAENTRADABEM
						(CDEMPRESA,		 NRSEQCAPAENTBEM,	DTCAPAENTBEM,
						DTINCCAPAENTBEM, CDOPEINCCAPAENT,	CDOPEATUCAPAENT,
						DTATUCAPAENTBEM, IDSITCAPAENTBEM, 	IDATIVO,
						DTINCLUSAO, 	 CDOPERINCLUSAO, 	NRORGINCLUSAO)
				VALUES (P_CDEMPRESA,	 V_SEQCAPA,			SYSDATE,
						SYSDATE,		 P_OPRESPCAPA,		P_OPRESPCAPA,
						SYSDATE,		 '1', 				'S',
						SYSDATE, 		 P_OPRESPCAPA,		P_NRORG);
		ELSE
			V_SEQCAPA := P_NRSEQCAPAENTBEM;
		END IF;
		
		FOR C_IMPORT_ATIVOS IN (SELECT PRODUTO.CDPRODUTO,			ITEMPRODUTO.QTITEMPROD,
									   ITEMPRODUTO.VRUNITITEM,		ITEMPRODUTO.VRTOTAITEM,
									   NOTAFISCAL.DTENTRSAID,		NOTAFISCAL.CDSERIEENTR,
									   NOTAFISCAL.NRNOTAFISC,		NOTAFISCAL.CDFILIRECE,
									   NOTAFISCAL.CDFILIAL,			NOTAFISCAL.NRLANCTONF,
									   NOTAFISCAL.CDFORNECED,		FILIAL.CDCENTCUST,
									   PRODUTO.CDARVPROD,			PRODUTO.NMPRODUTO,
									   PRODUTO.SGUNIDADE,			PR.CDGRUPOBEM,
									   PR.CDREGIMEBEM,				PR.CDTIPODEPREC,
									   GRUPOBEM.QTMESDEPREFISC,		GRUPOBEM.QTMESDEPREGRBEM,
									   GRUPOBEM.IDDEPRECIAGRBEM,	GRUPOBEM.IDDEPRECIAFISC,
									   TIPODEPREC.VRTXINCFISTPDEP,  TIPODEPREC.VRTXINCFISTPFIS,
									   TIPODEPREC.NRCOETIPODEP,		TIPODEPREC.NRCOETIPODEPFIS,
									   FORNECEDOR.NMRAZSOCFORN
								  FROM NOTAFISCAL, ITEMPRODUTO, PRODUTO, FILIAL, GRUPOBEM,
									   TIPODEPREC, FORNECEDOR, (SELECT PR.CDARVPROD, PA.CDEMPRESA, PA.CDGRUPOBEM, PA.CDREGIMEBEM, PA.CDTIPODEPREC
																  FROM PRODUTO PR, PRODUTOATIVO PA
																 WHERE (PA.CDEMPRESA = P_CDEMPRESA)
																   AND (PR.CDPRODUTO = PA.CDPRODUTO)) PR
								 WHERE NOTAFISCAL.CDEMPRESA    = P_CDEMPRESA
								   AND NOTAFISCAL.CDFILIAL     = ITEMPRODUTO.CDFILIAL
								   AND NOTAFISCAL.NRLANCTONF   = ITEMPRODUTO.NRLANCTONF
								   AND ITEMPRODUTO.CDPRODUTO   = PRODUTO.CDPRODUTO
								   AND NOTAFISCAL.CDFILIRECE   = FILIAL.CDFILIAL
								   AND NOTAFISCAL.CDFORNECED   = FORNECEDOR.CDFORNECED
								   AND ((TRUNC(NOTAFISCAL.DTENTRSAID) BETWEEN P_DTINI AND P_DTFIN))
								   AND NOTAFISCAL.IDENTRSAIDOP = 'E'
								   AND NOTAFISCAL.IDSTATUS     IN ('A', 'E')
								   AND NOTAFISCAL.IDSISTEMA    = 'DFE'
								   AND NOTAFISCAL.CDSERIEENTR  IS NOT NULL
								   AND NOTAFISCAL.NRNOTAFISC   IS NOT NULL
								   AND NOTAFISCAL.CDEMPRESA   = PR.CDEMPRESA
								   AND PR.CDEMPRESA = GRUPOBEM.CDEMPRESA(+)
								   AND PR.CDGRUPOBEM = GRUPOBEM.CDGRUPOBEM(+)
								   AND PR.CDEMPRESA = TIPODEPREC.CDEMPRESA(+)
								   AND PR.CDTIPODEPREC = TIPODEPREC.CDTIPODEPREC(+)
								   AND (PRODUTO.CDARVPROD BETWEEN PR.CDARVPROD AND RPAD(PR.CDARVPROD,20,'z'))
								   AND ((INSTR(P_PRODUTO,PRODUTO.CDARVPROD) > 0) OR (P_TPRODUTO = 'T'))
								   AND ((INSTR(P_TIPOOPER, NOTAFISCAL.CDTIPOOPER) > 0) OR (P_TTIPOOPER = 'T'))
								   AND ((INSTR(P_CDFORNECED,NOTAFISCAL.CDFORNECED) > 0) OR (P_TCDFORNECED = 'T'))
								   AND ((INSTR(P_CDFILIAL,NOTAFISCAL.CDFILIRECE) > 0) OR (P_TCDFILIAL = 'T'))
								   AND ((INSTR(P_CDSERIEENTR,NOTAFISCAL.CDSERIEENTR) > 0) OR (P_TCDSERIEENTR = 'T'))
								   AND ((INSTR(P_NRNOTAFISCAL, NOTAFISCAL.NRNOTAFISC||NOTAFISCAL.NRLANCTONF) > 0) OR (P_TNRNOTAFISCAL = 'T'))
								   AND NOT EXISTS (SELECT NRLANCTONF, CDPRODUTO, NMBEMITCAPAENT, DTATUITCAPAENT
													 FROM ITCAPAENTRABEM IT   
													WHERE (IT.CDEMPRESA = NOTAFISCAL.CDEMPRESA)
													  AND (IT.NRLANCTONF = ITEMPRODUTO.NRLANCTONF)
													  AND (IT.CDFILIALNF  = ITEMPRODUTO.CDFILIAL)
													  AND (IT.CDPRODUTO = ITEMPRODUTO.CDPRODUTO))
								   ORDER BY CDPRODUTO)
		LOOP
			NOVO_CODIGO('ITCAPAENTRABEM'||P_CDEMPRESA||V_SEQCAPA, V_SEQITCAPA, 1, P_NRORG);
			V_SEQITCAPA := SUBSTR(V_SEQITCAPA,-10);
			V_VRUNIT 	:= C_IMPORT_ATIVOS.QTITEMPROD * C_IMPORT_ATIVOS.VRUNITITEM;
			
			CALCULOS_GPA(P_CDEMPRESA, C_IMPORT_ATIVOS.CDGRUPOBEM, C_IMPORT_ATIVOS.CDTIPODEPREC, C_IMPORT_ATIVOS.CDREGIMEBEM, 'N', 0, V_DEPRECIA, V_DEPRECIAFI, V_MESES, V_MESESFI, V_VIDAUTIL, V_VIDAUTILFI);
			
			INSERT INTO ITCAPAENTRABEM
						(CDEMPRESA, 					NRSEQCAPAENTBEM,				NRSEQITCAPAENT,
						NMBEMITCAPAENT,					QTBEMITCAPAENT,					DTAQUIITCAPAENT,
						VRAQUIITCAPAENT,				DTINIDEPITCENT,					VRINIDEPITCENT,
						VRJADEPITCENT, 					DTULTDEPITCENT,					CDFILIALITCENT,
						CDCENTCUITCENT, 				CDSETORITCENT, 					DSLOCALITCENT,
						CDGRUPOITCENT,					QTMESDEPITCENT,					CDTIPODEPREC,
						CDPRODUTO,						SGUNIDADE,						CDFORNECEITCENT,
						CDSERIENFITCENT,				NRNOTAFISITCENT,				IDBEMITCAPAENT,
						DSOBSITCAPAENT,					DTINCITCAPAENT,					CDOPEINCITCENT,
						DTATUITCAPAENT,					CDOPEATUITCENT,					CDFILIALNF,
						NRLANCTONF,						CDREGIMEBEM,					VRINIDEPITCENFI,
						VRJADEPITCENFI,					VRAQUIITCENFI,					DTINIDEPITCENFI,
						QTMESDEPITCENFI,				VRTAXDEPITCENT,					VRTAXDEPITCENFI,
						NMFORNECEITCENT, 				IDATIVO,						DTINCLUSAO,
						CDOPERINCLUSAO,					NRORGINCLUSAO,					CDOPERESPITCENT)
				 VALUES (P_CDEMPRESA,					V_SEQCAPA,						V_SEQITCAPA,
						C_IMPORT_ATIVOS.NMPRODUTO,		C_IMPORT_ATIVOS.QTITEMPROD,		C_IMPORT_ATIVOS.DTENTRSAID,
						V_VRUNIT,						C_IMPORT_ATIVOS.DTENTRSAID,		V_VRUNIT,
						0,								NULL,							C_IMPORT_ATIVOS.CDFILIRECE,
						C_IMPORT_ATIVOS.CDCENTCUST, 	NULL,							NULL,
						C_IMPORT_ATIVOS.CDGRUPOBEM,		V_MESES,						C_IMPORT_ATIVOS.CDTIPODEPREC,
						C_IMPORT_ATIVOS.CDPRODUTO,		C_IMPORT_ATIVOS.SGUNIDADE,		C_IMPORT_ATIVOS.CDFORNECED,
						C_IMPORT_ATIVOS.CDSERIEENTR,	C_IMPORT_ATIVOS.NRNOTAFISC,		'3',
						NULL,							SYSDATE,						P_OPRESPCAPA,
						SYSDATE,						P_OPRESPCAPA,					C_IMPORT_ATIVOS.CDFILIAL,
						C_IMPORT_ATIVOS.NRLANCTONF,		C_IMPORT_ATIVOS.CDREGIMEBEM,	V_VRUNIT,
						0,								V_VRUNIT,						C_IMPORT_ATIVOS.DTENTRSAID,
						V_MESESFI,						V_VIDAUTIL,						V_VIDAUTILFI,
						C_IMPORT_ATIVOS.NMRAZSOCFORN, 	'S', 							SYSDATE,
						P_OPRESPCAPA, 					P_NRORG,						P_OPRESPCAPA);
						
			INSERT INTO QTITCAPAENTRABE
					   (CDEMPRESA,			NRSEQCAPAENTBEM,			NRSEQITCAPAENT,
					    NRSEQQTITCAPAEN,    NRBEMQTITCAPAEN,    		QTBEMQTITCAPAEN,
						IDATIVO,			DTINCLUSAO, 				CDOPERINCLUSAO,
						NRORGINCLUSAO)
			    VALUES (P_CDEMPRESA,	    V_SEQCAPA,		    		V_SEQITCAPA,
					    '00001',		    C_IMPORT_ATIVOS.QTITEMPROD,	1,
						'S',				SYSDATE,					P_OPRESPCAPA,
						P_NRORG);
		
			V_CONT := V_CONT + 1;
		END LOOP;
	END IF;
	
	IF (V_CONT > 0) THEN
		P_RETORNO := 'TRUE';
	ELSE
		P_RETORNO := 'FALSE';
		ROLLBACK;
	END IF;
END;
/