CREATE OR REPLACE PROCEDURE APROPRIACAO_EAM(
	P_CDEMPRESA		  IN EMPRESA.CDEMPRESA%TYPE,
	P_NRSEQCIAP		  IN CONTROLECIAP.NRSEQCIAP%TYPE,
	P_DTCOMPETENCIA   IN DATE,
	P_CDIMPOSTO		  IN IMPOSTO.CDIMPOSTO%TYPE,
	P_VRCOEFIPARCCIAP IN FLOAT,
	P_IDOPERACAO	  IN VARCHAR2,
	P_RETORNO		  OUT VARCHAR2)
AS
	V_IMPOSTONFE IMPOSTO.CDIMPOSTONFE%TYPE;
	V_APROPRIAR FLOAT;
	V_PARCELA FLOAT;
	V_NRPARCELA VARCHAR2(10);
	V_EXISTE INTEGER;
	V_CONT INTEGER;
BEGIN
	V_IMPOSTONFE := GET_VERIFICA_IMPOSTO(P_CDIMPOSTO);
	IF (P_IDOPERACAO = 'A') THEN
		V_CONT := 0;
		FOR C_VERIFICA_ATIVO IN (SELECT BEMCONTROLECIAP.CDBEMATIVO, NVL(PARCELACIAPBEM.VRPARCELACIAP,BEMCONTROLECIAP.VRPARCELACIAP) AS VRPARCELACIAP, BEMATIVO.QTMESDEPBEM, BEMCONTROLECIAP.IDTPAPROPPISCOF, BEMATIVO.DTINIDEPRECBEM
								  FROM BEMCONTROLECIAP, PARCELACIAPBEM, BEMATIVO
								 WHERE BEMCONTROLECIAP.CDEMPRESA  	 = P_CDEMPRESA
								   AND BEMCONTROLECIAP.CDIMPOSTO  	 = P_CDIMPOSTO
								   AND BEMCONTROLECIAP.DTCOMPETECIAP = P_DTCOMPETENCIA
								   AND BEMCONTROLECIAP.CDEMPRESA  	 = PARCELACIAPBEM.CDEMPRESA(+)
								   AND BEMCONTROLECIAP.CDBEMATIVO 	 = PARCELACIAPBEM.CDBEMATIVO(+)
								   AND BEMCONTROLECIAP.CDIMPOSTO  	 = PARCELACIAPBEM.CDIMPOSTO(+)
								   AND BEMCONTROLECIAP.NRSEQCIAP 	 = P_NRSEQCIAP
								   AND TO_CHAR(BEMCONTROLECIAP.DTCOMPETECIAP, 'MM/YYYY') = TO_CHAR(PARCELACIAPBEM.DTCOMPPARCCIAP(+),'MM/YYYY')
								   AND BEMATIVO.CDEMPRESA = BEMCONTROLECIAP.CDEMPRESA
								   AND BEMATIVO.CDBEMATIVO = BEMCONTROLECIAP.CDBEMATIVO)
		LOOP
			V_CONT := V_CONT + 1;
			IF ((V_IMPOSTONFE = '60') OR (V_IMPOSTONFE = '50')) THEN
				V_APROPRIAR := C_VERIFICA_ATIVO.VRPARCELACIAP;
				IF ((C_VERIFICA_ATIVO.IDTPAPROPPISCOF = '09') OR (C_VERIFICA_ATIVO.IDTPAPROPPISCOF = '11')) THEN
					SELECT COUNT(*)
					  INTO V_EXISTE
					  FROM PARCELACIAPBEM
					 WHERE CDBEMATIVO 	  = C_VERIFICA_ATIVO.CDBEMATIVO
					   AND DTCOMPPARCCIAP = P_DTCOMPETENCIA
					   AND CDEMPRESA 	  = P_CDEMPRESA
					   AND CDIMPOSTO 	  = P_CDIMPOSTO;
					
					IF (V_EXISTE = 0) THEN
						V_NRPARCELA := LPAD(TO_CHAR(TRUNC(((P_DTCOMPETENCIA - C_VERIFICA_ATIVO.DTINIDEPRECBEM)/365)*12 + 1)),LENGTH(C_VERIFICA_ATIVO.QTMESDEPBEM))+'/'+ C_VERIFICA_ATIVO.QTMESDEPBEM;
						
						INSERT INTO PARCELACIAPBEM(CDEMPRESA,		CDIMPOSTO,		CDBEMATIVO,
												   NRPARCELACIAP,	VRPARCELACIAP,	VRAPROPARCCIAP,
												   DTCOMPPARCCIAP)
											VALUES(P_CDEMPRESA,		P_CDIMPOSTO,	C_VERIFICA_ATIVO.CDBEMATIVO,
												   V_NRPARCELA, 	V_APROPRIAR,	V_APROPRIAR,
												   P_DTCOMPETENCIA);
					END IF;
				END IF;
			ELSE
				V_APROPRIAR := C_VERIFICA_ATIVO.VRPARCELACIAP * P_VRCOEFIPARCCIAP;
			END IF;
			UPDATE PARCELACIAPBEM
			   SET VRCOEFIPARCCIAP 	= P_VRCOEFIPARCCIAP,
				   VRAPROPARCCIAP  	= V_APROPRIAR
			 WHERE CDEMPRESA  		= P_CDEMPRESA
			   AND CDBEMATIVO 		= C_VERIFICA_ATIVO.CDBEMATIVO
			   AND CDIMPOSTO  		= P_CDIMPOSTO
			   AND DTCOMPPARCCIAP  	= P_DTCOMPETENCIA;
		END LOOP;
		IF (V_CONT > 0) THEN
			UPDATE CONTROLECIAP
			   SET IDSITCOMPETCIAP 	= 'A'
			 WHERE CDEMPRESA     	= P_CDEMPRESA
			   AND CDIMPOSTO     	= P_CDIMPOSTO
			   AND DTCOMPETECIAP 	= P_DTCOMPETENCIA
			   AND NRSEQCIAP    	= P_NRSEQCIAP;
			COMMIT;
			P_RETORNO := 'V';
		ELSE
			ROLLBACK;
			P_RETORNO := 'F';
		END IF;
	ELSE
		P_RETORNO := NULL;
		IF (P_IDOPERACAO = 'C') THEN
			FOR C_CANCELAR IN (SELECT BC.CDBEMATIVO, BA.IDTPAPROPPISCOF
										  FROM BEMCONTROLECIAP BC, BEMATIVO BA
										 WHERE BC.CDIMPOSTO     = P_CDIMPOSTO
										   AND BC.CDEMPRESA     = P_CDEMPRESA
										   AND DTCOMPETECIAP	= P_DTCOMPETENCIA
										   AND NRSEQCIAP    	= P_NRSEQCIAP
										   AND BA.CDEMPRESA 	= BC.CDEMPRESA
										   AND BA.CDBEMATIVO 	= BC.CDBEMATIVO)
			LOOP
				IF ((C_CANCELAR.IDTPAPROPPISCOF = '09') OR (C_CANCELAR.IDTPAPROPPISCOF = '11')) AND ((V_IMPOSTONFE = '50') OR (V_IMPOSTONFE = '60')) THEN
					DELETE FROM PARCELACIAPBEM
						 WHERE CDEMPRESA		= P_CDEMPRESA
						   AND CDBEMATIVO 		= C_CANCELAR.CDBEMATIVO
						   AND CDIMPOSTO 		= P_CDIMPOSTO
						   AND DTCOMPPARCCIAP	= P_DTCOMPETENCIA;
				ELSE
					UPDATE PARCELACIAPBEM
					   SET VRCOEFIPARCCIAP 	= NULL,
						   VRAPROPARCCIAP  	= NULL
					 WHERE CDEMPRESA 		= P_CDEMPRESA
					   AND CDIMPOSTO 		= P_CDIMPOSTO
					   AND CDBEMATIVO 		= C_CANCELAR.CDBEMATIVO
					   AND DTCOMPPARCCIAP 	= P_DTCOMPETENCIA;
				END IF;
			END LOOP;
			UPDATE CONTROLECIAP
			   SET IDSITCOMPETCIAP 	= 'P'
			 WHERE CDEMPRESA     	= P_CDEMPRESA
			   AND CDIMPOSTO     	= P_CDIMPOSTO
			   AND DTCOMPETECIAP 	= P_DTCOMPETENCIA
			   AND NRSEQCIAP    	= P_NRSEQCIAP;
		END IF;
	END IF;
END;
/