CREATE OR REPLACE PROCEDURE GRAVA_PARAMPRODSUP( P_OPERACAO     IN VARCHAR2,
                                                P_NRSEQPARPROD IN PARAMPRODSUP.NRSEQPARPROD%TYPE,
                                                P_CDFILIAL     IN VARCHAR2,
                                                P_CDPRODINI    IN VARCHAR2,
                                                P_CDPRODFIN    IN VARCHAR2,
                                                P_CDPRODUTO    IN PRODUTO.CDPRODUTO%TYPE,
                                                P_CDFORNECED   IN FORNECEDOR.CDFORNECED%TYPE,
                                                P_CDFILICTRL   IN FILIAL.CDFILIAL%TYPE,
                                                P_CDFILIOPELOG IN FILIAL.CDFILIAL%TYPE,
                                                P_IDFILINEGREG IN PARAMPRODSUP.IDFILINEGREG%TYPE,
                                                P_IDFILINEGCOR IN PARAMPRODSUP.IDFILINEGCOR%TYPE,
                                                P_IDPRODWEB    IN PARAMPRODSUP.IDPRODWEB%TYPE,
                                                P_NRCOLEPRECO  IN COLETAPR.NRCOLEPRECO%TYPE,
                                                P_CDFILCOLETA  IN FILIAL.CDFILIAL%TYPE,
                                                P_CDREGIAO     IN VARCHAR2,
                                                P_CDGRUPPROD   IN GRUPPROD.CDGRUPPROD%TYPE,
                                                P_CDSUBGRPROD  IN VARCHAR2,
                                                P_CDFILISUBGR  IN VARCHAR2,
                                                P_IDACORDOFORN IN VARCHAR2,
                                                P_CDFILCOTA    IN FILIAL.CDFILIAL%TYPE,
                                                P_IDOPERLOG    IN VARCHAR2,
                                                P_RESULTADO    OUT VARCHAR2)
AS
  V_TCDSUBGRUPO      VARCHAR2(1);
  V_TCDPRODUTO       VARCHAR2(1);
  V_TCDFILIAL        VARCHAR2(1);
  V_TCDREGIAO        VARCHAR2(1);
  V_IDFILINEGREG     VARCHAR2(1);
  V_IDFILINEGCOR     VARCHAR2(1);
  V_CODIGO           VARCHAR2(20);
  V_CODIGO_AUX       VARCHAR2(20);
  V_NRSEQPARPROD     VARCHAR2(20);
  V_OPERACAO         VARCHAR2(50); 
  V_IDUTILCONSSOLIOL VARCHAR2(1);
  V_CDFORNOPELOG     VARCHAR2(21);  
  V_RESULTADO        VARCHAR2(200);
  V_CONTADOR         NUMBER := 0;
  V_IDSISDOS         VARCHAR2(1);

BEGIN
  IF ((P_OPERACAO = '0') OR --Compra via Web
      (P_OPERACAO = '1') OR --Acordo com Fornecedor
      (P_OPERACAO = '2') OR --Negociacao Regional 
      (P_OPERACAO = '3') OR --negociacao Corporativa
      (P_OPERACAO = '4'))   --Operador Logistico
  THEN
    IF P_CDSUBGRPROD IS NULL THEN
      V_TCDSUBGRUPO := 'T';
    ELSE
      V_TCDSUBGRUPO := '';
    END IF;
    
    IF ((P_CDPRODINI IS NULL) AND (P_CDPRODFIN IS NULL)) THEN
      V_TCDPRODUTO := 'T';
    ELSE
      V_TCDPRODUTO := '';
    END IF;  
    
    IF ((P_CDFILIAL IS NULL) OR (P_CDFILIAL = 'T')) THEN
      V_TCDFILIAL := 'T';
    ELSE
      V_TCDFILIAL := '';    
    END IF;
    
    IF ((P_CDREGIAO IS NULL) OR (P_CDREGIAO = 'T')) THEN
      V_TCDREGIAO := 'T';
    ELSE
      V_TCDREGIAO := '';    
    END IF;
    SELECT MAX(IDSISDOS)
      INTO V_IDSISDOS
      FROM PARAMGERAL;
    FOR C_FILIAL IN (SELECT CDFILIAL, CDREGIAO
                       FROM FILIAL
                      WHERE CDREGIAO IS NOT NULL
                        AND NVL(FILIAL.IDFUNCAOFILI, 'X') <> 'O'
                        AND ((INSTR(P_CDFILIAL, FILIAL.CDFILIAL) > 0) OR (V_TCDFILIAL  = 'T'))
                        AND ((INSTR(P_CDREGIAO, FILIAL.CDREGIAO) > 0) OR (V_TCDREGIAO = 'T')))
    LOOP
      IF P_OPERACAO = '4' THEN --Operador Logistico
        IF P_IDOPERLOG = 'S' THEN
          FOR C_PRODUTO IN (SELECT PRODUTO.CDPRODUTO, PRSUBGRPROD.CDSUBGRPROD
                              FROM PRSUBGRPROD, PRODUTO, FILIAL, PARASUPRI
                             WHERE ((CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN) OR (V_TCDPRODUTO = 'T'))
                               AND ((INSTR(P_CDSUBGRPROD, CDSUBGRPROD) > 0) OR (V_TCDSUBGRUPO = 'T'))
                               AND PRSUBGRPROD.CDGRUPPROD = P_CDGRUPPROD
                               AND CDPRODESTO IS NOT NULL
                               AND PRSUBGRPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                               AND CDFILISUBGR = 'P'
                               AND FILIAL.CDFILIAL = P_CDFILIOPELOG
                               AND PARASUPRI.CDFILIAL = NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL)
                               AND PRSUBGRPROD.CDSUBGRPROD <> PARASUPRI.CDSUBGRARVOR
                               AND NOT EXISTS (SELECT 1
                                                 FROM PARAMPRODSUP
                                                WHERE PARAMPRODSUP.CDFILIAL     = C_FILIAL.CDFILIAL
                                                  AND PARAMPRODSUP.CDPRODUTO    = PRODUTO.CDPRODUTO
                                                  AND PARAMPRODSUP.CDFILIOPELOG = P_CDFILIOPELOG
                                                  AND PARAMPRODSUP.CDGRUPPROD   = PRSUBGRPROD.CDGRUPPROD
                                                  AND PARAMPRODSUP.CDSUBGRPROD  = PRSUBGRPROD.CDSUBGRPROD
                                                  AND PARAMPRODSUP.CDFILISUBGR  = 'P')
                               AND (P_CDFORNECED IS NULL OR EXISTS(SELECT PRODFORNCOMP.CDFORNECED
                                                                     FROM PRODFORNCOMP
                                                                    WHERE PRODFORNCOMP.CDFORNECED = P_CDFORNECED
                                                                      AND PRSUBGRPROD.CDPRODUTO   = PRODFORNCOMP.CDPRODCOMPL))
                               AND (((V_IDSISDOS <> '3') OR (V_TCDFILIAL IS NULL)) 
                                OR  ((V_IDSISDOS = '3') AND EXISTS (SELECT 1
                                                                      FROM TIPOOPEROPL
                                                                     WHERE TIPOOPEROPL.CDFILIOPELOG = P_CDFILIOPELOG
                                                                       AND TIPOOPEROPL.CDFILDEST    = C_FILIAL.CDFILIAL
                                                                       AND V_TCDFILIAL = 'T')))
                                )
          LOOP
            DELETE FROM PARAMPRODSUP
             WHERE CDFILIOPELOG IS NOT NULL
               AND CDGRUPPROD   = P_CDGRUPPROD
               AND CDSUBGRPROD  = C_PRODUTO.CDSUBGRPROD
               AND CDFILIOPELOG <> P_CDFILIOPELOG
               AND CDPRODUTO    = C_PRODUTO.CDPRODUTO
               AND CDFILISUBGR  = 'P'
               AND CDFILIAL     = C_FILIAL.CDFILIAL; /*TEKNISA 25/05*/
            GRAVA_PARAMPRODSUP('INSERT',
                               V_CODIGO,
                               C_FILIAL.CDFILIAL,
                               P_CDPRODINI,
                               P_CDPRODFIN,
                               C_PRODUTO.CDPRODUTO,
                               P_CDFORNECED,
                               P_CDFILICTRL,
                               P_CDFILIOPELOG,
                               P_IDFILINEGREG,
                               P_IDFILINEGCOR,
                               P_IDPRODWEB,
                               P_NRCOLEPRECO,
                               P_CDFILCOLETA,
                               C_FILIAL.CDREGIAO,
                               P_CDGRUPPROD,
                               C_PRODUTO.CDSUBGRPROD,
                               P_CDFILISUBGR,
                               P_IDACORDOFORN,
                               P_CDFILCOTA,
                               P_IDOPERLOG,
                               V_RESULTADO);
            GRAVA_PARAMPRODSUP('PARTFILI',
                               V_CODIGO,
                               C_FILIAL.CDFILIAL,
                               P_CDPRODINI,
                               P_CDPRODFIN,
                               C_PRODUTO.CDPRODUTO,
                               P_CDFORNECED,
                               P_CDFILICTRL,
                               P_CDFILIOPELOG,
                               P_IDFILINEGREG,
                               P_IDFILINEGCOR,
                               P_IDPRODWEB,
                               P_NRCOLEPRECO,
                               P_CDFILCOLETA,
                               C_FILIAL.CDREGIAO,
                               P_CDGRUPPROD,
                               C_PRODUTO.CDSUBGRPROD,
                               P_CDFILISUBGR,
                               P_IDACORDOFORN,
                               P_CDFILCOTA,
                               P_IDOPERLOG,
                               V_RESULTADO);
             V_CONTADOR := V_CONTADOR + 1;
          END LOOP;
        ELSIF P_IDOPERLOG = 'N' THEN
          FOR C_PRODUTO IN (SELECT PRODUTO.CDPRODUTO, PRSUBGRPROD.CDSUBGRPROD
                              FROM PRSUBGRPROD, PRODUTO, FILIAL, PARASUPRI
                             WHERE ((CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN) OR (V_TCDPRODUTO = 'T'))
                               AND ((INSTR(P_CDSUBGRPROD, CDSUBGRPROD) > 0) OR (V_TCDSUBGRUPO = 'T'))
                               AND PRSUBGRPROD.CDGRUPPROD = P_CDGRUPPROD
                               AND CDPRODESTO IS NOT NULL
                               AND PRSUBGRPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                               AND CDFILISUBGR = 'P'
                               AND FILIAL.CDFILIAL = P_CDFILIOPELOG
                               AND PARASUPRI.CDFILIAL = NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL)
                               AND PRSUBGRPROD.CDSUBGRPROD <> PARASUPRI.CDSUBGRARVOR
                               AND EXISTS (SELECT 1
                                             FROM PARAMPRODSUP
                                            WHERE PARAMPRODSUP.CDFILIAL     = C_FILIAL.CDFILIAL
                                              AND PARAMPRODSUP.CDPRODUTO    = PRODUTO.CDPRODUTO
                                              AND PARAMPRODSUP.CDFILIOPELOG = P_CDFILIOPELOG
                                              AND PARAMPRODSUP.CDGRUPPROD   = PRSUBGRPROD.CDGRUPPROD
                                              AND PARAMPRODSUP.CDSUBGRPROD  = PRSUBGRPROD.CDSUBGRPROD
                                              AND PARAMPRODSUP.CDFILISUBGR  = 'P')
                               AND (P_CDFORNECED IS NULL OR EXISTS(SELECT PRODFORNCOMP.CDFORNECED
                                                                     FROM PRODFORNCOMP
                                                                    WHERE PRODFORNCOMP.CDFORNECED = P_CDFORNECED
                                                                      AND PRSUBGRPROD.CDPRODUTO   = PRODFORNCOMP.CDPRODCOMPL)))
          LOOP
            DELETE FROM PARAMPRODSUP
             WHERE CDFILIOPELOG IS NOT NULL
               AND CDGRUPPROD   = P_CDGRUPPROD
               AND CDSUBGRPROD  = C_PRODUTO.CDSUBGRPROD
               AND CDFILIAL     = C_FILIAL.CDFILIAL
               AND CDPRODUTO    = C_PRODUTO.CDPRODUTO
               AND CDFILISUBGR  = 'P'
               AND CDFILIAL     = C_FILIAL.CDFILIAL; /*TEKNISA 25/05*/
            GRAVA_PARAMPRODSUP('PARTFILI',
                               V_CODIGO,
                               C_FILIAL.CDFILIAL,
                               P_CDPRODINI,
                               P_CDPRODFIN,
                               C_PRODUTO.CDPRODUTO,
                               P_CDFORNECED,
                               P_CDFILICTRL,
                               P_CDFILIOPELOG,
                               P_IDFILINEGREG,
                               P_IDFILINEGCOR,
                               P_IDPRODWEB,
                               P_NRCOLEPRECO,
                               P_CDFILCOLETA,
                               C_FILIAL.CDREGIAO,
                               P_CDGRUPPROD,
                               C_PRODUTO.CDSUBGRPROD,
                               P_CDFILISUBGR,
                               P_IDACORDOFORN,
                               P_CDFILCOTA,
                               P_IDOPERLOG,
                               V_RESULTADO);
             V_CONTADOR := V_CONTADOR + 1;
          END LOOP;
        END IF;
      ELSIF P_OPERACAO = '0' THEN --Compra via Web
        FOR C_PRODUTO IN ( SELECT DISTINCT PRSUBGRPROD.CDPRODUTO
                             FROM PRSUBGRPROD, PRODUTO
                            WHERE PRSUBGRPROD.CDFILISUBGR = 'P'
                              AND PRSUBGRPROD.CDGRUPPROD  = P_CDGRUPPROD
                              AND PRSUBGRPROD.CDSUBGRPROD = P_CDSUBGRPROD
                              AND PRSUBGRPROD.CDPRODUTO   = PRODUTO.CDPRODUTO
                              AND P_IDPRODWEB = 'S'
                              AND NOT EXISTS (SELECT 1
                                               FROM PARAMPRODSUP
                                              WHERE PARAMPRODSUP.CDFILIAL     = C_FILIAL.CDFILIAL
                                                AND PARAMPRODSUP.CDPRODUTO    = PRODUTO.CDPRODUTO
                                                AND PARAMPRODSUP.CDFORNECED   = P_CDFORNECED
                                                AND PARAMPRODSUP.IDPRODWEB    = 'S'
                                                AND PARAMPRODSUP.CDFILISUBGR  = 'P')
                              AND (P_CDFORNECED IS NULL OR EXISTS(SELECT PRODFORNCOMP.CDFORNECED
                                                                    FROM PRODFORNCOMP
                                                                   WHERE PRODFORNCOMP.CDFORNECED = P_CDFORNECED
                                                                     AND PRSUBGRPROD.CDPRODUTO   = PRODFORNCOMP.CDPRODCOMPL))
                           UNION
                           SELECT DISTINCT PRSUBGRPROD.CDPRODUTO
                             FROM PRSUBGRPROD, PRODUTO
                            WHERE PRSUBGRPROD.CDFILISUBGR = 'P'
                              AND PRSUBGRPROD.CDGRUPPROD  = P_CDGRUPPROD
                              AND PRSUBGRPROD.CDSUBGRPROD = P_CDSUBGRPROD
                              AND PRSUBGRPROD.CDPRODUTO   = PRODUTO.CDPRODUTO
                              AND P_IDPRODWEB = 'N'
                              AND EXISTS (SELECT 1
                                            FROM PARAMPRODSUP
                                           WHERE PARAMPRODSUP.CDFILIAL     = C_FILIAL.CDFILIAL
                                             AND PARAMPRODSUP.CDPRODUTO    = PRODUTO.CDPRODUTO
                                             AND PARAMPRODSUP.CDFORNECED   = P_CDFORNECED
                                             AND PARAMPRODSUP.IDPRODWEB    = 'S'
                                             AND PARAMPRODSUP.CDFILISUBGR  = 'P')
                              AND (P_CDFORNECED IS NULL OR EXISTS(SELECT PRODFORNCOMP.CDFORNECED
                                                                    FROM PRODFORNCOMP
                                                                   WHERE PRODFORNCOMP.CDFORNECED = P_CDFORNECED
                                                                     AND PRSUBGRPROD.CDPRODUTO   = PRODFORNCOMP.CDPRODCOMPL)))
        LOOP
          V_CODIGO := '';
          BEGIN
            SELECT NRSEQPARPROD
              INTO V_CODIGO
              FROM PARAMPRODSUP
             WHERE PARAMPRODSUP.CDFORNECED = P_CDFORNECED
               AND PARAMPRODSUP.CDPRODUTO  = C_PRODUTO.CDPRODUTO
               AND PARAMPRODSUP.IDPRODWEB  IS NOT NULL
               AND PARAMPRODSUP.CDFILIAL = C_FILIAL.CDFILIAL;
          EXCEPTION
            WHEN NO_DATA_FOUND THEN
              V_CODIGO := '';
          END;
          IF V_CODIGO IS NOT NULL THEN
            V_OPERACAO := 'UPDATE';
          ELSE
            V_OPERACAO := 'INSERT';
          END IF;
          GRAVA_PARAMPRODSUP(V_OPERACAO,
                             V_CODIGO,
                             C_FILIAL.CDFILIAL,
                             P_CDPRODINI,
                             P_CDPRODFIN,
                             C_PRODUTO.CDPRODUTO,
                             P_CDFORNECED,
                             P_CDFILICTRL,
                             P_CDFILIOPELOG,
                             P_IDFILINEGREG,
                             P_IDFILINEGCOR,
                             P_IDPRODWEB,
                             P_NRCOLEPRECO,
                             P_CDFILCOLETA,
                             C_FILIAL.CDREGIAO,
                             P_CDGRUPPROD,
                             P_CDSUBGRPROD,
                             P_CDFILISUBGR,
                             P_IDACORDOFORN,
                             P_CDFILCOTA,
                             P_IDOPERLOG,
                             V_RESULTADO);
           V_CONTADOR := V_CONTADOR + 1;
        END LOOP;
      ELSIF P_OPERACAO = '1' THEN --Acordo com Fornecedor
        FOR C_PRODUTO IN ( SELECT DISTINCT PRSUBGRPROD.CDPRODUTO
                             FROM PRSUBGRPROD, PRODUTO
                            WHERE ((PRODUTO.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN) OR (V_TCDPRODUTO = 'T'))
                              AND PRSUBGRPROD.CDGRUPPROD  = P_CDGRUPPROD
                              AND PRSUBGRPROD.CDSUBGRPROD = P_CDSUBGRPROD
                              AND PRSUBGRPROD.CDPRODUTO   = PRODUTO.CDPRODUTO
                              AND (P_CDFORNECED IS NULL OR EXISTS(SELECT PRODFORNCOMP.CDFORNECED
                                                                    FROM PRODFORNCOMP
                                                                   WHERE PRODFORNCOMP.CDFORNECED = P_CDFORNECED
                                                                     AND PRSUBGRPROD.CDPRODUTO   = PRODFORNCOMP.CDPRODCOMPL)))
        LOOP
          GRAVA_PARAMPRODSUP('PARTFILI',
                             '',
                             C_FILIAL.CDFILIAL,
                             P_CDPRODINI,
                             P_CDPRODFIN,
                             C_PRODUTO.CDPRODUTO,
                             P_CDFORNECED,
                             P_CDFILICTRL,
                             P_CDFILIOPELOG,
                             P_IDFILINEGREG,
                             P_IDFILINEGCOR,
                             P_IDPRODWEB,
                             P_NRCOLEPRECO,
                             P_CDFILCOLETA,
                             C_FILIAL.CDREGIAO,
                             P_CDGRUPPROD,
                             P_CDSUBGRPROD,
                             P_CDFILISUBGR,
                             P_IDACORDOFORN,
                             P_CDFILCOTA,
                             P_IDOPERLOG,
                             V_RESULTADO);
            IF V_RESULTADO = 'S' THEN
               V_CONTADOR := V_CONTADOR + 1;
            ELSE
               P_RESULTADO := V_RESULTADO;
            END IF;
        END LOOP;
      ELSIF ((P_OPERACAO = '2') OR (P_OPERACAO = '3')) THEN --Negociacao Regional/Coporativa
        FOR C_PRODUTO IN ( SELECT DISTINCT PRSUBGRPROD.CDPRODUTO
                             FROM PRSUBGRPROD, PRODUTO
                            WHERE ((CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN) OR (V_TCDPRODUTO = 'T'))
                              AND PRSUBGRPROD.CDFILISUBGR = 'P'
                              AND PRSUBGRPROD.CDGRUPPROD  = P_CDGRUPPROD
                              AND PRSUBGRPROD.CDSUBGRPROD = P_CDSUBGRPROD
                              AND PRSUBGRPROD.CDPRODUTO   = PRODUTO.CDPRODUTO
                              AND (P_IDFILINEGREG = 'S' OR P_IDFILINEGCOR = 'S')
                              AND NOT EXISTS (SELECT 1
                                               FROM PARAMPRODSUP
                                              WHERE PARAMPRODSUP.CDPRODUTO    = PRODUTO.CDPRODUTO
                                                AND (P_IDFILINEGREG = 'S' OR P_IDFILINEGCOR = 'S')
                                                AND PARAMPRODSUP.CDFILISUBGR  = 'P'
                                                AND PARAMPRODSUP.CDFILICTRL   = P_CDFILICTRL
                                                AND PARAMPRODSUP.CDFILIAL     = C_FILIAL.CDFILIAL
                                                AND ((PARAMPRODSUP.IDFILINEGREG = 'S') OR (PARAMPRODSUP.IDFILINEGCOR = 'S')))
                              AND (P_CDFORNECED IS NULL OR EXISTS(SELECT PRODFORNCOMP.CDFORNECED
                                                                    FROM PRODFORNCOMP
                                                                   WHERE PRODFORNCOMP.CDFORNECED = P_CDFORNECED
                                                                     AND PRSUBGRPROD.CDPRODUTO   = PRODFORNCOMP.CDPRODCOMPL))
                           UNION
                           SELECT DISTINCT PRSUBGRPROD.CDPRODUTO
                             FROM PRSUBGRPROD, PRODUTO
                            WHERE ((CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN) OR (V_TCDPRODUTO = 'T'))
                              AND PRSUBGRPROD.CDFILISUBGR = 'P'
                              AND PRSUBGRPROD.CDGRUPPROD  = P_CDGRUPPROD
                              AND PRSUBGRPROD.CDSUBGRPROD = P_CDSUBGRPROD
                              AND PRSUBGRPROD.CDPRODUTO   = PRODUTO.CDPRODUTO
                              AND (P_IDFILINEGREG = 'N' OR P_IDFILINEGCOR = 'N')
                              AND EXISTS (SELECT 1
                                            FROM PARAMPRODSUP
                                           WHERE PARAMPRODSUP.CDPRODUTO    = PRODUTO.CDPRODUTO
                                             AND (P_IDFILINEGREG = 'N' OR P_IDFILINEGCOR = 'N')
                                             AND PARAMPRODSUP.CDFILISUBGR  = 'P'
                                             AND PARAMPRODSUP.CDFILICTRL   = P_CDFILICTRL
                                             AND PARAMPRODSUP.CDFILIAL     = C_FILIAL.CDFILIAL
                                             AND ((PARAMPRODSUP.IDFILINEGREG = 'S') OR (PARAMPRODSUP.IDFILINEGCOR = 'S')))
                              AND (P_CDFORNECED IS NULL OR EXISTS(SELECT PRODFORNCOMP.CDFORNECED
                                                                    FROM PRODFORNCOMP
                                                                   WHERE PRODFORNCOMP.CDFORNECED = P_CDFORNECED
                                                                     AND PRSUBGRPROD.CDPRODUTO   = PRODFORNCOMP.CDPRODCOMPL)))
        LOOP
          V_CODIGO     := '';
          V_CODIGO_AUX := '';
          BEGIN
            SELECT NRSEQPARPROD, IDFILINEGREG, IDFILINEGCOR
              INTO V_CODIGO, V_IDFILINEGREG, V_IDFILINEGCOR
              FROM PARAMPRODSUP
             WHERE (IDFILINEGREG = 'S' OR IDFILINEGCOR = 'S')
               AND CDFILIAL  = C_FILIAL.CDFILIAL
               AND CDPRODUTO = C_PRODUTO.CDPRODUTO;
          EXCEPTION
            WHEN NO_DATA_FOUND THEN
              V_CODIGO := '';
          END;
          IF V_CODIGO IS NULL THEN
            IF P_OPERACAO = '2' THEN --Negociacao Regional
              BEGIN
                SELECT NRSEQPARPROD
                  INTO V_CODIGO_AUX
                  FROM PARAMPRODSUP
                 WHERE PARAMPRODSUP.CDFILICTRL = P_CDFILICTRL
                   AND PARAMPRODSUP.IDFILINEGREG IS NOT NULL
                   AND CDFILIAL  = C_FILIAL.CDFILIAL
                   AND CDPRODUTO = C_PRODUTO.CDPRODUTO;
              EXCEPTION
                WHEN NO_DATA_FOUND THEN
                  V_CODIGO_AUX := '';
              END;
            ELSIF P_OPERACAO = '3' THEN  --Negociacao Corporativa
              BEGIN
                SELECT NRSEQPARPROD
                  INTO V_CODIGO_AUX
                  FROM PARAMPRODSUP
                 WHERE PARAMPRODSUP.CDFILICTRL = P_CDFILICTRL
                   AND PARAMPRODSUP.IDFILINEGCOR IS NOT NULL
                   AND CDFILIAL  = C_FILIAL.CDFILIAL
                   AND CDPRODUTO = C_PRODUTO.CDPRODUTO;
              EXCEPTION
                WHEN NO_DATA_FOUND THEN
                  V_CODIGO_AUX := '';
              END;
            END IF;
          END IF;
          IF ((V_CODIGO IS NULL) OR ((P_OPERACAO = '2') AND (P_IDFILINEGREG = 'N'))
                                 OR ((P_OPERACAO = '3') AND (P_IDFILINEGCOR = 'N'))) THEN
            IF V_CODIGO IS NULL THEN
              IF V_CODIGO_AUX IS NOT NULL THEN
                V_OPERACAO     := 'UPDATE';
                V_NRSEQPARPROD := V_CODIGO_AUX;
              ELSE
                V_OPERACAO     := 'INSERT';
                V_NRSEQPARPROD := V_CODIGO_AUX;
              END IF;
            ELSIF V_CODIGO IS NOT NULL THEN
              V_OPERACAO     := 'UPDATE';
              V_NRSEQPARPROD := V_CODIGO;
            END IF;
            GRAVA_PARAMPRODSUP(V_OPERACAO,
                               V_NRSEQPARPROD,
                               C_FILIAL.CDFILIAL,
                               P_CDPRODINI,
                               P_CDPRODFIN,
                               C_PRODUTO.CDPRODUTO,
                               P_CDFORNECED,
                               P_CDFILICTRL,
                               P_CDFILIOPELOG,
                               P_IDFILINEGREG,
                               P_IDFILINEGCOR,
                               P_IDPRODWEB,
                               P_NRCOLEPRECO,
                               P_CDFILCOLETA,
                               C_FILIAL.CDREGIAO,
                               P_CDGRUPPROD,
                               P_CDSUBGRPROD,
                               P_CDFILISUBGR,
                               P_IDACORDOFORN,
                               P_CDFILCOTA,
                               P_IDOPERLOG,
                               V_RESULTADO);
             V_CONTADOR := V_CONTADOR + 1;
          ELSIF ((V_CODIGO IS NOT NULL) OR ((P_OPERACAO = '2') AND (P_IDFILINEGREG = 'S'))
                                        OR ((P_OPERACAO = '3') AND (P_IDFILINEGCOR = 'S'))) THEN
            IF V_IDFILINEGREG = 'S' THEN
              P_RESULTADO := 'Existe_Regional';
            ELSIF V_IDFILINEGCOR = 'S' THEN
              P_RESULTADO := 'Existe_Corporativa';
            END IF;
            V_CONTADOR := V_CONTADOR + 1;
          END IF;
        END LOOP;
      END IF;
    END LOOP; --C_FILIAL
  ELSIF P_OPERACAO = 'UPDATE' THEN
    UPDATE PARAMPRODSUP
       SET NRSEQPARPROD = NVL(P_NRSEQPARPROD, NRSEQPARPROD),
           CDFILIAL     = NVL(P_CDFILIAL, CDFILIAL),
           CDPRODUTO    = NVL(P_CDPRODUTO, CDPRODUTO),
           CDFORNECED   = NVL(P_CDFORNECED, CDFORNECED),
           CDFILICTRL   = NVL(P_CDFILICTRL, CDFILICTRL),
           CDFILIOPELOG = NVL(P_CDFILIOPELOG, CDFILIOPELOG),
           IDFILINEGREG = NVL(P_IDFILINEGREG, IDFILINEGREG),
           IDFILINEGCOR = NVL(P_IDFILINEGCOR, IDFILINEGCOR),
           IDPRODWEB    = NVL(P_IDPRODWEB, IDPRODWEB),
           NRCOLEPRECO  = NVL(P_NRCOLEPRECO, NRCOLEPRECO),
           CDFILCOLETA  = NVL(P_CDFILCOLETA, CDFILCOLETA),
           CDREGIAO     = NVL(P_CDREGIAO, CDREGIAO),
           CDGRUPPROD   = NVL(P_CDGRUPPROD, CDGRUPPROD),
           CDSUBGRPROD  = NVL(P_CDSUBGRPROD, CDSUBGRPROD),
           CDFILISUBGR  = NVL(P_CDFILISUBGR, CDFILISUBGR)
     WHERE NRSEQPARPROD = P_NRSEQPARPROD;
  ELSIF P_OPERACAO = 'INSERT' THEN
    DELETE
      FROM PARAMPRODSUP
     WHERE CDFILIAL  = P_CDFILIAL
       AND CDPRODUTO = P_CDPRODUTO
       AND NVL(CDFILIOPELOG, 'W') <> 'W';
    NOVO_CODIGO_NT('PARAMPRODSUP', V_CODIGO);
    INSERT INTO PARAMPRODSUP
      (NRSEQPARPROD, CDFILIAL, CDPRODUTO, CDFORNECED, CDFILICTRL, CDFILIOPELOG,
      IDFILINEGREG, IDFILINEGCOR, IDPRODWEB, NRCOLEPRECO, CDFILCOLETA, CDREGIAO,
      CDGRUPPROD,CDSUBGRPROD, CDFILISUBGR)
    VALUES
      (V_CODIGO, P_CDFILIAL, P_CDPRODUTO, P_CDFORNECED, P_CDFILICTRL, P_CDFILIOPELOG,
      P_IDFILINEGREG, P_IDFILINEGCOR, P_IDPRODWEB, P_NRCOLEPRECO, P_CDFILCOLETA, P_CDREGIAO,
      P_CDGRUPPROD, P_CDSUBGRPROD, P_CDFILISUBGR);
  ELSIF P_OPERACAO = 'PARTFILI' THEN
    IF P_CDFILIOPELOG IS NOT NULL THEN
      BEGIN
        SELECT NVL(P.IDUTILCONSSOLIOL, 'N') IDUTILCONSSOLIOL
          INTO V_IDUTILCONSSOLIOL
          FROM PARASUPRI P, FILIAL F
         WHERE F.CDFILIAL = P_CDFILIAL
           AND NVL(F.CDFILCENTCMP, F.CDFILIAL) = P.CDFILIAL;
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          V_IDUTILCONSSOLIOL := '';
      END;
      IF V_IDUTILCONSSOLIOL = 'N' THEN
        BEGIN
        SELECT CDFORNOPELOG
          INTO V_CDFORNOPELOG
          FROM FILIAL
         WHERE CDFILIAL = P_CDFILIOPELOG;
        EXCEPTION
          WHEN NO_DATA_FOUND THEN
            V_CDFORNOPELOG := '';
        END;
        IF V_CDFORNOPELOG IS NOT NULL THEN
          DELETE FROM PARTFILI
           WHERE CDFILIAL    = P_CDFILIAL
             AND CDPRODUTO   = P_CDPRODUTO
             AND NVL(CDGRUPPROD, P_CDGRUPPROD)   = P_CDGRUPPROD
             AND NVL(CDSUBGRPROD, P_CDSUBGRPROD) = P_CDSUBGRPROD
             AND CDTIPPART IN ('4', '7');
          IF P_IDOPERLOG = 'S' THEN
            DELETE FROM PARTFILI
             WHERE CDFILIAL    = P_CDFILIAL
               AND CDPRODUTO   = P_CDPRODUTO
               AND CDTIPPART IN ('4', '7');
            INSERT INTO PARTFILI
              (CDPRODUTO, CDFILIAL, NRSEQPART, CDTIPPART, CDFORNECED)
            VALUES
              (P_CDPRODUTO, P_CDFILIAL, '1', '4', V_CDFORNOPELOG);
          END IF;
        END IF;
      END IF;
    ELSE
      IF P_IDACORDOFORN = 'S' THEN
        INSERT INTO PARTFILI(CDFILIAL, CDPRODUTO, CDTIPPART, NRSEQPART, CDFORNECED,
                             CDFILISUBGR, CDGRUPPROD, CDSUBGRPROD, CDFILCOTA, NRCOLEPRECO)
          (SELECT P_CDFILIAL, P_CDPRODUTO, '4', '1', P_CDFORNECED, 'P', P_CDGRUPPROD, P_CDSUBGRPROD, P_CDFILCOTA, P_NRCOLEPRECO
             FROM PARAMGERAL
            WHERE NOT EXISTS( SELECT PARTFILI.CDFORNECED
                                FROM PARTFILI
                               WHERE PARTFILI.CDPRODUTO = P_CDPRODUTO
                                 AND PARTFILI.CDFILIAL  = P_CDFILIAL
                                 AND PARTFILI.CDTIPPART IN (4, 7) ));
         IF NOT (SQL%ROWCOUNT > 0) THEN
            P_RESULTADO := 'Existe_AcordoForn';
         ELSE
            P_RESULTADO := 'S';
         END IF;
      ELSIF P_IDACORDOFORN = 'N' THEN
        DELETE FROM PARTFILI
         WHERE CDFILIAL   = P_CDFILIAL
           AND CDPRODUTO  = P_CDPRODUTO
           AND CDFORNECED = P_CDFORNECED
           AND CDTIPPART IN ('4', '7')
           AND ((CDGRUPPROD = P_CDGRUPPROD AND CDSUBGRPROD = P_CDSUBGRPROD) OR CDGRUPPROD||CDSUBGRPROD IS NULL);
         DELETE FROM PARAMPRODSUP
             WHERE CDPRODUTO    = P_CDPRODUTO
               AND CDFILISUBGR  = 'P'
               AND CDFILIAL     = P_CDFILIAL
               AND ((CDGRUPPROD = P_CDGRUPPROD AND CDSUBGRPROD = P_CDSUBGRPROD) OR CDGRUPPROD||CDSUBGRPROD IS NULL);
         P_RESULTADO := 'S';
      END IF;
    END IF;
  END IF;
  IF P_RESULTADO IS NULL THEN
     IF V_CONTADOR = 0 THEN /* Caso o cursor "C_PRODUTO" n?o trague resultados, avisa o usu?rio que n?o foi feita a parametriza??o. */
        P_RESULTADO := 'NAO_INSERT';
     END IF;
  END IF;
END;
/