CREATE OR REPLACE
PROCEDURE DUPLICA_COTACAO
   (P_CDFILIAL     IN FILIAL.CDFILIAL%TYPE,
    P_CDFILIPROC   IN FILIAL.CDFILIAL%TYPE,
    P_NRCOLEPRECO  IN COLETAPR.NRCOLEPRECO%TYPE,
    P_NRSEMAINIC   IN COLETAPR.NRSEMAINIC%TYPE,
    P_NRSEMAFINAL  IN COLETAPR.NRSEMAFINAL%TYPE,
    P_DTNOVINIVAL  IN COLETAPR.DTINIVALCOL%TYPE,
    P_DTNOVFINVAL  IN COLETAPR.DTFINVALCOL%TYPE,
    P_DTINIVALCOL  IN COLETAPR.DTINIVALCOL%TYPE,
    P_DTFINVALCOL  IN COLETAPR.DTFINVALCOL%TYPE,
    P_DTCOLEPREC   IN COLETAPR.DTCOLEPREC%TYPE,
    P_REAJUSTE     IN NUMBER,
    P_NRCOLEDUP    IN COLETAPR.NRCOLEPRECO%TYPE,
    P_IDDUPLICA    IN VARCHAR2,
    P_CDOPERADOR   IN VARCHAR2 DEFAULT NULL,
    P_TCDOPERADOR  IN VARCHAR2,
    P_CDOPERINCL   IN VARCHAR2,
    P_CDREGIAO     IN VARCHAR2 DEFAULT NULL,
    P_CDFORNOL     IN VARCHAR2 DEFAULT NULL,
    P_COTA_N_DUP   OUT VARCHAR2)
IS

   V_NRCOLEPRECO  COLETAPR.NRCOLEPRECO%TYPE;
   V_NRCOLEORIG   COLETAPR.NRCOLEPRECO%TYPE;
   V_CDOPERADOR   OPERADOR.CDOPERADOR%TYPE;
   V_IDDISMONTLIS COLETAPR.IDDISMONTLIS%TYPE;

   V_COUNT             INT;
   V_COUNTAUX          INT;

   V_PGTO_CDFORMPGTO   PRODFORN.CDFORMPGTO%TYPE;
   V_PGTO_IDTPFORPGPRF PRODFORN.IDTPFORPGPRF%TYPE;
   V_PGTO_NRPARCPGTPRF PRODFORN.NRPARCPGTPRF%TYPE;
   V_PGTO_NRDIAPGFIPRF PRODFORN.NRDIAPGFIPRF%TYPE;
   V_PGTO_IDUTDIAPGPRF PRODFORN.IDUTDIAPGPRF%TYPE;

   V_PGTO_IDTPFORPGTFO FORNECEDOR.IDTPFORPGTFO%TYPE;
   V_PGTO_NRPARCPGTOFO FORNECEDOR.NRPARCPGTOFO%TYPE;
   V_PGTO_NRDIAPGFIXFO FORNECEDOR.NRDIAPGFIXFO%TYPE;
   V_PGTO_IDUTDIAPGTFO FORNECEDOR.IDUTDIAPGTFO%TYPE;
   V_PGTO_IDTPDESCFORN FORNECEDOR.IDTPDESCFORN%TYPE;
   V_PGTO_VRPEDESCFORN FORNECEDOR.VRPEDESCFORN%TYPE;
   V_PGTO_IDTPFRETFORN FORNECEDOR.IDTPFRETFORN%TYPE;

   V_IDUTISTATCOT VARCHAR2(1);
   V_IDSITUCOLETA VARCHAR2(1);
   V_IDCOTCONCLUI VARCHAR2(1);

   V_IDMOTIVNDUPL LOGITEMCOLE.IDMOTIVNDUPL%TYPE;

   V_DSMETUSULIC VARCHAR2(50);

   V_PRXCOLETA   VARCHAR2(20);

   V_CDEMPRESA  EMPRESA.CDEMPRESA%TYPE;
   V_CDINSCESTA INSCRESTAD.CDINSCESTA%TYPE;

   V_CONTADOR FLOAT := 0;

   V_DSIP       VARCHAR2(50);
   V_DSUSUARIO  VARCHAR2(50);
   V_DSRDM      VARCHAR2(50);
   V_DSMETODO   VARCHAR2(250);
   V_DSOPERADOR VARCHAR2(12);

   V_NRCOLEPRECO_AUX  COLETAPR.NRCOLEPRECO%TYPE;

   CURSOR C_COTACAO IS
     SELECT NRCOLEPRECO, COLETAPR.CDOPERADOR, IDDISMONTLIS
       FROM COLETAPR
      WHERE ((INSTR(P_CDOPERADOR, COLETAPR.CDOPERADOR) <> 0) OR
            ((P_TCDOPERADOR = 'T') AND COLETAPR.CDOPERADOR IN ((SELECT C.CDOPERADOR
                                                                  FROM COMPROPER CO, COMPRADOR C, OPERADOR O
                                                                 WHERE CO.IDCOTCMPOPER = 'S'
                                                                   AND CO.CDCOMPRADOR  = C.CDOPERADOR
                                                                   AND CO.CDOPERADOR   = V_DSOPERADOR
                                                                   AND O.CDOPERADOR    = C.CDOPERADOR
                                                                 UNION
                                                                SELECT C.CDOPERADOR
                                                                  FROM COMPRADOR C, OPERADOR O
                                                                 WHERE C.CDOPERADOR = O.CDOPERADOR
                                                                   AND C.CDOPERADOR = V_DSOPERADOR))))
        AND (CDFILIAL     = P_CDFILIAL)
        AND ((P_IDDUPLICA = '1' AND DTINIVALCOL >= P_DTINIVALCOL AND DTFINVALCOL <= P_DTFINVALCOL) OR
            (P_IDDUPLICA  = '2' AND NRCOLEPRECO = P_NRCOLEDUP))
        AND EXISTS (SELECT 1
                      FROM ITEMCOLE
                     WHERE ITEMCOLE.CDFILIAL    = COLETAPR.CDFILIAL
                       AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO);
BEGIN
   V_DSMETUSULIC := '8300_SUPSTPO_DUPLICA_COTACAO'||NVL(P_CDFORNOL, 'N');

   WEBTUNNING(V_DSIP,
              V_DSUSUARIO,
              V_DSRDM,
              V_DSMETODO,
              V_DSOPERADOR);

   SELECT
      MAX(NVL(IDUTISTATCOT, 'N')), MAX(NVL(IDCOTCONCLUI, 'N'))
   INTO
      V_IDUTISTATCOT, V_IDCOTCONCLUI
   FROM
      PARASUPRI
   WHERE
      CDFILIAL = P_CDFILIAL;

   IF V_IDUTISTATCOT = 'S' THEN
      V_IDSITUCOLETA := 'A';
   ELSE
      V_IDSITUCOLETA := '';
   END IF;

   OPEN C_COTACAO;
   LOOP
      FETCH C_COTACAO INTO V_NRCOLEORIG, V_CDOPERADOR, V_IDDISMONTLIS;
      EXIT WHEN C_COTACAO%NOTFOUND;

      NOVO_CODIGO('COLETA'||P_CDFILIAL, V_PRXCOLETA);
      V_NRCOLEPRECO := SUBSTR(V_PRXCOLETA,11,10);
      P_COTA_N_DUP  := 'N'||V_NRCOLEPRECO;

      INSERT INTO COLETAPR
         (CDFILIAL,
          NRCOLEPRECO,
          NRSEMAINIC,
          NRSEMAFINAL,
          DTINIVALCOL,
          DTFINVALCOL,
          CDOPERADOR,
          DTCOLEPREC,
          NRCOLEORIGCO,
          CDOPERINCL,
          DTINCLCOLET,
          IDDISMONTLIS,
          IDSITUCOLETA)
      VALUES
         (P_CDFILIAL,
          V_NRCOLEPRECO,
          P_NRSEMAINIC ,
          P_NRSEMAFINAL,
          P_DTNOVINIVAL,
          P_DTNOVFINVAL,
          V_CDOPERADOR,
          P_DTCOLEPREC,
          V_NRCOLEORIG,
          P_CDOPERINCL,
          SYSDATE,
          V_IDDISMONTLIS,
          V_IDSITUCOLETA);

      FOR C_REGIAO IN
         (SELECT CDREGIAO
            FROM REGIAO
           WHERE INSTR(NVL(P_CDREGIAO, REGIAO.CDREGIAO), REGIAO.CDREGIAO) <> 0
             AND EXISTS (SELECT 1
                           FROM ITEMCOLE
                          WHERE ITEMCOLE.CDFILIAL    = P_CDFILIAL
                            AND ITEMCOLE.NRCOLEPRECO = V_NRCOLEORIG
                            AND ITEMCOLE.CDREGIAO    = REGIAO.CDREGIAO)
          )
      LOOP
         FOR C_ITEMCOLE IN
            (SELECT I.CDFILIAL, V_NRCOLEPRECO AS NRCOLEPRECO, I.CDFORNECED, I.CDREGIAO,
                    I.CDPRODUTO, P.CDARVPROD, I.CDMARCA, I.CDTIPCOB,
                    I.CDSEGMARCCOL, P_DTNOVINIVAL AS DTNOVINIVAL, P_DTNOVFINVAL AS DTNOVFINVAL,
                    I.VRPRECUNIITM + ((I.VRPRECUNIITM * P_REAJUSTE) / 100) AS VRPRECUNIITM,
                    I.VRPRECECOITM, I.VRPERDESITM, I.IDTIPFREITM, I.NRPZOENTCOL,
                    I.CDFORMPGTO, I.IDTPFOPGTCOL, I.NRPARCPGTCOL, I.NRDIAPGFXCOL,
                    I.IDUTDIAPGCOL, I.DSPZOPGTCONC, F.IDSITUCADA, F.CDQUALIF,
                    F.IDFORNAUTO, F.DTVALQUALIF
               FROM ITEMCOLE I INNER JOIN PRODUTO    P ON P.CDPRODUTO  = I.CDPRODUTO
                               INNER JOIN FORNECEDOR F ON F.CDFORNECED = I.CDFORNECED
              WHERE I.CDFILIAL     = P_CDFILIAL
                AND I.NRCOLEPRECO  = V_NRCOLEORIG
                AND I.CDREGIAO     = C_REGIAO.CDREGIAO)
         LOOP
            IF ((V_IDUTISTATCOT = 'S') AND (V_IDCOTCONCLUI = 'S')) THEN
               SELECT MAX(I.NRCOLEPRECO)
                 INTO V_NRCOLEPRECO_AUX
                 FROM ITEMCOLE I INNER JOIN COLETAPR C ON C.CDFILIAL    = I.CDFILIAL
                                                      AND C.NRCOLEPRECO = I.NRCOLEPRECO
                WHERE I.CDFILIAL    = C_ITEMCOLE.CDFILIAL
                  AND I.NRCOLEPRECO <> C_ITEMCOLE.NRCOLEPRECO
                  AND I.CDMARCA     = C_ITEMCOLE.CDMARCA
                  AND I.CDREGIAO    = C_ITEMCOLE.CDREGIAO
                  AND I.CDFORNECED  = C_ITEMCOLE.CDFORNECED
                  AND I.CDPRODUTO   = C_ITEMCOLE.CDPRODUTO
                  AND C.DTINIVALCOL = C_ITEMCOLE.DTNOVINIVAL
                  AND C.DTFINVALCOL = C_ITEMCOLE.DTNOVFINVAL
                  AND NVL(C.IDSITUCOLETA, 'C') = 'C';

               IF V_NRCOLEPRECO_AUX IS NOT NULL THEN
                  P_COTA_N_DUP := 'S'||C_ITEMCOLE.NRCOLEPRECO;
                  INSERT INTO LOGITEMCOLE
                       (CDFILIALLIC,  NRCOLEPRELIC, CDMARCALIC,   CDREGIAOLIC,
                        CDFORNECELIC, CDPRODUTOLIC, DTINIVALLIC,  DTFINVALLIC,
                        DTOPERACLIC,  IDOPERALIC,   DSMETUSULIC,  IDITMLISPLIC,
                        NRCOLEORILIC, IDMOTIVNDUPL, VRPRECANTLIC, VRPRECDEPLIC)
                      VALUES
                       (C_ITEMCOLE.CDFILIAL, C_ITEMCOLE.NRCOLEPRECO, C_ITEMCOLE.CDMARCA, C_ITEMCOLE.CDREGIAO,
                        C_ITEMCOLE.CDFORNECED, C_ITEMCOLE.CDPRODUTO, C_ITEMCOLE.DTNOVINIVAL, C_ITEMCOLE.DTNOVFINVAL,
                        SYSDATE, 'N', V_DSMETUSULIC, 'N',
                        V_NRCOLEORIG, '0000001000', C_ITEMCOLE.VRPRECUNIITM, C_ITEMCOLE.VRPRECUNIITM);
               END IF;
            END IF;
            IF V_NRCOLEPRECO_AUX IS NULL THEN
               V_IDMOTIVNDUPL := '';
         /*    IdMotivNDupl [1] = '1' Fornecedor inativo */
               IF C_ITEMCOLE.IDSITUCADA = 'I' THEN
                  V_IDMOTIVNDUPL := V_IDMOTIVNDUPL||'1';
               ELSE
                  V_IDMOTIVNDUPL := V_IDMOTIVNDUPL||'0';
               END IF;

         /*    IdMotivNDupl [2] = '1' Fornecedor no atende  regio */
               SELECT
                  COUNT(*)
               INTO
                  V_COUNT
               FROM
                  REFOREG
               WHERE
                  C_ITEMCOLE.CDREGIAO   = REFOREG.CDREGIAO   AND
                  C_ITEMCOLE.CDFORNECED = REFOREG.CDFORNECED;

               IF V_COUNT <> 0 THEN
                  V_IDMOTIVNDUPL := V_IDMOTIVNDUPL||'1';
               ELSE
                  V_IDMOTIVNDUPL := V_IDMOTIVNDUPL||'0';
               END IF;

         /*    IdMotivNDupl [3] = '1' Qualificao de produto por fornecedor */
               SELECT
                  COUNT(*)
               INTO
                  V_COUNT
               FROM
                  QFOPRODFORN,
                  PARASUPRI
               WHERE
                  (PARASUPRI.CDFILIAL     = P_CDFILIAL)            AND
                  (QFOPRODFORN.CDPRODUTO  = C_ITEMCOLE.CDPRODUTO)  AND
                  (QFOPRODFORN.CDFORNECED = C_ITEMCOLE.CDFORNECED) AND
                  ((QFOPRODFORN.IDFORNAPROV = 'N'    AND QFOPRODFORN.IDFORNAUTOR = 'N') OR
                   ((QFOPRODFORN.IDFORNAPROV = 'S')  AND
                      ((PARASUPRI.IDULTIDTVALQ = 'M' AND
                        P_DTCOLEPREC > LAST_DAY(QFOPRODFORN.DTVALPRFORN)) OR
                       (PARASUPRI.IDULTIDTVALQ = 'D' AND
                        P_DTCOLEPREC > QFOPRODFORN.DTVALPRFORN)) ) );

               IF V_COUNT <> 0 THEN
                  V_IDMOTIVNDUPL := V_IDMOTIVNDUPL||'1';
               ELSE
                  V_IDMOTIVNDUPL := V_IDMOTIVNDUPL||'0';
               END IF;

         /*    IdMotivNDupl [4] = '1' Qualificao de marca por produto */
               SELECT
                  COUNT(*)
               INTO
                  V_COUNT
               FROM
                 QFOMARPROD,
                 PARASUPRI
               WHERE
                (PARASUPRI.CDFILIAL   = P_CDFILIAL)           AND
                (QFOMARPROD.CDPRODUTO = C_ITEMCOLE.CDPRODUTO) AND
                (QFOMARPROD.CDMARCA   = C_ITEMCOLE.CDMARCA)   AND
                ((QFOMARPROD.IDAPRMARPRO = 'N' AND QFOMARPROD.IDAUTMARPRO = 'N') OR
                 ((QFOMARPROD.IDAPRMARPRO = 'S') AND
                    ((PARASUPRI.IDULTIDTVALQ = 'M' AND
                      P_DTCOLEPREC > LAST_DAY(QFOMARPROD.DTVALAPROVA)) OR
                     (PARASUPRI.IDULTIDTVALQ = 'D' AND
                      P_DTCOLEPREC > QFOMARPROD.DTVALAPROVA))) );

               SELECT
                  COUNT(*)
               INTO
                  V_COUNTAUX
               FROM
                  (SELECT
                     QFOMARPROD.CDMARCA
                   FROM
                     QFOMARPROD
                   WHERE
                     QFOMARPROD.CDPRODUTO = C_ITEMCOLE.CDPRODUTO AND
                     QFOMARPROD.CDMARCA   = C_ITEMCOLE.CDMARCA

                   UNION

                   SELECT
                     PARASUPRI.CDMARCA
                   FROM
                     PARASUPRI
                   WHERE
                     PARASUPRI.CDFILIAL     = P_CDFILIAL AND
                     (PARASUPRI.IDMARSEMQUA = 'N' OR PARASUPRI.IDMARSEMQUA IS NULL));

               IF (V_COUNT = 0) AND (V_COUNTAUX <> 0) THEN
                  V_IDMOTIVNDUPL := V_IDMOTIVNDUPL||'0';
               ELSE
                  V_IDMOTIVNDUPL := V_IDMOTIVNDUPL||'1';
               END IF;

         /*    IdMotivNDupl [5] = '1' Qualificao de fornecedor */
               SELECT
                  COUNT(*)
               INTO
                  V_COUNT
               FROM
                  QUALIFICACAO,
                  PARASUPRI
               WHERE
                  (C_ITEMCOLE.CDQUALIF       = QUALIFICACAO.CDQUALIF) AND
                  (PARASUPRI.CDFILIAL        = P_CDFILIAL)            AND
                  (C_ITEMCOLE.IDFORNAUTO     = 'N')                   AND
                  ((QUALIFICACAO.IDPERCOTCMP = '2')                   OR
                   ((PARASUPRI.IDULTIDTVALQ  = 'D'                    AND
                     P_DTNOVFINVAL > C_ITEMCOLE.DTVALQUALIF)       OR
                   (PARASUPRI.IDULTIDTVALQ = 'M'                      AND
                    P_DTNOVFINVAL > LAST_DAY(C_ITEMCOLE.DTVALQUALIF))));

               IF V_COUNT <> 0 THEN
                  V_IDMOTIVNDUPL := V_IDMOTIVNDUPL||'1';
               ELSE
                  V_IDMOTIVNDUPL := V_IDMOTIVNDUPL||'0';
               END IF;

         /*    IdMotivNDupl [6] = '1' Produto no cadastrado para o fornecedor */
               SELECT
                  COUNT(*)
               INTO
                  V_COUNT
               FROM
                  PRODFORN,
                  PRODUTO PRODUTO_PRODFORN
               WHERE
                  (PRODFORN.CDPRODUTO  = PRODUTO_PRODFORN.CDPRODUTO) AND
                  (PRODFORN.CDFORNECED = C_ITEMCOLE.CDFORNECED)      AND
                  (C_ITEMCOLE.CDARVPROD LIKE PRODUTO_PRODFORN.CDARVPROD||'%');

               IF V_COUNT = 0 THEN
                  V_IDMOTIVNDUPL := V_IDMOTIVNDUPL||'1';
               ELSE
                  V_IDMOTIVNDUPL := V_IDMOTIVNDUPL||'0';
               END IF;

               V_IDMOTIVNDUPL := V_IDMOTIVNDUPL||'0000';

               IF V_IDMOTIVNDUPL = '0000000000' THEN
                  INSERT INTO ITEMCOLE
                   (CDFILIAL,     NRCOLEPRECO,
                    CDFORNECED,   CDREGIAO,
                    CDPRODUTO,    CDMARCA,
                    CDTIPCOB,     CDSEGMARCCOL,
                    DTINIVALITM,  DTFINVALITM,
                    VRPRECUNIITM, VRPRECECOITM,
                    VRPERDESITM,  IDTIPFREITM,
                    NRPZOENTCOL,  DSPZOPGTCONC,
                    NRCOLEORIGIC, CDOPERINCL,
                    IDPRECALT,    DTINCLITMCOL)
                  VALUES
                   (C_ITEMCOLE.CDFILIAL,       C_ITEMCOLE.NRCOLEPRECO,
                    C_ITEMCOLE.CDFORNECED,     C_ITEMCOLE.CDREGIAO,
                    C_ITEMCOLE.CDPRODUTO,      C_ITEMCOLE.CDMARCA,
                    C_ITEMCOLE.CDTIPCOB,       C_ITEMCOLE.CDSEGMARCCOL,
                    C_ITEMCOLE.DTNOVINIVAL,    C_ITEMCOLE.DTNOVFINVAL,
                    C_ITEMCOLE.VRPRECUNIITM,   C_ITEMCOLE.VRPRECECOITM,
                    C_ITEMCOLE.VRPERDESITM,    C_ITEMCOLE.IDTIPFREITM,
                    C_ITEMCOLE.NRPZOENTCOL,    C_ITEMCOLE.DSPZOPGTCONC,
                    V_NRCOLEORIG,              P_CDOPERINCL,
                    'N',                       SYSDATE);

         /*############################# FORMA DE PAGAMENTO ##############################*/
                  SELECT
                     MAX(PRODFORN.CDFORMPGTO),
                     MAX(PRODFORN.IDTPFORPGPRF),
                     MAX(PRODFORN.NRPARCPGTPRF),
                     MAX(PRODFORN.NRDIAPGFIPRF),
                     MAX(PRODFORN.IDUTDIAPGPRF)
                  INTO
                     V_PGTO_CDFORMPGTO,
                     V_PGTO_IDTPFORPGPRF,
                     V_PGTO_NRPARCPGTPRF,
                     V_PGTO_NRDIAPGFIPRF,
                     V_PGTO_IDUTDIAPGPRF
                  FROM
                    PRODFORN, PRODUTO
                  WHERE
                    PRODFORN.CDPRODUTO  = PRODUTO.CDPRODUTO     AND
                    PRODFORN.CDFORNECED = C_ITEMCOLE.CDFORNECED AND
                    PRODUTO.CDARVPROD   = (SELECT MAX(PRODUTO.CDARVPROD)
                                             FROM PRODFORN, PRODUTO
                                            WHERE PRODFORN.CDPRODUTO   = PRODUTO.CDPRODUTO
                                              AND PRODFORN.CDFORNECED  = C_ITEMCOLE.CDFORNECED
                                              AND C_ITEMCOLE.CDARVPROD LIKE PRODUTO.CDARVPROD || '%');

                  IF V_PGTO_IDTPFORPGPRF IS NULL THEN
                     SELECT
                        CDFORMPGTO,
                        IDTPFORPGTFO,
                        NRPARCPGTOFO,
                        NRDIAPGFIXFO,
                        IDUTDIAPGTFO,
                        IDTPDESCFORN,
                        VRPEDESCFORN,
                        IDTPFRETFORN
                     INTO
                        V_PGTO_CDFORMPGTO,
                        V_PGTO_IDTPFORPGTFO,
                        V_PGTO_NRPARCPGTOFO,
                        V_PGTO_NRDIAPGFIXFO,
                        V_PGTO_IDUTDIAPGTFO,
                        V_PGTO_IDTPDESCFORN,
                        V_PGTO_VRPEDESCFORN,
                        V_PGTO_IDTPFRETFORN
                     FROM
                        FORNECEDOR
                     WHERE
                        CDFORNECED = C_ITEMCOLE.CDFORNECED;

                     UPDATE ITEMCOLE
                     SET
                        CDFORMPGTO   = V_PGTO_CDFORMPGTO,
                        IDTPFOPGTCOL = V_PGTO_IDTPFORPGTFO,
                        NRDIAPGFXCOL = V_PGTO_NRDIAPGFIXFO,
                        NRPARCPGTCOL = V_PGTO_NRPARCPGTOFO,
                        IDUTDIAPGCOL = V_PGTO_IDUTDIAPGTFO
                     WHERE
                        CDFILIAL    = C_ITEMCOLE.CDFILIAL   AND
                        NRCOLEPRECO = C_ITEMCOLE.NRCOLEPRECO AND
                        CDPRODUTO   = C_ITEMCOLE.CDPRODUTO  AND
                        CDMARCA     = C_ITEMCOLE.CDMARCA    AND
                        CDFORNECED  = C_ITEMCOLE.CDFORNECED AND
                        CDREGIAO    = C_ITEMCOLE.CDREGIAO;
                     IF V_PGTO_IDTPFORPGTFO = 'V' THEN
                        INSERT INTO PZOPGTITMCOL
                          (CDFILIAL, NRCOLEPRECO, CDFORNECED, CDPRODUTO,
                          CDMARCA, CDREGIAO, NRDIASPGTCOL, VRPERCPGTCOL)
                        SELECT
                           C_ITEMCOLE.CDFILIAL,
                           C_ITEMCOLE.NRCOLEPRECO,
                           C_ITEMCOLE.CDFORNECED,
                           C_ITEMCOLE.CDPRODUTO,
                           C_ITEMCOLE.CDMARCA,
                           C_ITEMCOLE.CDREGIAO,
                           PRAZOPGTFORN.NRDIASPGTOFO,
                           PRAZOPGTFORN.VRPERCPGTOFO
                        FROM
                           PRAZOPGTFORN
                        WHERE
                           PRAZOPGTFORN.CDFORNECED = C_ITEMCOLE.CDFORNECED;
                     END IF;
                  ELSE
                     UPDATE ITEMCOLE
                     SET
                        CDFORMPGTO   = V_PGTO_CDFORMPGTO,
                        IDTPFOPGTCOL = V_PGTO_IDTPFORPGPRF,
                        NRDIAPGFXCOL = V_PGTO_NRDIAPGFIPRF,
                        NRPARCPGTCOL = V_PGTO_NRPARCPGTPRF,
                        IDUTDIAPGCOL = V_PGTO_IDUTDIAPGPRF
                     WHERE
                        CDFILIAL    = C_ITEMCOLE.CDFILIAL   AND
                        NRCOLEPRECO = C_ITEMCOLE.NRCOLEPRECO AND
                        CDPRODUTO   = C_ITEMCOLE.CDPRODUTO  AND
                        CDMARCA     = C_ITEMCOLE.CDMARCA    AND
                        CDFORNECED  = C_ITEMCOLE.CDFORNECED AND
                        CDREGIAO    = C_ITEMCOLE.CDREGIAO;
                     IF V_PGTO_IDTPFORPGPRF = 'V' THEN
                        INSERT INTO PZOPGTITMCOL
                          (CDFILIAL, NRCOLEPRECO, CDFORNECED, CDPRODUTO,
                          CDMARCA, CDREGIAO, NRDIASPGTCOL, VRPERCPGTCOL)

                        SELECT
                           C_ITEMCOLE.CDFILIAL,
                           C_ITEMCOLE.NRCOLEPRECO,
                           C_ITEMCOLE.CDFORNECED,
                           C_ITEMCOLE.CDPRODUTO,
                           C_ITEMCOLE.CDMARCA,
                           C_ITEMCOLE.CDREGIAO,
                           PZOPGTPRFO.NRDIASPGPRFO,
                           PZOPGTPRFO.VRPERCPGPRFO
                        FROM
                           PZOPGTPRFO, PRODUTO
                        WHERE
                           PZOPGTPRFO.CDPRODUTO  = PRODUTO.CDPRODUTO     AND
                           PZOPGTPRFO.CDFORNECED = C_ITEMCOLE.CDFORNECED AND
                           C_ITEMCOLE.CDARVPROD LIKE PRODUTO.CDARVPROD || '%';
                     END IF;
                  END IF;

         /*################################# IMPOSTO #####################################*/
                  SELECT
                     SUBSTR(EMITENTE(P_CDFILIAL, C_ITEMCOLE.CDPRODUTO, C_ITEMCOLE.CDFORNECED), 3, 2) AS CDEMPRESA
                  INTO
                     V_CDEMPRESA
                  FROM
                     PARAMGERAL;

                  SELECT
                     MAX(EMPRESA.CDEMPRESA),
                     MIN(INSCRESTAD.CDINSCESTA)   AS CDINSCESTA
                  INTO
                     V_CDEMPRESA, V_CDINSCESTA
                  FROM
                     EMPRESA,
                     INSCRESTAD
                  WHERE
                     EMPRESA.CDEMPRESA = V_CDEMPRESA           AND
                     EMPRESA.CDEMPRESA = INSCRESTAD.CDEMPRESA;

                  IMPOSTO_ITEMCOL(V_CDEMPRESA,        V_CDINSCESTA,          C_ITEMCOLE.CDFORNECED, P_CDFILIAL,
                                  V_NRCOLEPRECO,      C_ITEMCOLE.CDFORNECED, C_ITEMCOLE.CDREGIAO,   C_ITEMCOLE.CDPRODUTO,
                                  C_ITEMCOLE.CDMARCA, P_DTCOLEPREC);

                  DELETE ITEMCOLE
                  WHERE
                     ITEMCOLE.NRCOLEPRECO <> C_ITEMCOLE.NRCOLEPRECO AND
                     ITEMCOLE.CDFILIAL    =  C_ITEMCOLE.CDFILIAL    AND
                     ITEMCOLE.CDPRODUTO   =  C_ITEMCOLE.CDPRODUTO   AND
                     ITEMCOLE.CDMARCA     =  C_ITEMCOLE.CDMARCA     AND
                     ITEMCOLE.CDFORNECED  =  C_ITEMCOLE.CDFORNECED  AND
                     ITEMCOLE.CDREGIAO    =  C_ITEMCOLE.CDREGIAO    AND
                     ITEMCOLE.DTINIVALITM =  C_ITEMCOLE.DTNOVINIVAL AND
                     ITEMCOLE.DTFINVALITM =  C_ITEMCOLE.DTNOVFINVAL;
               ELSE
                  P_COTA_N_DUP := 'S'||V_NRCOLEPRECO;
                  INSERT INTO LOGITEMCOLE
                    (CDFILIALLIC,
                     NRCOLEPRELIC,
                     CDMARCALIC,
                     CDREGIAOLIC,
                     CDFORNECELIC,
                     CDPRODUTOLIC,
                     DTINIVALLIC,
                     DTFINVALLIC,
                     DTOPERACLIC,
                     IDOPERALIC,
                     DSMETUSULIC,
                     IDITMLISPLIC,
                     NRCOLEORILIC,
                     IDMOTIVNDUPL,
                     VRPRECANTLIC,
                     VRPRECDEPLIC)
                   VALUES
                    (C_ITEMCOLE.CDFILIAL,
                     C_ITEMCOLE.NRCOLEPRECO,
                     C_ITEMCOLE.CDMARCA,
                     C_ITEMCOLE.CDREGIAO,
                     C_ITEMCOLE.CDFORNECED,
                     C_ITEMCOLE.CDPRODUTO,
                     C_ITEMCOLE.DTNOVINIVAL,
                     C_ITEMCOLE.DTNOVFINVAL,
                     SYSDATE,
                     'N',
                     V_DSMETUSULIC,
                     'N',
                     V_NRCOLEORIG,
                     V_IDMOTIVNDUPL,
                     C_ITEMCOLE.VRPRECUNIITM,
                     C_ITEMCOLE.VRPRECUNIITM);
               END IF;
               UPDATE ITEMCOLE
               SET IDTPFOPGTCOL  = IDTPFOPGTCOL
               WHERE CDFILIAL    = C_ITEMCOLE.CDFILIAL
                 AND NRCOLEPRECO = C_ITEMCOLE.NRCOLEPRECO
                 AND CDFORNECED  = C_ITEMCOLE.CDFORNECED
                 AND CDREGIAO    = C_ITEMCOLE.CDREGIAO
                 AND CDPRODUTO   = C_ITEMCOLE.CDPRODUTO
                 AND CDMARCA     = C_ITEMCOLE.CDMARCA;
            END IF;
         END LOOP;
      END LOOP;
      COMMIT;
   END LOOP;
   CLOSE C_COTACAO;
   FOR C_LIMPEZA IN (SELECT CDFILIAL, NRCOLEPRECO
                       FROM COLETAPR
                      WHERE DTINIVALCOL >= P_DTINIVALCOL
                        AND DTFINVALCOL <= P_DTFINVALCOL
                        AND NOT EXISTS (SELECT 1
                                          FROM ITEMCOLE
                                         WHERE ITEMCOLE.CDFILIAL    = COLETAPR.CDFILIAL
                                           AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO))
   LOOP
      DELETE
        FROM COLETAPR
       WHERE CDFILIAL    = C_LIMPEZA.CDFILIAL
         AND NRCOLEPRECO = C_LIMPEZA.NRCOLEPRECO;
      V_CONTADOR := V_CONTADOR + 1;
      IF V_CONTADOR >= 500 THEN
         V_CONTADOR := 0;
         COMMIT;
      END IF;
   END LOOP;
   COMMIT;      
END;
/ 