DROP TYPE EQUAL_FORNE_PEDCOLETA_TABLE
/

DROP TYPE EQUAL_FORNE_PEDCOLETA_TYPE
/

CREATE TYPE EQUAL_FORNE_PEDCOLETA_TYPE AS
OBJECT( CDREGIAO      VARCHAR2(3),
        CDFILIAL      VARCHAR2(4),
        CDPRODUTO     VARCHAR2(10),
        CDARVPROD     VARCHAR2(20),
        NMPRODUTO     VARCHAR2(50),
        SGUNIDADE     VARCHAR2(10),
        VRFATOCONV    FLOAT,
        CDMARCA       VARCHAR2(5),
        NMMARCA       VARCHAR2(20),
        CDFORNECED    VARCHAR2(21),
        NMFANTFORN    VARCHAR2(200),
        NRPEDCOLETA   VARCHAR2(10),
        NRPEDIDOCOL   VARCHAR2(10),
        QUANTIDADE    FLOAT,
        DSPERIODO     VARCHAR2(50),
        VRPRECECON    FLOAT,
        VRPRECUNIT    FLOAT,
        VRTOTAL       FLOAT,
        DSPERIODOANT  VARCHAR2(50),
        VRPRECECONANT FLOAT,
        VRPRECUNITANT FLOAT,
        VRTOTALANT    FLOAT,
        VRTOTALPRECOBJ FLOAT,
        VRTOTALPRECREN FLOAT,
        NRORG          NUMBER,
        VRNEGOCIACAO FLOAT,
        VRPROBJETIVO FLOAT)
/

CREATE TYPE EQUAL_FORNE_PEDCOLETA_TABLE AS TABLE OF EQUAL_FORNE_PEDCOLETA_TYPE
/

CREATE OR REPLACE FUNCTION EQUAL_FORNE_PEDCOLETA(P_CDREGIAO       IN VARCHAR2, 
                                                 P_CDFORNECED     IN VARCHAR2, 
                                                 P_CDCOMPRADOR    IN VARCHAR2, 
                                                 P_DTINIVALITM    IN DATE, 
                                                 P_DTFINVALITM    IN DATE, 
                                                 P_CDPRODINI      IN VARCHAR2, 
                                                 P_CDPRODFIN      IN VARCHAR2, 
                                                 P_CDMARCA        IN VARCHAR2, 
                                                 P_DTINIVALANT    IN DATE, 
                                                 P_DTFINVALANT    IN DATE, 
                                                 P_MELHORPRECO    IN VARCHAR2, 
                                                 P_CDFILIAL       IN VARCHAR2 DEFAULT 'T', 
                                                 P_IDVERIFICAVRIT IN VARCHAR2 DEFAULT 'S', 
                                                 P_IDTPCOMPARA    IN VARCHAR2 DEFAULT 'C', 
                                                 P_NRORG          IN VARCHAR2 DEFAULT '1', 
                                                 P_EXIBE          IN VARCHAR2 DEFAULT 'P' /* P=EXIBE PEDIDO DE COLETA E C=EXIBE COTACAO */
                                                 ) RETURN EQUAL_FORNE_PEDCOLETA_TABLE PIPELINED 
IS
    TYPE CURTYPE            IS REF CURSOR; 
    C_EQUALIZA              CURTYPE; 
    C_ITENS                 CURTYPE; 
    V_QTPROGENTAF           FLOAT; 
    V_VRPRECUNITANT         FLOAT; 
    V_VRPRECECONANT         FLOAT; 

    V_CDREGIAO              VARCHAR2(3); 
    V_NRPEDCOLETA           VARCHAR2(10); 
    V_NRPEDIDOCOL           VARCHAR2(10); 
    V_CHAVE                 VARCHAR2(40) := '1'; 
    V_EQUA_CDREGIAO         PEDCOLETA.CDREGIAO%TYPE; 
    V_EQUA_NRPEDCOLETA      PEDCOLETA.NRPEDCOLETA%TYPE; 
    V_EQUA_NRPEDIDOCOL      PEDCOLETA.NRPEDIDOCOL%TYPE; 
    V_EQUA_CDFORNECED       PEDCOLETA.CDFORNECED%TYPE; 
    V_EQUA_CDFILIAL         PEDCOLETA.CDFILIAL%TYPE; 
    V_EQUA_DTINIPERCOT      PEDCOLETA.DTINIPERCOT%TYPE; 
    V_EQUA_DTFINPERCOT      PEDCOLETA.DTFINPERCOT%TYPE; 
    V_EQUA_NMFANTFORN       VARCHAR2(200); 
    V_EQUA_CDOPERADOR       PEDCOLGERAL.CDOPERADOR%TYPE; 

    V_ITENS_CDPRODUTO       PRODUTO.CDPRODUTO%TYPE; 
    V_ITENS_NMPRODUTO       PRODUTO.NMPRODUTO%TYPE; 
    V_ITENS_CDARVPROD       PRODUTO.CDARVPROD%TYPE; 
    V_ITENS_SGUNIDADE       PRODUTO.SGUNIDADE%TYPE; 
    V_ITENS_VRFATOCONV      PRODUTO.VRFATOCONV%TYPE; 
    V_ITENS_CDMARCA         ITEMPEDCOL.CDMARCA%TYPE; 
    V_ITENS_NMMARCA         MARCA.NMMARCA%TYPE; 
    V_ITENS_VRITEMPEDCOL    ITEMPEDCOL.VRITEMPEDCOL%TYPE; 
    V_ITENS_VRPRECECOPEDCOL ITEMPEDCOL.VRPRECPIPEDCOL%TYPE; 
    V_ITENS_VRPRECOOBJEECO  ITEMPEDCOL.VRPRECOOBJEECO%TYPE; 
    V_ITENS_VRPRECRENECO    ITEMPEDCOL.VRPRECRENECO%TYPE; 
    V_ITENS_NRPEDIDOCOL     PRMARCPEDCOL.NRPEDIDOCOL%TYPE; 
    V_ITENS_NRPEDCOLETA     ITEMPEDCOL.NRPEDCOLETA%TYPE; 
    V_ITENS_QTPRODPEDCOL    ITEMPEDCOL.QTPRODPEDCOL%TYPE; 
    V_ITENS_VRPROBJETIVO    ITEMPEDCOL.VRPRECOOBJETIVO%TYPE; 
    V_ITENS_VRNEGOCIACAO    ITEMPEDCOL.VRPRECREN%TYPE; 
    V_DTINIVALITM           VARCHAR2(20); 
    V_DTFINVALITM           VARCHAR2(20); 
    V_DTINIVALANT           VARCHAR2(20); 
    V_DTFINVALANT           VARCHAR2(20); 
    V_EQUA_NRORG            NUMBER; 
  
    OUT_RECORD EQUAL_FORNE_PEDCOLETA_TYPE := EQUAL_FORNE_PEDCOLETA_TYPE (NULL, NULL, NULL, NULL, NULL, NULL, 
                                                                        NULL, NULL, NULL, NULL, NULL, NULL, 
                                                                        NULL, NULL, NULL, NULL, NULL, NULL, 
                                                                        NULL, NULL, NULL, NULL, NULL, NULL, 
                                                                        NULL, NULL, NULL); 
BEGIN 
    BEGIN 
        V_DTINIVALITM := TO_CHAR(P_DTINIVALITM, 'DD/MM/YYYY'); 
        V_DTFINVALITM := TO_CHAR(P_DTFINVALITM, 'DD/MM/YYYY'); 
        V_DTINIVALANT := TO_CHAR(P_DTINIVALANT, 'DD/MM/YYYY'); 
        V_DTFINVALANT := TO_CHAR(P_DTFINVALANT, 'DD/MM/YYYY'); 
    EXCEPTION 
        WHEN OTHERS THEN BEGIN 
        V_DTINIVALITM := TRUNC(P_DTINIVALITM); 
        V_DTFINVALITM := TRUNC(P_DTFINVALITM); 
        V_DTINIVALANT := TRUNC(P_DTINIVALANT); 
        V_DTFINVALANT := TRUNC(P_DTFINVALANT); 
        END;    
    END; 
    IF P_EXIBE = 'P' THEN 
        OPEN C_EQUALIZA FOR 
            SELECT  PEDCOLETA.CDREGIAO,    PEDCOLETA.NRPEDCOLETA, 
                    PEDCOLETA.NRPEDIDOCOL, PEDCOLETA.CDFORNECED, 
                    PEDCOLETA.CDFILIAL,    PEDCOLETA.DTINIPERCOT, 
                    PEDCOLETA.DTFINPERCOT, 'PED:'||PEDCOLETA.NRPEDCOLETA||' - REGIAO:'||PEDCOLETA.CDREGIAO||' - FORN:'||FORNECEDOR.NMFANTFORN NMFANTFORN, 
                    PEDCOLGERAL.CDOPERADOR, PEDCOLGERAL.NRORG 
              FROM  PEDCOLETA INNER JOIN PEDCOLGERAL ON PEDCOLETA.CDFILIAL    = PEDCOLGERAL.CDFILIAL 
                                                    AND PEDCOLETA.NRPEDIDOCOL = PEDCOLGERAL.NRPEDIDOCOL 
                              INNER JOIN FORNECEDOR  ON PEDCOLETA.CDFORNECED  = FORNECEDOR.CDFORNECED 
                              INNER JOIN REGIAO      ON PEDCOLETA.CDREGIAO    = REGIAO.CDREGIAO 
                               LEFT JOIN LEILAO      ON PEDCOLETA.CDLEILAO    = LEILAO.CDLEILAO 
             WHERE  ((P_CDFILIAL = 'T') OR (PEDCOLETA.CDFILIAL = P_CDFILIAL)) 
               AND  PEDCOLETA.DTINIPERCOT <= P_DTFINVALITM 
               AND  PEDCOLETA.DTFINPERCOT >= P_DTINIVALITM 
               AND  (INSTR(P_CDCOMPRADOR, PEDCOLGERAL.CDOPERADOR) > 0 OR P_CDCOMPRADOR = 'T') 
               AND  (INSTR(P_CDFORNECED,  FORNECEDOR.CDFORNECED ) > 0 OR P_CDFORNECED  = 'T') 
               AND  (INSTR(P_CDREGIAO,    REGIAO.CDREGIAO       ) > 0 OR P_CDREGIAO    = 'T') 
               AND  EXISTS (SELECT 1
                              FROM ITEMPEDCOL IPC, PRODUTO P 
                             WHERE IPC.CDFILIAL    = PEDCOLETA.CDFILIAL 
               AND  IPC.NRPEDCOLETA = PEDCOLETA.NRPEDCOLETA 
               AND  IPC.CDREGIAO    = PEDCOLETA.CDREGIAO 
               AND  IPC.CDFORNECED  = PEDCOLETA.CDFORNECED 
               AND  IPC.CDPRODUTO   = P.CDPRODUTO 
               AND  (((P_IDVERIFICAVRIT = 'S') AND (NVL(IPC.VRITEMPEDCOL, 0)  > 0)) OR (P_IDVERIFICAVRIT = 'N')) 
               AND  P.CDARVPROD BETWEEN NVL(P_CDPRODINI, '0') AND RPAD(NVL(P_CDPRODFIN, 'Z'),20,'Z')) 
               AND  (((PEDCOLETA.CDLEILAO IS NOT NULL) AND (LEILAO.DTLIMILEILAO < SYSDATE)) OR (PEDCOLETA.CDLEILAO IS NULL)); 
    ELSE 
        OPEN C_EQUALIZA FOR 
            SELECT  COLETAPR.CDREGIAO,    COLETAPR.NRCOLEPRECO NRPEDCOLETA, 
                    COLETAPR.NRCOLEPRECO NRPEDIDOCOL, COLETAPR.CDFORNECED, 
                    COLETAPR.CDFILIAL,    COLETAPR.DTINIVALITM DTINIPERCOT, 
                    COLETAPR.DTFINVALITM DTFINPERCOT, 
                    'PED:'||COLETAPR.NRCOLEPRECO||' - REGIAO:'||COLETAPR.CDREGIAO||' - FORN:'||FORNECEDOR.NMFANTFORN NMFANTFORN, 
                    COLETAPR.CDOPERADOR, COLETAPR.NRORG 
              FROM  (SELECT ITEMCOLE.CDFILIAL, ITEMCOLE.NRCOLEPRECO, ITEMCOLE.CDREGIAO, 
                            ITEMCOLE.CDFORNECED, ITEMCOLE.DTINIVALITM, ITEMCOLE.DTFINVALITM, 
                            COLETAPR.CDOPERADOR, COLETAPR.NRORG 
                       FROM ITEMCOLE, COLETAPR 
                      WHERE ITEMCOLE.CDFILIAL = COLETAPR.CDFILIAL 
                        AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO 
                        AND ((P_CDFILIAL = 'T') OR (ITEMCOLE.CDFILIAL = P_CDFILIAL)) 
                        AND ITEMCOLE.DTINIVALITM <= P_DTFINVALITM 
                        AND ITEMCOLE.DTFINVALITM >= P_DTINIVALITM 
                        AND (INSTR(P_CDCOMPRADOR, COLETAPR.CDOPERADOR) > 0 OR P_CDCOMPRADOR = 'T') 
                        AND (INSTR(P_CDFORNECED,  ITEMCOLE.CDFORNECED ) > 0 OR P_CDFORNECED  = 'T') 
                        AND (INSTR(P_CDREGIAO,    ITEMCOLE.CDREGIAO       ) > 0 OR P_CDREGIAO    = 'T')
                    ) COLETAPR INNER JOIN FORNECEDOR  ON COLETAPR.CDFORNECED  = FORNECEDOR.CDFORNECED 
                               INNER JOIN REGIAO      ON COLETAPR.CDREGIAO    = REGIAO.CDREGIAO; 
    END IF; 
    LOOP 
        FETCH C_EQUALIZA INTO   V_EQUA_CDREGIAO, V_EQUA_NRPEDCOLETA, V_EQUA_NRPEDIDOCOL, 
                                V_EQUA_CDFORNECED, V_EQUA_CDFILIAL, V_EQUA_DTINIPERCOT, 
                                V_EQUA_DTFINPERCOT, V_EQUA_NMFANTFORN, V_EQUA_CDOPERADOR, V_EQUA_NRORG; 
        EXIT WHEN C_EQUALIZA%NOTFOUND; 
        IF V_CHAVE <> V_EQUA_NRPEDIDOCOL||V_EQUA_CDFORNECED||V_EQUA_CDREGIAO THEN 
            V_CHAVE := V_EQUA_NRPEDIDOCOL||V_EQUA_CDFORNECED||V_EQUA_CDREGIAO; 
            OUT_RECORD.CDREGIAO   := V_EQUA_CDREGIAO; 
            OUT_RECORD.CDFILIAL   := V_EQUA_CDFILIAL; 
            OUT_RECORD.CDFORNECED := V_EQUA_CDFORNECED; 
            OUT_RECORD.NMFANTFORN := V_EQUA_NMFANTFORN; 
            OUT_RECORD.NRORG      := V_EQUA_NRORG; 
 
            IF P_EXIBE = 'P' THEN
                IF ((V_DTINIVALANT IS NULL) AND (V_DTFINVALANT IS NULL)) THEN
                    OPEN C_ITENS FOR 
                        SELECT  PRODUTO.CDPRODUTO, PRODUTO.NMPRODUTO, PRODUTO.CDARVPROD, PRODUTO.SGUNIDADE, PRODUTO.VRFATOCONV, 
                                ITEMPEDCOL.CDMARCA, MARCA.NMMARCA, MIN(ITEMPEDCOL.VRITEMPEDCOL) over (partition by ITEMPEDCOL.CDPRODUTO) as VRITEMPEDCOL, 
                                NVL(ITEMPEDCOL.VRPRECPIPEDCOL, ITEMPEDCOL.VRITEMPEDCOL) AS VRPRECECOPEDCOL, 
                                ITEMPEDCOL.VRPRECOOBJEECO, ITEMPEDCOL.VRPRECRENECO, 
                                PRMARCPEDCOL.NRPEDIDOCOL,  ITEMPEDCOL.NRPEDCOLETA, ITEMPEDCOL.QTPRODPEDCOL, 
                                ITEMPEDCOL.VRPRECOOBJETIVO, ITEMPEDCOL.VRPRECREN, 
                                NVL(MIN(ITEMCOLE.VRPRECUNIITM) over (partition by ITEMPEDCOL.CDPRODUTO), 0) VRPRECUNIITM, 
                                NVL(MIN(ITEMCOLE.VRPRECECOITM) over (partition by ITEMPEDCOL.CDPRODUTO), 0) VRPRECECOITM 
                           FROM ITEMPEDCOL INNER JOIN PRODUTO      ON ITEMPEDCOL.CDPRODUTO = PRODUTO.CDPRODUTO 
                                           INNER JOIN MARCA        ON ITEMPEDCOL.CDMARCA   = MARCA.CDMARCA 
                                           INNER JOIN PRMARCPEDCOL ON ITEMPEDCOL.CDFILIAL  = PRMARCPEDCOL.CDFILIAL 
                                                                  AND ITEMPEDCOL.CDPRODUTO = PRMARCPEDCOL.CDPRODUTO 
                                                                  AND ITEMPEDCOL.CDMARCA   = PRMARCPEDCOL.CDMARCA
                                            left join itemcole on ITEMPEDCOL.CDFILIAL = ITEMCOLE.CDFILIAL
                                                              AND ITEMPEDCOL.CDREGIAO = ITEMCOLE.CDREGIAO    
                                                              AND ITEMPEDCOL.CDPRODUTO = ITEMCOLE.CDPRODUTO   
                                                              AND ITEMPEDCOL.CDFORNECED = ITEMCOLE.CDFORNECED  
                                                              AND ITEMPEDCOL.CDMARCA = ITEMCOLE.CDMARCA
                                                              AND ITEMCOLE.VRPRECUNIITM > 0
                                                              AND ITEMCOLE.NRCOLEPRECO = ( SELECT MAX(ITEMCOLE.NRCOLEPRECO) NRCOLEPRECO 
                                                                                             FROM COLETAPR, ITEMCOLE 
                                                                                            WHERE COLETAPR.CDFILIAL    = ITEMPEDCOL.CDFILIAL 
                                                                                              AND ITEMCOLE.CDFILIAL    = COLETAPR.CDFILIAL 
                                                                                              AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO 
                                                                                              AND ITEMCOLE.CDREGIAO    = ITEMPEDCOL.CDREGIAO 
                                                                                              AND ITEMCOLE.CDPRODUTO   = ITEMPEDCOL.CDPRODUTO
                                                                                              AND ITEMCOLE.CDMARCA     = ITEMPEDCOL.CDMARCA 
                                                                                              AND ITEMCOLE.CDFORNECED  = ITEMPEDCOL.CDFORNECED 
                                                                                              AND ITEMCOLE.VRPRECUNIITM > 0 
                                                                                              AND NVL(COLETAPR.IDSITUCOLETA, 'C') <> 'A' 
                                                                                              AND ((INSTR(P_CDCOMPRADOR, COLETAPR.CDOPERADOR) <> 0) OR P_CDCOMPRADOR = 'T'))
                          WHERE ITEMPEDCOL.CDFILIAL      = V_EQUA_CDFILIAL 
                            AND ITEMPEDCOL.NRPEDCOLETA   = V_EQUA_NRPEDCOLETA 
                            AND ITEMPEDCOL.CDFORNECED    = V_EQUA_CDFORNECED 
                            AND ITEMPEDCOL.CDREGIAO      = V_EQUA_CDREGIAO 
                            AND PRMARCPEDCOL.NRPEDIDOCOL = V_EQUA_NRPEDIDOCOL 
                            AND PRODUTO.CDARVPROD BETWEEN NVL(P_CDPRODINI, '0') AND RPAD(NVL(P_CDPRODFIN, 'Z'),20,'Z') 
                            AND (INSTR(P_CDMARCA, MARCA.CDMARCA) > 0 OR P_CDMARCA = 'T') 
                            AND (((P_IDVERIFICAVRIT = 'S') AND (NVL(ITEMPEDCOL.VRITEMPEDCOL, 0)  > 0)) OR (P_IDVERIFICAVRIT = 'N'));
                else
                    IF(P_MELHORPRECO = '1') THEN 
                        OPEN C_ITENS FOR 
                            SELECT  PRODUTO.CDPRODUTO, PRODUTO.NMPRODUTO, PRODUTO.CDARVPROD, PRODUTO.SGUNIDADE, PRODUTO.VRFATOCONV, 
                                    ITEMPEDCOL.CDMARCA, MARCA.NMMARCA, MIN(ITEMPEDCOL.VRITEMPEDCOL) over (partition by ITEMPEDCOL.CDPRODUTO) as VRITEMPEDCOL, 
                                    NVL(ITEMPEDCOL.VRPRECPIPEDCOL, ITEMPEDCOL.VRITEMPEDCOL) AS VRPRECECOPEDCOL, 
                                    ITEMPEDCOL.VRPRECOOBJEECO, ITEMPEDCOL.VRPRECRENECO, 
                                    PRMARCPEDCOL.NRPEDIDOCOL,  ITEMPEDCOL.NRPEDCOLETA, ITEMPEDCOL.QTPRODPEDCOL, 
                                    ITEMPEDCOL.VRPRECOOBJETIVO, ITEMPEDCOL.VRPRECREN, 
                                    NVL(MIN(ITEMCOLE.VRPRECUNIITM) over (partition by ITEMPEDCOL.CDPRODUTO), 0) VRPRECUNIITM, NVL(MIN(ITEMCOLE.VRPRECECOITM) over (partition by ITEMPEDCOL.CDPRODUTO), 0) VRPRECECOITM 
                              FROM  ITEMPEDCOL INNER JOIN PRODUTO      ON ITEMPEDCOL.CDPRODUTO = PRODUTO.CDPRODUTO 
                                               INNER JOIN MARCA        ON ITEMPEDCOL.CDMARCA   = MARCA.CDMARCA 
                                               INNER JOIN PRMARCPEDCOL ON ITEMPEDCOL.CDFILIAL  = PRMARCPEDCOL.CDFILIAL 
                                                                      AND ITEMPEDCOL.CDPRODUTO = PRMARCPEDCOL.CDPRODUTO 
                                                                      AND ITEMPEDCOL.CDMARCA   = PRMARCPEDCOL.CDMARCA
                                                left join itemcole on ITEMPEDCOL.CDFILIAL = ITEMCOLE.CDFILIAL
                                                                  AND ITEMPEDCOL.CDREGIAO = ITEMCOLE.CDREGIAO    
                                                                  AND ITEMPEDCOL.CDPRODUTO = ITEMCOLE.CDPRODUTO   
                                                                  AND ITEMPEDCOL.CDFORNECED = ITEMCOLE.CDFORNECED
                                                                  and ITEMPEDCOL.cdmarca = ITEMCOLE.CDMARCA
                                                                  AND ITEMCOLE.VRPRECUNIITM > 0 
                                                                  AND (ITEMCOLE.DTINIVALITM <= P_DTFINVALANT AND ITEMCOLE.DTFINVALITM >= P_DTINIVALANT)
                                                                  and exists (select 1
                                                                                from COLETAPR
                                                                               where ITEMCOLE.CDFILIAL    = COLETAPR.CDFILIAL 
                                                                                 AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO 
                                                                                 AND NVL(COLETAPR.IDSITUCOLETA, 'C') <> 'A' 
                                                                                 AND ((INSTR(P_CDCOMPRADOR, COLETAPR.CDOPERADOR) <> 0) OR P_CDCOMPRADOR = 'T') )
                             WHERE  ITEMPEDCOL.CDFILIAL      = V_EQUA_CDFILIAL 
                               AND  ITEMPEDCOL.NRPEDCOLETA   = V_EQUA_NRPEDCOLETA 
                               AND  ITEMPEDCOL.CDFORNECED    = V_EQUA_CDFORNECED 
                               AND  ITEMPEDCOL.CDREGIAO      = V_EQUA_CDREGIAO 
                               AND  PRMARCPEDCOL.NRPEDIDOCOL = V_EQUA_NRPEDIDOCOL 
                               AND  PRODUTO.CDARVPROD BETWEEN NVL(P_CDPRODINI, '0') AND RPAD(NVL(P_CDPRODFIN, 'Z'),20,'Z') 
                               AND  (INSTR(P_CDMARCA, MARCA.CDMARCA) > 0 OR P_CDMARCA = 'T') 
                               AND  (((P_IDVERIFICAVRIT = 'S') AND (NVL(ITEMPEDCOL.VRITEMPEDCOL, 0)  > 0)) OR (P_IDVERIFICAVRIT = 'N'));
                    else
                        IF(P_MELHORPRECO = '2') THEN
                            OPEN C_ITENS FOR        
                                SELECT  PRODUTO.CDPRODUTO, PRODUTO.NMPRODUTO, PRODUTO.CDARVPROD, PRODUTO.SGUNIDADE, PRODUTO.VRFATOCONV, 
                                        ITEMPEDCOL.CDMARCA, MARCA.NMMARCA, MIN(ITEMPEDCOL.VRITEMPEDCOL) over (partition by ITEMPEDCOL.CDPRODUTO) as VRITEMPEDCOL, 
                                        NVL(ITEMPEDCOL.VRPRECPIPEDCOL, ITEMPEDCOL.VRITEMPEDCOL) AS VRPRECECOPEDCOL, 
                                        ITEMPEDCOL.VRPRECOOBJEECO, ITEMPEDCOL.VRPRECRENECO, 
                                        PRMARCPEDCOL.NRPEDIDOCOL,  ITEMPEDCOL.NRPEDCOLETA, ITEMPEDCOL.QTPRODPEDCOL, 
                                        ITEMPEDCOL.VRPRECOOBJETIVO, ITEMPEDCOL.VRPRECREN, 
                                        NVL(MIN(ITEMCOLE.VRPRECUNIITM) over (partition by ITEMPEDCOL.CDPRODUTO), 0) VRPRECUNIITM, 
                                        NVL(MIN(ITEMCOLE.VRPRECECOITM) over (partition by ITEMPEDCOL.CDPRODUTO), 0) VRPRECECOITM 
                                  FROM  ITEMPEDCOL INNER JOIN PRODUTO      ON ITEMPEDCOL.CDPRODUTO = PRODUTO.CDPRODUTO 
                                                   INNER JOIN MARCA        ON ITEMPEDCOL.CDMARCA   = MARCA.CDMARCA 
                                                   INNER JOIN PRMARCPEDCOL ON ITEMPEDCOL.CDFILIAL  = PRMARCPEDCOL.CDFILIAL 
                                                                          AND ITEMPEDCOL.CDPRODUTO = PRMARCPEDCOL.CDPRODUTO 
                                                                          AND ITEMPEDCOL.CDMARCA   = PRMARCPEDCOL.CDMARCA
                                                    left join itemcole on ITEMPEDCOL.CDFILIAL = ITEMCOLE.CDFILIAL
                                                                      AND ITEMPEDCOL.CDREGIAO = ITEMCOLE.CDREGIAO    
                                                                      AND ITEMPEDCOL.CDPRODUTO = ITEMCOLE.CDPRODUTO   
                                                                      AND ITEMPEDCOL.CDFORNECED = ITEMCOLE.CDFORNECED  
                                                                      AND ITEMPEDCOL.CDMARCA = ITEMCOLE.CDMARCA
                                                                      AND ITEMCOLE.VRPRECUNIITM > 0
                                                                      AND ITEMCOLE.NRCOLEPRECO = ( SELECT MAX(ITEMCOLE.NRCOLEPRECO) NRCOLEPRECO 
                                                                                                     FROM COLETAPR, ITEMCOLE 
                                                                                                    WHERE COLETAPR.CDFILIAL    = ITEMPEDCOL.CDFILIAL 
                                                                                                      AND ITEMCOLE.CDFILIAL    = COLETAPR.CDFILIAL 
                                                                                                      AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO 
                                                                                                      AND ITEMCOLE.CDREGIAO    = ITEMPEDCOL.CDREGIAO 
                                                                                                      AND ITEMCOLE.CDPRODUTO   = ITEMPEDCOL.CDPRODUTO
                                                                                                      AND ITEMCOLE.CDMARCA     = ITEMPEDCOL.CDMARCA 
                                                                                                      AND ITEMCOLE.CDFORNECED  = ITEMPEDCOL.CDFORNECED 
                                                                                                      AND ITEMCOLE.VRPRECUNIITM > 0 
                                                                                                      AND NVL(COLETAPR.IDSITUCOLETA, 'C') <> 'A' 
                                                                                                      AND ((INSTR(P_CDCOMPRADOR, COLETAPR.CDOPERADOR) <> 0) OR P_CDCOMPRADOR = 'T')
                                                                                                      AND (ITEMCOLE.DTINIVALITM <= P_DTFINVALANT AND ITEMCOLE.DTFINVALITM >= P_DTINIVALANT))
                                 WHERE  ITEMPEDCOL.CDFILIAL      = V_EQUA_CDFILIAL 
                                   AND  ITEMPEDCOL.NRPEDCOLETA   = V_EQUA_NRPEDCOLETA 
                                   AND  ITEMPEDCOL.CDFORNECED    = V_EQUA_CDFORNECED 
                                   AND  ITEMPEDCOL.CDREGIAO      = V_EQUA_CDREGIAO 
                                   AND  PRMARCPEDCOL.NRPEDIDOCOL = V_EQUA_NRPEDIDOCOL 
                                   AND  PRODUTO.CDARVPROD BETWEEN NVL(P_CDPRODINI, '0') AND RPAD(NVL(P_CDPRODFIN, 'Z'),20,'Z') 
                                   AND  (INSTR(P_CDMARCA, MARCA.CDMARCA) > 0 OR P_CDMARCA = 'T') 
                                   AND  (((P_IDVERIFICAVRIT = 'S') AND (NVL(ITEMPEDCOL.VRITEMPEDCOL, 0)  > 0)) OR (P_IDVERIFICAVRIT = 'N'));
                        end if;
                    end if;
                end if;                 
            ELSE
                OPEN C_ITENS FOR 
                    SELECT  PRODUTO.CDPRODUTO, PRODUTO.NMPRODUTO, PRODUTO.CDARVPROD, PRODUTO.SGUNIDADE, PRODUTO.VRFATOCONV, 
                            ITEMCOLE.CDMARCA, MARCA.NMMARCA, ITEMCOLE.VRPRECUNIITM VRITEMCOLE, 
                            ITEMCOLE.VRPRECUNIITM AS VRPRECECOPEDCOL, 
                            0 VRPRECOOBJEECO, 0 VRPRECRENECO, 
                            V_EQUA_NRPEDIDOCOL NRPEDIDOCOL,  ITEMCOLE.NRCOLEPRECO, ITEMCOLE.QTACMPITMCOL QTPRODPEDCOL, 
                            0 VRPRECOOBJETIVO, 0 VRPRECREN
                        FROM  ITEMCOLE INNER JOIN PRODUTO     ON ITEMCOLE.CDPRODUTO = PRODUTO.CDPRODUTO 
                                        INNER JOIN MARCA       ON ITEMCOLE.CDMARCA   = MARCA.CDMARCA                                           
                        WHERE  ITEMCOLE.CDFILIAL      = V_EQUA_CDFILIAL 
                        AND  ITEMCOLE.NRCOLEPRECO   = V_EQUA_NRPEDIDOCOL 
                        AND  ITEMCOLE.CDFORNECED    = V_EQUA_CDFORNECED 
                        AND  ITEMCOLE.CDREGIAO      = V_EQUA_CDREGIAO 
                        AND  PRODUTO.CDARVPROD BETWEEN NVL(P_CDPRODINI, '0') AND RPAD(NVL(P_CDPRODFIN, 'Z'),20,'Z') 
                        AND  (INSTR(P_CDMARCA, MARCA.CDMARCA) > 0 OR P_CDMARCA = 'T') 
                        AND  (((P_IDVERIFICAVRIT = 'S') AND (NVL(ITEMCOLE.VRPRECUNIITM, 0)  > 0)) OR (P_IDVERIFICAVRIT = 'N')); 
            END IF; 
            LOOP 
                FETCH C_ITENS INTO V_ITENS_CDPRODUTO, V_ITENS_NMPRODUTO, V_ITENS_CDARVPROD, 
                                    V_ITENS_SGUNIDADE, V_ITENS_VRFATOCONV, V_ITENS_CDMARCA, 
                                    V_ITENS_NMMARCA, V_ITENS_VRITEMPEDCOL, V_ITENS_VRPRECECOPEDCOL, 
                                    V_ITENS_VRPRECOOBJEECO, V_ITENS_VRPRECRENECO, V_ITENS_NRPEDIDOCOL, 
                                    V_ITENS_NRPEDCOLETA, V_ITENS_QTPRODPEDCOL, V_ITENS_VRPROBJETIVO, 
                                    V_ITENS_VRNEGOCIACAO, V_VRPRECUNITANT, V_VRPRECECONANT; 
                EXIT WHEN C_ITENS%NOTFOUND; 
                OUT_RECORD.NRPEDCOLETA := V_ITENS_NRPEDCOLETA; 
                OUT_RECORD.NRPEDIDOCOL := V_ITENS_NRPEDIDOCOL; 
                OUT_RECORD.CDPRODUTO   := V_ITENS_CDPRODUTO; 
                OUT_RECORD.NMPRODUTO   := V_ITENS_NMPRODUTO; 
                OUT_RECORD.CDARVPROD   := V_ITENS_CDARVPROD; 
                OUT_RECORD.SGUNIDADE   := V_ITENS_SGUNIDADE; 
                OUT_RECORD.CDMARCA     := V_ITENS_CDMARCA; 
                OUT_RECORD.NMMARCA     := V_ITENS_NMMARCA; 
                OUT_RECORD.DSPERIODO   := V_DTINIVALITM || ' a ' || V_DTFINVALITM; 
                OUT_RECORD.VRFATOCONV  := V_ITENS_VRFATOCONV; 
 
                if P_EXIBE <> 'P' then
                    IF ((V_DTINIVALANT IS NULL) AND (V_DTFINVALANT IS NULL)) THEN 
                        BEGIN 
                            SELECT NVL(MIN(ITEMCOLE.VRPRECUNIITM), 0) VRPRECUNIITM, NVL(MIN(ITEMCOLE.VRPRECECOITM), 0) VRPRECECOITM 
                              INTO V_VRPRECUNITANT, V_VRPRECECONANT 
                              FROM ITEMCOLE 
                             WHERE ITEMCOLE.CDFILIAL    = V_EQUA_CDFILIAL 
                               AND ITEMCOLE.CDREGIAO    = V_EQUA_CDREGIAO 
                               AND ITEMCOLE.CDPRODUTO   = V_ITENS_CDPRODUTO 
                               AND ITEMCOLE.CDFORNECED  = V_EQUA_CDFORNECED 
                               AND ITEMCOLE.CDMARCA     = V_ITENS_CDMARCA 
                               AND ITEMCOLE.VRPRECUNIITM > 0 
                               AND ITEMCOLE.NRCOLEPRECO = ( SELECT MAX(ITEMCOLE.NRCOLEPRECO) NRCOLEPRECO 
                                                              FROM COLETAPR, ITEMCOLE 
                                                             WHERE COLETAPR.CDFILIAL    = V_EQUA_CDFILIAL 
                                                               AND ITEMCOLE.CDFILIAL    = COLETAPR.CDFILIAL 
                                                               AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO 
                                                               AND ITEMCOLE.CDREGIAO    = V_EQUA_CDREGIAO 
                                                               AND ITEMCOLE.CDPRODUTO   = V_ITENS_CDPRODUTO 
                                                               AND ITEMCOLE.CDMARCA     = V_ITENS_CDMARCA 
                                                               AND ITEMCOLE.CDFORNECED  = V_EQUA_CDFORNECED 
                                                               AND ITEMCOLE.VRPRECUNIITM > 0 
                                                               AND NVL(COLETAPR.IDSITUCOLETA, 'C') <> 'A' 
                                                               AND ((INSTR(P_CDCOMPRADOR, COLETAPR.CDOPERADOR) <> 0) OR P_CDCOMPRADOR = 'T')); 
                        EXCEPTION 
                            WHEN NO_DATA_FOUND THEN 
                                V_VRPRECUNITANT := 0; 
                                V_VRPRECECONANT := 0; 
                        END; 
                    ELSE 
                        IF(P_MELHORPRECO = '1') THEN 
                            BEGIN 
                                SELECT NVL(MIN(ITEMCOLE.VRPRECUNIITM), 0) VRPRECUNIITM, NVL(MIN(ITEMCOLE.VRPRECECOITM), 0) VRPRECECOITM 
                                  INTO V_VRPRECUNITANT, V_VRPRECECONANT 
                                  FROM COLETAPR, ITEMCOLE 
                                 WHERE COLETAPR.CDFILIAL    = V_EQUA_CDFILIAL 
                                  AND ITEMCOLE.CDFILIAL    = COLETAPR.CDFILIAL 
                                  AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO 
                                  AND ITEMCOLE.CDREGIAO    = V_EQUA_CDREGIAO 
                                  AND ITEMCOLE.CDPRODUTO   = V_ITENS_CDPRODUTO 
                                  AND ITEMCOLE.CDMARCA     = V_ITENS_CDMARCA 
                                  AND ITEMCOLE.CDFORNECED  = V_EQUA_CDFORNECED 
                                  AND ITEMCOLE.VRPRECUNIITM > 0 
                                  AND NVL(COLETAPR.IDSITUCOLETA, 'C') <> 'A' 
                                  AND ((INSTR(P_CDCOMPRADOR, COLETAPR.CDOPERADOR) <> 0) OR P_CDCOMPRADOR = 'T') 
                                  AND (ITEMCOLE.DTINIVALITM <= P_DTFINVALANT AND ITEMCOLE.DTFINVALITM >= P_DTINIVALANT); 
                            EXCEPTION 
                                WHEN NO_DATA_FOUND THEN 
                                    V_VRPRECUNITANT := 0; 
                                    V_VRPRECECONANT := 0; 
                            END; 
                        ELSE 
                            IF(P_MELHORPRECO = '2') THEN 
                                BEGIN 
                                    SELECT NVL(MIN(ITEMCOLE.VRPRECUNIITM), 0) VRPRECUNIITM, NVL(MIN(ITEMCOLE.VRPRECECOITM), 0) VRPRECECOITM 
                                      INTO V_VRPRECUNITANT, V_VRPRECECONANT 
                                      FROM ITEMCOLE 
                                     WHERE ITEMCOLE.CDFILIAL    = V_EQUA_CDFILIAL 
                                       AND ITEMCOLE.CDREGIAO    = V_EQUA_CDREGIAO 
                                       AND ITEMCOLE.CDPRODUTO   = V_ITENS_CDPRODUTO 
                                       AND ITEMCOLE.CDMARCA     = V_ITENS_CDMARCA 
                                       AND ITEMCOLE.CDFORNECED  = V_EQUA_CDFORNECED 
                                      AND ITEMCOLE.VRPRECUNIITM > 0 
                                      AND ITEMCOLE.NRCOLEPRECO = ( SELECT MAX(ITEMCOLE.NRCOLEPRECO) NRCOLEPRECO 
                                                                     FROM COLETAPR, ITEMCOLE 
                                                                    WHERE COLETAPR.CDFILIAL    = V_EQUA_CDFILIAL 
                                                                      AND ITEMCOLE.CDFILIAL    = COLETAPR.CDFILIAL 
                                                                      AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO 
                                                                      AND ITEMCOLE.CDREGIAO    = V_EQUA_CDREGIAO 
                                                                      AND ITEMCOLE.CDPRODUTO   = V_ITENS_CDPRODUTO 
                                                                      AND ITEMCOLE.CDMARCA     = V_ITENS_CDMARCA 
                                                                      AND ITEMCOLE.CDFORNECED  = V_EQUA_CDFORNECED 
                                                                      AND ITEMCOLE.VRPRECUNIITM > 0 
                                                                      AND NVL(COLETAPR.IDSITUCOLETA, 'C') <> 'A' 
                                                                      AND ((INSTR(P_CDCOMPRADOR, COLETAPR.CDOPERADOR) <> 0) OR P_CDCOMPRADOR = 'T') 
                                                                      AND (ITEMCOLE.DTINIVALITM <= P_DTFINVALANT AND ITEMCOLE.DTFINVALITM >= P_DTINIVALANT)); 
                                EXCEPTION 
                                    WHEN NO_DATA_FOUND THEN 
                                        V_VRPRECUNITANT := 0; 
                                        V_VRPRECECONANT := 0; 
                                END; 
                            END IF;
                        END IF; 
                    END IF; 
                END IF;
 
                IF ((V_DTINIVALANT IS NOT NULL) AND (V_DTFINVALANT IS NOT NULL)) THEN 
                    OUT_RECORD.DSPERIODOANT  := V_DTINIVALANT || ' a ' || V_DTFINVALANT; 
                END IF; 
 
                IF P_IDTPCOMPARA = 'C' THEN 
                    OUT_RECORD.VRPRECECON  := V_ITENS_VRPRECECOPEDCOL; 
                    OUT_RECORD.VRPRECUNIT  := V_ITENS_VRITEMPEDCOL; 
                    OUT_RECORD.VRTOTAL     := V_ITENS_VRPRECECOPEDCOL * V_ITENS_QTPRODPEDCOL; 
                    OUT_RECORD.QUANTIDADE  := V_ITENS_QTPRODPEDCOL; 
                    V_QTPROGENTAF          := V_ITENS_QTPRODPEDCOL; 

                    OUT_RECORD.VRPRECUNITANT := V_VRPRECUNITANT; 
                    OUT_RECORD.VRPRECECONANT := V_VRPRECECONANT; 
                    OUT_RECORD.VRTOTALANT    := NULL; 

                    OUT_RECORD.VRTOTALPRECOBJ  := NULL; 
                    OUT_RECORD.VRTOTALPRECREN  := NULL; 
                    OUT_RECORD.VRTOTALPRECOBJ  := V_ITENS_VRPRECOOBJEECO * V_QTPROGENTAF; 
                    OUT_RECORD.VRTOTALPRECREN  := V_ITENS_VRPRECRENECO * V_QTPROGENTAF; 
                    OUT_RECORD.VRPROBJETIVO    := V_ITENS_VRPROBJETIVO; 
                    OUT_RECORD.VRNEGOCIACAO    := V_ITENS_VRNEGOCIACAO; 

                    IF ((V_QTPROGENTAF IS NOT NULL) AND (V_VRPRECUNITANT IS NOT NULL)) THEN 
                        OUT_RECORD.VRTOTALANT := V_VRPRECECONANT * V_QTPROGENTAF; 
                    END IF; 
                ELSE 
                    IF P_IDTPCOMPARA = 'E' THEN 
                        V_QTPROGENTAF          := (V_ITENS_QTPRODPEDCOL/V_ITENS_VRFATOCONV); 
                        OUT_RECORD.VRPRECECON  := (V_ITENS_VRPRECECOPEDCOL/V_ITENS_VRFATOCONV); 
                        OUT_RECORD.VRPRECUNIT  := (V_ITENS_VRITEMPEDCOL/V_ITENS_VRFATOCONV); 
                        OUT_RECORD.VRTOTAL     := ((V_ITENS_VRPRECECOPEDCOL/V_ITENS_VRFATOCONV) * V_QTPROGENTAF); 
                        OUT_RECORD.QUANTIDADE  := V_QTPROGENTAF; 

                        OUT_RECORD.VRPRECUNITANT := (V_VRPRECUNITANT/V_ITENS_VRFATOCONV); 
                        OUT_RECORD.VRPRECECONANT := (V_VRPRECECONANT/V_ITENS_VRFATOCONV); 
                        OUT_RECORD.VRTOTALANT    := NULL; 

                        OUT_RECORD.VRTOTALPRECOBJ  := NULL; 
                        OUT_RECORD.VRTOTALPRECREN  := NULL; 
                        OUT_RECORD.VRTOTALPRECOBJ  := ((V_ITENS_VRPRECOOBJEECO/V_ITENS_VRFATOCONV) * V_QTPROGENTAF); 
                        OUT_RECORD.VRTOTALPRECREN  := ((V_ITENS_VRPRECRENECO/V_ITENS_VRFATOCONV) * V_QTPROGENTAF); 
                        OUT_RECORD.VRPROBJETIVO    := (V_ITENS_VRPROBJETIVO/V_ITENS_VRFATOCONV); 
                        OUT_RECORD.VRNEGOCIACAO    := (V_ITENS_VRNEGOCIACAO/V_ITENS_VRFATOCONV); 

                        IF ((V_QTPROGENTAF IS NOT NULL) AND (V_VRPRECUNITANT IS NOT NULL)) THEN 
                            OUT_RECORD.VRTOTALANT := ((V_VRPRECUNITANT/V_ITENS_VRFATOCONV) * V_QTPROGENTAF); 
                        END IF; 
                    END IF; 
                END IF; 
 
                PIPE ROW (OUT_RECORD); 
            END LOOP; 
            CLOSE C_ITENS; 
        END IF; 
    END LOOP; 
    CLOSE C_EQUALIZA; 
END; 
/