CREATE OR REPLACE PROCEDURE EAM_IMPORTA_ESTORNO(V_ERRO OUT VARCHAR2)
IS
   V_CDREDUCONT VARCHAR2(3);
   V_NRMOVBANC VARCHAR2(10);
   V_NRMOVBANCEST VARCHAR2(20);
   V_NRLCTBBREC VARCHAR2(12);
   V_CDEMPRESA VARCHAR2(2);
   V_COUNTBAIXA FLOAT;
   V_COUNTBOLETOBAIXA FLOAT;
   V_NRMOVDEBI VARCHAR2(20);
   V_CDCLASSFINATPDEB VARCHAR2(6);
   V_CDFILIALBAIXA VARCHAR2(4);
BEGIN
   FOR C_ESTORNOS IN(SELECT E.DTESTORNO, E.CODBOLETO,E.CODTRANSACAO
                       FROM USR_EAM_ESTORNO E
                      WHERE E.DTIMPORTACAO IS NULL
                        AND E.ERRO IS NULL) LOOP

	     FOR C_BOLETOS IN(SELECT DISTINCT B.USR_CODBOLETO, B.NRBAIXAREC, B.CDFILIBAIREC, B.VRFINALBREC, B.NRLANBOLREC, B.CDFILIAL
                         FROM BOLETRECEBER B
                        WHERE B.USR_CODBOLETO = C_ESTORNOS.CODBOLETO) LOOP

			      --Verifica se existe baixa para o boleto, caso não exista não é realizada a rotina de estorno
         BEGIN
            SELECT NRMOVBANC, CDREDUCONT, NRLCTBBREC, CDEMPRESA, CDFILIAL
              INTO V_NRMOVBANC, V_CDREDUCONT, V_NRLCTBBREC, V_CDEMPRESA,V_CDFILIALBAIXA
              FROM BAIXARECEBIDA
             WHERE NRBAIXAREC = C_BOLETOS.NRBAIXAREC
               AND CDFILIAL = C_BOLETOS.CDFILIBAIREC;
         EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_NRMOVBANC := NULL;
            V_CDREDUCONT := NULL;
            V_NRLCTBBREC := NULL;
            V_CDEMPRESA := NULL;
        END;

        BEGIN
           SELECT COUNT(NRLANBOLREC)
             INTO V_COUNTBOLETOBAIXA
             FROM BOLETRECEBER
            WHERE NRBAIXAREC = C_BOLETOS.NRBAIXAREC
              AND CDFILIAL = C_BOLETOS.CDFILIBAIREC;
        EXCEPTION
           WHEN NO_DATA_FOUND THEN
              V_COUNTBOLETOBAIXA := 0;
        END;

        BEGIN
           SELECT CDCLASSFINA
             INTO V_CDCLASSFINATPDEB
             FROM TPDEBIBANC
            WHERE CDTPDEBIBANC = '9999';
        EXCEPTION
           WHEN NO_DATA_FOUND THEN
              V_CDCLASSFINATPDEB := NULL;
			     END;

        IF (V_NRMOVBANC IS NULL) THEN
           UPDATE USR_EAM_ESTORNO
              SET ERRO = 'A TRANSAÇÃO DE ESTORNO DE CÓDIGO '||C_ESTORNOS.CODTRANSACAO||
                          'NÃO FOI IMPORTADA POIS NÃO FOI ENCONTRADA BAIXA RELACIONADA AO BOLETO'
            WHERE CODTRANSACAO = C_ESTORNOS.CODTRANSACAO;
        ELSIF (V_COUNTBOLETOBAIXA > 1) THEN
            UPDATE USR_EAM_ESTORNO
               SET ERRO = 'A TRANSAÇÃO DE ESTORNO DE CÓDIGO '||C_ESTORNOS.CODTRANSACAO||
                          'NÃO FOI IMPORTADA POIS EXISTE MAIS DE UM BOLETO RELACIONADO A BAIXA'
             WHERE CODTRANSACAO = C_ESTORNOS.CODTRANSACAO;
        ELSIF (V_CDCLASSFINATPDEB IS NULL) THEN
           UPDATE USR_EAM_ESTORNO
              SET ERRO = 'A TRANSAÇÃO DE ESTORNO DE CÓDIGO '||C_ESTORNOS.CODTRANSACAO||
                          'NÃO FOI IMPORTADA POIS NÃO EXISTE TIPO DE DÉBITO BANCÁRIO CADASTRADO COM O CÓDIGO 9999'
            WHERE CODTRANSACAO = C_ESTORNOS.CODTRANSACAO;
        ELSE
            UPDATE BOLETRECEBER
               SET IDSTATBREC = 'A',
                   CDFILIBAIREC = NULL,
                   NRBAIXAREC = NULL,
                   DTLIQBOLREC = NULL
             WHERE NRLANBOLREC = C_BOLETOS.NRLANBOLREC
               AND CDFILIAL = C_BOLETOS.CDFILIAL;

            UPDATE CONTARECEBER
               SET IDSTATREC = 'A'
             WHERE CDFILIBOLREC = C_BOLETOS.CDFILIAL
               AND NRLANBOLREC = C_BOLETOS.NRLANBOLREC;

            DELETE FROM BAIXARECEBIDA
             WHERE NRBAIXAREC = C_BOLETOS.NRBAIXAREC
               AND CDFILIAL = C_BOLETOS.CDFILIBAIREC;

            DELETE FROM LANCCONT
             WHERE NRLANCCONT = V_NRLCTBBREC
               AND CDEMPRESA = V_CDEMPRESA;

            NOVO_CODIGO_NT('MOVBANCARIO' || V_CDREDUCONT, V_NRMOVBANCEST);
            V_NRMOVBANCEST := SUBSTR(V_NRMOVBANCEST, 11, 10);

            INSERT INTO MOVBANCARIO
               (CDREDUCONT, NRMOVBANC,  NRMOVBANCORIG, DTMOVBANC, IDMOVBANC,
                NRDOCMBANC, DSHISMBANC, VRMOVBANC, IDORIGMBANC,
                IDSTCONEXT)
               (SELECT CDREDUCONT, V_NRMOVBANCEST, V_NRMOVBANC, C_ESTORNOS.DTESTORNO, 'D',
                        NRDOCMBANC, 'ESTORNO DE RECEBIMENTO', C_BOLETOS.VRFINALBREC, 'R','0'
                  FROM MOVBANCARIO
                 WHERE CDREDUCONT = V_CDREDUCONT AND
                       NRMOVBANC  = V_NRMOVBANC);

      				  NOVO_CODIGO_NT('MOVDEBBANC' || V_CDREDUCONT, V_NRMOVDEBI);
            V_NRMOVDEBI := SUBSTR(V_NRMOVDEBI, 11, 10);

            ATUALIZA_FLUXO_DE_CAIXA(V_CDEMPRESA, V_CDFILIALBAIXA, C_ESTORNOS.DTESTORNO, 'R', V_CDCLASSFINATPDEB, 0, ABS(C_BOLETOS.VRFINALBREC));
                    ATUALIZA_SALDO_BANCARIO(V_CDREDUCONT, C_ESTORNOS.DTESTORNO, ABS(C_BOLETOS.VRFINALBREC)*-1, '1');
            INSERT INTO MOVDEBBANC
               (CDREDUCONT, NRMOVIDEBI, CDEMPRESA, CDFILIAL, DTMOVFLUXO, IDMOVFLUXO, NRMOVBANC,
                CDTPDEBIBANC, DTMOVIDEBI, DSMOVIDEBI, VRMOVIDEBI, CDFILILANDEB, CDCLASSFINA,
                CDECTBMDEB)
            VALUES
               (V_CDREDUCONT, V_NRMOVDEBI, V_CDEMPRESA, V_CDFILIALBAIXA, C_ESTORNOS.DTESTORNO, 'R', V_NRMOVBANCEST,
                '9999', C_ESTORNOS.DTESTORNO, 'Estorno de Recebimento', C_BOLETOS.VRFINALBREC, V_CDFILIALBAIXA, V_CDCLASSFINATPDEB,
                V_CDEMPRESA);

            UPDATE USR_EAM_ESTORNO
               SET DTIMPORTACAO = SYSDATE
             WHERE CODTRANSACAO = C_ESTORNOS.CODTRANSACAO;

			     END IF;
	     END LOOP;
      COMMIT;
   END LOOP;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('EAM_IMPORTA_ESTORNO','6.25.xxx'); END;
/