CREATE OR REPLACE PROCEDURE GRAVA_BENFEITORIA_CONTRIB(
   P_CDEMPRESA      IN EMPRESA.CDEMPRESA%TYPE,
   P_DTINICIAL      IN MAPAAPURAC.DTINIPERIODO%TYPE,
   P_DTFINAL        IN MAPAAPURAC.DTINIPERIODO%TYPE)
AS
   V_NRSEQCREDBENFEIT NUMBER;
BEGIN
   /*Deleta os registros com data inicial no periodo, para o caso de reapuracao de mapas*/
   DELETE FROM CREDBENFEITAPUR
    WHERE DTINICREDITO = P_DTINICIAL
      AND CDEMPRESA    = P_CDEMPRESA;

   /*Busca os valores dos lancamentos no periodo para inserir na tabela*/
   FOR C_LANC IN (SELECT L.CDEMPRESA, L.NRLANCCONT, L.NRSEQLANC, L.CDCONTCTBL, L.VRLANCAMENT, L.DTLANCCONT,
                         B.CDNATUBCALC, B.CDTIPOBEM, B.IDORIGEMBEM, B.IDUTILIZACAO, B.CDSITUTRIB, B.CDTPCRED,
                         B.VRALIQPIS, B.VRALIQCOFINS, B.QTPARCELAS, FIRST_DAY(L.DTLANCCONT) AS DTINICREDITO,
                         LAST_DAY(ADD_MONTHS(L.DTLANCCONT,(B.QTPARCELAS -1))) AS DTFIMCREDITO,
                         ROUND((L.VRLANCAMENT/B.QTPARCELAS),2) AS VRPARCELA
                    FROM LANCCONT L, BENFEITORIA B
                   WHERE B.CDEMPRESA  = P_CDEMPRESA
                     AND L.CDEMPRESA  = B.CDEMPRESA
                     AND L.CDCONTCTBL = B.CDCONTCTBL
                     AND L.DTLANCCONT BETWEEN P_DTINICIAL AND P_DTFINAL
                     AND L.VRLANCAMENT > 0) LOOP

      NOVO_CODIGO('CREDBENFEITAPUR',V_NRSEQCREDBENFEIT);
      /*Insere os valores na tabela*/
      INSERT INTO CREDBENFEITAPUR
         (NRSEQCREDBENFEIT, CDEMPRESA, NRLANCCONT, NRSEQLANC, CDCONTCTBL,
          CDNATUBCALC, CDTIPOBEM, IDORIGEMBEM, IDUTILIZACAO, CDSITUTRIB,
          CDTPCRED, VRALIQPIS, VRALIQCOFINS, QTPARCELAS,
          DTINICREDITO, DTFIMCREDITO, VRLANCAMENT, VRPARCELA)
      VALUES
         (V_NRSEQCREDBENFEIT, C_LANC.CDEMPRESA, C_LANC.NRLANCCONT, C_LANC.NRSEQLANC, C_LANC.CDCONTCTBL,
          C_LANC.CDNATUBCALC, C_LANC.CDTIPOBEM, C_LANC.IDORIGEMBEM, C_LANC.IDUTILIZACAO, C_LANC.CDSITUTRIB,
          C_LANC.CDTPCRED, C_LANC.VRALIQPIS, C_LANC.VRALIQCOFINS, C_LANC.QTPARCELAS,
          C_LANC.DTINICREDITO, C_LANC.DTFIMCREDITO, C_LANC.VRLANCAMENT, C_LANC.VRPARCELA);
   END LOOP;
END;
/