CREATE OR REPLACE PROCEDURE PROJETA_ESTOQUE_DIA(
                              P_CDFILIAL    IN  ITEMSOLI.CDFILSOLI%TYPE,
                              P_DTLEVINI    IN  DATE,
                              P_DTLEVFIN    IN  DATE,
                              P_PRODINI     IN  PRODUTO.CDARVPROD%TYPE,
                              P_PRODFIN     IN  PRODUTO.CDARVPROD%TYPE,
                              P_ENTRINI     IN  DATE,
                              P_ENTRFIN     IN  DATE,
                              P_SAIDAINI    IN  DATE,
                              P_SAIDAFIN    IN  DATE,
                              P_TODOSPRODEST IN VARCHAR2 DEFAULT NULL,
                              P_NRSEQESTPROJ OUT TRAB_ESTPROJET.NRSEQESTPROJ%TYPE,
                              P_DIASATRASAAF IN NUMERIC DEFAULT NULL)
IS
   V_NRESTPROJET VARCHAR2(20);
   V_QTESTOQANT     NUMBER;
   V_QTESTOQUE      NUMBER;
   V_ESTOQFILI      NUMBER;
   V_RESERVAESTOQUE NUMBER;
   V_IDUTILDTPROC PARAMGERAL.IDUTILDTPROC%TYPE;
   V_DATAPROC DATE;
   V_COUNT NUMBER;
   V_QTPROJESTPRO NUMBER;
   V_QTDAF NUMBER;
   V_QTDSOL NUMBER;
   V_VDOL  VARCHAR2(1); --Verifica se a filial ? operador log?stico ou n?o
   V_CDFILIOLAGETERC  FILIAL.CDFILIAL%TYPE;
   V_DIASATRASAAF NUMERIC;
   V_SYSDATE      DATE;
   V_IDATRASADA   TRAB_ESTPROJET.IDATRASADA%TYPE;
BEGIN
   V_DIASATRASAAF := NVL(P_DIASATRASAAF, 0);
   V_SYSDATE      := TO_DATE(TRUNC(SYSDATE));
   SELECT
      MAX(IDUTILDTPROC)
   INTO
      V_IDUTILDTPROC
   FROM
      PARAMGERAL;
   IF V_IDUTILDTPROC <> 'S' THEN
      V_DATAPROC := TRUNC(SYSDATE);
   ELSE
      SELECT
         NVL(MAX(DTPROCESSA), TRUNC(SYSDATE))
      INTO
         V_DATAPROC
      FROM
         PARAMFILIAL
      WHERE
         CDFILIAL = P_CDFILIAL;
   END IF;

   SELECT NVL(MAX(F.IDFUNCAOFILI), 'N'), NVL(MAX(F.CDFILIAL), P_CDFILIAL)
   INTO V_VDOL, V_CDFILIOLAGETERC
   FROM FILIAL F
   WHERE F.CDFILIOLAGETERC = P_CDFILIAL;

   V_NRESTPROJET := NULL;
   NOVO_CODIGO('TRAB_ESTPROJET'||P_CDFILIAL, V_NRESTPROJET, 1);
   P_NRSEQESTPROJ := SUBSTR(V_NRESTPROJET,11,10);

   /*Estoque na data inicial do per?odo*/
   FOR C_PRODUTO IN
      (SELECT CDPRODESTO
            FROM PRODUTO
           WHERE CDARVPROD BETWEEN P_PRODINI AND P_PRODFIN
             AND CDPRODUTO = CDPRODESTO
             AND CDNVPRODUTO = (SELECT MAX(CDNVPRODUTO) FROM PRODUTO)
       )
   LOOP
      V_QTESTOQUE      := 0;
      V_ESTOQFILI      := 0;
      V_QTESTOQANT     := 0;
      V_RESERVAESTOQUE := 0;
      SELECT /* Busca a Quantidade em estoque para o Produto corrente
                at? a data de ?nicio do levantamento */
         CALC_ESTOQ_CONS(V_CDFILIOLAGETERC,
                         C_PRODUTO.CDPRODESTO,
                         P_DTLEVINI + 1)
      INTO
         V_ESTOQFILI
      FROM
         PARAMGERAL;

      V_QTESTOQUE := V_QTESTOQUE + V_ESTOQFILI - V_RESERVAESTOQUE;

      IF V_QTESTOQUE > 0 THEN
         INSERT INTO TRAB_ESTPROJET
            (CDFILESTPROJ,
             NRSEQESTPROJ,
             CDPROESTPROJ,
             QTPRODESTOQ,
             QTPROJESTPRO,
             DTENTESTPROJ
             )
         VALUES
            (P_CDFILIAL,
             SUBSTR(V_NRESTPROJET,11,10),
             C_PRODUTO.CDPRODESTO,
             NVL(V_QTESTOQUE, 0),
             NVL(V_QTESTOQUE, 0),
             P_DTLEVINI);
      END IF;
   END LOOP;

   /* Entrada de Produto do OL -  AF's pendentes */

   FOR C_AFPEND IN
      (SELECT
          PRODUTO.CDPRODESTO,
          NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0)) * PRODUTO.VRFATOCONV), 0) QTAFPEND
       FROM
          PRODUTO,
          ITEMAUTF
       WHERE ITEMAUTF.CDFILDEST = P_CDFILIAL
         AND ITEMAUTF.CDPRODUTO = PRODUTO.CDPRODUTO
         AND (ITEMAUTF.IDBAIXITMAF IS NULL OR ITEMAUTF.IDBAIXITMAF = '1')
         AND PRODUTO.CDARVPROD BETWEEN P_PRODINI AND P_PRODFIN
         AND DTPROGENTAF BETWEEN NVL(P_ENTRINI, V_DATAPROC) AND NVL(P_ENTRFIN, P_DTLEVFIN-1)
         AND NOT EXISTS
                (SELECT
                    '1'
                 FROM
                    AUTOFORNE
                 WHERE
                    AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC AND
                    AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST AND
                    AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN AND
                    AUTOFORNE.IDBAIXAAF  IN('4','5','6'))
       GROUP BY
          PRODUTO.CDPRODESTO)
   LOOP
      V_QTESTOQUE      := 0;
      V_ESTOQFILI      := 0;
      V_QTESTOQANT     := 0;
      V_RESERVAESTOQUE := 0;
      UPDATE TRAB_ESTPROJET
      SET QTPRODLANCAF = NVL(QTPRODLANCAF, 0), --+ C_AFPEND.QTAFPEND, DAVIDSON 07/06
          QTPROJESTPRO = NVL(QTPROJESTPRO, 0), -- + C_AFPEND.QTAFPEND
          QTPRODTOTALAF = C_AFPEND.QTAFPEND
      WHERE
         CDFILESTPROJ = P_CDFILIAL                  AND
         NRSEQESTPROJ = SUBSTR(V_NRESTPROJET,11,10) AND
         CDPROESTPROJ = C_AFPEND.CDPRODESTO         AND
         DTENTESTPROJ = P_DTLEVINI;
      IF SQL%NOTFOUND THEN
         SELECT
            MAX(QTPROJESTPRO)
         INTO
            V_QTESTOQANT
         FROM
            TRAB_ESTPROJET
         WHERE
            CDFILESTPROJ = P_CDFILIAL                   AND
            NRSEQESTPROJ = SUBSTR(V_NRESTPROJET,11,10)  AND
            CDPROESTPROJ = C_AFPEND.CDPRODESTO          AND
            DTENTESTPROJ = P_DTLEVINI;
         IF V_QTESTOQANT IS NOT NULL THEN
            V_QTESTOQUE := V_QTESTOQUE + V_QTESTOQANT;
         ELSE
            SELECT /* Busca a Quantidade em estoque para o Produto corrente
                      at? a data de ?nicio do levantamento */
               CALC_ESTOQ_CONS(V_CDFILIOLAGETERC,
                               C_AFPEND.CDPRODESTO,
                               P_DTLEVINI + 1)

            INTO
               V_ESTOQFILI
            FROM
               PARAMGERAL;

            V_QTESTOQUE := V_QTESTOQUE + V_ESTOQFILI - V_RESERVAESTOQUE;
         END IF;
         INSERT INTO TRAB_ESTPROJET
            (CDFILESTPROJ,
             NRSEQESTPROJ,
             CDPROESTPROJ,
             QTPRODESTOQ,
             QTPRODLANCAF,
             QTPROJESTPRO,
             DTENTESTPROJ,
             QTPRODTOTALAF)
         VALUES
            (P_CDFILIAL,
             SUBSTR(V_NRESTPROJET,11,10),
             C_AFPEND.CDPRODESTO,
             NVL(V_QTESTOQUE, 0),
             C_AFPEND.QTAFPEND,
             NVL(V_QTESTOQUE, 0), --+ C_AFPEND.QTAFPEND,
             P_DTLEVINI,
             C_AFPEND.QTAFPEND);
      END IF;
   END LOOP;

   /* Saida de Produto do OL -  Pedidos do OL pendentes */
   FOR C_PEDIDOOLPEND IN
      (SELECT
         PRODUTO.CDPRODESTO,
         SUM(NVL(ITEMPEDEXOL.QTATENDPEDOL, ITEMPEDEXOL.QTPROGENPEOL) * PRODUTO.VRFATOCONV) AS QTPEDIDOOL
       FROM
          PRODUTO,
          ITEMPEDEXOL,
          PEDIDOEXOL,
          RELACPRODOL
       WHERE ITEMPEDEXOL.CDFILDEST     = PEDIDOEXOL.CDFILDEST
         AND ITEMPEDEXOL.CDFILLANC     = PEDIDOEXOL.CDFILLANC
         AND ITEMPEDEXOL.NRPEDEXOL     = PEDIDOEXOL.NRPEDEXOL
         AND PRODUTO.CDARVPROD  BETWEEN P_PRODINI  AND P_PRODFIN
         AND RELACPRODOL.CDPRODARVOL   = PRODUTO.CDPRODUTO
         AND ITEMPEDEXOL.CDMARCA       = RELACPRODOL.CDMARCA
         AND ITEMPEDEXOL.CDPRODUTO     = RELACPRODOL.CDPRARVORIG
         AND ITEMPEDEXOL.IDBAIXAOLSAI IS NULL
         AND NVL(PEDIDOEXOL.IDBAIXEXOL, '0') NOT IN ('4', '5')
         AND PEDIDOEXOL.CDFILIOPELOG   = P_CDFILIAL
         AND NVL(ITEMPEDEXOL.QTATENDPEDOL, 1) > 0
         AND ITEMPEDEXOL.DTPROGENPEOL  BETWEEN NVL(P_SAIDAINI, V_DATAPROC) AND NVL(P_SAIDAFIN, P_DTLEVFIN-1)
       GROUP BY PRODUTO.CDPRODESTO
       )
   LOOP
      V_QTESTOQUE      := 0;
      V_ESTOQFILI      := 0;
      V_QTESTOQANT     := 0;
      V_RESERVAESTOQUE := 0;

      UPDATE TRAB_ESTPROJET
      SET QTPRODSOLI = NVL(QTPRODSOLI, 0), -- + C_PEDIDOOLPEND.QTPEDIDOOL, DAVIDSN 07/06/2016
          QTPROJESTPRO = NVL(QTPROJESTPRO, 0), /*Remocao visita apetit - C_PEDIDOOLPEND.QTPEDIDOOL*/
          QTPRODTOTALPED = C_PEDIDOOLPEND.QTPEDIDOOL
      WHERE
         CDFILESTPROJ = P_CDFILIAL                  AND
         NRSEQESTPROJ = SUBSTR(V_NRESTPROJET,11,10) AND
         CDPROESTPROJ = C_PEDIDOOLPEND.CDPRODESTO   AND
         DTENTESTPROJ = P_DTLEVINI;
      IF SQL%NOTFOUND THEN
         SELECT
            MAX(QTPROJESTPRO)
         INTO
            V_QTESTOQANT
         FROM
            TRAB_ESTPROJET
         WHERE
            CDFILESTPROJ = P_CDFILIAL                   AND
            NRSEQESTPROJ = SUBSTR(V_NRESTPROJET,11,10)  AND
            CDPROESTPROJ = C_PEDIDOOLPEND.CDPRODESTO    AND
            DTENTESTPROJ = P_DTLEVINI;
         IF V_QTESTOQANT IS NOT NULL THEN
            V_QTESTOQUE := V_QTESTOQUE + V_QTESTOQANT;
         ELSE
            SELECT /* Busca a Quantidade em estoque para o Produto corrente
                      at? a data de ?nicio do levantamento */
               CALC_ESTOQ_CONS(V_CDFILIOLAGETERC,
                               C_PEDIDOOLPEND.CDPRODESTO,
                               P_DTLEVINI + 1)

            INTO
               V_ESTOQFILI
            FROM
               PARAMGERAL;

            V_QTESTOQUE := V_QTESTOQUE + V_ESTOQFILI - V_RESERVAESTOQUE;
         END IF;
         INSERT INTO TRAB_ESTPROJET
            (CDFILESTPROJ,
             NRSEQESTPROJ,
             CDPROESTPROJ,
             QTPRODESTOQ,
             QTPRODSOLI,
             QTPROJESTPRO,
             DTENTESTPROJ,
             QTPRODTOTALPED)
         VALUES
            (P_CDFILIAL,
             SUBSTR(V_NRESTPROJET,11,10),
             C_PEDIDOOLPEND.CDPRODESTO,
             NVL(V_QTESTOQUE, 0),
             C_PEDIDOOLPEND.QTPEDIDOOL,
             NVL(V_QTESTOQUE, 0), /*Remocao visita apetit - C_PEDIDOOLPEND.QTPEDIDOOL,*/
             P_DTLEVINI,
             C_PEDIDOOLPEND.QTPEDIDOOL);
      END IF;
   END LOOP;

   FOR C_DATA IN   /* Seleciona as Datas do Per?odo Informado */
     (SELECT
         DTDATA
      FROM
         DATA
      WHERE
         DTDATA BETWEEN P_DTLEVINI AND P_DTLEVFIN)
   LOOP
      /* Entrada de Produto do OL -  Autoriza??o de Fornecimento */
      FOR C_ITEMAUTF IN
         (SELECT
             PRODUTO.CDPRODESTO,
             NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0)) * PRODUTO.VRFATOCONV), 0) QTPROGENTAF
          FROM
             PRODUTO,
             ITEMAUTF
          WHERE ITEMAUTF.CDFILDEST = P_CDFILIAL
            AND ITEMAUTF.DTPROGENTAF = C_DATA.DTDATA
            AND PRODUTO.CDARVPROD BETWEEN P_PRODINI  AND P_PRODFIN
            AND ITEMAUTF.CDPRODUTO = PRODUTO.CDPRODUTO
            AND (ITEMAUTF.IDBAIXITMAF IS NULL OR ITEMAUTF.IDBAIXITMAF = '1')
            AND NOT EXISTS
                   (SELECT
                       '1'
                    FROM
                       AUTOFORNE
                    WHERE
                       AUTOFORNE.CDFILLANC  = ITEMAUTF.CDFILLANC AND
                       AUTOFORNE.CDFILDEST  = ITEMAUTF.CDFILDEST AND
                       AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN AND
                       AUTOFORNE.IDBAIXAAF  IN('4','5','6'))
          GROUP BY
             PRODUTO.CDPRODESTO)
      LOOP
         V_QTESTOQUE      := 0;
         V_ESTOQFILI      := 0;
         V_QTESTOQANT     := 0;
         V_RESERVAESTOQUE := 0;

         IF C_ITEMAUTF.QTPROGENTAF > 0 THEN
            IF (V_DIASATRASAAF > 0) AND (V_SYSDATE = C_DATA.DTDATA) THEN
               V_IDATRASADA := 'S';
            ELSE
               V_IDATRASADA := 'N';
            END IF;
            UPDATE TRAB_ESTPROJET
               SET QTPRODLANCAF = NVL(QTPRODLANCAF, 0) + C_ITEMAUTF.QTPROGENTAF,
                   QTPROJESTPRO = NVL(QTPROJESTPRO, 0) + C_ITEMAUTF.QTPROGENTAF
            WHERE
               CDFILESTPROJ = P_CDFILIAL                  AND
               NRSEQESTPROJ = SUBSTR(V_NRESTPROJET,11,10) AND
               CDPROESTPROJ = C_ITEMAUTF.CDPRODESTO       AND
               DTENTESTPROJ = C_DATA.DTDATA + V_DIASATRASAAF AND
               IDATRASADA = V_IDATRASADA;
            IF SQL%NOTFOUND THEN
               SELECT
                  MAX(QTPROJESTPRO)
               INTO
                  V_QTESTOQANT
               FROM
                  TRAB_ESTPROJET
               WHERE
                  CDFILESTPROJ = P_CDFILIAL                   AND
                  NRSEQESTPROJ = SUBSTR(V_NRESTPROJET,11,10)  AND
                  CDPROESTPROJ = C_ITEMAUTF.CDPRODESTO        AND
                  DTENTESTPROJ = C_DATA.DTDATA - 1;
               IF V_QTESTOQANT IS NOT NULL THEN
                  V_QTESTOQUE := V_QTESTOQUE + V_QTESTOQANT;
               ELSE
                  SELECT /* Busca a Quantidade em estoque para o Produto corrente
                            at? a data de ?nicio do levantamento */
                     CALC_ESTOQ_CONS(V_CDFILIOLAGETERC,
                                     C_ITEMAUTF.CDPRODESTO,
                                     C_DATA.DTDATA + 1)
                  INTO
                     V_ESTOQFILI
                  FROM
                     PARAMGERAL;

                  V_QTESTOQUE := V_QTESTOQUE + V_ESTOQFILI - V_RESERVAESTOQUE;
               END IF;
               INSERT INTO TRAB_ESTPROJET
                  (CDFILESTPROJ,
                   NRSEQESTPROJ,
                   CDPROESTPROJ,
                   QTPRODESTOQ,
                   QTPRODLANCAF,
                   QTPROJESTPRO,
                   DTENTESTPROJ,
                   IDATRASADA)
               VALUES
                  (P_CDFILIAL,
                   SUBSTR(V_NRESTPROJET,11,10),
                   C_ITEMAUTF.CDPRODESTO,
                   NVL(V_QTESTOQUE, 0),
                   C_ITEMAUTF.QTPROGENTAF,
                   NVL(V_QTESTOQUE, 0) + C_ITEMAUTF.QTPROGENTAF,
                   C_DATA.DTDATA + V_DIASATRASAAF,
                   V_IDATRASADA);
            END IF;
         END IF;
      END LOOP;

      /* Sa?da do OL -  Pedidos das Unidades */
      FOR C_SAIDA IN
        (SELECT
            PRODUTO.CDPRODESTO,
            SUM(NVL(ITEMPEDEXOL.QTATENDPEDOL, ITEMPEDEXOL.QTPROGENPEOL)* PRODUTO.VRFATOCONV) QTAENTREGAR
         FROM
            ITEMPEDEXOL,
            PEDIDOEXOL,
            PRODUTO,
            RELACPRODOL
         WHERE ITEMPEDEXOL.CDFILDEST     = PEDIDOEXOL.CDFILDEST
           AND ITEMPEDEXOL.CDFILLANC     = PEDIDOEXOL.CDFILLANC
           AND ITEMPEDEXOL.NRPEDEXOL     = PEDIDOEXOL.NRPEDEXOL
           AND NVL(PEDIDOEXOL.IDBAIXEXOL, '0') NOT IN ('4', '5')
           AND ITEMPEDEXOL.IDBAIXAOLSAI IS NULL
           AND PEDIDOEXOL.CDFILIOPELOG   = P_CDFILIAL
           AND PRODUTO.CDARVPROD  BETWEEN P_PRODINI  AND P_PRODFIN
           AND RELACPRODOL.CDPRODARVOL   = PRODUTO.CDPRODUTO
           AND ITEMPEDEXOL.CDMARCA       = RELACPRODOL.CDMARCA
           AND ITEMPEDEXOL.CDPRODUTO     = RELACPRODOL.CDPRARVORIG
           AND ITEMPEDEXOL.DTPROGENPEOL  = C_DATA.DTDATA
         GROUP BY
            PRODUTO.CDPRODESTO)
      LOOP
         V_QTESTOQUE      := 0;
         V_ESTOQFILI      := 0;
         V_QTESTOQANT     := 0;
         V_RESERVAESTOQUE := 0;

         IF C_SAIDA.QTAENTREGAR > 0 THEN
            UPDATE TRAB_ESTPROJET
               SET QTPRODSOLI   = NVL(QTPRODSOLI, 0) + C_SAIDA.QTAENTREGAR,
                   QTPROJESTPRO = NVL(QTPROJESTPRO, 0) - C_SAIDA.QTAENTREGAR
            WHERE
               CDFILESTPROJ = P_CDFILIAL                  AND
               NRSEQESTPROJ = SUBSTR(V_NRESTPROJET,11,10) AND
               CDPROESTPROJ = C_SAIDA.CDPRODESTO       AND
               DTENTESTPROJ = C_DATA.DTDATA;

            IF SQL%NOTFOUND THEN
               SELECT
                  MAX(QTPROJESTPRO)
               INTO
                  V_QTESTOQANT
               FROM
                  TRAB_ESTPROJET
               WHERE
                  CDFILESTPROJ = P_CDFILIAL                   AND
                  NRSEQESTPROJ = SUBSTR(V_NRESTPROJET,11,10)  AND
                  CDPROESTPROJ = C_SAIDA.CDPRODESTO        AND
                  DTENTESTPROJ = C_DATA.DTDATA - 1;
               IF V_QTESTOQANT IS NOT NULL THEN
                  V_QTESTOQUE := V_QTESTOQUE + V_QTESTOQANT;
               ELSE
                  SELECT /* Busca a Quantidade em estoque para o Produto corrente
                            at? a data de ?nicio do levantamento */
                     CALC_ESTOQ_CONS(V_CDFILIOLAGETERC,
                                     C_SAIDA.CDPRODESTO,
                                     C_DATA.DTDATA + 1)

                  INTO
                     V_ESTOQFILI
                  FROM
                     PARAMGERAL;

                  V_QTESTOQUE := V_QTESTOQUE + V_ESTOQFILI - V_RESERVAESTOQUE;
               END IF;
               INSERT INTO TRAB_ESTPROJET
                  (CDFILESTPROJ,
                   NRSEQESTPROJ,
                   CDPROESTPROJ,
                   QTPRODESTOQ,
                   QTPRODSOLI,
                   QTPROJESTPRO,
                   DTENTESTPROJ)
               VALUES
                  (P_CDFILIAL,
                   SUBSTR(V_NRESTPROJET,11,10),
                   C_SAIDA.CDPRODESTO,
                   NVL(V_QTESTOQUE, 0),
                   C_SAIDA.QTAENTREGAR,
                   NVL(V_QTESTOQUE, 0) - C_SAIDA.QTAENTREGAR,
                   C_DATA.DTDATA);
            END IF;
         END IF;
      END LOOP;
      FOR C_PRODUTO IN
         (SELECT
             CDFILESTPROJ,
             NRSEQESTPROJ,
             CDPROESTPROJ,
             MAX(DTENTESTPROJ) DTENTESTPROJ
          FROM
             TRAB_ESTPROJET
          WHERE
             CDFILESTPROJ = P_CDFILIAL                   AND
             NRSEQESTPROJ = SUBSTR(V_NRESTPROJET,11,10)  AND
             DTENTESTPROJ <= C_DATA.DTDATA
          GROUP BY
             CDFILESTPROJ,
             NRSEQESTPROJ,
             CDPROESTPROJ
          )
      LOOP
         IF (C_DATA.DTDATA <> C_PRODUTO.DTENTESTPROJ)  AND (V_DIASATRASAAF = 0) THEN
            SELECT
               MAX(QTPROJESTPRO)
            INTO
               V_QTPROJESTPRO
            FROM
               TRAB_ESTPROJET
            WHERE
               CDFILESTPROJ = P_CDFILIAL                   AND
               NRSEQESTPROJ = SUBSTR(V_NRESTPROJET,11,10)  AND
               CDPROESTPROJ = C_PRODUTO.CDPROESTPROJ       AND
               DTENTESTPROJ = C_PRODUTO.DTENTESTPROJ;

            IF V_VDOL = 'N' THEN
               /*QTD AF DIA*/
               SELECT NVL(SUM(ITF.QTPROGENTAF), 0)
               INTO V_QTDAF
               FROM ITEMAUTF ITF, PRODUTO P
               WHERE ITF.CDPRODUTO = P.CDPRODUTO
                 AND P.CDPRODESTO = C_PRODUTO.CDPROESTPROJ
                 AND CDFILDEST = P_CDFILIAL
                 AND DTPROGENTAF = C_DATA.DTDATA
               ORDER BY ITF.CDPRODUTO;

               /*QTD SOLICITACAO DIA*/
               SELECT NVL(SUM(ITS.QTSOLIPROD), 0)
               INTO V_QTDSOL
               FROM ITEMSOLI ITS, PRODUTO PR
               WHERE ITS.CDPRODUTO  = PR.CDPRODUTO
                 AND PR.CDPRODESTO  = C_PRODUTO.CDPROESTPROJ
                 AND ITS.CDFILSOLI  = P_CDFILIAL
                 AND ITS.DTPROGENTR = C_DATA.DTDATA
               ORDER BY ITS.CDPRODUTO;

               V_QTPROJESTPRO := V_QTPROJESTPRO + V_QTDAF - V_QTDSOL;
            END IF;

            INSERT INTO TRAB_ESTPROJET
               (CDFILESTPROJ,
                NRSEQESTPROJ,
                CDPROESTPROJ,
                QTPRODESTOQ,
                QTPROJESTPRO,
                DTENTESTPROJ,
                QTDIRESUPRAF,
                QTPRODSOLI
                )
            VALUES
               (C_PRODUTO.CDFILESTPROJ,
                C_PRODUTO.NRSEQESTPROJ,
                C_PRODUTO.CDPROESTPROJ,
                V_QTPROJESTPRO,
                V_QTPROJESTPRO,
                C_DATA.DTDATA,
                V_QTDAF,
                V_QTDSOL
               );
         END IF;
      END LOOP;
   END LOOP;
   FOR C_DATA IN (SELECT DTDATA
                    FROM DATA
                   WHERE DTDATA BETWEEN P_DTLEVINI AND P_DTLEVFIN)
   LOOP
      FOR C_ITEM IN (SELECT DISTINCT CDFILESTPROJ, NRSEQESTPROJ, CDPROESTPROJ, 0 QTPRODESTOQ,
                                0 QTPROJESTPRO, 0 QTDIRESUPRAF, 0 QTPRODSOLI
                       FROM TRAB_ESTPROJET T
                      WHERE T.CDFILESTPROJ = P_CDFILIAL
                        AND T.NRSEQESTPROJ = P_NRSEQESTPROJ)

      LOOP
         INSERT
           INTO TRAB_ESTPROJET (CDFILESTPROJ, NRSEQESTPROJ, CDPROESTPROJ, QTPRODESTOQ,
                                QTPROJESTPRO, DTENTESTPROJ, QTDIRESUPRAF, QTPRODSOLI)
         SELECT C_ITEM.CDFILESTPROJ, C_ITEM.NRSEQESTPROJ, C_ITEM.CDPROESTPROJ, C_ITEM.QTPRODESTOQ,
                C_ITEM.QTPROJESTPRO, C_DATA.DTDATA, C_ITEM.QTDIRESUPRAF, C_ITEM.QTPRODSOLI
           FROM DUAL
          WHERE NOT EXISTS (SELECT 1
                              FROM TRAB_ESTPROJET TRAB
                             WHERE TRAB.CDFILESTPROJ = C_ITEM.CDFILESTPROJ
                               AND TRAB.NRSEQESTPROJ = C_ITEM.NRSEQESTPROJ
                               AND TRAB.CDPROESTPROJ = C_ITEM.CDPROESTPROJ
                               AND TRAB.DTENTESTPROJ = C_DATA.DTDATA);
      END LOOP;
   END LOOP;
   COMMIT;
END;
/