DROP TYPE ITMAPURPRECENTR_TABLE
/

DROP TYPE ITMAPURPRECENTR_TYPE
/

CREATE TYPE ITMAPURPRECENTR_TYPE AS OBJECT (
   CDCENTITMAP      VARCHAR2(4),
   DTENTRAPUT       DATE,
   CDPRODITMAP      VARCHAR2(10),
   NRCOLEITMAP      VARCHAR2(10),
   NRSEQITMAP       VARCHAR2(10),
   QTACOMP          FLOAT,
   CDFILIAP         VARCHAR2(4),
   QTSOLACOMP       FLOAT,
   CDFORNITMAP      VARCHAR2(21),
   CDMARCITMAP      VARCHAR2(5),
   NMFANTFORN        VARCHAR2(40),
   NMMARCA          VARCHAR2(20),
   CDREGITMAP       VARCHAR2(5),
   VRPRECUNIAP      FLOAT,
   VRPRECECOAP      FLOAT,
   VRPRECONPIAP     FLOAT,
   IDITMSELAPUR     VARCHAR2(1),
   IDMOTIVPRESC     VARCHAR2(10),
   VRULTCOTACAO     FLOAT,
   VRVENDA          FLOAT,
   VRCOTACAO        FLOAT,
   VRIMPOSTO        FLOAT,
   VRPRECUNI        FLOAT,
   VRTOTAL          FLOAT)
/

CREATE TYPE ITMAPURPRECENTR_TABLE AS TABLE OF ITMAPURPRECENTR_TYPE
/

CREATE OR REPLACE FUNCTION GETITMAPURPRECENTR(P_CDCENTCMP IN VARCHAR2,
                                              P_NRSEQAPUR  IN VARCHAR2)
  RETURN ITMAPURPRECENTR_TABLE PIPELINED AS L_ITMAPURPRECENTR_TYPE ITMAPURPRECENTR_TYPE;
  V_IDTIPOAPUR   PARASUPRI.IDTIPOAPUR%TYPE;
  V_VRIMPOSTO    FLOAT(126);
  V_VRVENDA      FLOAT(126);
  V_VRULTCOTACAO FLOAT(126);
BEGIN
  BEGIN
    SELECT
      NVL(IDTIPOAPUR, '0')
    INTO
      V_IDTIPOAPUR
    FROM
      PARASUPRI
    WHERE
      PARASUPRI.CDFILIAL = P_CDCENTCMP;
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      V_IDTIPOAPUR := '0';
  END;
  FOR C_ITMAPURPREC IN (SELECT ITMAPURPREC.CDCENTITMAP, ITMAPURPREC.DTENTRAPUT, ITMAPURPREC.CDPRODITMAP,
                               ITMAPURPREC.NRCOLEITMAP, ITMAPURPREC.NRSEQITMAP, ITMAPURPREC.QTACOMP,
                               ITMAPURPREC.CDFILIAP, ITMAPURPREC.QTSOLACOMP, ITMAPURPREC.CDFORNITMAP,
                               ITMAPURPREC.CDMARCITMAP, FORNECEDOR.NMFANTFORN, MARCA.NMMARCA,
                               ITMAPURPREC.CDREGITMAP, ITMAPURPREC.VRPRECUNIAP, ITMAPURPREC.VRPRECECOAP,
                               ITMAPURPREC.VRPRECONPIAP, ITMAPURPREC.IDITMSELAPUR, ITMAPURPREC.IDMOTIVPRESC,
                               ITMAPURPREC.VRPRECUNIAP VRCOTACAO,
                               CASE
                                  WHEN V_IDTIPOAPUR = '0' THEN ITMAPURPREC.VRPRECUNIAP
                                  WHEN V_IDTIPOAPUR = '1' THEN ITMAPURPREC.VRPRECECOAP
                                  ELSE ITMAPURPREC.VRPRECONPIAP
                               END VRPRECUNI,
                               CASE
                                  WHEN V_IDTIPOAPUR = '0' THEN ITMAPURPREC.VRPRECUNIAP
                                  WHEN V_IDTIPOAPUR = '1' THEN ITMAPURPREC.VRPRECECOAP
                                  ELSE ITMAPURPREC.VRPRECONPIAP
                               END*ITMAPURPREC.QTSOLACOMP VRTOTAL
                          FROM ITMAPURPREC, FORNECEDOR, MARCA
                         WHERE ITMAPURPREC.CDCENTITMAP  = P_CDCENTCMP
                           AND ITMAPURPREC.NRSEQITMAP   = P_NRSEQAPUR
                           AND ITMAPURPREC.CDMARCITMAP  = MARCA.CDMARCA
                           AND ITMAPURPREC.CDFORNITMAP  = FORNECEDOR.CDFORNECED
                         ORDER BY ITMAPURPREC.NRCOLEITMAP)
  LOOP
    SELECT NVL(MIN(CASE
                      WHEN V_IDTIPOAPUR = '0' THEN ITEMCOLE.VRPRECUNIITM
                      WHEN V_IDTIPOAPUR = '1' THEN ITEMCOLE.VRPRECECOITM
                      ELSE ITEMCOLE.VRPRECOITMPI
                   END), 0)
      INTO V_VRULTCOTACAO
      FROM ITEMCOLE
     WHERE ITEMCOLE.CDREGIAO    = C_ITMAPURPREC.CDREGITMAP
       AND ITEMCOLE.CDPRODUTO   = C_ITMAPURPREC.CDPRODITMAP
       AND ITEMCOLE.CDMARCA     = C_ITMAPURPREC.CDMARCITMAP
       AND ITEMCOLE.CDFILIAL    = C_ITMAPURPREC.CDCENTITMAP
       AND ITEMCOLE.NRCOLEPRECO = (SELECT MAX(NRCOLEPRECO)
                                     FROM ITEMCOLE I
                                    WHERE I.CDFILIAL     = ITEMCOLE.CDFILIAL
                                      AND I.NRCOLEPRECO  = ITEMCOLE.NRCOLEPRECO
                                      AND I.CDMARCA      = ITEMCOLE.CDMARCA
                                      AND I.CDREGIAO     = ITEMCOLE.CDREGIAO
                                      AND I.CDFORNECED   = ITEMCOLE.CDFORNECED
                                      AND I.CDPRODUTO    = ITEMCOLE.CDPRODUTO
                                      AND I.NRCOLEPRECO  <> C_ITMAPURPREC.NRCOLEITMAP
                                      AND I.CDREGIAO     = C_ITMAPURPREC.CDREGITMAP
                                      AND I.CDPRODUTO    = C_ITMAPURPREC.CDPRODITMAP
                                      AND I.CDMARCA      = C_ITMAPURPREC.CDMARCITMAP
                                      AND I.CDFILIAL     = C_ITMAPURPREC.CDCENTITMAP);
    BEGIN
      SELECT
        NVL(SUM(CASE ITMAPURPRECIMPO.IDTRATAMENTO WHEN 'D' THEN ITMAPURPRECIMPO.VRIMPOSTO*-1 ELSE ITMAPURPRECIMPO.VRIMPOSTO END), 0)
      INTO
        V_VRIMPOSTO
      FROM
        ITMAPURPRECIMPO
      WHERE
        ITMAPURPRECIMPO.CDCENTITMAP = C_ITMAPURPREC.CDCENTITMAP AND
        ITMAPURPRECIMPO.NRCOLEITMAP = C_ITMAPURPREC.NRCOLEITMAP AND
        ITMAPURPRECIMPO.CDREGITMAP  = C_ITMAPURPREC.CDREGITMAP  AND
        ITMAPURPRECIMPO.NRSEQITMAP  = C_ITMAPURPREC.NRSEQITMAP  AND
        ITMAPURPRECIMPO.CDFILIAP    = C_ITMAPURPREC.CDFILIAP    AND
        ITMAPURPRECIMPO.CDPRODITMAP = C_ITMAPURPREC.CDPRODITMAP AND
        ITMAPURPRECIMPO.CDFORNITMAP = C_ITMAPURPREC.CDFORNITMAP AND
        ITMAPURPRECIMPO.IDTRATAMENTO IN ('A', 'D');
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        V_VRIMPOSTO := 0;
    END;
    BEGIN
       SELECT
         MIN(ITEMAUTF.VRPREUNIAF)
       INTO
          V_VRVENDA
       FROM
         ITEMAUTF, FILIAL
       WHERE
         ITEMAUTF.CDFILDEST   = FILIAL.CDFILIAL            AND
         ITEMAUTF.CDMARCA     = C_ITMAPURPREC.CDMARCITMAP  AND
         ITEMAUTF.CDPRODUTO   = C_ITMAPURPREC.CDPRODITMAP  AND
         FILIAL.CDREGIAO      = C_ITMAPURPREC.CDREGITMAP   AND
         NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL)   = C_ITMAPURPREC.CDCENTITMAP AND
         ITEMAUTF.DTPROGENTAF = (SELECT MAX(I.DTPROGENTAF)
                                   FROM ITEMAUTF I
                                  WHERE I.CDFILDEST     = ITEMAUTF.CDFILDEST         AND
                                        I.CDFILLANC     = ITEMAUTF.CDFILLANC         AND
                                        I.NRAUTOFORN    = ITEMAUTF.NRAUTOFORN        AND
                                        I.CDMARCA       = ITEMAUTF.CDMARCA           AND
                                        I.CDPRODUTO     = ITEMAUTF.CDPRODUTO         AND
                                        I.DTPROGENTAF   = ITEMAUTF.DTPROGENTAF       AND
                                        I.CDMARCA       = C_ITMAPURPREC.CDMARCITMAP  AND
                                        I.CDPRODUTO     = C_ITMAPURPREC.CDPRODITMAP  AND
                                        FILIAL.CDREGIAO = C_ITMAPURPREC.CDREGITMAP   AND
                                        I.DTPROGENTAF   <= SYSDATE+366);
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        V_VRVENDA := 0;
    END;
    L_ITMAPURPRECENTR_TYPE := ITMAPURPRECENTR_TYPE
                                (
                                  C_ITMAPURPREC.CDCENTITMAP,  C_ITMAPURPREC.DTENTRAPUT,   C_ITMAPURPREC.CDPRODITMAP,
                                  C_ITMAPURPREC.NRCOLEITMAP,  C_ITMAPURPREC.NRSEQITMAP,   C_ITMAPURPREC.QTACOMP,
                                  C_ITMAPURPREC.CDFILIAP,     C_ITMAPURPREC.QTSOLACOMP,   C_ITMAPURPREC.CDFORNITMAP,
                                  C_ITMAPURPREC.CDMARCITMAP,  C_ITMAPURPREC.NMFANTFORN,   C_ITMAPURPREC.NMMARCA,
                                  C_ITMAPURPREC.CDREGITMAP,   C_ITMAPURPREC.VRPRECUNIAP,  C_ITMAPURPREC.VRPRECECOAP,
                                  C_ITMAPURPREC.VRPRECONPIAP, C_ITMAPURPREC.IDITMSELAPUR, C_ITMAPURPREC.IDMOTIVPRESC,
                                  V_VRULTCOTACAO,             V_VRVENDA,                  C_ITMAPURPREC.VRCOTACAO,
                                  V_VRIMPOSTO,                C_ITMAPURPREC.VRPRECUNI,    C_ITMAPURPREC.VRTOTAL
                                );
    PIPE ROW (L_ITMAPURPRECENTR_TYPE);
  END LOOP;
  RETURN;
END;
/