CREATE OR REPLACE
PROCEDURE INS_MONTA_ITMPREVLIST (
    P_CDFILIAL      IN FILIAL.CDFILIAL%TYPE,
    P_CDOPERADOR    IN OPERADOR.CDOPERADOR%TYPE,
    P_TCDREGIAO     IN VARCHAR2,
    P_CDREGIAO      IN FILIAL.CDREGIAO%TYPE,
    P_DTINI         IN DATE,
    P_DTFIN         IN DATE,
    P_TPRODUTO      IN VARCHAR2,
    P_CDPRODINI     IN PRODUTO.CDARVPROD%TYPE,
    P_CDPRODFIN     IN PRODUTO.CDARVPROD%TYPE,
    P_CARGCOT       IN COLETAPR.IDTIPCOLREG%TYPE,
    P_NRSEQPRELIST  IN PREVLISTA.NRSEQPRELIST%TYPE,
    P_COINCIDEP     IN PREVLISTA.IDCOINVALIDLIST%TYPE,
    P_ROWSAFFECT    OUT INT
    )
IS
   TYPE CURTYPE   IS REF CURSOR;
   C_ITEM         CURTYPE;

   V_ITEM_CDFILIAL        ITMPREVLIST.CDFILIAL%TYPE;
   V_ITEM_NRSEQPRELIST    ITMPREVLIST.NRSEQPRELIST%TYPE;
   V_ITEM_NRCOLEPRECO     ITMPREVLIST.NRCOLEPRECO%TYPE;
   V_ITEM_CDFORNECED      ITMPREVLIST.CDFORNECED%TYPE;
   V_ITEM_CDREGIAO        ITMPREVLIST.CDREGIAO%TYPE;
   V_ITEM_CDPRODUTO       ITMPREVLIST.CDPRODUTO%TYPE;
   V_ITEM_CDMARCA         ITMPREVLIST.CDMARCA%TYPE;
   V_ITEM_CDFORMPGTO      ITMPREVLIST.CDFORMPGTO%TYPE;
   V_ITEM_VRPRECUNIIPL    ITMPREVLIST.VRPRECUNIIPL%TYPE;
   V_ITEM_VRPRECECOIPL    ITMPREVLIST.VRPRECECOIPL%TYPE;
   V_ITEM_VRPRECOIPLPI    ITMPREVLIST.VRPRECOIPLPI%TYPE;
   V_ERRO                 VARCHAR2(1);
   V_ROWSAFFECT           INT := 0;
BEGIN
   FOR C_REGIAO IN (SELECT CDREGIAO
                      FROM REGIAO
                     WHERE ((INSTR(P_CDREGIAO, CDREGIAO) <> 0) OR P_TCDREGIAO = 'T'))
   LOOP
      IF P_COINCIDEP = 'N' THEN
         OPEN C_ITEM FOR
            SELECT
               ITEMCOLE.CDFILIAL,
               P_NRSEQPRELIST NRSEQPRELIST,
               ITEMCOLE.NRCOLEPRECO,
               ITEMCOLE.CDFORNECED,
               ITEMCOLE.CDREGIAO,
               ITEMCOLE.CDPRODUTO,
               ITEMCOLE.CDMARCA,
               ITEMCOLE.CDFORMPGTO,
               ITEMCOLE.VRPRECUNIITM,
               ITEMCOLE.VRPRECECOITM,
               ITEMCOLE.VRPRECOITMPI
            FROM
               ITEMCOLE,
               COLETAPR,
               PRODUTO
            WHERE
               (COLETAPR.CDFILIAL    = P_CDFILIAL          ) AND
               (COLETAPR.CDOPERADOR  = P_CDOPERADOR        ) AND
               (COLETAPR.IDTIPCOLREG IN ('G','W', 'E') OR P_CARGCOT = 'T') AND
               (COLETAPR.CDFILIAL    = ITEMCOLE.CDFILIAL    ) AND
               (COLETAPR.NRCOLEPRECO = ITEMCOLE.NRCOLEPRECO ) AND
               (COLETAPR.IDDISMONTLIS <> 'N') AND
               (ITEMCOLE.DTINIVALITM        <= P_DTFIN             ) AND
               (ITEMCOLE.DTFINVALITM        >= P_DTINI             ) AND
               ITEMCOLE.VRPRECUNIITM > 0 AND
               (ITEMCOLE.CDREGIAO            = C_REGIAO.CDREGIAO          ) AND

               NOT EXISTS
                (SELECT
                   CDREGIAO
                 FROM
                   REFOREG
                 WHERE
                   ITEMCOLE.CDREGIAO   = REFOREG.CDREGIAO AND
                   ITEMCOLE.CDFORNECED = REFOREG.CDFORNECED) AND

                ITEMCOLE.CDPRODUTO = PRODUTO.CDPRODUTO AND
               (PRODUTO.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN OR P_TPRODUTO = 'T') AND
               (ITEMCOLE.CDREGIAO  = C_REGIAO.CDREGIAO) AND
               (EXISTS
                   (SELECT PRODCOMP.CDPRODUTO
                    FROM PRODCOMP, PRODUTO PR
                    WHERE
                     PRODCOMP.CDPRODUTO = PR.CDPRODUTO AND
                     PRODCOMP.CDOPERADOR = P_CDOPERADOR AND
                     (PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '%'))
               );
      ELSE
         OPEN C_ITEM FOR
            SELECT
               ITEMCOLE.CDFILIAL,
               P_NRSEQPRELIST NRSEQPRELIST,
               ITEMCOLE.NRCOLEPRECO,
               ITEMCOLE.CDFORNECED,
               ITEMCOLE.CDREGIAO,
               ITEMCOLE.CDPRODUTO,
               ITEMCOLE.CDMARCA,
               ITEMCOLE.CDFORMPGTO,
               ITEMCOLE.VRPRECUNIITM,
               ITEMCOLE.VRPRECECOITM,
               ITEMCOLE.VRPRECOITMPI
            FROM
               ITEMCOLE,
               COLETAPR,
               PRODUTO
            WHERE
               (COLETAPR.CDFILIAL    = P_CDFILIAL          ) AND
               (COLETAPR.CDOPERADOR  = P_CDOPERADOR        ) AND
               (COLETAPR.IDTIPCOLREG IN ('G','W', 'E') OR P_CARGCOT = 'T') AND
               (COLETAPR.CDFILIAL    = ITEMCOLE.CDFILIAL    ) AND
               (COLETAPR.NRCOLEPRECO = ITEMCOLE.NRCOLEPRECO ) AND
               (COLETAPR.IDDISMONTLIS <> 'N') AND
               (ITEMCOLE.DTINIVALITM         = P_DTINI             ) AND
               (ITEMCOLE.DTFINVALITM         = P_DTFIN             ) AND
               ITEMCOLE.VRPRECUNIITM > 0 AND
               (ITEMCOLE.CDREGIAO            = C_REGIAO.CDREGIAO          ) AND

               NOT EXISTS
                (SELECT
                   CDREGIAO
                 FROM
                   REFOREG
                 WHERE
                   ITEMCOLE.CDREGIAO   = REFOREG.CDREGIAO AND
                   ITEMCOLE.CDFORNECED = REFOREG.CDFORNECED) AND

                ITEMCOLE.CDPRODUTO = PRODUTO.CDPRODUTO AND
               (PRODUTO.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN OR P_TPRODUTO = 'T') AND
               (ITEMCOLE.CDREGIAO  = C_REGIAO.CDREGIAO) AND
               (EXISTS
                   (SELECT PRODCOMP.CDPRODUTO
                    FROM PRODCOMP, PRODUTO PR
                    WHERE
                     PRODCOMP.CDPRODUTO = PR.CDPRODUTO AND
                     PRODCOMP.CDOPERADOR = P_CDOPERADOR AND
                     (PRODUTO.CDARVPROD LIKE PR.CDARVPROD || '%'))
               );
      END IF;
      LOOP
      FETCH C_ITEM INTO V_ITEM_CDFILIAL, V_ITEM_NRSEQPRELIST, V_ITEM_NRCOLEPRECO, V_ITEM_CDFORNECED,
                        V_ITEM_CDREGIAO, V_ITEM_CDPRODUTO, V_ITEM_CDMARCA, V_ITEM_CDFORMPGTO,
                        V_ITEM_VRPRECUNIIPL, V_ITEM_VRPRECECOIPL, V_ITEM_VRPRECOIPLPI;
      EXIT WHEN C_ITEM%NOTFOUND;
         P_ROWSAFFECT := SQL%ROWCOUNT;
         BEGIN
            INSERT INTO ITMPREVLIST
               (CDFILIAL, NRSEQPRELIST, NRCOLEPRECO, CDFORNECED,
                CDREGIAO, CDPRODUTO, CDMARCA, IDITMSELLIS, CDFORMPGTO,
                VRPRECUNIIPL, VRPRECECOIPL, VRPRECOIPLPI)
            VALUES(V_ITEM_CDFILIAL, V_ITEM_NRSEQPRELIST, V_ITEM_NRCOLEPRECO, V_ITEM_CDFORNECED,
                   V_ITEM_CDREGIAO, V_ITEM_CDPRODUTO, V_ITEM_CDMARCA, 'N', V_ITEM_CDFORMPGTO,
                   V_ITEM_VRPRECUNIIPL, V_ITEM_VRPRECECOIPL, V_ITEM_VRPRECOIPLPI);
         EXCEPTION
            WHEN OTHERS THEN BEGIN
                V_ERRO := 'S';
            END;
         END;
         V_ROWSAFFECT := V_ROWSAFFECT+1;
      END LOOP;
      CLOSE C_ITEM;
   END LOOP;
   P_ROWSAFFECT := V_ROWSAFFECT;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('INS_MONTA_ITMPREVLIST','6.19.XXX'); END;
/