CREATE OR REPLACE PROCEDURE EAM_PROCESSAR_BAIXA(
	P_CDEMPRESA			IN EMPRESA.CDEMPRESA%TYPE,
	P_NRSEQCAPAOPEBEM	IN CAPAOPERABEM.NRSEQCAPAOPEBEM%TYPE,
	P_CDOPERADOR		IN OPERADOR.CDOPERADOR%TYPE,
	P_IDSIMULOPERABEM	IN CAPAOPERABEM.IDSIMULOPERABEM%TYPE,
	P_OPERACAO			IN VARCHAR2, -- P = PROCESSAR, C = CANCELAR
	P_RETORNO			OUT VARCHAR2)
AS
	V_RETORNO VARCHAR2(10);
BEGIN
	IF (P_OPERACAO = 'P') THEN
		FECHA_OPERACIONAL(P_CDEMPRESA, NULL, P_NRSEQCAPAOPEBEM, P_IDSIMULOPERABEM, P_CDOPERADOR, 'P', 'TB', NULL);
		FECHA_CONTABILIDADE(P_CDEMPRESA, NULL, P_NRSEQCAPAOPEBEM, P_IDSIMULOPERABEM, P_CDOPERADOR, 'C', 'TB', V_RETORNO);
		
		FOR C_BAIXA IN (SELECT B.CDBEMATIVO, B.QTATUABEMATIVO, B.DTBAIXAPARCBEMA, B.DTBAIXATOTABEMA 
						  FROM BEMATIVO B, ITCAPAOPERABEM IT
						 WHERE B.CDEMPRESA 			= P_CDEMPRESA 
						   AND IT.NRSEQCAPAOPEBEM 	= P_NRSEQCAPAOPEBEM 
						   AND B.CDBEMATIVO			= IT.CDBEMATIVO)
		LOOP
			IF (C_BAIXA.QTATUABEMATIVO <= 0) THEN
				UPDATE BEMATIVO
				   SET DTBAIXATOTABEMA = SYSDATE
				 WHERE CDEMPRESA 	   = P_CDEMPRESA
				   AND CDBEMATIVO 	   = C_BAIXA.CDBEMATIVO;
			ELSE
				UPDATE BEMATIVO 
				   SET DTBAIXAPARCBEMA = SYSDATE
				 WHERE CDEMPRESA 	   = P_CDEMPRESA 
				   AND CDBEMATIVO      = C_BAIXA.CDBEMATIVO;
			END IF;
		END LOOP;
		P_RETORNO := 'PROCESSADO';
	ELSE
		IF (P_OPERACAO = 'C') THEN
			UPDATE CAPAOPERABEM
			   SET IDSITCAPAOPER   = '1'
			 WHERE CDEMPRESA       = P_CDEMPRESA
			   AND NRSEQCAPAOPEBEM = P_NRSEQCAPAOPEBEM
			   AND IDSIMULOPERABEM = 'R';
			
			UPDATE ITCAPAOPERABEM
			   SET NRSEQOPERABEM   = NULL
			 WHERE CDEMPRESA	   = P_CDEMPRESA
			   AND NRSEQCAPAOPEBEM = P_NRSEQCAPAOPEBEM
			   AND IDSIMULOPERABEM = 'R';
			
			FOR C_BAIXA IN (SELECT B.CDBEMATIVO, B.QTATUABEMATIVO, B.DTBAIXAPARCBEMA, B.DTBAIXATOTABEMA 
						  FROM BEMATIVO B, ITCAPAOPERABEM IT
						 WHERE B.CDEMPRESA 			= P_CDEMPRESA
						   AND IT.NRSEQCAPAOPEBEM 	= P_NRSEQCAPAOPEBEM
						   AND B.CDBEMATIVO			= IT.CDBEMATIVO)
			LOOP
				IF (C_BAIXA.QTATUABEMATIVO <= 0) THEN
					UPDATE BEMATIVO
					   SET DTBAIXATOTABEMA = NULL
					 WHERE CDEMPRESA 	   = P_CDEMPRESA
					   AND CDBEMATIVO 	   = C_BAIXA.CDBEMATIVO;
				ELSE
					UPDATE BEMATIVO
					   SET DTBAIXAPARCBEMA = NULL
					 WHERE CDEMPRESA 	   = P_CDEMPRESA
					   AND CDBEMATIVO      = C_BAIXA.CDBEMATIVO;
				END IF;
			END LOOP;
			
			FOR C_OPERACAOBEM IN (SELECT OPERACAOBEM.NRSEQOPERABEM, ITCAPAOPERABEM.CDBEMATIVO
								  FROM OPERACAOBEM, ITCAPAOPERABEM, CAPAOPERABEM
								 WHERE OPERACAOBEM.CDEMPRESA          = P_CDEMPRESA
								   AND CAPAOPERABEM.NRSEQCAPAOPEBEM   = P_NRSEQCAPAOPEBEM
								   AND ITCAPAOPERABEM.CDEMPRESA       = OPERACAOBEM.CDEMPRESA
								   AND ITCAPAOPERABEM.CDBEMATIVO      = OPERACAOBEM.CDBEMATIVO
								   AND ITCAPAOPERABEM.IDSIMULOPERABEM = OPERACAOBEM.IDSIMULOPERACAO
								   AND ITCAPAOPERABEM.CDEMPRESA       = CAPAOPERABEM.CDEMPRESA
								   AND ITCAPAOPERABEM.IDSIMULOPERABEM = CAPAOPERABEM.IDSIMULOPERABEM
								   AND ITCAPAOPERABEM.NRSEQCAPAOPEBEM = CAPAOPERABEM.NRSEQCAPAOPEBEM
								   AND ITCAPAOPERABEM.NRSEQOPERABEM   = OPERACAOBEM.NRSEQOPERABEM
								   AND (OPERACAOBEM.IDIDENTOPERABEM   = '04' OR OPERACAOBEM.IDIDENTOPERABEM  = '05'))
			LOOP
				DELETE
				  FROM OPERACAOBEM
				 WHERE CDEMPRESA       = P_CDEMPRESA
				   AND CDBEMATIVO      = C_OPERACAOBEM.CDBEMATIVO
				   AND IDSIMULOPERACAO = 'R'
				   AND NRSEQOPERABEM   = C_OPERACAOBEM.NRSEQOPERABEM;
			END LOOP;
			
			DELETE
			  FROM CTBLITCAPAOPER
			 WHERE CDEMPRESA       = P_CDEMPRESA
			   AND IDSIMULOPERABEM = 'R'
			   AND NRSEQCAPAOPEBEM = P_NRSEQCAPAOPEBEM;
			
			FOR C_BEMATIVO IN (SELECT BEMATIVO.CDBEMATIVO, ITCAPAOPERABEM.QTITCAPAOPENOVO, BEMATIVO.QTATUABEMATIVO,
										ITCAPAOPERABEM.VRAQUIBEMANTE, ITCAPAOPERABEM.VRINIDEPBEMANTE, ITCAPAOPERABEM.VRJADEPBEMANTE,
										ITCAPAOPERABEM.VRFALTADEPANTE
								  FROM ITCAPAOPERABEM, BEMATIVO, CAPAOPERABEM
								 WHERE P_CDEMPRESA                    = ITCAPAOPERABEM.CDEMPRESA
								   AND P_NRSEQCAPAOPEBEM              = CAPAOPERABEM.NRSEQCAPAOPEBEM
								   AND ITCAPAOPERABEM.CDEMPRESA       = CAPAOPERABEM.CDEMPRESA
								   AND ITCAPAOPERABEM.IDSIMULOPERABEM = CAPAOPERABEM.IDSIMULOPERABEM
								   AND ITCAPAOPERABEM.NRSEQCAPAOPEBEM = CAPAOPERABEM.NRSEQCAPAOPEBEM
								   AND ITCAPAOPERABEM.CDEMPRESA       = BEMATIVO.CDEMPRESA
								   AND ITCAPAOPERABEM.CDBEMATIVO      = BEMATIVO.CDBEMATIVO)
			LOOP
				UPDATE BEMATIVO
				   SET QTATUABEMATIVO  = (C_BEMATIVO.QTITCAPAOPENOVO + C_BEMATIVO.QTATUABEMATIVO),
					   VRAQUIBEMATIVO  = NVL(C_BEMATIVO.VRAQUIBEMANTE,VRAQUIBEMATIVO),
					   VRINIDEPBEM     = NVL(C_BEMATIVO.VRINIDEPBEMANTE, VRINIDEPBEM),
					   VRJADEPBEMATIVO = NVL(C_BEMATIVO.VRJADEPBEMANTE, VRJADEPBEMATIVO),
					   VRFALTADEPBEM   = NVL(C_BEMATIVO.VRFALTADEPANTE, VRFALTADEPBEM),
					   VRAQUIBEMFISC   = DECODE(C_BEMATIVO.QTATUABEMATIVO,0,VRAQUIBEMFISC,((VRAQUIBEMFISC * (C_BEMATIVO.QTITCAPAOPENOVO + C_BEMATIVO.QTATUABEMATIVO)) / DECODE(C_BEMATIVO.QTATUABEMATIVO,0,1,C_BEMATIVO.QTATUABEMATIVO))),
					   VRINIDEPRECFIS  = DECODE(C_BEMATIVO.QTATUABEMATIVO,0,VRINIDEPRECFIS, ((VRINIDEPRECFIS * (C_BEMATIVO.QTITCAPAOPENOVO + C_BEMATIVO.QTATUABEMATIVO)) / DECODE(C_BEMATIVO.QTATUABEMATIVO,0,1,C_BEMATIVO.QTATUABEMATIVO))),
					   VRJADEPBEMFISC  = DECODE(C_BEMATIVO.QTATUABEMATIVO,0,VRJADEPBEMFISC,((VRJADEPBEMFISC * (C_BEMATIVO.QTITCAPAOPENOVO + C_BEMATIVO.QTATUABEMATIVO)) / DECODE(C_BEMATIVO.QTATUABEMATIVO,0,1,C_BEMATIVO.QTATUABEMATIVO))),
					   VRFALTDEPBEMFIS = DECODE(C_BEMATIVO.QTATUABEMATIVO,0,VRFALTDEPBEMFIS,((VRFALTDEPBEMFIS * (C_BEMATIVO.QTITCAPAOPENOVO + C_BEMATIVO.QTATUABEMATIVO)) / DECODE(C_BEMATIVO.QTATUABEMATIVO,0,1,C_BEMATIVO.QTATUABEMATIVO)))
				 WHERE CDEMPRESA       = P_CDEMPRESA
				   AND CDBEMATIVO      = C_BEMATIVO.CDBEMATIVO;
			END LOOP;
			P_RETORNO := 'CANCELADO';
		ELSE
			P_RETORNO := '';
		END IF;
	END IF;
END;
/
