/*
  DESCRICAO:

  PROCEDURE RESPONSAVEL POR REALIZAR A APURACAO AUTOMATICA (REFERENTE AO DRO)
  DE TODAS AS FILIAIS QUE NAO POSSUEM CONTRATO RESCINDIDO.

  DEVE SER DEFINIDO OS PARAMETROS DE APURACAO DO DRO PARA A FILIAL A SER APURADA.

  PARAMETROS

  P_DTINICIAL - DATA INICIAL DA APURACAO
  P_DTFINAL   - DATA FINAL DA APURACAO

*/
CREATE OR REPLACE PROCEDURE APURA_DRO(
    P_DTINICIAL   IN   DATE DEFAULT SYSDATE,
    P_DTFINAL     IN   DATE DEFAULT SYSDATE
)IS

    V_IDUTPADRROP             VARCHAR2(1);
    V_DATAINI                 DATE;
    V_DATAFIN                 DATE;
    V_BOFILIPADRAO            BOOLEAN;
    V_NOVOCODIGO              VARCHAR2(100);
    V_DTPROCESSA              DATE;
    V_EXISTE_PARAMETRIZACAO   NUMBER;
    V_UTILIZA_LISTA           VARCHAR2(1);
BEGIN
    NOVO_CODIGO('LISTA', V_NOVOCODIGO, 1);
    V_NOVOCODIGO      := SUBSTR(V_NOVOCODIGO, 11, 10);
    V_DATAINI         := FIRST_DAY(TRUNC(P_DTINICIAL));
    V_DATAFIN         := LAST_DAY(TRUNC(P_DTFINAL));
    V_UTILIZA_LISTA   := 'N';
    FOR C_FILIAL IN(
        SELECT CDFILIAL
          FROM FILIAL
         WHERE IDCNTRRESC = 'N'
         ORDER BY CDFILIAL
    )LOOP
        SELECT COUNT(*)
          INTO V_EXISTE_PARAMETRIZACAO
          FROM PARFILIALROP
         WHERE PARFILIALROP.CDFILIAL = TIPOPARAM_DRO(C_FILIAL.CDFILIAL);

        IF V_EXISTE_PARAMETRIZACAO > 0 THEN
            V_UTILIZA_LISTA := 'S';
            SELECT NVL(DTPROCESSA, V_DATAFIN)
              INTO V_DTPROCESSA
              FROM PARAMFILIAL
             WHERE CDFILIAL = C_FILIAL.CDFILIAL;

            IF(TO_CHAR(V_DTPROCESSA, 'MM/YYYY')= TO_CHAR(V_DATAINI, 'MM/YYYY'))THEN
                UPDATE APURACAOROP
                   SET DTINIAPURACROP = V_DATAINI,
                       DTFINAPURACROP = V_DTPROCESSA - 1
                 WHERE CDFILIAL = C_FILIAL.CDFILIAL;

            ELSE
                UPDATE APURACAOROP
                   SET DTINIAPURACROP = FIRST_DAY(V_DTPROCESSA),
                       DTFINAPURACROP = V_DTPROCESSA - 1
                 WHERE CDFILIAL = C_FILIAL.CDFILIAL;

            END IF;

            INSERT INTO LISTA(
                NRLISTA,
                CDLISTA
            )VALUES(
                V_NOVOCODIGO,
                C_FILIAL.CDFILIAL
            );

        END IF;

    END LOOP;

    IF V_UTILIZA_LISTA = 'S' THEN
        PERIODO_APURAC_RESOPERFILI(V_NOVOCODIGO);
    END IF;
    DELETE FROM LISTA
     WHERE NRLISTA = V_NOVOCODIGO;

END;
/