/*

**********************************************************************************
****    Procedure para calculo do demonstrativo de resultado operacional
*************************************************************************************

Criado em  : 03/2018
       Por : Jefferson Gouvea

Descri��o:

          - Com base nos dados parametrizados para a unidade realiza apura��o do
            resultado operacional da mesma, grava em tabelas espec�ficas a fim de
            possibilitar a gera��o de relat�rios gerenciais a partir de dados
            previamente calculados.

  Procedure APURAC_RETIRADAROP

*/

CREATE OR REPLACE PROCEDURE APURAC_RETIRADAROP(
   P_CDFILIAL       FILIAL.CDFILIAL%TYPE,
   P_FILIALPAR      FILIAL.CDFILIAL%TYPE,
   P_DTINICIAL      IN DATE,
   P_DTFINAL        IN DATE,
   P_CDFILISUBGR    IN VARCHAR,
   P_NRROPFILIAL    IN VARCHAR)
IS
   V_NRSEQRETIROP    NUMBER;
   V_CDGRUPPROD      VARCHAR2(10);
   V_IDSERVRETROP    CHAR;
   V_NRTIPOCUSTO     NUMBER;
   V_CDFILCENTPME    VARCHAR2(04);
   V_IDTPAPURACAO    VARCHAR2(01);
   V_IDRETIRADAROP   VARCHAR2(01);
   V_CONTADOR        NUMBER;
   V_CDLOJA          VARCHAR2(10);
   V_TIPOVENDA       VARCHAR2(20);
   V_CDGRUPPRODDRL   VARCHAR2(10);
   V_CDFILISUBGR_DRL VARCHAR2(04);
BEGIN
   BEGIN
      SELECT P.CDGRUPPROD, P.IDSERVRETROP, P.IDTPAPURACAO, IDRETIRADAROP, CDGRUPPRODDRL
        INTO V_CDGRUPPROD, V_IDSERVRETROP, V_IDTPAPURACAO, V_IDRETIRADAROP, V_CDGRUPPRODDRL
        FROM PARFILIALROP P
       WHERE P.CDFILIAL = P_FILIALPAR;
   EXCEPTION
     WHEN NO_DATA_FOUND THEN BEGIN
        V_CDGRUPPROD := NULL;
        V_IDSERVRETROP := NULL;
        V_IDTPAPURACAO := NULL;
        V_IDRETIRADAROP := NULL;
        V_CDGRUPPRODDRL := NULL;
     END;
   END;

   BEGIN
      SELECT TO_NUMBER(NVL(PF.CDTIPCUSTEST,'3'))
        INTO V_NRTIPOCUSTO
        FROM PARAMFILIAL PF
       WHERE PF.CDFILIAL = P_CDFILIAL;
   EXCEPTION
     WHEN NO_DATA_FOUND THEN
       V_NRTIPOCUSTO := '3';
   END;

   BEGIN
     SELECT CASE WHEN IDFILCENTPME = 'S'
                 THEN CDFILIAL
                 ELSE CDFILCENTPME
            END
       INTO V_CDFILCENTPME
       FROM FILIAL
      WHERE CDFILIAL = P_CDFILIAL;
   EXCEPTION
     WHEN NO_DATA_FOUND THEN
       V_CDFILCENTPME := NULL;
   END;

   IF (NVL(V_IDTPAPURACAO,'3') <> '2') THEN
      FOR C_ITRETIRADA IN(
         SELECT TRUNC(C_RETIRADA.DTLANCESTQ) DTLANCESTQ, SUM(IT.QTLANCTOEST) QTLANCTOEST, SG.CDGRUPPROD, AN.CDSUBGRPROD,
                SUM(CUSTO_PRODUTO_LCEST(IT.CDFILIMOVI,
                                        IT.CDPRODMOVI,
                                        V_NRTIPOCUSTO,
                                        C_RETIRADA.DTLANCESTQ,
                                        SYSDATE,
                                        CDALMOXARIFE,
                                        CDLOCALESTOQ,
                                        NRLOTEESTQ, NRSUBLOTE) * IT.QTLANCTOEST) AS VRLANCTOESTQ
           FROM ITLANCTOEST IT INNER JOIN (SELECT B.CDPRODUTO,A.CDGRUPPROD,A.CDSUBGRPROD,A.CDFILISUBGR
                                             FROM PRODUTO B INNER JOIN PRODUTO C
                                                                    ON B.CDPRODUTO = C.CDPRODUTO
                                                            INNER JOIN (SELECT P.CDARVPROD AS CDPRODUTO,
                                                                               N.CDGRUPPROD, N.CDSUBGRPROD,
                                                                               N.CDFILISUBGR
                                                                          FROM PRODUTO P INNER JOIN NVSUBGRPROD N
                                                                                                 ON P.CDPRODUTO = N.CDPRODUTO
                                                                         WHERE N.CDFILISUBGR = P_CDFILISUBGR
                                                                           AND N.CDGRUPPROD = V_CDGRUPPROD) A
                                                                    ON C.CDARVPROD LIKE A.CDPRODUTO||'%'
                                           WHERE A.CDFILISUBGR = P_CDFILISUBGR
                                             AND A.CDGRUPPROD = V_CDGRUPPROD
                                           ORDER BY B.CDARVPROD) AN ON IT.CDPRODMOVI = AN.CDPRODUTO
                               INNER JOIN SUBGRPRODFIL SG ON SG.CDFILISUBGR = AN.CDFILISUBGR
                                                         AND SG.CDGRUPPROD = AN.CDGRUPPROD
                                                         AND SG.CDSUBGRPROD = AN.CDSUBGRPROD
                               INNER JOIN (SELECT L.CDFILIAL, L.NRLANCESTQ, L.DTLANCESTQ
                                             FROM RETIRADAESTO R INNER JOIN LANCTOESTOQ L ON L.CDFILIAL = R.CDFILIALLAN
                                                                                         AND L.NRLANCESTQ = R.NRLANCESTQ
                                            WHERE L.CDFILIMOVI = P_CDFILIAL
                                              AND TRUNC(L.DTLANCESTQ) = P_DTINICIAL
                                              AND L.IDTPLANCTO = '3') C_RETIRADA ON IT.CDFILIAL = C_RETIRADA.CDFILIAL
                                                                                AND IT.NRLANCESTQ = C_RETIRADA.NRLANCESTQ
          WHERE NVL(IT.IDEVOLESTOQ, 'S') = 'S'
            AND SG.CDGRUPPROD = V_CDGRUPPROD
            AND SG.CDFILISUBGR = P_CDFILISUBGR
          GROUP BY TRUNC(C_RETIRADA.DTLANCESTQ), SG.CDGRUPPROD, AN.CDSUBGRPROD) LOOP

         NOVO_CODIGO('GESRETIRADAROP', V_NRSEQRETIROP);

         INSERT INTO RETIRADADRO (NRFILIALROP, NRRETIRADADRO, CDGRUPPROD, CDSUBGRPROD, IDTPLANCROP,
                                  VRLANCTOESTQ, CDFILIALCENT, DTLANCAMENTO, DTRETICUSMOV, QTLANCTOEST,
                                  CDSERVFILI)
              VALUES (P_NRROPFILIAL, V_NRSEQRETIROP, C_ITRETIRADA.CDGRUPPROD, C_ITRETIRADA.CDSUBGRPROD, 'RETIRADA_ESTOQ',
                      C_ITRETIRADA.VRLANCTOESTQ, V_CDFILCENTPME, SYSDATE, C_ITRETIRADA.DTLANCESTQ, C_ITRETIRADA.QTLANCTOEST,
                      NULL);
      END LOOP;

      IF (V_IDSERVRETROP <> 'S') THEN
         FOR C_ITRETIRADAPLA IN (
               SELECT R.CDFILIAL, CDSERVFILI, DTCARDAPIO, SG.CDGRUPPROD, AN.CDSUBGRPROD,
                      SUM(QTRETIRADA) QTRETIRADA, SUM(VRCUSTPROD) AS VRCUSTPROD
                 FROM SUBGRPRODFIL SG INNER JOIN (SELECT B.CDPRODUTO,A.CDGRUPPROD,A.CDSUBGRPROD,A.CDFILISUBGR
                                                    FROM PRODUTO B INNER JOIN PRODUTO C
                                                                           ON B.CDPRODUTO = C.CDPRODUTO
                                                                   INNER JOIN (SELECT P.CDARVPROD AS CDPRODUTO, N.CDGRUPPROD,
                                                                                      N.CDSUBGRPROD, N.CDFILISUBGR
                                                                                 FROM PRODUTO P INNER JOIN NVSUBGRPROD N
                                                                                                        ON P.CDPRODUTO = N.CDPRODUTO
                                                                                WHERE N.CDFILISUBGR = P_CDFILISUBGR
                                                                                  AND N.CDGRUPPROD = V_CDGRUPPROD) A
                                                                           ON C.CDARVPROD LIKE A.CDPRODUTO||'%'
                                                   WHERE A.CDFILISUBGR = P_CDFILISUBGR
                                                     AND A.CDGRUPPROD = V_CDGRUPPROD
                                                   ORDER BY B.CDARVPROD) AN
                                              ON SG.CDFILISUBGR = AN.CDFILISUBGR
                                             AND SG.CDGRUPPROD = AN.CDGRUPPROD
                                             AND SG.CDSUBGRPROD = AN.CDSUBGRPROD
                                      INNER JOIN (SELECT CDFILIAL, CDPRODUTO, CDSERVFILI, DTCARDAPIO,
                                                         QTCOMEFETCAR, QTCLIEFETCAR, QTRETIRADA,
                                                         CUSTO_PRODUTO(CDFILIAL, CDPRODUTO, V_NRTIPOCUSTO,
                                                            DTCARDAPIO, SYSDATE) * QTRETIRADA AS VRCUSTPROD
                                                    FROM (SELECT CA.CDFILIAL, CA.CDSERVFILI, CA.DTCARDAPIO,
                                                                 CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ,
                                                                 NRSUBLOTE, CA.QTCOMEFETCAR, CA.QTCLIEFETCAR,
                                                                 IR.CDPRODUTO, SUM(IR.QTRETIRADA * PRA.VRFATOCONV) AS QTRETIRADA
                                                            FROM CARDADIA CA INNER JOIN ITEMRETI IR ON CA.CDFILIAL = IR.CDFILIAL
                                                                                                   AND CA.NRCARDAPIO = IR.NRCARDAPIO
                                                                             INNER JOIN SERVICOROP P ON CA.CDSERVFILI = P.CDSERVFILI
                                                                             INNER JOIN ITLANCTOEST IL ON IL.CDFILIAL = IR.CDFIITLANEST
                                                                                                      AND IL.NRLANCESTQ = IR.NRLANCESTQ
                                                                                                      AND IL.NRSEQUITEM = IR.NRSEQUITEM
                                                                             INNER JOIN PRODUTO PRA ON PRA.CDPRODUTO = IR.CDPRODUTO
                                                                             INNER JOIN
                  (SELECT DISTINCT PRO.CDSERVFILI, PRO.DTCARDAPIO, PRO.CDFILIALLANC, PRO.NRLANCESTQ
                     FROM (SELECT CA.CDFILIAL, CA.CDSERVFILI, CA.DTCARDAPIO,
                                  IL.CDFILIAL AS CDFILIALLANC, IL.NRLANCESTQ
                             FROM CARDADIA CA INNER JOIN ITEMRETI IR ON CA.CDFILIAL = IR.CDFILIAL
                                                                    AND CA.NRCARDAPIO = IR.NRCARDAPIO
                                              INNER JOIN ITLANCTOEST IL ON IL.CDFILIAL = IR.CDFIITLANEST
                                                                       AND IL.NRLANCESTQ = IR.NRLANCESTQ
                                                                       AND IL.NRSEQUITEM = IR.NRSEQUITEM
                                              INNER JOIN FILIAL FI ON FI.CDFILIAL = CA.CDFILIAL
                                              INNER JOIN SERVICO SE ON SE.CDFILIAL = CA.CDFILIAL
                                                                   AND SE.CDSERVFILI = CA.CDSERVFILI
                                              INNER JOIN SERVICOROP P ON CA.CDSERVFILI = P.CDSERVFILI
                                              INNER JOIN PRODUTO PRA ON PRA.CDPRODUTO = IR.CDPRODUTO
                            WHERE CA.CDFILIAL = P_CDFILIAL
                              AND P.CDFILIAL = P_FILIALPAR
                              AND NOT IR.QTRETIRADA IS NULL
                              AND IR.QTRETIRADA <> 0
                              AND TRUNC(CA.DTCARDAPIO) = P_DTINICIAL
                              AND NVL(IL.IDEVOLESTOQ,'S') = 'S') PRO LEFT JOIN (SELECT C.CDFILIAL, C.CDSERVFILI, DTCARDAPIO
                                                                                  FROM CARDADIA C INNER JOIN SERVICOROP P
                                                                                                          ON C.CDSERVFILI = P.CDSERVFILI
                                                                                 WHERE C.CDFILIAL = P_CDFILIAL
                                                                                   AND P.CDFILIAL = P_FILIALPAR
                                                                                   AND TRUNC(DTCARDAPIO) = P_DTINICIAL
                                                                                 GROUP BY C.CDFILIAL, C.CDSERVFILI, DTCARDAPIO) COMENS
                                                                            ON PRO.CDFILIAL = COMENS.CDFILIAL
                                                                           AND PRO.CDSERVFILI = COMENS.CDSERVFILI
                                                                           AND PRO.DTCARDAPIO = COMENS.DTCARDAPIO) C_RETIRADAPLA
   
                                                                                     ON IL.CDFILIAL = C_RETIRADAPLA.CDFILIALLANC
                                                                                    AND IL.NRLANCESTQ = C_RETIRADAPLA.NRLANCESTQ
                                                           WHERE CA.CDFILIAL = P_CDFILIAL
                                                             AND P.CDFILIAL = P_FILIALPAR
                                                             AND IDTPSERVICOROP = 'R'
                                                             AND NVL(IL.IDEVOLESTOQ,'S') = 'S'
                                                           GROUP BY CA.CDFILIAL, CA.CDSERVFILI, CA.DTCARDAPIO,
                                                                    CA.QTCOMEFETCAR, CA.QTCLIEFETCAR, CDALMOXARIFE,
                                                                    CDLOCALESTOQ, NRLOTEESTQ, NRSUBLOTE, IR.CDPRODUTO)) R
                                              ON R.CDPRODUTO = AN.CDPRODUTO
                 WHERE SG.CDFILISUBGR = P_CDFILISUBGR
                   AND SG.CDGRUPPROD = V_CDGRUPPROD
                 GROUP BY R.CDFILIAL, DTCARDAPIO, CDSERVFILI, SG.CDGRUPPROD, AN.CDSUBGRPROD) LOOP

            NOVO_CODIGO('GESRETIRADAROP', V_NRSEQRETIROP);

            INSERT INTO RETIRADADRO (NRFILIALROP, NRRETIRADADRO, CDGRUPPROD, CDSUBGRPROD, IDTPLANCROP,
                                     VRLANCTOESTQ, CDFILIALCENT, DTLANCAMENTO, DTRETICUSMOV, QTLANCTOEST,
                                     CDSERVFILI)
                 VALUES (P_NRROPFILIAL, V_NRSEQRETIROP, C_ITRETIRADAPLA.CDGRUPPROD, C_ITRETIRADAPLA.CDSUBGRPROD, 'RETIRADA_PLA',
                         C_ITRETIRADAPLA.VRCUSTPROD, V_CDFILCENTPME, SYSDATE, C_ITRETIRADAPLA.DTCARDAPIO, C_ITRETIRADAPLA.QTRETIRADA,
                         C_ITRETIRADAPLA.CDSERVFILI);
         END LOOP;
      END IF;
      IF V_IDSERVRETROP = 'S' THEN
          FOR C_RETIRADAPLA IN (
             SELECT DISTINCT PRO.CDSERVFILI, PRO.DTCARDAPIO, PRO.CDFILIALLANC, PRO.NRLANCESTQ
               FROM (SELECT CA.CDFILIAL, CA.CDSERVFILI, CA.DTCARDAPIO,
                            IL.CDFILIAL AS CDFILIALLANC, IL.NRLANCESTQ
                       FROM CARDADIA CA INNER JOIN ITEMRETI IR ON CA.CDFILIAL = IR.CDFILIAL
                                                              AND CA.NRCARDAPIO = IR.NRCARDAPIO
                                        INNER JOIN ITLANCTOEST IL ON IL.CDFILIAL = IR.CDFIITLANEST
                                                                 AND IL.NRLANCESTQ = IR.NRLANCESTQ
                                                                 AND IL.NRSEQUITEM = IR.NRSEQUITEM
                                        INNER JOIN FILIAL FI ON FI.CDFILIAL = CA.CDFILIAL
                                        INNER JOIN SERVICO SE ON SE.CDFILIAL = CA.CDFILIAL
                                        INNER JOIN PRODUTO PRA ON PRA.CDPRODUTO = IR.CDPRODUTO
                      WHERE CA.CDFILIAL = P_CDFILIAL
                        AND NOT IR.QTRETIRADA IS NULL
                        AND IR.QTRETIRADA <> 0
                        AND NVL(IL.IDEVOLESTOQ,'S') = 'S'
                        AND TRUNC(CA.DTCARDAPIO) = P_DTINICIAL
                        AND SE.CDSERVFILI = CA.CDSERVFILI) PRO LEFT JOIN (SELECT C.CDFILIAL, C.CDSERVFILI, DTCARDAPIO
                                                                            FROM CARDADIA C
                                                                           WHERE C.CDFILIAL = P_CDFILIAL
                                                                             AND TRUNC(DTCARDAPIO) = P_DTINICIAL
                                                                           GROUP BY C.CDFILIAL, C.CDSERVFILI, DTCARDAPIO) COMENS
                                                                      ON PRO.CDFILIAL = COMENS.CDFILIAL
                                                                     AND PRO.CDSERVFILI = COMENS.CDSERVFILI
                                                                     AND PRO.DTCARDAPIO = COMENS.DTCARDAPIO) LOOP

             FOR C_ITRETIRADAPLA IN(
                 SELECT R.CDFILIAL, CDSERVFILI, SG.CDGRUPPROD, AN.CDSUBGRPROD, DTCARDAPIO,
                        SUM(VRCUSTPROD) AS VRCUSTPROD, SUM(QTRETIRADA) AS QTRETIRADA
                   FROM SUBGRPRODFIL SG INNER JOIN (SELECT B.CDPRODUTO, A.CDGRUPPROD, A.CDSUBGRPROD, A.CDFILISUBGR
                                                      FROM PRODUTO B INNER JOIN PRODUTO C
                                                                             ON B.CDPRODUTO = C.CDPRODUTO 
                                                                     INNER JOIN (SELECT P.CDARVPROD AS CDPRODUTO,
                                                                                        N.CDGRUPPROD, N.CDSUBGRPROD,
                                                                                        N.CDFILISUBGR
                                                                                   FROM PRODUTO P INNER JOIN NVSUBGRPROD N
                                                                                                          ON P.CDPRODUTO = N.CDPRODUTO
                                                                                  WHERE N.CDFILISUBGR = P_CDFILISUBGR
                                                                                    AND N.CDGRUPPROD = V_CDGRUPPROD) A
                                                                             ON C.CDARVPROD LIKE A.CDPRODUTO||'%'
                                                     WHERE A.CDFILISUBGR = P_CDFILISUBGR
                                                       AND A.CDGRUPPROD = V_CDGRUPPROD
                                                     ORDER BY B.CDARVPROD) AN
                                                ON SG.CDFILISUBGR = AN.CDFILISUBGR
                                               AND SG.CDGRUPPROD = AN.CDGRUPPROD
                                               AND SG.CDSUBGRPROD = AN.CDSUBGRPROD
                                        INNER JOIN (SELECT CDFILIAL, CDPRODUTO, CDSERVFILI, DTCARDAPIO,
                                                           QTCOMEFETCAR, QTCLIEFETCAR, QTRETIRADA,
                                                           CUSTO_PRODUTO_LCEST(CDFILIAL, CDPRODUTO, V_NRTIPOCUSTO,
                                                             DTCARDAPIO, SYSDATE, CDALMOXARIFE, CDLOCALESTOQ,
                                                             NRLOTEESTQ, NRSUBLOTE) * QTRETIRADA AS VRCUSTPROD
                                                      FROM (SELECT CA.CDFILIAL, CA.CDSERVFILI, CA.DTCARDAPIO,
                                                                   CDALMOXARIFE, CDLOCALESTOQ, NRLOTEESTQ,
                                                                   NRSUBLOTE, CA.QTCOMEFETCAR, CA.QTCLIEFETCAR,
                                                                   IR.CDPRODUTO, SUM(IR.QTRETIRADA * PRA.VRFATOCONV) AS QTRETIRADA
                                                              FROM CARDADIA CA INNER JOIN ITEMRETI IR ON CA.CDFILIAL = IR.CDFILIAL
                                                                                                     AND CA.NRCARDAPIO = IR.NRCARDAPIO
                                                                               INNER JOIN ITLANCTOEST IL ON IL.CDFILIAL = IR.CDFIITLANEST
                                                                                                        AND IL.NRLANCESTQ = IR.NRLANCESTQ
                                                                                                        AND IL.NRSEQUITEM = IR.NRSEQUITEM
                                                                               INNER JOIN PRODUTO PRA ON PRA.CDPRODUTO = IR.CDPRODUTO
                                                             WHERE CA.CDFILIAL = P_CDFILIAL
                                                               AND IL.CDFILIAL = C_RETIRADAPLA.CDFILIALLANC
                                                               AND IL.NRLANCESTQ = C_RETIRADAPLA.NRLANCESTQ
                                                               AND NVL(IL.IDEVOLESTOQ,'S') = 'S'
                                                             GROUP BY CA.CDFILIAL, CA.CDSERVFILI, CA.DTCARDAPIO,
                                                                      CA.QTCOMEFETCAR, CA.QTCLIEFETCAR, CDALMOXARIFE,
                                                                      CDLOCALESTOQ, NRLOTEESTQ, NRSUBLOTE, IR.CDPRODUTO)) R
                                                 ON R.CDPRODUTO = AN.CDPRODUTO
                  WHERE SG.CDFILISUBGR = P_CDFILISUBGR
                    AND SG.CDGRUPPROD = V_CDGRUPPROD
                  GROUP BY R.CDFILIAL, DTCARDAPIO, CDSERVFILI, SG.CDGRUPPROD, AN.CDSUBGRPROD) LOOP

            NOVO_CODIGO('GESRETIRADAROP', V_NRSEQRETIROP);
   
            INSERT INTO RETIRADADRO (NRFILIALROP, NRRETIRADADRO, CDGRUPPROD, CDSUBGRPROD, IDTPLANCROP,
                                     VRLANCTOESTQ, CDFILIALCENT, DTLANCAMENTO, DTRETICUSMOV, QTLANCTOEST,
                                     CDSERVFILI)
                 VALUES (P_NRROPFILIAL, V_NRSEQRETIROP, C_ITRETIRADAPLA.CDGRUPPROD, C_ITRETIRADAPLA.CDSUBGRPROD, 'RETIRADA_PLA',
                         C_ITRETIRADAPLA.VRCUSTPROD, V_CDFILCENTPME, SYSDATE, C_RETIRADAPLA.DTCARDAPIO, C_ITRETIRADAPLA.QTRETIRADA,
                         C_ITRETIRADAPLA.CDSERVFILI);
            END LOOP;
         END LOOP;
      END IF;

      FOR C_CUSTPADR IN (SELECT C.CDFILIAL, DTREFCUSPADR, SUM(C.VRCUSTPADR) AS VRCUSTPDR, S.CDSERVFILI
                           FROM CUSTPADR C INNER JOIN SERVICO S ON S.CDFILIAL = C.CDFILIAL
                                                               AND S.CDSERVFILI = C.CDSERVFILI
                          WHERE C.CDFILIAL = P_CDFILIAL
                            AND TRUNC(C.DTREFCUSPADR) = P_DTINICIAL
                            AND S.IDSERVPRINC  = 'S'
                          GROUP BY C.CDFILIAL, DTREFCUSPADR, S.CDSERVFILI) LOOP
                       
         NOVO_CODIGO('GESRETIRADAROP', V_NRSEQRETIROP);

         INSERT INTO RETIRADADRO (NRFILIALROP, NRRETIRADADRO, CDGRUPPROD, CDSUBGRPROD, IDTPLANCROP,
                                  VRLANCTOESTQ, CDFILIALCENT, DTLANCAMENTO, DTRETICUSMOV, QTLANCTOEST,
                                  CDSERVFILI)
              VALUES (P_NRROPFILIAL, V_NRSEQRETIROP, NULL, NULL, 'CUSTO',
                      C_CUSTPADR.VRCUSTPDR, V_CDFILCENTPME, SYSDATE, C_CUSTPADR.DTREFCUSPADR,1,
                      C_CUSTPADR.CDSERVFILI);
      END LOOP;
   END IF;
   
   IF (V_IDRETIRADAROP = 'E' OR V_IDRETIRADAROP = 'A') AND (NVL(V_IDTPAPURACAO,'3') <> '1') THEN   
      V_TIPOVENDA := '';
      
      FOR C_FILGRUPO IN(SELECT DISTINCT CDFILISUBGR
                          FROM PRSUBGRPROD
                         WHERE CDGRUPPROD = V_CDGRUPPRODDRL
                         ORDER BY CDFILISUBGR ASC)LOOP

             IF C_FILGRUPO.CDFILISUBGR = P_CDFILIAL THEN
                V_CDFILISUBGR_DRL := P_CDFILIAL;
                EXIT;
             ELSE
                V_CDFILISUBGR_DRL := 'P';
             END IF;
      END LOOP;
      
      FOR C_RETIRADA IN (SELECT L.CDFILIAL, L.NRLANCESTQ, L.DTLANCESTQ, L.CDFILIMOVI, L.NRLANCTONF
                           FROM LANCTOESTOQ L
                         WHERE L.CDFILIMOVI = P_CDFILIAL
                           AND TRUNC(L.DTLANCESTQ) = P_DTINICIAL
                           AND L.IDTPLANCTO IN ('S','3')
                         ORDER BY L.NRLANCESTQ, L.DTLANCESTQ) LOOP

         /*Inclui Retirada de Estoque*/
         V_CONTADOR := 0;
		 V_CDLOJA := '';
		 
         /* VERIFICA SE TEVE VENDA CONSOLIDADA QUE GEROU NOTA */
         IF C_RETIRADA.NRLANCTONF IS NOT NULL THEN
            SELECT COUNT(*) 
              INTO V_CONTADOR
              FROM ITEMVENDA
             WHERE CDFILIALNF = C_RETIRADA.CDFILIAL
               AND NRLANCTONF = C_RETIRADA.NRLANCTONF;

            IF V_CONTADOR = 0 THEN
               /* VERIFICA SE TEVE VENDA CONSOLIDADA SOMENTE POR BAIXA DE ESTOQUE, SEM NOTA FISCAL */
               SELECT COUNT(*) 
                 INTO V_CONTADOR
                 FROM ITEMVENDA
                WHERE CDFILIALEST = C_RETIRADA.CDFILIAL
                  AND NRLANCESTQ  = C_RETIRADA.NRLANCESTQ;

               IF V_CONTADOR = 0 THEN
                  V_TIPOVENDA := 'RETNAOCONSOLID';  /* OUTRAS RETIRADAS QUE NAO SAO POR CONSOLIDAÇÃO */
               ELSE
                  V_TIPOVENDA := 'RETCONSOLID';  /* RETIRADAS POR CONSOLIDAÇÃO */
				  SELECT CDLOJA 
                    INTO V_CDLOJA
                    FROM ITEMVENDA
                   WHERE CDFILIALEST = C_RETIRADA.CDFILIAL
                     AND NRLANCESTQ  = C_RETIRADA.NRLANCESTQ
                     AND ROWNUM = 1;
               END IF;
            ELSE
               V_TIPOVENDA := 'RETCONSOLID';  /* RETIRADAS POR CONSOLIDAÇÃO */
			   SELECT CDLOJA 
                 INTO V_CDLOJA
                 FROM ITEMVENDA
                WHERE CDFILIALNF = C_RETIRADA.CDFILIAL
                  AND NRLANCTONF = C_RETIRADA.NRLANCTONF
                  AND ROWNUM = 1;
            END IF;
         ELSE
            /* VERIFICA SE TEVE VENDA CONSOLIDADA SOMENTE POR BAIXA DE ESTOQUE, SEM NOTA FISCAL */
            SELECT COUNT(*) 
              INTO V_CONTADOR
              FROM ITEMVENDA
             WHERE CDFILIALEST = C_RETIRADA.CDFILIAL
               AND NRLANCESTQ  = C_RETIRADA.NRLANCESTQ;

            IF V_CONTADOR = 0 THEN
               V_TIPOVENDA := 'RETNAOCONSOLID';  /* OUTRAS RETIRADAS QUE NAO SAO POR CONSOLIDAÇÃO */
            ELSE
               V_TIPOVENDA := 'RETCONSOLID';  /* RETIRADAS POR CONSOLIDAÇÃO */
			   SELECT CDLOJA 
                 INTO V_CDLOJA
                 FROM ITEMVENDA
                WHERE CDFILIALEST = C_RETIRADA.CDFILIAL
                  AND NRLANCESTQ  = C_RETIRADA.NRLANCESTQ
                  AND ROWNUM = 1;
            END IF;
         END IF;

         /* VERIFICAR SE AS RETIRADAS DE ESTOQUE  SOFRERAM ALGUMA ALTERACAO QUANTO AO AGRUPAMENTO*/
         FOR C_ITRETIRADA IN(SELECT IT.CDPRODMOVI, AN.CDGRUPPROD, AN.CDSUBGRPROD,
                                    SUM(IT.QTLANCTOEST) AS QTLANCTOEST,
		     				        SUM(NVL(CUSTO_PRODUTO_LCEST(IT.CDFILIMOVI, IT.CDPRODMOVI, V_NRTIPOCUSTO, IT.DTLANCMOVI, SYSDATE, IT.CDALMOXARIFE, IT.CDLOCALESTOQ,  IT.NRLOTEESTQ, IT.NRSUBLOTE),0) * IT.QTLANCTOEST) AS VRLANCTOESTQ
                               FROM ITLANCTOEST IT,
							        (SELECT B.CDPRODUTO,A.CDGRUPPROD,A.CDSUBGRPROD,A.CDFILISUBGR   
                                       FROM PRODUTO B,   
                                            PRODUTO C,        
                                            (SELECT P.CDARVPROD AS CDPRODUTO,   
                                                    N.CDGRUPPROD,   
                                                    N.CDSUBGRPROD,   
                                                    N.CDFILISUBGR    
                                               FROM PRODUTO P,NVSUBGRPROD N   
                                              WHERE P.CDPRODUTO    = N.CDPRODUTO   
                                                AND N.CDFILISUBGR  = V_CDFILISUBGR_DRL    
                                                AND N.CDGRUPPROD   = V_CDGRUPPRODDRL) A   
                                      WHERE B.CDPRODUTO    = C.CDPRODUTO   
                                        AND (A.CDFILISUBGR = V_CDFILISUBGR_DRL )   
                                        AND (A.CDGRUPPROD  = V_CDGRUPPRODDRL   )   
                                        AND (C.CDARVPROD  LIKE A.CDPRODUTO||'%')  
                                      ORDER BY B.CDARVPROD ) AN
							  WHERE IT.CDFILIAL    = C_RETIRADA.CDFILIAL
                                AND IT.NRLANCESTQ  = C_RETIRADA.NRLANCESTQ
                                AND NVL(IT.IDEVOLESTOQ, 'S') = 'S'
                                AND AN.CDGRUPPROD  = V_CDGRUPPRODDRL
                                AND AN.CDFILISUBGR = V_CDFILISUBGR_DRL
                                AND AN.CDPRODUTO   = IT.CDPRODMOVI
                              GROUP BY IT.CDPRODMOVI, AN.CDGRUPPROD, AN.CDSUBGRPROD) LOOP
                       
               NOVO_CODIGO('GESRETIRADAROP', V_NRSEQRETIROP);
                                 
               INSERT INTO RETIRADADRO (NRFILIALROP, NRRETIRADADRO, CDGRUPPROD, CDSUBGRPROD, IDTPLANCROP,
                                        VRLANCTOESTQ, CDFILIALCENT, DTLANCAMENTO, DTRETICUSMOV, QTLANCTOEST,
                                        CDSERVFILI, NRLANCESTQ, CDLOJA, CDPRODMOVI)
                    VALUES (P_NRROPFILIAL, V_NRSEQRETIROP, C_ITRETIRADA.CDGRUPPROD, C_ITRETIRADA.CDSUBGRPROD, V_TIPOVENDA,
                            C_ITRETIRADA.VRLANCTOESTQ, V_CDFILCENTPME, SYSDATE, C_RETIRADA.DTLANCESTQ, C_ITRETIRADA.QTLANCTOEST,
                            NULL, C_RETIRADA.NRLANCESTQ, V_CDLOJA, C_ITRETIRADA.CDPRODMOVI);
            END LOOP;
      END LOOP;
   END IF;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('APURAC_RETIRADAROP','6.35.009'); END;
/
