create or replace PROCEDURE IDEAL_4FORN_REPORT(
  P_CDFILCENTCMP  IN FILIAL.CDFILCENTCMP%TYPE,
  P_CDREGIAO      IN REGIAO.CDREGIAO%TYPE,
  P_CDFORNECED    IN FORNECEDOR.CDFORNECED%TYPE,
  P_CDCOMPRADOR   IN OPERADOR.CDOPERADOR%TYPE,
  P_DTINI         IN DATE,
  P_DTFIN         IN DATE,
  P_PRODINI       IN VARCHAR2,
  P_PRODFIN       IN VARCHAR2,
  P_NRSEQEMISSAO  OUT VARCHAR2,
  P_NRORG 		    IN NUMBER DEFAULT 1)
AS
  V_NRSEQEMISSAO  VARCHAR2(20);
  V_IDPECOLISTA   PARCMPSUP.IDPECOLISTA%TYPE;
  V_NMFANTFORN    FORNECEDOR.NMFANTFORN%TYPE;
  V_IDTPIJURFORN  FORNECEDOR.IDTPIJURFORN%TYPE;
  V_NRINSJURFORN  FORNECEDOR.NRINSJURFORN%TYPE;
  V_VRPREUNIAF    ITEMAUTF.VRPREUNIAF%TYPE;
  V_CDMARCA       MARCA.CDMARCA%TYPE;
  V_NMMARCA       MARCA.NMMARCA%TYPE;
  V_DTINICIAL     DATE;
  V_DTFINAL       DATE;
  V_QTPROGENTAF   ITEMAUTF.QTPROGENTAF%TYPE;
    
  V_CDREGIAO      REGIAO.CDREGIAO%TYPE;
  V_CDOPERADOR    OPERADOR.CDOPERADOR%TYPE;
  
  V_VRPRECENT       FLOAT;
  V_VRPRECUNIITM    FLOAT;
  V_VALOR_TORAL_ITM FLOAT;
  V_CDMARCA_ITM     MARCA.CDMARCA%TYPE;
  V_NMMARCA_ITM     MARCA.NMMARCA%TYPE;
  
  V_NRLISTA_NCOT VARCHAR2(20);
  V_NRLISTA_PROD VARCHAR2(20);
  V_NRLISTA_COT  VARCHAR2(20);
  
  V_NUMERO       NUMBER := 0;
  V_NRPAGINA     NUMBER := 0;
  V_QTFORN       NUMBER := 0;
  V_FORN         NUMBER := 0;
  
  V_NRIDEAL4FORN  NUMBER;
  V_EXISTS NUMBER;
  V_VRPRECUNIITM_MIX  FLOAT;
  V_PRODINI           VARCHAR2(20);
  V_PRODFIN           VARCHAR2(20);
  V_TPROD             VARCHAR2(1);
BEGIN
  IF (P_PRODINI IS NULL) AND (P_PRODFIN IS NULL) THEN
    V_PRODINI := NULL;
    V_PRODFIN := NULL;
    V_TPROD   := 'T';
  ELSE
    V_PRODINI := P_PRODINI; 
    V_PRODFIN := RPAD(P_PRODFIN, 20, 'Z');
    V_TPROD   := NULL;
  END IF;
  
  NOVO_CODIGO_SC('IDEAL_4FORN', V_NRSEQEMISSAO);
  V_NRSEQEMISSAO := SUBSTR(V_NRSEQEMISSAO, 11, 10);
  
  DELETE IDEAL_4FORN
   WHERE NRSEQEMISSAO = V_NRSEQEMISSAO;
   
  SELECT NVL(IDPECOLISTA, 'P') IDPECOLISTA
    INTO V_IDPECOLISTA
    FROM PARCMPSUP
   WHERE CDFILIAL = P_CDFILCENTCMP;
   
  FOR C_COLETA IN (   SELECT DISTINCT I.CDREGIAO, C.CDOPERADOR
                        FROM COLETAPR C INNER JOIN ITEMCOLE I ON C.NRCOLEPRECO  = I.NRCOLEPRECO
                                                             AND C.CDFILIAL     = I.CDFILIAL 
                       WHERE C.CDFILIAL     = P_CDFILCENTCMP
                         AND I.DTINIVALITM >= P_DTINI
                         AND I.DTFINVALITM <= P_DTFIN
                         AND ((INSTR(P_CDREGIAO, I.CDREGIAO) <> 0) OR P_CDREGIAO = 'T')
                         AND ((INSTR(P_CDFORNECED,I.CDFORNECED) <> 0) OR (P_CDFORNECED = 'T')) 
                         AND ((INSTR(P_CDCOMPRADOR, C.CDOPERADOR) <> 0) OR (P_CDCOMPRADOR = 'T'))  
                       ORDER BY I.CDREGIAO, C.CDOPERADOR) 
  LOOP
    V_NRPAGINA := V_NRPAGINA + 1;
    V_QTFORN := 0;
    IF V_NRPAGINA > 0 THEN
      BEGIN
        SELECT 1
          INTO V_EXISTS
          FROM DUAL
         WHERE NOT EXISTS (SELECT  1
                             FROM IDEAL_4FORN TMP
                            WHERE TMP.CDREGIAO     = C_COLETA.CDREGIAO
                              AND TMP.CDOPERADOR   = C_COLETA.CDOPERADOR
                              AND TMP.NRSEQEMISSAO = V_NRSEQEMISSAO);
        NOVO_CODIGO('LISTA', V_NRLISTA_COT, 1, P_NRORG);
        NOVO_CODIGO('LISTA', V_NRLISTA_NCOT, 1, P_NRORG);                                                
        NOVO_CODIGO('LISTA', V_NRLISTA_PROD, 1, P_NRORG);
        
        DELETE 
          FROM LISTA
         WHERE NRLISTA IN (SUBSTR(V_NRLISTA_COT, 11, 10), SUBSTR(V_NRLISTA_NCOT, 11, 10), SUBSTR(V_NRLISTA_PROD, 11, 10));
         
        INSERT INTO LISTA (CDLISTA, NRLISTA)
          (SELECT MAX_FORN.CDPRODUTO||'_'||TO_CHAR(NUM_FORN), SUBSTR(V_NRLISTA_COT, 11, 10)
             FROM (SELECT I.CDPRODUTO, COUNT(DISTINCT I.CDFORNECED) NUM_FORN
                     FROM ITEMCOLE I, COLETAPR C, PRODUTO P
                    WHERE (C.CDFILIAL    = P_CDFILCENTCMP )
                      AND (I.CDFILIAL    = C.CDFILIAL)
                      AND (C.CDOPERADOR  = C_COLETA.CDOPERADOR)
                      AND (C.NRCOLEPRECO = I.NRCOLEPRECO)
                      AND (I.CDREGIAO    = C_COLETA.CDREGIAO )
                      AND (I.DTINIVALITM >= P_DTINI )
                      AND (I.DTFINVALITM <= P_DTFIN )
                      AND (I.CDPRODUTO   = P.CDPRODUTO)
                      AND (NVL(I.VRPRECUNIITM, 0) > 0)
                      AND ((P.CDARVPROD BETWEEN V_PRODINI    AND V_PRODFIN ) OR (V_TPROD = 'T'))
                      AND ((INSTR(P_CDFORNECED, I.CDFORNECED) <> 0) OR (P_CDFORNECED  = 'T'))
                    GROUP BY I.CDPRODUTO) MAX_FORN
            WHERE MAX_FORN.NUM_FORN = (SELECT MAX(FORN.NUM)
                                         FROM (SELECT I.CDPRODUTO, COUNT(DISTINCT I.CDFORNECED) NUM
                                         FROM ITEMCOLE I, COLETAPR C, PRODUTO P
                                        WHERE (C.CDFILIAL    = P_CDFILCENTCMP )
                                          AND (I.CDFILIAL    = C.CDFILIAL)
                                          AND (C.CDOPERADOR  = C_COLETA.CDOPERADOR)
                                          AND (C.NRCOLEPRECO = I.NRCOLEPRECO)
                                          AND (I.CDREGIAO    = C_COLETA.CDREGIAO )
                                          AND (I.DTINIVALITM >= P_DTINI )
                                          AND (I.DTFINVALITM <= P_DTFIN )
                                          AND (I.CDPRODUTO   = P.CDPRODUTO)
                                          AND (NVL(I.VRPRECUNIITM, 0) > 0)
                                          AND ((P.CDARVPROD BETWEEN V_PRODINI  AND V_PRODFIN ) OR (V_TPROD = 'T'))
                                          AND ((INSTR(P_CDFORNECED, I.CDFORNECED) <> 0) OR (P_CDFORNECED  = 'T'))
                                        GROUP BY I.CDPRODUTO) FORN));
                                          
        SELECT SUBSTR(LISTA.CDLISTA,INSTR(LISTA.CDLISTA, '_')+1, LENGTH(LISTA.CDLISTA))
          INTO V_NUMERO
          FROM LISTA
         WHERE LISTA.NRLISTA = SUBSTR(V_NRLISTA_COT, 11, 10)
           AND ROWNUM = 1;             

        INSERT INTO LISTA (NRLISTA, CDLISTA)
          (SELECT SUBSTR(V_NRLISTA_NCOT, 11, 10), FORNECEDOR.CDFORNECED
             FROM (SELECT I.CDFORNECED, COUNT( DISTINCT I.CDPRODUTO) NUM_PROD
                     FROM ITEMCOLE I, COLETAPR C
                    WHERE (C.CDFILIAL    = P_CDFILCENTCMP)
                      AND (I.CDFILIAL    = C.CDFILIAL)
                      AND (C.NRCOLEPRECO = I.NRCOLEPRECO)
                      AND (C.CDOPERADOR  = C_COLETA.CDOPERADOR)                                      
                      AND (I.CDREGIAO    = C_COLETA.CDREGIAO)
                      AND (I.DTINIVALITM >= P_DTINI)
                      AND (I.DTFINVALITM <= P_DTFIN)
                      AND (NVL(I.VRPRECUNIITM, 0) > 0)
                      AND ((INSTR(P_CDFORNECED,I.CDFORNECED) <> 0) OR (P_CDFORNECED = 'T'))
                      AND I.CDPRODUTO IN (SELECT SUBSTR(LISTA.CDLISTA, 1, INSTR(LISTA.CDLISTA,'_')-1) LISTA_PROD
                                            FROM LISTA
                                           WHERE LISTA.NRLISTA = SUBSTR(V_NRLISTA_COT, 11, 10))
                    GROUP BY I.CDFORNECED
                    ORDER BY NUM_PROD DESC) FORNECEDOR
            WHERE ROWNUM <= V_NUMERO);
            
        INSERT INTO LISTA (NRLISTA, CDLISTA)
          (SELECT SUBSTR(V_NRLISTA_PROD, 11, 10), PROD.CDPRODUTO
             FROM (SELECT I.CDPRODUTO, COUNT (DISTINCT I.CDFORNECED) NUM_FORN
                     FROM ITEMCOLE I, COLETAPR C
                    WHERE (C.CDFILIAL    =  P_CDFILCENTCMP ) AND
                          (C.CDOPERADOR  =  C_COLETA.CDOPERADOR )  AND
                          (I.CDREGIAO    =  C_COLETA.CDREGIAO )     AND
                          (I.DTINIVALITM >=  P_DTINI  )      AND
                          (I.DTFINVALITM <=  P_DTFIN )       AND
                          (I.CDFILIAL    = C.CDFILIAL)        AND
                          (I.NRCOLEPRECO = C.NRCOLEPRECO)     AND
                          (NVL(I.VRPRECUNIITM, 0) > 0)        AND
                          I.CDPRODUTO IN (SELECT SUBSTR(LISTA.CDLISTA, 1, INSTR(LISTA.CDLISTA,'_')-1) LISTA_PROD
                                            FROM LISTA
                                           WHERE LISTA.NRLISTA = SUBSTR(V_NRLISTA_COT, 11, 10)) AND
                          I.CDFORNECED IN (SELECT LISTA.CDLISTA
                                             FROM LISTA
                                            WHERE LISTA.NRLISTA = SUBSTR(V_NRLISTA_NCOT, 11, 10) )
                    GROUP BY I.CDPRODUTO) PROD
            WHERE NUM_FORN = V_NUMERO);          
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          NULL;
      END;
    END IF;
    IF V_NUMERO >= 4 THEN
      V_NUMERO := 4;
    END IF;
    
    V_FORN := 0;
    
    FOR C_FORN4 IN (SELECT MIX_FORN.CDFORNECED, MIX_FORN.VRPRECUNIITM, MIX_FORN.VRPRECECOITM, MIX_FORN.VRPRECOITMPI
                      FROM (SELECT I.CDFORNECED,
                                   SUM((NVL(I.QTACMPITMCOL, 1))*I.VRPRECUNIITM) VRPRECUNIITM,
                                   SUM((NVL(I.QTACMPITMCOL, 1))*I.VRPRECECOITM) VRPRECECOITM,
                                   SUM((NVL(I.QTACMPITMCOL, 1))*I.VRPRECOITMPI) VRPRECOITMPI
                              FROM ITEMCOLE I INNER JOIN COLETAPR C ON C.NRCOLEPRECO  = I.NRCOLEPRECO
                                                                   AND C.CDFILIAL     = I.CDFILIAL
                             WHERE C.CDFILIAL     = P_CDFILCENTCMP
                               AND C.CDOPERADOR   = C_COLETA.CDOPERADOR
                               AND I.CDREGIAO     = C_COLETA.CDREGIAO
                               AND I.DTINIVALITM >= P_DTINI
                               AND I.DTFINVALITM <= P_DTFIN
                               AND NVL(I.VRPRECUNIITM, 0) > 0
                               AND I.CDPRODUTO IN ( SELECT LISTA.CDLISTA
                                                      FROM LISTA
                                                     WHERE LISTA.NRLISTA = SUBSTR(V_NRLISTA_PROD, 11, 10))
                               AND I.CDFORNECED IN (SELECT LISTA.CDLISTA
                                                      FROM LISTA
                                                     WHERE LISTA.NRLISTA = SUBSTR(V_NRLISTA_NCOT, 11, 10))
                             GROUP BY I.CDFORNECED
                             ORDER BY DECODE (V_IDPECOLISTA, 'N', VRPRECUNIITM,  VRPRECECOITM, 'P', VRPRECOITMPI)) MIX_FORN
                     WHERE ROWNUM <= V_NUMERO)
    LOOP
      V_FORN :=  V_FORN + 1;
      IF V_FORN <= 4 THEN
        FOR C_ITEMFORN IN (SELECT CDREGIAO, CDOPERADOR, CDFORNECED,
                                  NMFANTFORN, IDTPIJURFORN, NRINSJURFORN
                             FROM (SELECT DISTINCT I.CDREGIAO, C.CDOPERADOR, I.CDFORNECED,
                                          F.NMFANTFORN, F.IDTPIJURFORN, F.NRINSJURFORN 
                                     FROM ITEMCOLE I INNER JOIN COLETAPR C   ON I.CDFILIAL    = C.CDFILIAL
                                                                            AND I.NRCOLEPRECO = C.NRCOLEPRECO
                                                     INNER JOIN FORNECEDOR F ON I.CDFORNECED  =  F.CDFORNECED
                                    WHERE C.CDFILIAL    =  P_CDFILCENTCMP
                                      AND C.CDOPERADOR  =  C_COLETA.CDOPERADOR
                                      AND I.CDREGIAO    =  C_COLETA.CDREGIAO
                                      AND I.DTINIVALITM >= P_DTINI
                                      AND I.DTFINVALITM <= P_DTFIN
                                      AND I.CDFORNECED  =  C_FORN4.CDFORNECED
                                      AND NVL(I.VRPRECUNIITM, 0) > 0
                                      AND I.CDPRODUTO IN (SELECT LISTA.CDLISTA
                                                            FROM LISTA
                                                           WHERE LISTA.NRLISTA = SUBSTR(V_NRLISTA_PROD, 11, 10)))
                                    ORDER BY CDREGIAO, CDOPERADOR)
        LOOP
          V_QTFORN := V_QTFORN + 1;
          
          FOR C_ITEMPROD IN (SELECT CDREGIAO,  CDOPERADOR, CDPRODUTO, CDARVPROD,
                                    NMPRODUTO, SGUNIDADE,  NMREGIAO,  NMOPERADOR
                               FROM (SELECT DISTINCT I.CDREGIAO, C.CDOPERADOR, I.CDPRODUTO, P.CDARVPROD,
                                            P.NMPRODUTO,P.SGUNIDADE, R.NMREGIAO, O.NMOPERADOR
                                       FROM ITEMCOLE I INNER JOIN COLETAPR C ON I.CDFILIAL    = C.CDFILIAL
                                                                            AND I.NRCOLEPRECO = C.NRCOLEPRECO
                                                       INNER JOIN PRODUTO P  ON I.CDPRODUTO   = P.CDPRODUTO
                                                       INNER JOIN MARCA M    ON I.CDMARCA     = M.CDMARCA
                                                       INNER JOIN REGIAO R   ON I.CDREGIAO    = R.CDREGIAO
                                                       INNER JOIN OPERADOR O ON C.CDOPERADOR  = O.CDOPERADOR
                                      WHERE C.CDFILIAL    =  P_CDFILCENTCMP
                                        AND C.CDOPERADOR  =  C_COLETA.CDOPERADOR
                                        AND I.CDREGIAO    =  C_COLETA.CDREGIAO
                                        AND I.CDFORNECED  =  C_FORN4.CDFORNECED
                                        AND I.DTINIVALITM >=  P_DTINI
                                        AND I.DTFINVALITM <=  P_DTFIN
                                        AND NVL(I.VRPRECUNIITM, 0) > 0
                                        AND I.CDPRODUTO IN (SELECT LISTA.CDLISTA
                                                              FROM LISTA
                                                             WHERE LISTA.NRLISTA = SUBSTR(V_NRLISTA_PROD, 11, 10))
                                      ORDER BY I.CDREGIAO, C.CDOPERADOR, P.CDARVPROD))
          LOOP
            V_NRIDEAL4FORN := NULL;
            IF ((C_ITEMFORN.CDREGIAO = C_ITEMPROD.CDREGIAO) AND (C_ITEMFORN.CDOPERADOR = C_ITEMPROD.CDOPERADOR)) THEN
              --SELECIONA ITEM DA ULTIMA AF
              BEGIN
                SELECT SUB.NMFANTFORN, SUB.IDTPIJURFORN, SUB.NRINSJURFORN,
                       SUB.VRPREUNIAF, SUB.CDMARCA
                  INTO V_NMFANTFORN, V_IDTPIJURFORN, V_NRINSJURFORN,
                       V_VRPREUNIAF, V_CDMARCA                       
                  FROM (SELECT F.NMFANTFORN, F.IDTPIJURFORN, F.NRINSJURFORN,
                               NVL(I.VRPREUNIAF, 0) VRPREUNIAF, M.CDMARCA
                          FROM ITEMAUTF I INNER JOIN AUTOFORNE A  ON I.CDFILDEST   = A.CDFILDEST
                                                                 AND I.CDFILLANC   = A.CDFILLANC
                                                                 AND I.NRAUTOFORN  = A.NRAUTOFORN
                                          INNER JOIN FILIAL FI    ON I.CDFILDEST   = FI.CDFILIAL
                                          INNER JOIN FORNECEDOR F ON A.CDFORNECED  = F.CDFORNECED
                                          INNER JOIN MARCA M      ON I.CDMARCA     = M.CDMARCA
                         WHERE FI.CDREGIAO    = C_COLETA.CDREGIAO
                            AND A.CDOPERADOR  = C_ITEMFORN.CDOPERADOR
                            AND I.CDPRODUTO   = C_ITEMPROD.CDPRODUTO
                            AND I.DTPROGENTAF < P_DTINI
                            AND I.DTPROGENTAF = (SELECT MAX(ITEMAUTF.DTPROGENTAF)
                                                   FROM ITEMAUTF
                                                  WHERE ITEMAUTF.CDMARCA   = I.CDMARCA
                                                    AND ITEMAUTF.CDPRODUTO = I.CDPRODUTO
                                                    AND ITEMAUTF.CDFILDEST = I.CDFILDEST
                                                    AND ITEMAUTF.CDFILLANC = I.CDFILLANC)
                          ORDER BY NVL(I.VRPREUNIAF, 0)) SUB
                 WHERE ROWNUM = 1;            
              EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                    V_NMFANTFORN    := NULL;
                    V_IDTPIJURFORN  := NULL;
                    V_NRINSJURFORN  := NULL;
                    V_VRPREUNIAF    := 0;
                    V_CDMARCA       := NULL;
                  
                    SELECT M.CDMARCA
                      INTO V_CDMARCA
                      FROM MARCA M, PARASUPRI P
                     WHERE M.CDMARCA  = P.CDMARCA
                       AND P.CDFILIAL = P_CDFILCENTCMP;
              END;
              
              SELECT M.NMMARCA
                INTO V_NMMARCA
                FROM MARCA M
               WHERE M.CDMARCA = V_CDMARCA;
               
              --SELECIONA DATA ANTERIOR
              SELECT ADD_MONTHS(TO_DATE(TO_CHAR(P_DTINI, 'DD/MM/YYYY'), 'DD,MM,YYYY'), -1) DTINICIAL,
                     ADD_MONTHS(TO_DATE(TO_CHAR(P_DTFIN, 'DD/MM/YYYY'), 'DD,MM,YYYY'), -1) DTFINAL
                INTO V_DTINICIAL, V_DTFINAL
                FROM DUAL;
              
              --SELECIONA QUANTIDADE NO PERIODO ANTERIOR
              SELECT SUM(QTPROGENTAF) QTPROGENTAF
                INTO V_QTPROGENTAF
                FROM ITEMAUTF I INNER JOIN AUTOFORNE A ON I.CDFILDEST   = A.CDFILDEST
                                                      AND I.CDFILLANC   = A.CDFILLANC
                                                      AND I.NRAUTOFORN  = A.NRAUTOFORN
                                INNER JOIN FILIAL FI   ON I.CDFILDEST   = FI.CDFILIAL
               WHERE FI.CDREGIAO   = C_ITEMPROD.CDREGIAO
                 AND I.CDPRODUTO   = C_ITEMPROD.CDPRODUTO
                 AND I.CDMARCA     = V_CDMARCA
                 AND I.DTPROGENTAF  BETWEEN V_DTINICIAL AND V_DTFINAL;
              
              BEGIN
                SELECT NRIDEAL4FORN
                  INTO V_NRIDEAL4FORN
                  FROM IDEAL_4FORN
                 WHERE NRPAGINA  = V_NRPAGINA
                   AND CDPRODUTO = C_ITEMPROD.CDPRODUTO
                   AND NRSEQEMISSAO = V_NRSEQEMISSAO;
              EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                    V_NRIDEAL4FORN := NULL;
              END;
                 
              IF V_NRIDEAL4FORN IS NULL THEN
                V_NRIDEAL4FORN := SEQ_IDEAL4FORN.NEXTVAL;
                INSERT INTO IDEAL_4FORN (NRIDEAL4FORN, 
                                         NRSEQEMISSAO, 
                                         NRPAGINA,  
                                         CDREGIAO,  
                                         NMREGIAO, 
                                         NMOPERADOR,   
                                         CDOPERADOR,  
                                         CDPRODUTO, 
                                         NMPRODUTO, 
                                         CDARVPROD, 
                                         SGUNIDADE,    
                                         CDMARCA,      
                                         NMMARCA,   
                                         DTINI,     
                                         DTFIN,
                                         NMFANTFORN_AF_ANT, 
                                         IDTPIJURFORN_AF_ANT,  
                                         NRINSJURFORN_AF_ANT,  
                                         VRPREUNIAF_AF_ANT,
                                         QTACOMPRAR)
                                 VALUES (V_NRIDEAL4FORN, 
                                         V_NRSEQEMISSAO, 
                                         V_NRPAGINA, 
                                         C_ITEMPROD.CDREGIAO, 
                                         C_ITEMPROD.NMREGIAO,
                                         C_ITEMPROD.NMOPERADOR, 
                                         C_ITEMPROD.CDOPERADOR, 
                                         C_ITEMPROD.CDPRODUTO, 
                                         C_ITEMPROD.NMPRODUTO, 
                                         C_ITEMPROD.CDARVPROD,
                                         C_ITEMPROD.SGUNIDADE,
                                         V_CDMARCA,
                                         V_NMMARCA,
                                         P_DTINI,
                                         P_DTFIN,
                                         V_NMFANTFORN, 
                                         V_IDTPIJURFORN, 
                                         V_NRINSJURFORN,
                                         V_VRPREUNIAF, 
                                         V_QTPROGENTAF);
              ELSE
                UPDATE IDEAL_4FORN
                   SET CDPRODUTO            = C_ITEMPROD.CDPRODUTO,
                       NMPRODUTO            = C_ITEMPROD.NMPRODUTO,
                       CDARVPROD            = C_ITEMPROD.CDARVPROD,
                       SGUNIDADE            = C_ITEMPROD.SGUNIDADE,                         
                       NMFANTFORN_AF_ANT    = V_NMFANTFORN,
                       IDTPIJURFORN_AF_ANT  = V_IDTPIJURFORN,
                       NRINSJURFORN_AF_ANT  = V_NRINSJURFORN,
                       VRPREUNIAF_AF_ANT    = V_VRPREUNIAF,
                       CDMARCA              = V_CDMARCA,
                       NMMARCA              = V_NMMARCA,
                       QTACOMPRAR           = V_QTPROGENTAF
                 WHERE NRIDEAL4FORN = V_NRIDEAL4FORN;
              END IF;

              BEGIN
                SELECT DECODE(V_VRPREUNIAF, 0, 100, ((((NVL((MIN(I.VRPRECUNIITM)), 0))/V_VRPREUNIAF)-1)*100)) VRPRECENT,
                       NVL((MIN(I.VRPRECUNIITM)), 0) VRPRECUNIITM,
                       NVL((SUM(V_QTPROGENTAF*I.VRPRECUNIITM)), 0) VALOR_TORAL_ITM,
                       MIN(I.CDMARCA) CDMARCA
                  INTO V_VRPRECENT, V_VRPRECUNIITM, V_VALOR_TORAL_ITM, V_CDMARCA_ITM
                  FROM ITEMCOLE I INNER JOIN COLETAPR C ON I.CDFILIAL      = C.CDFILIAL
                                                       AND I.NRCOLEPRECO   = C.NRCOLEPRECO
                 WHERE (C.CDFILIAL      = P_CDFILCENTCMP)
                   AND (C.CDOPERADOR    = C_ITEMFORN.CDOPERADOR)
                   AND (I.CDREGIAO      = C_ITEMPROD.CDREGIAO)
                   AND (I.CDPRODUTO     = C_ITEMPROD.CDPRODUTO)
                   AND (I.CDFORNECED    = C_ITEMFORN.CDFORNECED)
                   AND (I.DTINIVALITM >=  P_DTINI)
                   AND (I.DTFINVALITM <=  P_DTFIN);
                   
                SELECT NMMARCA
                  INTO V_NMMARCA_ITM
                  FROM MARCA
                 WHERE CDMARCA = V_CDMARCA_ITM;
              EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                    V_VRPRECENT       := NULL;                      
                    V_VRPRECUNIITM    := NULL;
                    V_VALOR_TORAL_ITM := NULL;
                    V_CDMARCA_ITM     := NULL;
                    V_NMMARCA_ITM     := NULL;
              END;
              
              IF V_QTFORN = 1 THEN
                IF V_VRPRECENT IS NOT NULL THEN
                  V_VRPRECUNIITM_MIX := V_VRPRECUNIITM;
                  UPDATE IDEAL_4FORN
                     SET NMFANTFORN1      = C_ITEMFORN.NMFANTFORN,
                         CDFORNECED1      = C_ITEMFORN.CDFORNECED,
                         IDTPIJURFORN1    = C_ITEMFORN.IDTPIJURFORN,
                         NRINSJURFORN1    = C_ITEMFORN.NRINSJURFORN,
                         VRTOTAL_FORN1    = C_FORN4.VRPRECUNIITM,
                         VRPRECUNIITM1    = V_VRPRECUNIITM,
                         VALOR_TORAL_ITM1 = V_VALOR_TORAL_ITM,
                         VRPRECENT1       = V_VRPRECENT,
                         
                         NMFANTFORN_MIX   = C_ITEMFORN.NMFANTFORN,
                         IDTPIJURFORN_MIX = C_ITEMFORN.IDTPIJURFORN,
                         NRINSJURFORN_MIX = C_ITEMFORN.NRINSJURFORN,
                         VRPRECUNIITM_MIX = V_VRPRECUNIITM,
                         VRPRECENT_MIX    = V_VRPRECENT,
                         VALOR_TORAL_MIX  = V_VALOR_TORAL_ITM,
                         CDMARCA_MIX      = V_CDMARCA_ITM,
                         NMMARCA_MIX      = V_NMMARCA_ITM
                   WHERE NRIDEAL4FORN = V_NRIDEAL4FORN;                     
                END IF;
              END IF;
              IF V_QTFORN = 2 THEN
                IF V_VRPRECENT IS NOT NULL THEN
                  IF V_VRPRECUNIITM_MIX > V_VRPRECUNIITM THEN
                    V_VRPRECUNIITM_MIX := V_VRPRECUNIITM;
                    UPDATE IDEAL_4FORN
                       SET NMFANTFORN2      = C_ITEMFORN.NMFANTFORN,
                           CDFORNECED2      = C_ITEMFORN.CDFORNECED,
                           IDTPIJURFORN2    = C_ITEMFORN.IDTPIJURFORN,
                           NRINSJURFORN2    = C_ITEMFORN.NRINSJURFORN,
                           VRTOTAL_FORN2    = C_FORN4.VRPRECUNIITM,
                           VRPRECUNIITM2    = V_VRPRECUNIITM,
                           VALOR_TORAL_ITM2 = V_VALOR_TORAL_ITM,
                           VRPRECENT2       = V_VRPRECENT,
                           
                           NMFANTFORN_MIX   = C_ITEMFORN.NMFANTFORN,
                           IDTPIJURFORN_MIX = C_ITEMFORN.IDTPIJURFORN,
                           NRINSJURFORN_MIX = C_ITEMFORN.NRINSJURFORN,
                           VRPRECUNIITM_MIX = V_VRPRECUNIITM,
                           VRPRECENT_MIX    = V_VRPRECENT,
                           VALOR_TORAL_MIX  = V_VALOR_TORAL_ITM,
                           CDMARCA_MIX      = V_CDMARCA_ITM,
                           NMMARCA_MIX      = V_NMMARCA_ITM
                     WHERE NRIDEAL4FORN = V_NRIDEAL4FORN;
                  ELSE
                    UPDATE IDEAL_4FORN
                       SET NMFANTFORN2      = C_ITEMFORN.NMFANTFORN,
                           CDFORNECED2      = C_ITEMFORN.CDFORNECED,
                           IDTPIJURFORN2    = C_ITEMFORN.IDTPIJURFORN,
                           NRINSJURFORN2    = C_ITEMFORN.NRINSJURFORN,
                           VRTOTAL_FORN2    = C_FORN4.VRPRECUNIITM,
                           VRPRECUNIITM2    = V_VRPRECUNIITM,
                           VALOR_TORAL_ITM2 = V_VALOR_TORAL_ITM,
                           VRPRECENT2       = V_VRPRECENT
                     WHERE NRIDEAL4FORN = V_NRIDEAL4FORN;
                  END IF;
                END IF;
              END IF;
              IF V_QTFORN = 3 THEN
                IF V_VRPRECENT IS NOT NULL THEN
                  IF V_VRPRECUNIITM_MIX > V_VRPRECUNIITM THEN
                    V_VRPRECUNIITM_MIX := V_VRPRECUNIITM;
                    UPDATE IDEAL_4FORN
                       SET NMFANTFORN3      = C_ITEMFORN.NMFANTFORN,
                           CDFORNECED3      = C_ITEMFORN.CDFORNECED,
                           IDTPIJURFORN3    = C_ITEMFORN.IDTPIJURFORN,
                           NRINSJURFORN3    = C_ITEMFORN.NRINSJURFORN,
                           VRTOTAL_FORN3    = C_FORN4.VRPRECUNIITM,
                           VRPRECUNIITM3    = V_VRPRECUNIITM,
                           VALOR_TORAL_ITM3 = V_VALOR_TORAL_ITM,
                           VRPRECENT3       = V_VRPRECENT,
                           
                           NMFANTFORN_MIX   = C_ITEMFORN.NMFANTFORN,
                           IDTPIJURFORN_MIX = C_ITEMFORN.IDTPIJURFORN,
                           NRINSJURFORN_MIX = C_ITEMFORN.NRINSJURFORN,
                           VRPRECUNIITM_MIX = V_VRPRECUNIITM,
                           VRPRECENT_MIX    = V_VRPRECENT,
                           VALOR_TORAL_MIX  = V_VALOR_TORAL_ITM,
                           CDMARCA_MIX      = V_CDMARCA_ITM,
                           NMMARCA_MIX      = V_NMMARCA_ITM
                     WHERE NRIDEAL4FORN = V_NRIDEAL4FORN;
                  ELSE
                    UPDATE IDEAL_4FORN
                       SET NMFANTFORN3      = C_ITEMFORN.NMFANTFORN,
                           CDFORNECED3      = C_ITEMFORN.CDFORNECED,
                           IDTPIJURFORN3    = C_ITEMFORN.IDTPIJURFORN,
                           NRINSJURFORN3    = C_ITEMFORN.NRINSJURFORN,
                           VRTOTAL_FORN3    = C_FORN4.VRPRECUNIITM,
                           VRPRECUNIITM3    = V_VRPRECUNIITM,
                           VALOR_TORAL_ITM3 = V_VALOR_TORAL_ITM,
                           VRPRECENT3       = V_VRPRECENT
                     WHERE NRIDEAL4FORN = V_NRIDEAL4FORN;
                  END IF;
                END IF;
              END IF;
              IF V_QTFORN = 4 THEN
                IF V_VRPRECENT IS NOT NULL THEN
                  IF V_VRPRECUNIITM_MIX > V_VRPRECUNIITM THEN
                    V_VRPRECUNIITM_MIX := V_VRPRECUNIITM;
                    UPDATE IDEAL_4FORN
                       SET NMFANTFORN4      = C_ITEMFORN.NMFANTFORN,
                           CDFORNECED4      = C_ITEMFORN.CDFORNECED,
                           IDTPIJURFORN4    = C_ITEMFORN.IDTPIJURFORN,
                           NRINSJURFORN4    = C_ITEMFORN.NRINSJURFORN,
                           VRTOTAL_FORN4    = C_FORN4.VRPRECUNIITM,
                           VRPRECUNIITM4    = V_VRPRECUNIITM,
                           VALOR_TORAL_ITM4 = V_VALOR_TORAL_ITM,
                           VRPRECENT4       = V_VRPRECENT,
                           
                           NMFANTFORN_MIX   = C_ITEMFORN.NMFANTFORN,
                           IDTPIJURFORN_MIX = C_ITEMFORN.IDTPIJURFORN,
                           NRINSJURFORN_MIX = C_ITEMFORN.NRINSJURFORN,
                           VRPRECUNIITM_MIX = V_VRPRECUNIITM,
                           VRPRECENT_MIX    = V_VRPRECENT,
                           VALOR_TORAL_MIX  = V_VALOR_TORAL_ITM,
                           CDMARCA_MIX      = V_CDMARCA_ITM,
                           NMMARCA_MIX      = V_NMMARCA_ITM
                     WHERE NRIDEAL4FORN = V_NRIDEAL4FORN;
                  ELSE
                    UPDATE IDEAL_4FORN
                       SET NMFANTFORN4      = C_ITEMFORN.NMFANTFORN,
                           CDFORNECED4      = C_ITEMFORN.CDFORNECED,
                           IDTPIJURFORN4    = C_ITEMFORN.IDTPIJURFORN,
                           NRINSJURFORN4    = C_ITEMFORN.NRINSJURFORN,
                           VRTOTAL_FORN4    = C_FORN4.VRPRECUNIITM,
                           VRPRECUNIITM4    = V_VRPRECUNIITM,
                           VALOR_TORAL_ITM4 = V_VALOR_TORAL_ITM,
                           VRPRECENT4       = V_VRPRECENT
                     WHERE NRIDEAL4FORN = V_NRIDEAL4FORN;
                  END IF;
                END IF;
              END IF;              
            END IF;
          END LOOP;  
        END LOOP;
      END IF;
    END LOOP;
    DELETE 
      FROM LISTA
     WHERE NRLISTA IN (SUBSTR(V_NRLISTA_COT, 11, 10), SUBSTR(V_NRLISTA_NCOT, 11, 10), SUBSTR(V_NRLISTA_PROD, 11, 10));
  END LOOP;
  COMMIT;    
  P_NRSEQEMISSAO := V_NRSEQEMISSAO;
END;