CREATE OR REPLACE PACKAGE SUP03600_CONTROLE_PEDCOLETA IS
   
    K_S CONSTANT VARCHAR2(01) := 'S';
    K_N CONSTANT VARCHAR2(01) := 'N';
    K_T CONSTANT VARCHAR2(01) := 'T';
    K_G CONSTANT VARCHAR2(01) := 'G';

    TYPE GRID_CONTROLE_PEDCOLETA_TYPE IS RECORD (
        CDFILIAL        FILIAL.CDFILIAL%TYPE,
        NRPEDIDOCOL     PEDCOLETA.NRPEDIDOCOL%TYPE,
        NRPEDCOLETA     PEDCOLETA.NRPEDCOLETA%TYPE,
        IDSITUPEDCOL    PEDCOLETA.IDSITUPEDCOL%TYPE,
        DTPEDCOLETA     PEDCOLETA.DTPEDCOLETA%TYPE,
        DTINIPERCOT     PEDCOLETA.DTINIPERCOT%TYPE,
        DTFINPERCOT     PEDCOLETA.DTFINPERCOT%TYPE, 
        IDSITUPEDCOLETA PEDCOLGERAL.IDSITUPEDCOLETA%TYPE,
        IDRENEGOCIAPCOL PEDCOLGERAL.IDRENEGOCIAPCOL%TYPE,
        DTEXPIRAPEDCOL  PEDCOLGERAL.DTEXPIRAPEDCOL%TYPE,
        DTINIPERGERAL   PEDCOLGERAL.DTINIPERGERAL%TYPE,
        DTFINPERGERAL   PEDCOLGERAL.DTFINPERGERAL%TYPE,
        CDOPERLANC      PEDCOLGERAL.CDOPERLANC%TYPE,
        NRORG           PEDCOLGERAL.NRORG%TYPE,
        COMPRADOR       OPERADOR.CDOPERADOR%TYPE,
        NMCOMPRADOR     OPERADOR.NMOPERADOR%TYPE,   
        CDFORNECED      FORNECEDOR.CDFORNECED%TYPE,
        IDTPIJURFORN    FORNECEDOR.IDTPIJURFORN%TYPE,
        NRINSJURFORN    FORNECEDOR.NRINSJURFORN%TYPE,
        NMFANTFORN      FORNECEDOR.NMFANTFORN%TYPE,
        NMRAZSOCFORN    FORNECEDOR.NMRAZSOCFORN%TYPE,
        CDREGIAO        REGIAO.CDREGIAO%TYPE,
        NMREGIAO        REGIAO.NMREGIAO%TYPE,
        OPERACEITE      OPERADOR.NMOPERADOR%TYPE,
        EXISTS_ITEMCOLE VARCHAR2(01),
        CDFILCENTCMP    FILIAL.CDFILIAL%TYPE,
        IDSISDOS        PARAMGERAL.IDSISDOS%TYPE
    );

    TYPE GRID_CONTROLE_PEDCOLETA_TABLE IS TABLE OF GRID_CONTROLE_PEDCOLETA_TYPE;

    TYPE PROD_CONTROLE_PEDCOLETA_TYPE IS RECORD (
        CDFILIAL        FILIAL.CDFILIAL%TYPE,
        CDREGIAO        REGIAO.CDREGIAO%TYPE,
        CDFORNECED      FORNECEDOR.CDFORNECED%TYPE,      
        CDPRODUTO       PRODUTO.CDPRODUTO%TYPE,          
        CDARVPROD       PRODUTO.CDARVPROD%TYPE,          
        NMPRODUTO       PRODUTO.NMPRODUTO%TYPE,           
        SGUNIDADE       PRODUTO.SGUNIDADE%TYPE,          
        SGUNPRODESTO    PRODUTO.SGUNIDADE%TYPE,          
        COMPRADOR       OPERADOR.CDOPERADOR%TYPE,        
        NRPEDIDOCOL     PEDCOLETA.NRPEDIDOCOL%TYPE,      
        DTINIPERCOT     PEDCOLETA.DTINIPERCOT%TYPE,      
        DTFINPERCOT     PEDCOLETA.DTINIPERCOT%TYPE,      
        CDMARCA         MARCA.CDMARCA%TYPE,              
        IDITPEDPRIONEG  ITEMPEDCOL.IDITPEDPRIONEG%TYPE,  
        IDPRODINCLFOR   PRMARCPEDCOL.IDPRODINCLFOR%TYPE, 
        DSOBSRENEGOCIA  ITEMPEDCOL.DSOBSRENEGOCIA%TYPE,  
        QTPRODPEDCOL    FLOAT,                            
        VRFATOCONV      PRODUTO.VRFATOCONV%TYPE,         
        VRPRECUNITANT   FLOAT,                           
        VRPRECUNIT      FLOAT,                           
        VRPRECOOBJETIVO FLOAT,                           
        VRPRECREN       FLOAT,                           
        TOTALOBJ        FLOAT,                           
        VLRTOTALRET     FLOAT,                           
        NRORG           ITEMPEDCOL.NRORG%TYPE             
    );

    TYPE PROD_CONTROLE_PEDCOLETA_TABLE IS TABLE OF PROD_CONTROLE_PEDCOLETA_TYPE;

    FUNCTION GRID_CONTROLE_PEDCOLETA(P_CDFILIAL    IN VARCHAR2,
                                     P_CDFORNECED  IN VARCHAR2,
                                     P_CDREGIAO    IN VARCHAR2,
                                     P_CDCOMPRADOR IN VARCHAR2,
                                     P_CDOPERLANC  IN VARCHAR2,
                                     P_DTINIVALITM IN DATE,
                                     P_DTFINVALITM IN DATE,
                                     P_SITUACAO    IN VARCHAR2,
                                     P_IDGERACOT   IN VARCHAR2) RETURN GRID_CONTROLE_PEDCOLETA_TABLE PIPELINED;
    
    FUNCTION PROD_CONTROLE_PEDCOLETA(P_CDFILIAL       IN VARCHAR2,
                                     P_CDFORNECED     IN VARCHAR2,
                                     P_NRPEDCOLETA    IN VARCHAR2,
                                     P_SITUACAO       IN VARCHAR2,
                                     P_CDREGIAO       IN VARCHAR2 DEFAULT 'T',
                                     P_PARAMCOMPPRECO IN VARCHAR2 DEFAULT 'C',
                                     P_MELHORPRECO    IN VARCHAR2 DEFAULT '1',
                                     P_DTINIVALANT    IN DATE     DEFAULT NULL,
                                     P_DTFINVALANT    IN DATE     DEFAULT NULL) RETURN PROD_CONTROLE_PEDCOLETA_TABLE PIPELINED;

END SUP03600_CONTROLE_PEDCOLETA;
/

CREATE OR REPLACE PACKAGE BODY SUP03600_CONTROLE_PEDCOLETA IS

    FUNCTION GRID_CONTROLE_PEDCOLETA(P_CDFILIAL    IN VARCHAR2,
                                     P_CDFORNECED  IN VARCHAR2,
                                     P_CDREGIAO    IN VARCHAR2,
                                     P_CDCOMPRADOR IN VARCHAR2,
                                     P_CDOPERLANC  IN VARCHAR2,
                                     P_DTINIVALITM IN DATE,
                                     P_DTFINVALITM IN DATE,
                                     P_SITUACAO    IN VARCHAR2,
                                     P_IDGERACOT   IN VARCHAR2) RETURN GRID_CONTROLE_PEDCOLETA_TABLE PIPELINED

                                     
        IS        
        OUT_RECORD GRID_CONTROLE_PEDCOLETA_TYPE;

        TYPE CURTYPE IS REF CURSOR;
        C_PEDCOLETA CURTYPE;
        V_SQL VARCHAR2(32000);

        V_CDFILIAL        PEDCOLETA.CDFILIAL%TYPE;             
        V_NRPEDIDOCOL     PEDCOLETA.NRPEDIDOCOL%TYPE;          
        V_NRPEDCOLETA     PEDCOLETA.NRPEDCOLETA%TYPE;          
        V_IDSITUPEDCOL    PEDCOLETA.IDSITUPEDCOL%TYPE;         
        V_DTPEDCOLETA     PEDCOLETA.DTPEDCOLETA%TYPE;          
        V_DTINIPERCOT     PEDCOLETA.DTINIPERCOT%TYPE;          
        V_DTFINPERCOT     PEDCOLETA.DTFINPERCOT%TYPE;          
        V_IDSITUPEDCOLETA PEDCOLGERAL.IDSITUPEDCOLETA%TYPE;    
        V_IDRENEGOCIAPCOL PEDCOLGERAL.IDRENEGOCIAPCOL%TYPE;    
        V_DTEXPIRAPEDCOL  PEDCOLGERAL.DTEXPIRAPEDCOL%TYPE;     
        V_DTINIPERGERAL   PEDCOLGERAL.DTINIPERGERAL%TYPE;      
        V_DTFINPERGERAL   PEDCOLGERAL.DTFINPERGERAL%TYPE;      
        V_CDOPERLANC      PEDCOLGERAL.CDOPERLANC%TYPE;         
        V_NRORG           PEDCOLGERAL.NRORG%TYPE;              
        V_COMPRADOR       OPERADOR.CDOPERADOR%TYPE;  
        V_NMCOMPRADOR     OPERADOR.NMOPERADOR%TYPE;
        V_CDFORNECED      FORNECEDOR.CDFORNECED%TYPE;          
        V_IDTPIJURFORN    FORNECEDOR.IDTPIJURFORN%TYPE;        
        V_NRINSJURFORN    FORNECEDOR.NRINSJURFORN%TYPE;        
        V_NMFANTFORN      FORNECEDOR.NMFANTFORN%TYPE;          
        V_NMRAZSOCFORN    FORNECEDOR.NMRAZSOCFORN%TYPE;        
        V_CDREGIAO        REGIAO.CDREGIAO%TYPE;                
        V_NMREGIAO        REGIAO.NMREGIAO%TYPE;
        V_OPERACEITE      OPERADOR.NMOPERADOR%TYPE;
        V_CDFILCENTCMP    FILIAL.CDFILIAL%TYPE;
        V_IDSISDOS        PARAMGERAL.IDSISDOS%TYPE;
    BEGIN
        BEGIN
            SELECT IDSISDOS
              INTO V_IDSISDOS
              FROM PARAMGERAL;
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
                V_IDSISDOS := NULL;
        END;
        
        BEGIN
            SELECT NVL(CDFILCENTCMP, CDFILIAL)
              INTO V_CDFILCENTCMP
              FROM FILIAL
             WHERE CDFILIAL = P_CDFILIAL;
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
                V_CDFILCENTCMP := NULL;
        END;
        
        V_SQL := 'SELECT PEDCOLETA.CDFILIAL,'||              --01
                 '       PEDCOLETA.NRPEDIDOCOL,'||           --02
                 '       PEDCOLETA.NRPEDCOLETA,'||           --03
                 '       PEDCOLETA.IDSITUPEDCOL,'||          --04
                 '       PEDCOLETA.DTPEDCOLETA,'||           --05
                 '       PEDCOLETA.DTINIPERCOT,'||           --06
                 '       PEDCOLETA.DTFINPERCOT,'||           --07
                 '       PEDCOLGERAL.IDSITUPEDCOLETA,'||     --08
                 '       PEDCOLGERAL.IDRENEGOCIAPCOL,'||     --09
                 '       PEDCOLGERAL.DTEXPIRAPEDCOL,'||      --10
                 '       PEDCOLGERAL.DTINIPERGERAL,'||       --11
                 '       PEDCOLGERAL.DTFINPERGERAL,'||       --12
                 '       PEDCOLGERAL.CDOPERLANC,'||          --13
                 '       PEDCOLGERAL.NRORG,'||               --14
                 '       OPERADOR.CDOPERADOR COMPRADOR,'||   --15
                 '       OPERADOR.NMOPERADOR NMCOMPRADOR,'|| --16
                 '       FORNECEDOR.CDFORNECED,'||           --17
                 '       FORNECEDOR.IDTPIJURFORN,'||         --18
                 '       FORNECEDOR.NRINSJURFORN,'||         --19
                 '       FORNECEDOR.NMFANTFORN,'||           --20
                 '       FORNECEDOR.NMRAZSOCFORN,'||         --21
                 '       REGIAO.CDREGIAO,'||                 --22
                 '       REGIAO.NMREGIAO'||                  --23
                 '  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'||
                 '                  INNER JOIN OPERADOR ON PEDCOLGERAL.CDOPERADOR = OPERADOR.CDOPERADOR'||
                 ' WHERE PEDCOLETA.DTINIPERCOT >= '''||P_DTINIVALITM||''''||
                 '   AND PEDCOLETA.DTFINPERCOT <= '''||P_DTFINVALITM||'''';
        
        IF P_CDFORNECED IS NOT NULL THEN
            V_SQL := V_SQL ||
                 '   AND INSTR('''||P_CDFORNECED||''', FORNECEDOR.CDFORNECED) > 0';
        END IF;

        IF P_CDREGIAO IS NOT NULL THEN
            V_SQL := V_SQL ||
                 '   AND INSTR('''||P_CDREGIAO||''', REGIAO.CDREGIAO) > 0';
        END IF;

        IF P_CDCOMPRADOR IS NOT NULL THEN
            V_SQL := V_SQL ||
                 '   AND INSTR('''||P_CDCOMPRADOR||''', OPERADOR.CDOPERADOR) > 0';
        END IF;

        IF P_CDOPERLANC IS NOT NULL THEN
            V_SQL := V_SQL ||
                 '   AND INSTR('''||P_CDOPERLANC||''', PEDCOLGERAL.CDOPERLANC) > 0';
        END IF;

        V_SQL := V_SQL ||
                 '   AND INSTR('''||P_SITUACAO||''', PEDCOLGERAL.IDRENEGOCIAPCOL || DECODE(PEDCOLGERAL.IDSITUPEDCOLETA, '''||K_N||''', PEDCOLETA.IDSITUPEDCOL, PEDCOLGERAL.IDSITUPEDCOLETA)) > 0';

        IF P_IDGERACOT = K_G THEN
            V_SQL := V_SQL ||
                 '   AND EXISTS (SELECT 1'||
                 '                 FROM ITEMCOLE I'||
                 '                WHERE I.CDFILIAL = PEDCOLETA.CDFILIAL'||
                 '                  AND I.NRPEDIDOCOL = PEDCOLETA.NRPEDIDOCOL'||
                 '                  AND I.CDREGIAO = PEDCOLETA.CDREGIAO'||
                 '                  AND I.CDFORNECED = PEDCOLETA.CDFORNECED)';
        ELSIF P_IDGERACOT = K_N THEN
            V_SQL := V_SQL ||
                 '   AND NOT EXISTS (SELECT 1'||
                 '                     FROM ITEMCOLE I'||
                 '                    WHERE I.CDFILIAL = PEDCOLETA.CDFILIAL'||
                 '                      AND I.NRPEDIDOCOL = PEDCOLETA.NRPEDIDOCOL'||
                 '                      AND I.CDREGIAO = PEDCOLETA.CDREGIAO'||
                 '                      AND I.CDFORNECED = PEDCOLETA.CDFORNECED)';
        END IF;

        V_SQL := V_SQL ||                                    
                 '   AND EXISTS (SELECT 1'||
                 '                 FROM ITEMPEDCOL IPC INNER JOIN PEDCOLETA PC ON IPC.CDFILIAL = PC.CDFILIAL'||
                 '                                                            AND IPC.NRPEDCOLETA = PC.NRPEDCOLETA'||
                 '                                                            AND IPC.CDREGIAO = PC.CDREGIAO'||
                 '                                                            AND IPC.CDFORNECED = PC.CDFORNECED'||
                 '                WHERE IPC.CDFILIAL = PEDCOLETA.CDFILIAL'||
                 '                  AND IPC.NRPEDCOLETA = PEDCOLETA.NRPEDCOLETA'||
                 '                  AND IPC.CDREGIAO = PEDCOLETA.CDREGIAO'||
                 '                  AND IPC.CDFORNECED = PEDCOLETA.CDFORNECED'||
                 '                  AND PC.NRPEDIDOCOL = PEDCOLETA.NRPEDIDOCOL)';

        OPEN C_PEDCOLETA FOR V_SQL;
        LOOP
            FETCH C_PEDCOLETA INTO V_CDFILIAL,        --01
                                   V_NRPEDIDOCOL,     --02
                                   V_NRPEDCOLETA,     --03
                                   V_IDSITUPEDCOL,    --04
                                   V_DTPEDCOLETA,     --05
                                   V_DTINIPERCOT,     --06
                                   V_DTFINPERCOT,     --07
                                   V_IDSITUPEDCOLETA, --08
                                   V_IDRENEGOCIAPCOL, --09 
                                   V_DTEXPIRAPEDCOL,  --10 
                                   V_DTINIPERGERAL,   --11
                                   V_DTFINPERGERAL,   --12 
                                   V_CDOPERLANC,      --13
                                   V_NRORG,           --14
                                   V_COMPRADOR,       --15
                                   V_NMCOMPRADOR,     --16
                                   V_CDFORNECED,      --17
                                   V_IDTPIJURFORN,    --18
                                   V_NRINSJURFORN,    --19
                                   V_NMFANTFORN,      --20
                                   V_NMRAZSOCFORN,    --21
                                   V_CDREGIAO,        --22
                                   V_NMREGIAO;        --23

            EXIT WHEN C_PEDCOLETA%NOTFOUND;

            BEGIN
                SELECT OPERADOR.NMOPERADOR
                INTO V_OPERACEITE
                FROM OPERADOR
                WHERE EXISTS(SELECT 1
                               FROM ACEITEPEDCOL
                              WHERE ACEITEPEDCOL.CDOPERADOR  = OPERADOR.CDOPERADOR
                                AND ACEITEPEDCOL.CDFILIAL    = V_CDFILIAL
                                AND ACEITEPEDCOL.NRPEDIDOCOL = V_NRPEDIDOCOL
                                AND ACEITEPEDCOL.IDACEITE    = K_N);
            EXCEPTION
                WHEN NO_DATA_FOUND THEN
                    V_OPERACEITE := ' - ';
            END;

            BEGIN
                SELECT K_S
                  INTO OUT_RECORD.EXISTS_ITEMCOLE
                  FROM DUAL
                 WHERE EXISTS (SELECT 1
                                 FROM ITEMPEDCOL INNER JOIN PEDCOLETA ON ITEMPEDCOL.CDFILIAL = PEDCOLETA.CDFILIAL
                                                                     AND ITEMPEDCOL.CDFORNECED = PEDCOLETA.CDFORNECED
                                                                     AND ITEMPEDCOL.CDREGIAO = PEDCOLETA.CDREGIAO
                                                                     AND ITEMPEDCOL.NRPEDCOLETA = PEDCOLETA.NRPEDCOLETA
                                                 INNER JOIN ITEMCOLE ON ITEMPEDCOL.CDFILIAL = ITEMCOLE.CDFILIAL
                                                                    AND PEDCOLETA.NRPEDIDOCOL = ITEMCOLE.NRPEDIDOCOL
                                                                    AND ITEMPEDCOL.CDFORNECED = ITEMCOLE.CDFORNECED
                                                                    AND ITEMPEDCOL.CDREGIAO = ITEMCOLE.CDREGIAO
                                                                    AND ITEMPEDCOL.CDPRODUTO = ITEMCOLE.CDPRODUTO
                                                                    AND ITEMPEDCOL.CDMARCA = ITEMCOLE.CDMARCA
                                WHERE PEDCOLETA.CDFILIAL    = V_CDFILIAL
                                  AND PEDCOLETA.NRPEDIDOCOL = V_NRPEDIDOCOL                 
                                  AND PEDCOLETA.NRPEDCOLETA = V_NRPEDCOLETA);
            EXCEPTION
                WHEN NO_DATA_FOUND THEN
                    OUT_RECORD.EXISTS_ITEMCOLE := 'N';
            END;

            OUT_RECORD.CDFILIAL        := V_CDFILIAL;
            OUT_RECORD.NRPEDIDOCOL     := V_NRPEDIDOCOL;
            OUT_RECORD.NRPEDCOLETA     := V_NRPEDCOLETA;
            OUT_RECORD.IDSITUPEDCOL    := V_IDSITUPEDCOL;
            OUT_RECORD.DTPEDCOLETA     := V_DTPEDCOLETA;
            OUT_RECORD.DTINIPERCOT     := V_DTINIPERCOT;
            OUT_RECORD.DTFINPERCOT     := V_DTFINPERCOT;
            OUT_RECORD.IDSITUPEDCOLETA := V_IDSITUPEDCOLETA;
            OUT_RECORD.IDRENEGOCIAPCOL := V_IDRENEGOCIAPCOL;
            OUT_RECORD.DTEXPIRAPEDCOL  := V_DTEXPIRAPEDCOL;
            OUT_RECORD.DTINIPERGERAL   := V_DTINIPERGERAL;
            OUT_RECORD.DTFINPERGERAL   := V_DTFINPERGERAL;
            OUT_RECORD.CDOPERLANC      := V_CDOPERLANC;
            OUT_RECORD.NRORG           := V_NRORG;
            OUT_RECORD.COMPRADOR       := V_COMPRADOR;
            OUT_RECORD.NMCOMPRADOR     := V_NMCOMPRADOR;
            OUT_RECORD.CDFORNECED      := V_CDFORNECED;
            OUT_RECORD.IDTPIJURFORN    := V_IDTPIJURFORN;
            OUT_RECORD.NRINSJURFORN    := V_NRINSJURFORN;
            OUT_RECORD.NMFANTFORN      := V_NMFANTFORN;
            OUT_RECORD.NMRAZSOCFORN    := V_NMRAZSOCFORN;
            OUT_RECORD.CDREGIAO        := V_CDREGIAO;
            OUT_RECORD.NMREGIAO        := V_NMREGIAO;            
            OUT_RECORD.OPERACEITE      := V_OPERACEITE;
            OUT_RECORD.IDSISDOS        := V_IDSISDOS;
            OUT_RECORD.CDFILCENTCMP    := V_CDFILCENTCMP;
            
            PIPE ROW (OUT_RECORD);
        END LOOP;
        CLOSE C_PEDCOLETA;
        RETURN;     

    END GRID_CONTROLE_PEDCOLETA;


    FUNCTION PROD_CONTROLE_PEDCOLETA(P_CDFILIAL       IN VARCHAR2,
                                     P_CDFORNECED     IN VARCHAR2,
                                     P_NRPEDCOLETA    IN VARCHAR2,
                                     P_SITUACAO       IN VARCHAR2,
                                     P_CDREGIAO       IN VARCHAR2 DEFAULT 'T',
                                     P_PARAMCOMPPRECO IN VARCHAR2 DEFAULT 'C',
                                     P_MELHORPRECO    IN VARCHAR2 DEFAULT '1',
                                     P_DTINIVALANT    IN DATE     DEFAULT NULL,
                                     P_DTFINVALANT    IN DATE     DEFAULT NULL) RETURN PROD_CONTROLE_PEDCOLETA_TABLE PIPELINED 
        IS        
        OUT_RECORD PROD_CONTROLE_PEDCOLETA_TYPE;
        
        TYPE CURTYPE IS REF CURSOR;
        C_ITEMPEDCOL CURTYPE;
        V_SQL VARCHAR2(32000);
    
        V_CDFILIAL          FILIAL.CDFILIAL%TYPE;
        V_CDFORNECED        FORNECEDOR.CDFORNECED%TYPE;
        V_COMPRADOR         PEDCOLETA.CDOPERADOR%TYPE;
        V_NRPEDIDOCOL       PEDCOLETA.NRPEDIDOCOL%TYPE;
        V_DTINIPERCOT       PEDCOLETA.DTINIPERCOT%TYPE;
        V_DTFINPERCOT       PEDCOLETA.DTFINPERCOT%TYPE;
        V_IDITPEDPRIONEG    ITEMPEDCOL.IDITPEDPRIONEG%TYPE;
        V_DSOBSRENEGOCIA    ITEMPEDCOL.DSOBSRENEGOCIA%TYPE;
        V_NRORG             ITEMPEDCOL.NRORG%TYPE;
        V_CDREGIAO          REGIAO.CDREGIAO%TYPE;
        V_CDMARCA           MARCA.CDMARCA%TYPE;
        V_CDARVPROD         PRODUTO.CDARVPROD%TYPE; 
        V_CDPRODUTO         PRODUTO.CDPRODUTO%TYPE; 
        V_NMPRODUTO         PRODUTO.NMPRODUTO%TYPE; 
        V_SGUNIDADE         PRODUTO.SGUNIDADE%TYPE;
        V_VRFATOCONV        PRODUTO.VRFATOCONV%TYPE;
        V_SGUNPRODESTO      PRODUTO.SGUNIDADE%TYPE;
        V_IDPRODINCLFOR     PRMARCPEDCOL.IDPRODINCLFOR%TYPE;
        V_IDSITUPEDCOLETA   PEDCOLGERAL.IDSITUPEDCOLETA%TYPE;
        V_IDSITUPEDCOL      PEDCOLETA.IDSITUPEDCOL%TYPE;
        V_MAXNRCOLEPRECO    ITEMCOLE.NRCOLEPRECO%TYPE;
    
        V_VRITEMPEDCOL      FLOAT;
        V_VRPRECREN         FLOAT;
        V_VRPRECOOBJETIVO   FLOAT;
        V_TOTALOBJ          FLOAT; 
        V_QUANTIDADE        FLOAT;
        V_VRPRECRENECO      FLOAT;
        V_VLRTOTALRET       FLOAT;
        V_VRPRECUNITANT     FLOAT;
        V_FATOR_CONVERSAO   VARCHAR2(50);
    BEGIN
        V_SQL := 'SELECT ITEMPEDCOL.CDFILIAL,'||                          --01
                 '       ITEMPEDCOL.CDFORNECED,'||                        --02
                 '       ITEMPEDCOL.CDREGIAO,'||                          --03
                 '       ITEMPEDCOL.IDITPEDPRIONEG,'||                    --04
                 '       ITEMPEDCOL.DSOBSRENEGOCIA,'||                    --05 
                 '       ITEMPEDCOL.NRORG,'||                             --06
                 '       ITEMPEDCOL.CDMARCA,'||                           --07
                 '       PRODUTO.CDARVPROD,'||                            --08
                 '       PRODUTO.CDPRODUTO,'||                            --09
                 '       PRODUTO.NMPRODUTO,'||                            --10
                 '       PRODUTO.SGUNIDADE,'||                            --11
                 '       PRODUTO.VRFATOCONV,'||                           --12
                 '       PRODESTO.SGUNIDADE SGUNPRODESTO,'||              --13
                 '       PEDCOLETA.CDOPERADOR COMPRADOR,'||               --14
                 '       PEDCOLETA.NRPEDIDOCOL,'||                        --15
                 '       PEDCOLETA.DTINIPERCOT,'||                        --16
                 '       PEDCOLETA.DTFINPERCOT,'||                        --17
                 '       PRMARCPEDCOL.IDPRODINCLFOR,'||                   --18
                 '       PEDCOLGERAL.IDSITUPEDCOLETA,'||                  --19
                 '       PEDCOLETA.IDSITUPEDCOL,'||                       --20
                 '       NVL(ITEMPEDCOL.VRITEMPEDCOL, 0) VRITEMPEDCOL,'|| --21
                 '       SUM(NVL(ITEMPEDCOL.QTPRODPEDCOL, 0)) OVER (PARTITION BY ITEMPEDCOL.CDFILIAL, ITEMPEDCOL.CDFORNECED, ITEMPEDCOL.NRORG, ITEMPEDCOL.CDMARCA, PRODUTO.CDPRODUTO, PEDCOLETA.NRPEDIDOCOL) QUANTIDADE,'; --22
        
        IF P_PARAMCOMPPRECO = 'E' THEN
            V_SQL := V_SQL ||
                 '       NVL(ITEMPEDCOL.VRPRECOOBJETIVO, 0) / NVL(PRODUTO.VRFATOCONV, 1) VRPRECOOBJETIVO,'||                              --23
                 '       NVL(ITEMPEDCOL.VRPRECREN, 0) / NVL(PRODUTO.VRFATOCONV, 1) VRPRECREN,'||                                          --24
                 '       NVL(ITEMPEDCOL.VRPRECRENECO, 0) / NVL(PRODUTO.VRFATOCONV, 1) VRPRECRENECO,'||                                    --25 
                 '       (NVL(ITEMPEDCOL.VRPRECRENECO, 0) / NVL(PRODUTO.VRFATOCONV, 1)) * NVL(ITEMPEDCOL.QTPRODPEDCOL, 0) VLRTOTALRET,'|| --26 
                 '       SUM((NVL(ITEMPEDCOL.VRPRECOOBJETIVO, 0) / NVL(PRODUTO.VRFATOCONV, 1)) * NVL(ITEMPEDCOL.QTPRODPEDCOL, 0)) OVER (PARTITION BY ITEMPEDCOL.CDFILIAL, ITEMPEDCOL.CDFORNECED, ITEMPEDCOL.NRORG, ITEMPEDCOL.CDMARCA, PRODUTO.CDPRODUTO, PEDCOLETA.NRPEDIDOCOL) TOTALOBJ'; --27
        ELSE 
            V_SQL := V_SQL ||
                 '       NVL(ITEMPEDCOL.VRPRECOOBJETIVO, 0) VRPRECOOBJETIVO,'||                                                           --23  
                 '       NVL(ITEMPEDCOL.VRPRECREN, 0) VRPRECREN,'||                                                                       --24
                 '       NVL(ITEMPEDCOL.VRPRECRENECO, 0) VRPRECRENECO,'||                                                                 --25
                 '       NVL(ITEMPEDCOL.VRPRECRENECO, 0) * NVL(ITEMPEDCOL.QTPRODPEDCOL, 0) VLRTOTALRET,'||                                --26 
                 '       SUM(NVL(ITEMPEDCOL.VRPRECOOBJETIVO, 0) * NVL(ITEMPEDCOL.QTPRODPEDCOL, 0)) OVER (PARTITION BY ITEMPEDCOL.CDFILIAL, ITEMPEDCOL.CDFORNECED, ITEMPEDCOL.NRORG, ITEMPEDCOL.CDMARCA, PRODUTO.CDPRODUTO, PEDCOLETA.NRPEDIDOCOL) TOTALOBJ'; --27
        END IF;
                
        V_SQL := V_SQL ||
                 '  FROM ITEMPEDCOL INNER JOIN PEDCOLETA ON ITEMPEDCOL.CDFILIAL = PEDCOLETA.CDFILIAL'||
                 '                                      AND ITEMPEDCOL.CDFORNECED = PEDCOLETA.CDFORNECED'||
                 '                                      AND ITEMPEDCOL.CDREGIAO = PEDCOLETA.CDREGIAO'||
                 '                                      AND ITEMPEDCOL.NRPEDCOLETA = PEDCOLETA.NRPEDCOLETA'||
                 '                  INNER JOIN PEDCOLGERAL ON PEDCOLETA.CDFILIAL = PEDCOLGERAL.CDFILIAL'||
                 '                                        AND PEDCOLETA.NRPEDIDOCOL = PEDCOLGERAL.NRPEDIDOCOL'||
                 '                  INNER JOIN PRMARCPEDCOL ON ITEMPEDCOL.CDFILIAL = PRMARCPEDCOL.CDFILIAL'||
                 '                                         AND ITEMPEDCOL.CDPRODUTO = PRMARCPEDCOL.CDPRODUTO'||
                 '                                         AND ITEMPEDCOL.CDMARCA = PRMARCPEDCOL.CDMARCA'||
                 '                                         AND PEDCOLETA.NRPEDIDOCOL = PRMARCPEDCOL.NRPEDIDOCOL'||
                 '                  INNER JOIN PRODUTO ON ITEMPEDCOL.CDPRODUTO = PRODUTO.CDPRODUTO'||
                 '                  INNER JOIN PRODUTO PRODESTO ON PRODUTO.CDPRODESTO = PRODESTO.CDPRODUTO'||             
                 ' WHERE ITEMPEDCOL.CDFILIAL = '''||P_CDFILIAL||''''||
                 '   AND INSTR('''||P_CDFORNECED||''', ITEMPEDCOL.CDFORNECED) > 0'||
                 '   AND INSTR('''||P_NRPEDCOLETA||''', ITEMPEDCOL.NRPEDCOLETA) > 0';
        IF P_CDREGIAO != 'T' THEN
            V_SQL := V_SQL ||
                 '   AND INSTR('''||P_CDREGIAO||''', ITEMPEDCOL.CDREGIAO) > 0';
        END IF;

        OPEN C_ITEMPEDCOL FOR V_SQL;
        LOOP
            FETCH C_ITEMPEDCOL INTO V_CDFILIAL,        --01
                                    V_CDFORNECED,      --02
                                    V_CDREGIAO,        --03
                                    V_IDITPEDPRIONEG,  --04
                                    V_DSOBSRENEGOCIA,  --05
                                    V_NRORG,           --06
                                    V_CDMARCA,         --07
                                    V_CDARVPROD,       --08
                                    V_CDPRODUTO,       --09
                                    V_NMPRODUTO,       --10
                                    V_SGUNIDADE,       --11
                                    V_VRFATOCONV,      --12
                                    V_SGUNPRODESTO,    --13
                                    V_COMPRADOR,       --14
                                    V_NRPEDIDOCOL,     --15
                                    V_DTINIPERCOT,     --16
                                    V_DTFINPERCOT,     --17
                                    V_IDPRODINCLFOR,   --18
                                    V_IDSITUPEDCOLETA, --19
                                    V_IDSITUPEDCOL,    --20
                                    V_VRITEMPEDCOL,    --21
                                    V_QUANTIDADE,      --22
                                    V_VRPRECOOBJETIVO, --23 
                                    V_VRPRECREN,       --24
                                    V_VRPRECRENECO,    --25
                                    V_VLRTOTALRET,     --26
                                    V_TOTALOBJ;        --27

            EXIT WHEN C_ITEMPEDCOL%NOTFOUND;

            V_VRPRECUNITANT := 0;
            
            IF INSTR(P_SITUACAO, V_IDSITUPEDCOLETA||V_IDSITUPEDCOL) > 0 THEN
                
                IF (P_DTINIVALANT IS NULL AND P_DTFINVALANT IS NULL)  THEN
                    BEGIN
                        SELECT MAX(ITEMCOLE.NRCOLEPRECO)
                          INTO V_MAXNRCOLEPRECO
                          FROM ITEMCOLE INNER JOIN COLETAPR ON ITEMCOLE.CDFILIAL = COLETAPR.CDFILIAL
                                                           AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO
                         WHERE ITEMCOLE.CDFILIAL     = V_CDFILIAL
                           AND ITEMCOLE.CDREGIAO     = V_CDREGIAO
                           AND ITEMCOLE.CDFORNECED   = V_CDFORNECED
                           AND ITEMCOLE.CDPRODUTO    = V_CDPRODUTO
                           AND ITEMCOLE.CDMARCA      = V_CDMARCA
                           AND COLETAPR.CDOPERADOR   = V_COMPRADOR
                           AND ITEMCOLE.VRPRECUNIITM > 0
                           AND NVL(COLETAPR.IDSITUCOLETA, 'C') <> 'A';

                        SELECT NVL(MIN(ITEMCOLE.VRPRECUNIITM), 0)
                          INTO V_VRPRECUNITANT
                          FROM ITEMCOLE
                         WHERE ITEMCOLE.CDFILIAL     = V_CDFILIAL
                           AND ITEMCOLE.CDREGIAO     = V_CDREGIAO
                           AND ITEMCOLE.CDFORNECED   = V_CDFORNECED
                           AND ITEMCOLE.CDPRODUTO    = V_CDPRODUTO
                           AND ITEMCOLE.CDMARCA      = V_CDMARCA
                           AND ITEMCOLE.NRCOLEPRECO  = V_MAXNRCOLEPRECO
                           AND ITEMCOLE.VRPRECUNIITM > 0;                    
                    EXCEPTION
                        WHEN NO_DATA_FOUND THEN
                            V_VRPRECUNITANT := 0;                        
                    END;
                ELSE
                    IF P_MELHORPRECO = '1' THEN
                        BEGIN
                            SELECT NVL(MIN(ITEMCOLE.VRPRECUNIITM), 0)
                              INTO V_VRPRECUNITANT
                              FROM ITEMCOLE INNER JOIN COLETAPR ON ITEMCOLE.CDFILIAL = COLETAPR.CDFILIAL
                                                               AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO
                             WHERE ITEMCOLE.CDFILIAL     = V_CDFILIAL
                               AND ITEMCOLE.CDREGIAO     = V_CDREGIAO
                               AND ITEMCOLE.CDFORNECED   = V_CDFORNECED
                               AND ITEMCOLE.CDPRODUTO    = V_CDPRODUTO
                               AND ITEMCOLE.CDMARCA      = V_CDMARCA
                               AND COLETAPR.CDOPERADOR   = V_COMPRADOR
                               AND ITEMCOLE.VRPRECUNIITM > 0
                               AND NVL(COLETAPR.IDSITUCOLETA, 'C') <> 'A'
                               AND (ITEMCOLE.DTINIVALITM <= P_DTFINVALANT AND ITEMCOLE.DTFINVALITM >= P_DTINIVALANT);
                        EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                                V_VRPRECUNITANT := 0;
                        END;
                    ELSIF P_MELHORPRECO = '2' THEN
                        BEGIN
                            SELECT MAX(ITEMCOLE.NRCOLEPRECO)
                              INTO V_MAXNRCOLEPRECO
                              FROM ITEMCOLE INNER JOIN COLETAPR ON ITEMCOLE.CDFILIAL = COLETAPR.CDFILIAL
                                                               AND ITEMCOLE.NRCOLEPRECO = COLETAPR.NRCOLEPRECO
                             WHERE ITEMCOLE.CDFILIAL     = V_CDFILIAL
                               AND ITEMCOLE.CDREGIAO     = V_CDREGIAO
                               AND ITEMCOLE.CDFORNECED   = V_CDFORNECED
                               AND ITEMCOLE.CDPRODUTO    = V_CDPRODUTO
                               AND ITEMCOLE.CDMARCA      = V_CDMARCA
                               AND COLETAPR.CDOPERADOR   = V_COMPRADOR
                               AND ITEMCOLE.VRPRECUNIITM > 0
                               AND NVL(COLETAPR.IDSITUCOLETA, 'C') <> 'A'
                               AND (ITEMCOLE.DTINIVALITM <= P_DTFINVALANT AND ITEMCOLE.DTFINVALITM >= P_DTINIVALANT);

                            SELECT NVL(MIN(ITEMCOLE.VRPRECUNIITM), 0)
                              INTO V_VRPRECUNITANT
                              FROM ITEMCOLE
                             WHERE ITEMCOLE.CDFILIAL     = V_CDFILIAL
                               AND ITEMCOLE.CDREGIAO     = V_CDREGIAO
                               AND ITEMCOLE.CDFORNECED   = V_CDFORNECED
                               AND ITEMCOLE.CDPRODUTO    = V_CDPRODUTO
                               AND ITEMCOLE.CDMARCA      = V_CDMARCA
                               AND ITEMCOLE.NRCOLEPRECO  = V_MAXNRCOLEPRECO
                               AND ITEMCOLE.VRPRECUNIITM > 0;
                        EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                                V_VRPRECUNITANT := 0;                        
                        END;
                    END IF;                
                END IF;
            END IF;

            OUT_RECORD.CDFILIAL        := V_CDFILIAL;
            OUT_RECORD.CDREGIAO        := V_CDREGIAO;
            OUT_RECORD.CDFORNECED      := V_CDFORNECED;
            OUT_RECORD.CDPRODUTO       := V_CDPRODUTO;
            OUT_RECORD.CDARVPROD       := V_CDARVPROD;
            OUT_RECORD.NMPRODUTO       := V_NMPRODUTO;
            OUT_RECORD.SGUNIDADE       := V_SGUNIDADE;
            OUT_RECORD.SGUNPRODESTO    := V_SGUNPRODESTO;
            OUT_RECORD.COMPRADOR       := V_COMPRADOR;
            OUT_RECORD.NRPEDIDOCOL     := V_NRPEDIDOCOL;
            OUT_RECORD.DTINIPERCOT     := V_DTINIPERCOT;
            OUT_RECORD.DTFINPERCOT     := V_DTFINPERCOT;
            OUT_RECORD.CDMARCA         := V_CDMARCA;
            OUT_RECORD.IDITPEDPRIONEG  := V_IDITPEDPRIONEG;
            OUT_RECORD.IDPRODINCLFOR   := V_IDPRODINCLFOR;
            OUT_RECORD.DSOBSRENEGOCIA  := V_DSOBSRENEGOCIA;
            OUT_RECORD.QTPRODPEDCOL    := V_QUANTIDADE;
            OUT_RECORD.VRFATOCONV      := V_VRFATOCONV;
            OUT_RECORD.VRPRECUNITANT   := V_VRPRECUNITANT;
            OUT_RECORD.VRPRECUNIT      := V_VRITEMPEDCOL;
            OUT_RECORD.VRPRECOOBJETIVO := V_VRPRECOOBJETIVO;
            OUT_RECORD.VRPRECREN       := V_VRPRECREN;
            OUT_RECORD.TOTALOBJ        := V_TOTALOBJ;
            OUT_RECORD.VLRTOTALRET     := V_VLRTOTALRET;
            OUT_RECORD.NRORG           := V_NRORG;

            PIPE ROW (OUT_RECORD);
        END LOOP;
        CLOSE C_ITEMPEDCOL;
        RETURN;
    END;

END SUP03600_CONTROLE_PEDCOLETA;
/