CREATE OR REPLACE FUNCTION QUERY_ESTOQ_DFS48000 (P_FILOPELOG          IN VARCHAR2,
                                                 P_CDPRODUTO          IN VARCHAR2,
                                                 P_CDMARCA            IN VARCHAR2,
                                                 P_IDUTRESPEDEXOL     IN VARCHAR2 DEFAULT NULL, /*PARASUPRI.IDUTRESPEDEXOL*/
                                                 P_DFILDEST           IN VARCHAR2 DEFAULT NULL,
                                                 P_DFILLANC           IN VARCHAR2 DEFAULT NULL,
                                                 P_NRAUTOFORN         IN VARCHAR2 DEFAULT NULL,
                                                 P_DTPROGENPEOL       IN DATE     DEFAULT NULL) RETURN QUERY_ESTOQ_DFS48000_TABLE PIPELINED
IS
   OUT_RECORD QUERY_ESTOQ_DFS48000_TYPE := QUERY_ESTOQ_DFS48000_TYPE (NULL, NULL, NULL, NULL,
                                                                      0, 0, 0, 0, 0, 0, 0, 0);

   V_VRFATUNEST       FLOAT;
   V_QTESTOQUE        FLOAT;
   V_QTTOTALRESERVA   FLOAT;
   V_QTRESERVESTOL    FLOAT;
   V_QTEST_DISPO      FLOAT;
   V_DTPOSIESTQ       POSESTDIA.DTPOSIESTQ%TYPE;
   V_QTESTOQDIA       FLOAT;
   V_QTESTOQUE_CONVER FLOAT;

BEGIN
   FOR C_ESTOQ IN (SELECT PRODESTO.CDPRODUTO CDPRODUTOEST, PRODESTO.CDARVPROD CDARVPRODEST,
                          PRODESTO.NMPRODUTO NMPRODUTOEST, PRODESTO.VRFATOCONV VRFATOCONVEST,
                          PRODUTO.CDPRODUTO CDPRODUTOCMP, PRODUTO.CDARVPROD CDARVPRODCMP,
                          PRODUTO.NMPRODUTO NMPRODUTOCMP, PRODUTO.VRFATOCONV VRFATOCONVCMP
                     FROM RELACPRODOL, PRODUTO, PRODUTO PRODESTO
                    WHERE RELACPRODOL.CDPRARVORIG = P_CDPRODUTO
                      AND RELACPRODOL.CDMARCA     = P_CDMARCA
                      AND RELACPRODOL.CDPRODARVOL = PRODUTO.CDPRODUTO
                      AND PRODUTO.CDPRODESTO      = PRODESTO.CDPRODUTO)
   LOOP
      SELECT NVL(MAX(VRFATUNEST), 0)
        INTO V_VRFATUNEST
        FROM CNVPRODUNEST
       WHERE CDPRUNEST = C_ESTOQ.CDPRODUTOEST
         AND NVL(VRFATUNEST, 0) > 1;

      SELECT MAX(POSESTDIA.DTPOSIESTQ)
        INTO V_DTPOSIESTQ
        FROM POSESTDIA
       WHERE POSESTDIA.CDFILIAL      = P_FILOPELOG
         AND POSESTDIA.CDALMOXARIFE  = ' '
         AND POSESTDIA.CDLOCALESTOQ  = ' '
         AND POSESTDIA.CDPRODUTO     = C_ESTOQ.CDPRODUTOEST
         AND POSESTDIA.NRLOTEESTQ    = ' '
         AND POSESTDIA.NRSUBLOTE     = ' '
         AND POSESTDIA.DTPOSIESTQ    <= TO_DATE(SYSDATE+9999);

      SELECT MAX(POSESTDIA.QTESTOQDIA)
        INTO V_QTESTOQDIA
        FROM POSESTDIA
       WHERE POSESTDIA.CDFILIAL      = P_FILOPELOG
         AND POSESTDIA.CDALMOXARIFE  = ' '
         AND POSESTDIA.CDLOCALESTOQ  = ' '
         AND POSESTDIA.CDPRODUTO     = C_ESTOQ.CDPRODUTOEST
         AND POSESTDIA.NRLOTEESTQ    = ' '
         AND POSESTDIA.NRSUBLOTE     = ' '
         AND POSESTDIA.DTPOSIESTQ    = V_DTPOSIESTQ;

      IF C_ESTOQ.CDPRODUTOEST = C_ESTOQ.CDPRODUTOCMP THEN
         OUT_RECORD.CDARVPROD      := C_ESTOQ.CDARVPRODEST;
         OUT_RECORD.NMPRODUTO      := C_ESTOQ.NMPRODUTOEST;
         V_QTESTOQUE_CONVER          := V_QTESTOQDIA;
      ELSE
         OUT_RECORD.CDARVPROD      := C_ESTOQ.CDARVPRODCMP;
         OUT_RECORD.NMPRODUTO      := C_ESTOQ.NMPRODUTOCMP;
         V_QTESTOQUE_CONVER        := V_QTESTOQDIA/C_ESTOQ.VRFATOCONVCMP;
      END IF;

      OUT_RECORD.CDPRODUTOEST      := C_ESTOQ.CDPRODUTOEST;
      OUT_RECORD.CDPRODUTOCMP      := C_ESTOQ.CDPRODUTOCMP;
      OUT_RECORD.VRFATOCONVCMP     := C_ESTOQ.VRFATOCONVCMP;
      OUT_RECORD.VRFATOCONVEST     := C_ESTOQ.VRFATOCONVEST;
      OUT_RECORD.VRFATUNEST        := V_VRFATUNEST;
      OUT_RECORD.QTESTOQUE         := V_QTESTOQDIA;
      OUT_RECORD.QTESTOQUE_CONVER  := V_QTESTOQUE_CONVER;
      OUT_RECORD.QTTOTALRESERVA    := V_QTTOTALRESERVA;
      OUT_RECORD.QTRESERVESTOL     := V_QTRESERVESTOL;
      OUT_RECORD.QTEST_DISPO       := V_QTEST_DISPO;
      PIPE ROW (OUT_RECORD);
   END LOOP;
END;
/