CREATE OR REPLACE PROCEDURE PRECOS_TO_REGIAO
                        (P_CDFILIAL     IN ITEMCOLE.CDFILIAL%TYPE,
                         P_CDFILIPROC   IN ITEMCOLE.CDFILIAL%TYPE,
                         P_NRCOLEPRECO  IN ITEMCOLE.NRCOLEPRECO%TYPE,
                         P_CDREGIAO     IN ITEMCOLE.CDREGIAO%TYPE,
                         P_CDFORNECED   IN ITEMCOLE.CDFORNECED%TYPE,
                         P_TFORN        IN VARCHAR2,
                         P_CDPRODUTO    IN PRODUTO.CDPRODUTO%TYPE,
                         P_CDMARCA      IN MARCA.CDMARCA%TYPE,
                         P_IDATUREG     IN VARCHAR2,
                         P_IDATUFORN    IN VARCHAR2,
                         P_NEW_CDREGIAO IN ITEMCOLE.CDREGIAO%TYPE DEFAULT NULL)
/* P_NEW_CDREGIAO <> NULL >> DUPLICA PARA UMA REGIAO */
/* P_NEW_CDREGIAO = NULL  >> DUPLICA PARA TODAS REGIOES */
IS
   V_CDEMPRESA  EMPRESA.CDEMPRESA%TYPE;
   V_CDINSCMUNI INSCRMUNICIP.CDINSCMUNI%TYPE;
   V_CDINSCESTA INSCRESTAD.CDINSCESTA%TYPE;

   V_DTCOLEPREC COLETAPR.DTCOLEPREC%TYPE;
   V_COUNTAUX   NUMBER;
   V_NRSEQPRELIST ITEMCOLE.NRSEQPRELIST%TYPE;
   V_IDPRECALT    ITEMCOLE.IDPRECALT%TYPE;
BEGIN
   SELECT
      MAX(NRSEQPRELIST),
      MAX(IDPRECALT)
   INTO
      V_NRSEQPRELIST,
      V_IDPRECALT
   FROM
      ITEMCOLE
   WHERE ITEMCOLE.CDFILIAL    = P_CDFILIAL
     AND ITEMCOLE.NRCOLEPRECO = P_NRCOLEPRECO;

   FOR C_REGIAO IN
      (SELECT DISTINCT
          CDREGIAO
       FROM
          ITEMCOLE
       WHERE
          ITEMCOLE.CDFILIAL    = P_CDFILIAL    AND
          ITEMCOLE.NRCOLEPRECO = P_NRCOLEPRECO AND
          ITEMCOLE.CDREGIAO    <> P_CDREGIAO   AND
          ITEMCOLE.CDREGIAO    = NVL(P_NEW_CDREGIAO, ITEMCOLE.CDREGIAO) AND
          (ITEMCOLE.CDFORNECED = P_CDFORNECED OR P_TFORN = 'T') AND
          NOT EXISTS(SELECT
                        CDFORNECED,
                        CDREGIAO
                     FROM
                        REFOREG
                     WHERE
                        REFOREG.CDFORNECED = ITEMCOLE.CDFORNECED AND
                        REFOREG.CDREGIAO   = ITEMCOLE.CDREGIAO))
   LOOP
/* CURSOR QUE RETORNA TODAS AS REGIOES DE DESTINO DA DUPLICACAO */
      IF P_NEW_CDREGIAO IS NOT NULL THEN
         INSERT INTO PZOPGTITMCOL
         (CDFILIAL, NRCOLEPRECO,  CDFORNECED,   CDPRODUTO,
          CDMARCA,  NRDIASPGTCOL, VRPERCPGTCOL, CDREGIAO)
         SELECT
          PZOPGTITMCOL.CDFILIAL, PZOPGTITMCOL.NRCOLEPRECO, PZOPGTITMCOL.CDFORNECED,
          PZOPGTITMCOL.CDPRODUTO,PZOPGTITMCOL.CDMARCA, PZOPGTITMCOL.NRDIASPGTCOL,
          PZOPGTITMCOL.VRPERCPGTCOL, C_REGIAO.CDREGIAO
         FROM
          PZOPGTITMCOL,
          ITEMCOLE
         WHERE
          PZOPGTITMCOL.CDFILIAL    = P_CDFILIAL    AND
          PZOPGTITMCOL.NRCOLEPRECO = P_NRCOLEPRECO AND
          PZOPGTITMCOL.CDREGIAO    = P_CDREGIAO    AND
          (PZOPGTITMCOL.CDFORNECED = P_CDFORNECED OR P_TFORN = 'T') AND

          ITEMCOLE.CDREGIAO        = P_NEW_CDREGIAO       AND
          PZOPGTITMCOL.CDFILIAL    = ITEMCOLE.CDFILIAL    AND
          PZOPGTITMCOL.NRCOLEPRECO = ITEMCOLE.NRCOLEPRECO AND
          PZOPGTITMCOL.CDFORNECED  = ITEMCOLE.CDFORNECED  AND
          PZOPGTITMCOL.CDPRODUTO   = ITEMCOLE.CDPRODUTO   AND
          PZOPGTITMCOL.CDMARCA     = ITEMCOLE.CDMARCA     AND
          NOT EXISTS (SELECT 1 FROM PZOPGTITMCOL P
                              WHERE PZOPGTITMCOL.CDFILIAL         = P.CDFILIAL     AND
                                    PZOPGTITMCOL.NRCOLEPRECO      = P.NRCOLEPRECO  AND
                                    PZOPGTITMCOL.CDFORNECED       = P.CDFORNECED   AND
                                    PZOPGTITMCOL.CDPRODUTO        = P.CDPRODUTO    AND
                                    PZOPGTITMCOL.CDMARCA          = P.CDMARCA      AND
                                    PZOPGTITMCOL.NRDIASPGTCOL     = P.NRDIASPGTCOL AND
                                    C_REGIAO.CDREGIAO             = P.CDREGIAO);
      ELSE
         IF P_CDFORNECED IS NOT NULL THEN
            SELECT
               COUNT(*) INTO V_COUNTAUX
            FROM
               ITEMCOLE
            WHERE
               CDFILIAL    = P_CDFILIAL    AND
               NRCOLEPRECO = P_NRCOLEPRECO AND
               CDFORNECED  = P_CDFORNECED  AND
               CDPRODUTO   = P_CDPRODUTO   AND
               CDMARCA     = P_CDMARCA     AND
               CDREGIAO    = C_REGIAO.CDREGIAO;
            /* SE NA REGIAO DE DESTINO NAO HOUVER O PRODUTO DUPLICADO ENTAO ELE SERA INSERIDO */
            IF V_COUNTAUX = 0 THEN
               FOR C_INSERT IN
                  (SELECT ITEMCOLE.CDFILIAL, NRCOLEPRECO, CDPRODUTO, CDMARCA, CDFORNECED,
                          DTINIVALITM, DTFINVALITM,
                          VRPRECUNIITM, VRPERDESITM,
                          CDTIPCOB, CDSEGMARCCOL, IDTIPFREITM, NRPZOENTCOL,
                          IDITMLISPREC, CDFORMPGTO, IDTPFOPGTCOL, NRPARCPGTCOL,
                          NRDIAPGFXCOL, IDUTDIAPGCOL, QTACMPITMCOL,
                          DSPZOPGTCONC, VRINDICEITMCOL
                  FROM ITEMCOLE,
                       FILIAL
                  WHERE
                     ITEMCOLE.CDFILIAL    = P_CDFILIAL    AND
                     NRCOLEPRECO = P_NRCOLEPRECO AND
                     CDFORNECED  = P_CDFORNECED  AND
                     CDPRODUTO   = P_CDPRODUTO   AND
                     CDMARCA     = P_CDMARCA     AND
                     ITEMCOLE.CDREGIAO    = P_CDREGIAO    AND

                     FILIAL.CDFILIAL = P_CDFILIPROC AND
                     NVL(FILIAL.IDFUNCAOFILI, 'O') = 'O'


                  UNION ALL

                  SELECT ITEMCOLE.CDFILIAL, ITEMCOLE.NRCOLEPRECO, ITEMCOLE.CDPRODUTO, CDMARCA, ITEMCOLE.CDFORNECED,
                         DTINIVALITM, DTFINVALITM,
                         VRPRECUNIITM, VRPERDESITM,
                         CDTIPCOB, CDSEGMARCCOL, IDTIPFREITM, NRPZOENTCOL,
                         IDITMLISPREC, CDFORMPGTO, IDTPFOPGTCOL, NRPARCPGTCOL,
                         NRDIAPGFXCOL, IDUTDIAPGCOL, QTACMPITMCOL,
                         DSPZOPGTCONC, VRINDICEITMCOL
                  FROM ITEMCOLE,
                      (SELECT
                           PARAMPRODSUP.CDREGIAO,
                           PARAMPRODSUP.CDPRODUTO
                       FROM
                           PARAMPRODSUP,
                           FILIAL
                       WHERE
                           FILIAL.CDFILIAL = P_CDFILIPROC AND
                           FILIAL.IDFUNCAOFILI = 'C' AND
                           FILIAL.CDFILIAL = PARAMPRODSUP.CDFILICTRL AND
                           PARAMPRODSUP.IDFILINEGCOR = 'S'

                        UNION ALL

                        SELECT
                           PARAMPRODSUP.CDREGIAO,
                           PARAMPRODSUP.CDPRODUTO
                        FROM
                           PARAMPRODSUP,
                           FILIAL
                        WHERE
                           FILIAL.CDFILIAL = P_CDFILIPROC  AND
                           FILIAL.IDFUNCAOFILI = 'R' AND
                           FILIAL.CDFILIAL = PARAMPRODSUP.CDFILICTRL AND
                           PARAMPRODSUP.IDFILINEGREG = 'S') PARAMPRODSUP

                  WHERE
                     ITEMCOLE.CDFILIAL    = P_CDFILIAL    AND
                     ITEMCOLE.NRCOLEPRECO = P_NRCOLEPRECO AND
                     ITEMCOLE.CDFORNECED  = P_CDFORNECED  AND
                     ITEMCOLE.CDPRODUTO   = P_CDPRODUTO   AND
                     CDMARCA              = P_CDMARCA     AND
                     ITEMCOLE.CDREGIAO    = P_CDREGIAO    AND
                     PARAMPRODSUP.CDPRODUTO = ITEMCOLE.CDPRODUTO AND
                     PARAMPRODSUP.CDREGIAO = C_REGIAO.CDREGIAO)
               LOOP
                  INSERT INTO ITEMCOLE(CDFILIAL, NRCOLEPRECO, CDPRODUTO, CDMARCA, CDFORNECED,
                                       CDREGIAO, DTINIVALITM, DTFINVALITM,
                                       VRPRECUNIITM, VRPERDESITM, IDITMCOTPREC,
                                       CDTIPCOB, CDSEGMARCCOL, IDTIPFREITM, NRPZOENTCOL,
                                       IDITMLISPREC, CDFORMPGTO, IDTPFOPGTCOL, NRPARCPGTCOL,
                                       NRDIAPGFXCOL, IDUTDIAPGCOL, QTACMPITMCOL,
                                       DSPZOPGTCONC, IDATUREGIINC, IDATUFORNINC, NRSEQPRELIST,
                                       IDPRECALT, VRINDICEITMCOL)
                  VALUES(C_INSERT.CDFILIAL,     C_INSERT.NRCOLEPRECO,  C_INSERT.CDPRODUTO,
                         C_INSERT.CDMARCA,      C_INSERT.CDFORNECED,   C_REGIAO.CDREGIAO,
                         C_INSERT.DTINIVALITM,  C_INSERT.DTFINVALITM,  C_INSERT.VRPRECUNIITM,
                         C_INSERT.VRPERDESITM, 'S', C_INSERT.CDTIPCOB, C_INSERT.CDSEGMARCCOL,
                         C_INSERT.IDTIPFREITM,  C_INSERT.NRPZOENTCOL,  C_INSERT.IDITMLISPREC,
                         C_INSERT.CDFORMPGTO,   C_INSERT.IDTPFOPGTCOL, C_INSERT.NRPARCPGTCOL,
                         C_INSERT.NRDIAPGFXCOL, C_INSERT.IDUTDIAPGCOL, C_INSERT.QTACMPITMCOL,
                         C_INSERT.DSPZOPGTCONC, P_IDATUREG, P_IDATUFORN, V_NRSEQPRELIST,
                         V_IDPRECALT, C_INSERT.VRINDICEITMCOL);
               END LOOP;

              INSERT INTO PZOPGTITMCOL
               (CDFILIAL, NRCOLEPRECO,  CDFORNECED,   CDPRODUTO,
                CDMARCA,  NRDIASPGTCOL, VRPERCPGTCOL, CDREGIAO)
               SELECT
                PZOPGTITMCOL.CDFILIAL, PZOPGTITMCOL.NRCOLEPRECO, PZOPGTITMCOL.CDFORNECED,
                PZOPGTITMCOL.CDPRODUTO,PZOPGTITMCOL.CDMARCA, PZOPGTITMCOL.NRDIASPGTCOL,
                PZOPGTITMCOL.VRPERCPGTCOL, C_REGIAO.CDREGIAO
               FROM
                PZOPGTITMCOL,
                ITEMCOLE
               WHERE
                PZOPGTITMCOL.CDFILIAL    = P_CDFILIAL    AND
                PZOPGTITMCOL.NRCOLEPRECO = P_NRCOLEPRECO AND
                PZOPGTITMCOL.CDREGIAO    = P_CDREGIAO    AND
                (PZOPGTITMCOL.CDFORNECED = P_CDFORNECED OR P_TFORN = 'T') AND

                ITEMCOLE.CDREGIAO        = C_REGIAO.CDREGIAO    AND
                ITEMCOLE.CDPRODUTO       = P_CDPRODUTO          AND
                ITEMCOLE.CDMARCA         = P_CDMARCA            AND
                PZOPGTITMCOL.CDFILIAL    = ITEMCOLE.CDFILIAL    AND
                PZOPGTITMCOL.NRCOLEPRECO = ITEMCOLE.NRCOLEPRECO AND
                PZOPGTITMCOL.CDFORNECED  = ITEMCOLE.CDFORNECED  AND
                PZOPGTITMCOL.CDPRODUTO   = ITEMCOLE.CDPRODUTO   AND
                PZOPGTITMCOL.CDMARCA     = ITEMCOLE.CDMARCA     AND
                NOT EXISTS (SELECT 1 FROM PZOPGTITMCOL P
                                    WHERE PZOPGTITMCOL.CDFILIAL         = P.CDFILIAL     AND
                                          PZOPGTITMCOL.NRCOLEPRECO      = P.NRCOLEPRECO  AND
                                          PZOPGTITMCOL.CDFORNECED       = P.CDFORNECED   AND
                                          PZOPGTITMCOL.CDPRODUTO        = P.CDPRODUTO    AND
                                          PZOPGTITMCOL.CDMARCA          = P.CDMARCA      AND
                                          PZOPGTITMCOL.NRDIASPGTCOL     = P.NRDIASPGTCOL AND
                                          C_REGIAO.CDREGIAO             = P.CDREGIAO);
            END IF;
         END IF;
      END IF;

      SELECT  MAX(DTCOLEPREC) INTO V_DTCOLEPREC
      FROM COLETAPR
      WHERE
         CDFILIAL    = P_CDFILIAL AND
         NRCOLEPRECO = P_NRCOLEPRECO;

      COMMIT;

      FOR C_PRECOS IN
           (SELECT
              ITEMCOLE.CDFORNECED,
              ITEMCOLE.CDPRODUTO,
              PRODUTO.CDARVPROD,
              ITEMCOLE.CDMARCA,
              ITEMCOLE.VRPRECUNIITM,
              ITEMCOLE.CDFORMPGTO,
              ITEMCOLE.IDTPFOPGTCOL,
              ITEMCOLE.NRPARCPGTCOL,
              ITEMCOLE.NRDIAPGFXCOL,
              ITEMCOLE.IDUTDIAPGCOL,
              ITEMCOLE.VRINDICEITMCOL
            FROM
              ITEMCOLE, PRODUTO
            WHERE
              ITEMCOLE.CDPRODUTO   = PRODUTO.CDPRODUTO           AND
              ITEMCOLE.CDFILIAL    = P_CDFILIAL                  AND
              ITEMCOLE.NRCOLEPRECO = P_NRCOLEPRECO               AND
              ITEMCOLE.CDREGIAO    = P_CDREGIAO                  AND
              (CDFORNECED = P_CDFORNECED OR P_TFORN = 'T') AND
              ITEMCOLE.CDPRODUTO   = NVL(P_CDPRODUTO, ITEMCOLE.CDPRODUTO) AND
              ITEMCOLE.CDMARCA     = NVL(P_CDMARCA, ITEMCOLE.CDMARCA)     AND
              NOT EXISTS
               (SELECT
                  REFOREG.CDREGIAO
                FROM
                  REFOREG
                WHERE
                  REFOREG.CDREGIAO    = ITEMCOLE.CDREGIAO AND
                  REFOREG.CDFORNECED  = ITEMCOLE.CDFORNECED)) LOOP

/* CUSOR QUE RETORNARA TODOS ITENS QUE SERAO DUPLICADOS */

         UPDATE ITEMCOLE
         SET VRPRECUNIITM = C_PRECOS.VRPRECUNIITM,
             CDFORMPGTO   = C_PRECOS.CDFORMPGTO,
             IDTPFOPGTCOL = C_PRECOS.IDTPFOPGTCOL,
             NRPARCPGTCOL = C_PRECOS.NRPARCPGTCOL,
             NRDIAPGFXCOL = C_PRECOS.NRDIAPGFXCOL,
             IDUTDIAPGCOL = C_PRECOS.IDUTDIAPGCOL,
             IDITMCOTPREC = 'S',
             IDATUREGIALT = P_IDATUREG,
             IDATUFORNALT = P_IDATUFORN,
             VRINDICEITMCOL  = C_PRECOS.VRINDICEITMCOL
         WHERE
           CDFILIAL    = P_CDFILIAL     AND
           NRCOLEPRECO = P_NRCOLEPRECO  AND
           CDREGIAO    = C_REGIAO.CDREGIAO AND
           CDFORNECED  = C_PRECOS.CDFORNECED AND
           CDPRODUTO   = C_PRECOS.CDPRODUTO  AND
           CDMARCA     = C_PRECOS.CDMARCA;

         IF C_PRECOS.IDTPFOPGTCOL = 'V' THEN
            DELETE FROM PZOPGTITMCOL
            WHERE
               CDFILIAL    = P_CDFILIAL AND
               NRCOLEPRECO = P_NRCOLEPRECO AND
               CDREGIAO    = C_REGIAO.CDREGIAO AND
               CDFORNECED  = C_PRECOS.CDFORNECED AND
               CDPRODUTO   = C_PRECOS.CDPRODUTO AND
               CDMARCA     = C_PRECOS.CDMARCA;

            INSERT INTO PZOPGTITMCOL
               (CDFILIAL, NRCOLEPRECO, CDFORNECED, CDPRODUTO,
                CDMARCA, CDREGIAO, NRDIASPGTCOL, VRPERCPGTCOL)
            SELECT
               CDFILIAL,
               NRCOLEPRECO,
               CDFORNECED,
               CDPRODUTO,
               CDMARCA,
               C_REGIAO.CDREGIAO,
               NRDIASPGTCOL,
               VRPERCPGTCOL
            FROM
               PZOPGTITMCOL
            WHERE
               CDFILIAL    = P_CDFILIAL AND
               NRCOLEPRECO = P_NRCOLEPRECO AND
               CDREGIAO    = P_CDREGIAO AND
               CDFORNECED  = C_PRECOS.CDFORNECED AND
               CDPRODUTO   = C_PRECOS.CDPRODUTO AND
               CDMARCA     = C_PRECOS.CDMARCA AND
               NOT EXISTS (SELECT 1 FROM PZOPGTITMCOL P
                                   WHERE PZOPGTITMCOL.CDFILIAL         = P.CDFILIAL     AND
                                         PZOPGTITMCOL.NRCOLEPRECO      = P.NRCOLEPRECO  AND
                                         PZOPGTITMCOL.CDFORNECED       = P.CDFORNECED   AND
                                         PZOPGTITMCOL.CDPRODUTO        = P.CDPRODUTO    AND
                                         PZOPGTITMCOL.CDMARCA          = P.CDMARCA      AND
                                         PZOPGTITMCOL.NRDIASPGTCOL     = P.NRDIASPGTCOL AND
                                         C_REGIAO.CDREGIAO             = P.CDREGIAO);
         END IF;

/*###############################  IMPOSTO  #####################################*/

           SELECT
              SUBSTR(EMITENTE(P_CDFILIAL, C_PRECOS.CDPRODUTO, C_PRECOS.CDFORNECED), 3, 2) AS CDEMPRESA
           INTO
              V_CDEMPRESA
           FROM
              PARAMGERAL;

           SELECT
              MAX(EMPRESA.CDEMPRESA),
              MIN(INSCRMUNICIP.CDINSCMUNI) AS CDINSCMUNI,
              MIN(INSCRESTAD.CDINSCESTA)   AS CDINSCESTA
           INTO
              V_CDEMPRESA, V_CDINSCMUNI, V_CDINSCESTA
           FROM
              EMPRESA,
              INSCRMUNICIP,
              INSCRESTAD
           WHERE
              EMPRESA.CDEMPRESA = V_CDEMPRESA           AND
              EMPRESA.CDEMPRESA = INSCRMUNICIP.CDEMPRESA AND
              EMPRESA.CDEMPRESA = INSCRESTAD.CDEMPRESA;

           IMPOSTO_ITEMCOL(V_CDEMPRESA,      V_CDINSCESTA,        C_PRECOS.CDFORNECED, P_CDFILIAL,
                           P_NRCOLEPRECO,    C_PRECOS.CDFORNECED, C_REGIAO.CDREGIAO,   C_PRECOS.CDPRODUTO,
                           C_PRECOS.CDMARCA, V_DTCOLEPREC);
            COMMIT;
      END LOOP;
   END LOOP;
END;
/