CREATE OR REPLACE FUNCTION SELECT_PEDCOLETA(P_CDFILIAL    IN FILIAL.CDFILIAL%TYPE,
                                            P_NRPEDIDOCOL IN PEDCOLETA.NRPEDIDOCOL%TYPE,
                                            P_CDFORNECED  IN FORNECEDOR.CDFORNECED%TYPE,
                                            P_NRORG       IN PRMARCPEDCOL.NRORG%TYPE) RETURN SELECTPEDCOLETA_TABLE PIPELINED IS
    V_IDORDPLCOT       PARASUPRI.IDORDPLCOT%TYPE;
    V_QTDIASPRAZOEXPED PRAZOFORNEXPEDFILPROD.QTDIASPRAZOEXPED%TYPE;
    V_VRMINFORNREG     PRAZOFORNEXPEDFILPROD.VRMINFORNREG%TYPE;
    V_QTMINFORNREG     PRAZOFORNEXPEDFILPROD.QTMINFORNREG%TYPE;
    V_CDARVPRODOL      PRODUTO.CDARVPROD%TYPE;
    V_NMPRODUTOOL      PRODUTO.NMPRODUTO%TYPE;
    
    OUT_RECORD SELECTPEDCOLETA_TYPE := SELECTPEDCOLETA_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, NULL, NULL, NULL, NULL);
        
BEGIN
    BEGIN
        SELECT NVL(IDORDPLCOT, 2)
          INTO V_IDORDPLCOT
          FROM PARASUPRI
         WHERE CDFILIAL = P_CDFILIAL;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            V_IDORDPLCOT := 2;
    END;
    
    FOR C_ITENS IN (SELECT PRODUTO.CDARVPROD,
                           PRODUTO.NMPRODUTO,
                           PRODUTO.CDPRODUTO,
                           PRODUTO.CDPRODESTO,
                           PRODUTO.SGUNIDADE,
                           PRODUTO.DSOBSNUTR,
                           PRMARCPEDCOL.IDPRODINCLFOR,
                           PRMARCPEDCOL.CDFILIAL,
                           PRMARCPEDCOL.VRPRECREN,
                           PRMARCPEDCOL.NRPEDIDOCOL,
                           PRMARCPEDCOL.QTDISPPRODMARC,
                           PRMARCPEDCOL.VRPRECUNIPRMARC,
                           PRMARCPEDCOL.VRULTPRECPRMARC,
                           PRMARCPEDCOL.VRPRECOOBJETIVO,
                           PRMARCPEDCOL.IDITPEDPRIONEG,
                           PRMARCPEDCOL.DSOBSRENEGOCIA,
                           PRMARCPEDCOL.NRORG,
                           MARCA.CDMARCA,
                           MARCA.NMMARCA,
                           PRODFORNCOMP.VRPERVARPREPRFO, 
                           PRODFORNCOMP.VRPERVARDESCPRFO, 
                           FORNECEDOR.VRPERVARPREC,
                           FORNECEDOR.VRPERVARDESCPREC,
                           FORNECEDOR.VRMINAUTFOR,
                           FORNECEDOR.QTMINAUTFOT,
                           ITEMPEDCOL.QTPRODPEDCOL,
                           ITEMPEDCOL.IDITEMPEDCOLALT,
                           ITEMPEDCOL.VRPERDESPEDCOL,
                           PEDCOLGERAL.IDRENEGOCIAPCOL
                      FROM PRMARCPEDCOL
                      JOIN PRODUTO     ON PRMARCPEDCOL.CDPRODUTO = PRODUTO.CDPRODUTO
                                      AND PRMARCPEDCOL.NRORG = PRODUTO.NRORG
                      JOIN MARCA       ON PRMARCPEDCOL.CDMARCA = MARCA.CDMARCA
                                      AND PRMARCPEDCOL.NRORG = MARCA.NRORG
                      JOIN FORNECEDOR  ON PRMARCPEDCOL.NRORG = FORNECEDOR.NRORG
                                      AND FORNECEDOR.CDFORNECED = P_CDFORNECED
                      JOIN PEDCOLGERAL ON PRMARCPEDCOL.NRPEDIDOCOL = PEDCOLGERAL.NRPEDIDOCOL
                                      AND PRMARCPEDCOL.CDFILIAL = PEDCOLGERAL.CDFILIAL
                                      AND PRMARCPEDCOL.NRORG = PEDCOLGERAL.NRORG
                      LEFT JOIN (SELECT SUM(NVL(QTPRODPEDCOL, 0)) AS QTPRODPEDCOL,
                                        ITEMPEDCOL.VRPERDESPEDCOL,
                                        ITEMPEDCOL.CDFILIAL,
                                        ITEMPEDCOL.CDPRODUTO,
                                        ITEMPEDCOL.CDMARCA,
                                        ITEMPEDCOL.IDITEMPEDCOLALT,
                                        ITEMPEDCOL.NRORG
                                   FROM ITEMPEDCOL
                                  WHERE ITEMPEDCOL.CDFILIAL = P_CDFILIAL
                                    AND ITEMPEDCOL.CDFORNECED = P_CDFORNECED
                                    AND ITEMPEDCOL.NRORG = P_NRORG
                                    AND EXISTS (SELECT 1
                                                  FROM PEDCOLETA
                                                 WHERE PEDCOLETA.CDFILIAL = ITEMPEDCOL.CDFILIAL
                                                   AND PEDCOLETA.NRPEDCOLETA = ITEMPEDCOL.NRPEDCOLETA
                                                   AND PEDCOLETA.CDFORNECED = ITEMPEDCOL.CDFORNECED
                                                   AND PEDCOLETA.CDREGIAO = ITEMPEDCOL.CDREGIAO
                                                   AND PEDCOLETA.NRORG = ITEMPEDCOL.NRORG
                                                   AND PEDCOLETA.CDFILIAL = P_CDFILIAL
                                                   AND PEDCOLETA.NRPEDIDOCOL = P_NRPEDIDOCOL)
                                  GROUP BY ITEMPEDCOL.VRPERDESPEDCOL,
                                           ITEMPEDCOL.CDFILIAL, 
                                           ITEMPEDCOL.CDPRODUTO,
                                           ITEMPEDCOL.CDMARCA,
                                           ITEMPEDCOL.IDITEMPEDCOLALT,
                                           ITEMPEDCOL.NRORG) ITEMPEDCOL 
                        ON PRMARCPEDCOL.CDFILIAL = ITEMPEDCOL.CDFILIAL 
                       AND PRMARCPEDCOL.CDPRODUTO = ITEMPEDCOL.CDPRODUTO
                       AND PRMARCPEDCOL.CDMARCA = ITEMPEDCOL.CDMARCA 
                       AND PRMARCPEDCOL.NRORG = ITEMPEDCOL.NRORG  
                      LEFT JOIN (SELECT CDPRODCOMPL, 
                                        CDFORNECED, 
                                        VRPERVARPREPRFO, 
                                        VRPERVARDESCPRFO, 
                                        NRORG
                                   FROM PRODFORNCOMP
                                  WHERE PRODFORNCOMP.CDFORNECED = P_CDFORNECED) PRODFORNCOMP
                        ON PRMARCPEDCOL.CDPRODUTO = PRODFORNCOMP.CDPRODCOMPL
                       AND PRMARCPEDCOL.NRORG = PRODFORNCOMP.NRORG
                     WHERE PRMARCPEDCOL.CDFILIAL = P_CDFILIAL
                       AND PRMARCPEDCOL.NRPEDIDOCOL = P_NRPEDIDOCOL
                       AND PRMARCPEDCOL.NRORG = P_NRORG)
    LOOP
        OUT_RECORD.IDORDPLCOT        := V_IDORDPLCOT;
        OUT_RECORD.IDPRODINCLFOR     := C_ITENS.IDPRODINCLFOR;
        OUT_RECORD.CDFILIAL    		 := C_ITENS.CDFILIAL;			
        OUT_RECORD.VRPRECREN         := NVL(C_ITENS.VRPRECREN, 0); 
        OUT_RECORD.NRPEDIDOCOL       := C_ITENS.NRPEDIDOCOL;
        OUT_RECORD.QTDISPPRODMARC    := NVL(C_ITENS.QTDISPPRODMARC, 0);
        OUT_RECORD.VRPRECUNIPRMARC   := C_ITENS.VRPRECUNIPRMARC;
        OUT_RECORD.VRULTPRECPRMARC   := C_ITENS.VRULTPRECPRMARC;
        OUT_RECORD.VRPRECOOBJETIVO   := C_ITENS.VRPRECOOBJETIVO;
        OUT_RECORD.DSOBSRENEGOCIA    := C_ITENS.DSOBSRENEGOCIA;
        OUT_RECORD.IDITPEDPRIONEG    := C_ITENS.IDITPEDPRIONEG;
        OUT_RECORD.NRORG             := C_ITENS.NRORG;
        OUT_RECORD.CDPRODUTO         := C_ITENS.CDPRODUTO;
        OUT_RECORD.CDARVPROD         := C_ITENS.CDARVPROD;
        OUT_RECORD.CDPRODESTO        := C_ITENS.CDPRODESTO;
        OUT_RECORD.NMPRODUTO         := C_ITENS.NMPRODUTO;
        OUT_RECORD.SGUNIDADE         := C_ITENS.SGUNIDADE;
        OUT_RECORD.DSOBSNUTR         := C_ITENS.DSOBSNUTR;
        OUT_RECORD.CDMARCA           := C_ITENS.CDMARCA;
        OUT_RECORD.NMMARCA           := C_ITENS.NMMARCA;
        OUT_RECORD.VRPERVARPREPRFO   := NVL(C_ITENS.VRPERVARPREPRFO, C_ITENS.VRPERVARPREC);
        OUT_RECORD.VRPERVARDESCPRFO  := NVL(C_ITENS.VRPERVARDESCPRFO, C_ITENS.VRPERVARDESCPREC);
        OUT_RECORD.QTPRODPEDCOL      := C_ITENS.QTPRODPEDCOL;
        OUT_RECORD.IDITEMPEDCOLALT   := C_ITENS.IDITEMPEDCOLALT;
        OUT_RECORD.VRPERDESPEDCOL    := C_ITENS.VRPERDESPEDCOL;
        OUT_RECORD.IDRENEGOCIAPCOL   := C_ITENS.IDRENEGOCIAPCOL;
        
        BEGIN
            SELECT PRODUTO.NMPRODUTO NMPRODUTOOL,
                   PRODUTO.CDARVPROD
              INTO V_NMPRODUTOOL, 
                   V_CDARVPRODOL
              FROM RELACPRODOL
             INNER JOIN PRODUTO ON PRODUTO.CDARVPROD = RELACPRODOL.CDPRODARVOL
             WHERE RELACPRODOL.CDPRARVORIG = C_ITENS.CDARVPROD
               AND RELACPRODOL.CDMARCA = C_ITENS.CDMARCA;
               
            OUT_RECORD.CDARVPRODOL := V_CDARVPRODOL;
            OUT_RECORD.NMPRODUTOOL := V_NMPRODUTOOL;
            
            BEGIN
    		    SELECT QTDIASPRAZOEXPED, 
    		           VRMINFORNREG, 
    		           QTMINFORNREG
        	      INTO V_QTDIASPRAZOEXPED, 
        	           V_VRMINFORNREG, 
        	           V_QTMINFORNREG
                  FROM PRAZOFORNEXPEDFILPROD PZ
                  JOIN PRODUTO PR ON PZ.CDPRODUTO = PR.CDPRODUTO
                  JOIN (SELECT MAX(PR.CDARVPROD) CDARVPROD
                          FROM PRAZOFORNEXPEDFILPROD PZ
                          JOIN PRODUTO PR ON PZ.CDPRODUTO = PR.CDPRODUTO
                         WHERE PZ.CDFORNECED = P_CDFORNECED
                           AND PZ.CDFILIAL = P_CDFILIAL
                           AND V_CDARVPRODOL LIKE PR.CDARVPROD || '%') PP 
                    ON PR.CDARVPROD = PP.CDARVPROD
                 WHERE PZ.CDFORNECED = P_CDFORNECED
                   AND PZ.CDFILIAL = P_CDFILIAL;
            
                OUT_RECORD.QTDIASPRAZOEXPED := V_QTDIASPRAZOEXPED;
                OUT_RECORD.VRMINFORNREG     := V_VRMINFORNREG;
                OUT_RECORD.QTMINFORNREG     := V_QTMINFORNREG;
            EXCEPTION
                WHEN NO_DATA_FOUND THEN
                    OUT_RECORD.QTDIASPRAZOEXPED := NULL;
                    OUT_RECORD.VRMINFORNREG     := C_ITENS.VRMINAUTFOR;
                    OUT_RECORD.QTMINFORNREG     := C_ITENS.QTMINAUTFOT;
            END;
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
                OUT_RECORD.CDARVPRODOL := NULL;
                OUT_RECORD.NMPRODUTOOL := NULL;
                
                OUT_RECORD.QTDIASPRAZOEXPED := NULL;
                OUT_RECORD.VRMINFORNREG     := C_ITENS.VRMINAUTFOR;
                OUT_RECORD.QTMINFORNREG     := C_ITENS.QTMINAUTFOT;
        END;

        PIPE ROW (OUT_RECORD);
    END LOOP;
END SELECT_PEDCOLETA;
/
