CREATE OR REPLACE
FUNCTION VERIFICA_MARCA_OL
  (P_CDFILIOPELOG    IN ITEMSOLI.CDFILIOPELOG%TYPE,
   P_CDFILSOLI       IN ITEMSOLI.CDFILSOLI%TYPE,
   P_CDPRODESTO      IN ITEMSOLI.CDPRODUTO%TYPE,
   P_DTPROGENTR      IN ITEMSOLI.DTPROGENTR%TYPE,
   P_DTPROCESS       IN PARAMFILIAL.DTPROCESSA%TYPE,
   P_IDUTPRODPREF    IN PARCMPSUP.IDUTPRODPREF%TYPE,
   P_LISTA_VAZIA     IN VARCHAR2,
   P_IDUTLPRARVOLCMP IN PARASUPRI.IDUTLPRARVOLCMP%TYPE)
RETURN VARCHAR2
IS
   V_CDPROPARTFILI  VARCHAR2(50) := NULL;
   V_IDTIPOAPUR   PARASUPRI.IDTIPOAPUR%TYPE;
   V_VRPRECUNIITM ITEMCOLE.VRPRECUNIITM%TYPE;
   V_VRPRECECOITM ITEMCOLE.VRPRECECOITM%TYPE;
   V_VRPRECOITMPI ITEMCOLE.VRPRECOITMPI%TYPE;
BEGIN
   BEGIN
      SELECT
         CDPRODARVOL||'_'||CDPRARVORIG||'_'||'2' PRODUTO,
         MIN(CASE NVL(IDTIPOAPUR, '0')
               WHEN '0'
               THEN (ITEMCOLE.VRPRECUNIITM)
               ELSE (CASE NVL(IDTIPOAPUR, '1')
                          WHEN '0'
                          THEN (ITEMCOLE.VRPRECECOITM)
                          ELSE (ITEMCOLE.VRPRECOITMPI)
                    END)
            END)
      INTO V_CDPROPARTFILI,
           V_VRPRECUNIITM
      FROM
       (SELECT
          ITEMCOLE.CDFILIAL,
          ITEMCOLE.NRCOLEPRECO,
          ITEMCOLE.CDPRODUTO,
          ITEMCOLE.CDMARCA,
          ITEMCOLE.VRPRECUNIITM,
          ITEMCOLE.VRPRECECOITM,
          ITEMCOLE.VRPRECOITMPI,
          ITEMCOLE.CDFORNECED,
          ITEMCOLE.CDREGIAO
        FROM
          ITEMCOLE,
          FILIAL
        WHERE
          FILIAL.CDFILIAL       = P_CDFILIOPELOG AND
          ITEMCOLE.CDFILIAL     = NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL) AND
          ITEMCOLE.IDITMLISPREC = 'S'                         AND
          ITEMCOLE.IDPRECALT    = 'S'                         AND
          P_DTPROGENTR BETWEEN ITEMCOLE.DTINIVALITM AND ITEMCOLE.DTFINVALITM AND
          ITEMCOLE.VRPRECUNIITM > 0                           AND
          ITEMCOLE.CDREGIAO     = FILIAL.CDREGIAO )
          ITEMCOLE, PARASUPRI, PRODUTO, RELACPRODOL, PRODUTO PRODUTOOL
      WHERE
        ITEMCOLE.CDFILIAL        = PARASUPRI.CDFILIAL         AND
        PRODUTO.CDPRODUTO        = ITEMCOLE.CDPRODUTO         AND
        PRODUTO.CDPRODESTO       = P_CDPRODESTO               AND
        ITEMCOLE.CDPRODUTO       = RELACPRODOL.CDPRARVORIG    AND
        ITEMCOLE.CDMARCA         = RELACPRODOL.CDMARCA        AND
        RELACPRODOL.CDPRODARVOL = PRODUTOOL.CDPRODUTO         AND
        (((PRODUTOOL.CDPRODUTO  = PRODUTOOL.CDPRODESTO) AND (P_IDUTLPRARVOLCMP = 'S')) OR
        (P_IDUTLPRARVOLCMP = 'N')) AND
        ((P_IDUTPRODPREF = 'N') OR (EXISTS(SELECT 1
                                             FROM PRODPREFMED
                                            WHERE PRODPREFMED.CDFILIAL   = P_CDFILSOLI
                                              AND PRODPREFMED.CDPRODPREF = ITEMCOLE.CDPRODUTO)))  AND
        NOT EXISTS
          (SELECT
             CDREGIAO
           FROM
             REFOREG
           WHERE
             ITEMCOLE.CDFORNECED = REFOREG.CDFORNECED          AND
             ITEMCOLE.CDREGIAO   = REFOREG.CDREGIAO)           AND
        NOT EXISTS
          (SELECT
             CDFORNECED
           FROM
             REFORFIL
           WHERE
             CDFILIAL   = P_CDFILIOPELOG                       AND
             CDFORNECED = ITEMCOLE.CDFORNECED                  AND
             CDPERIENTR IS NULL)                               AND
        (
         (EXISTS (SELECT
                     CDMARCA
                  FROM
                     PARTFILI
                  WHERE
                     (CDFILIAL  = P_CDFILSOLI)                 AND
                     (CDPRODUTO = ITEMCOLE.CDPRODUTO)          AND
                     (CDTIPPART = '1')                         AND
                     (CDMARCA   = ITEMCOLE.CDMARCA)))          OR
         (EXISTS (SELECT
                     CDMARCA
                  FROM
                     PARTFILI
                  WHERE
                     (CDFILIAL  = P_CDFILSOLI)                 AND
                     (CDPRODUTO = ITEMCOLE.CDPRODUTO)          AND
                     (CDTIPPART = '2')                         AND
                     (CDMARCA   = ITEMCOLE.CDMARCA))         ) OR
         (EXISTS (SELECT
                     CDFORNECED
                  FROM
                     PARTFILI
                  WHERE
                     (CDFILIAL   = P_CDFILSOLI)                AND
                     (CDPRODUTO  = ITEMCOLE.CDPRODUTO)         AND
                     (CDTIPPART  = '7')                        AND
                     (CDMARCA    = ITEMCOLE.CDMARCA)           AND
                     (CDFORNECED = ITEMCOLE.CDFORNECED)))      OR
         (EXISTS (SELECT
                     CDFORNECED
                  FROM
                     PARTFILI
                  WHERE
                     (CDFILIAL   = P_CDFILSOLI)                AND
                     (CDPRODUTO  = ITEMCOLE.CDPRODUTO)         AND
                     (CDTIPPART  = '8')                        AND
                     (CDMARCA    = ITEMCOLE.CDMARCA)           AND
                     (CDFORNECED = ITEMCOLE.CDFORNECED)))      OR  
         (EXISTS (SELECT
                     CDPRODUTO
                  FROM
                     PARTFILI
                  WHERE
                     (CDFILIAL   = P_CDFILSOLI)                AND
                     (CDPRODUTO  = ITEMCOLE.CDPRODUTO)         AND
                     (CDTIPPART  IN ('3','6','9')))            AND
                 NOT EXISTS (SELECT
                                CDPRODUTO
                             FROM
                                PARTFILI
                             WHERE
                                (CDFILIAL   = P_CDFILSOLI)     AND
                                (NRCOLEPRECO IS NULL)          AND
                                (CDTIPPART  IN ('1','2', '7','8')) AND
                                (CDPRODUTO  = ITEMCOLE.CDPRODUTO))
                ) OR
         (NOT EXISTS (SELECT
                     CDPRODUTO
                  FROM
                     PARTFILI
                  WHERE
                     (CDFILIAL   = P_CDFILSOLI)             AND
                     (CDPRODUTO  = ITEMCOLE.CDPRODUTO))    )   OR
         (EXISTS (SELECT
                     1
                  FROM PARTFILI, COLETAPR C
                  WHERE
                     (PARTFILI.CDFILIAL  = P_CDFILSOLI)        AND
                     (PARTFILI.CDPRODUTO = ITEMCOLE.CDPRODUTO) AND
                     (PARTFILI.CDTIPPART  = '4')               AND
                     (PARTFILI.NRCOLEPRECO IS NOT NULL)        AND
                     (C.CDFILIAL = PARTFILI.CDFILCOTA)         AND
                     (C.NRCOLEPRECO = PARTFILI.NRCOLEPRECO)    AND
                     (((PARTFILI.CDFORNECED = ITEMCOLE.CDFORNECED) AND (C.DTFINVALCOL >= P_DTPROCESS)) OR
                       (C.DTFINVALCOL < P_DTPROCESS)
                     ) ) )
       ) AND
          (NOT EXISTS (SELECT
                          CDMARCA
                       FROM
                          PARTFILI
                       WHERE
                          (CDFILIAL  = P_CDFILSOLI)           AND
                          (CDPRODUTO = ITEMCOLE.CDPRODUTO)    AND
                          (CDTIPPART = '3')                   AND
                          (CDMARCA   = ITEMCOLE.CDMARCA)))    AND
          (NOT EXISTS (SELECT
                          CDFORNECED
                       FROM
                          PARTFILI
                       WHERE
                          (CDFILIAL   = P_CDFILSOLI)           AND
                          (CDPRODUTO  = ITEMCOLE.CDPRODUTO)    AND
                          (CDTIPPART  = '6')                   AND
                          (CDFORNECED = ITEMCOLE.CDFORNECED))) AND
          (NOT EXISTS (SELECT
                          CDFORNECED
                       FROM
                          PARTFILI
                       WHERE
                          (CDFILIAL   = P_CDFILSOLI)            AND
                          (CDPRODUTO  = ITEMCOLE.CDPRODUTO)     AND
                          (CDTIPPART  = '9')                    AND
                          (CDMARCA    = ITEMCOLE.CDMARCA)       AND
                          (CDFORNECED = ITEMCOLE.CDFORNECED)) ) AND ROWNUM = 1
      GROUP BY CDPRODARVOL||'_'||CDPRARVORIG||'_'||'2';
   EXCEPTION
      WHEN NO_DATA_FOUND THEN BEGIN
         V_CDPROPARTFILI := NULL;
         V_VRPRECUNIITM  := 0;
      END;
   END;
   
   IF V_CDPROPARTFILI IS NULL THEN
      BEGIN
         SELECT CDPRODARVOL||'_'||CDPRARVORIG||'_'||'3'
           INTO V_CDPROPARTFILI
           FROM PARTFILI, PRODUTO, RELACPRODOL, PRODUTO PRODUTOOL
          WHERE PARTFILI.CDPRODUTO = PRODUTO.CDPRODUTO
            AND PARTFILI.CDFILIAL  = P_CDFILSOLI
            AND PARTFILI.CDMARCA   = RELACPRODOL.CDMARCA
            AND PRODUTO.CDPRODESTO = P_CDPRODESTO
            AND PRODUTO.CDPRODUTO  = RELACPRODOL.CDPRARVORIG
            AND NVL(CDTIPPART, 'X') IN ('1', '2', '7', '8')
            AND ROWNUM = '1'
            AND ((P_IDUTPRODPREF = 'N') OR
                (EXISTS(SELECT 1
                         FROM PRODPREFMED
                        WHERE PRODPREFMED.CDFILIAL   = PARTFILI.CDFILIAL
                          AND PRODPREFMED.CDPRODPREF = PARTFILI.CDPRODUTO)))
            AND RELACPRODOL.CDPRODARVOL = PRODUTOOL.CDPRODUTO
            AND (((PRODUTOOL.CDPRODUTO  = PRODUTOOL.CDPRODESTO) AND (P_IDUTLPRARVOLCMP = 'S')) OR
                (P_IDUTLPRARVOLCMP = 'N'))
          ORDER BY PARTFILI.CDMARCA;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN BEGIN
            V_CDPROPARTFILI  := NULL;
         END;
      END;
   END IF;
   IF V_CDPROPARTFILI IS NULL THEN
      BEGIN
         SELECT CDPRODARVOL||'_'||CDPRARVORIG||'_'||'3'
           INTO V_CDPROPARTFILI
           FROM PARTFILI, PRODUTO, RELACPRODOL, PRODUTO PRODUTOOL
          WHERE PARTFILI.CDPRODUTO = PRODUTO.CDPRODUTO
            AND PARTFILI.CDFILIAL  = P_CDFILSOLI
            AND PARTFILI.CDMARCA   = RELACPRODOL.CDMARCA
            AND PRODUTO.CDPRODESTO = P_CDPRODESTO
            AND PRODUTO.CDPRODUTO  = RELACPRODOL.CDPRARVORIG
            AND NVL(CDTIPPART, 'X') IN ('1', '2', '7', '8')
            AND ROWNUM = '1'
            AND RELACPRODOL.CDPRODARVOL = PRODUTOOL.CDPRODUTO
            AND (((PRODUTOOL.CDPRODUTO  = PRODUTOOL.CDPRODESTO) AND (P_IDUTLPRARVOLCMP = 'S')) OR
                (P_IDUTLPRARVOLCMP = 'N'))
          ORDER BY PARTFILI.CDMARCA;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN BEGIN
            V_CDPROPARTFILI  := NULL;
         END;
      END;
   END IF;
   RETURN(V_CDPROPARTFILI);
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('VERIFICA_MARCA_OL','5.33.XXX'); END;
/
