CREATE OR REPLACE
PROCEDURE EXP_ITEMCOLE_NGD
IS
  V_CHAVE        VARCHAR2(300);
  V_ERRO         VARCHAR2(300);
  V_CONTADOR     FLOAT := 0;
  V_CONTAFORN    FLOAT := 0;
BEGIN
   FOR C_FILIALOL IN
      (SELECT CDFILIAL CDFILIOPELOG, NMFILIAL, CDREGIAO
         FROM FILIAL
        WHERE NVL(FILIAL.IDCNTRRESC, 'N') <> 'S'
          AND NVL(FILIAL.IDFUNCAOFILI, 'T') = 'O')
   LOOP
      FOR C_PRODUTOS IN
         (SELECT C_FILIALOL.CDFILIOPELOG CDFILIOPELOG, PRODUTOOL.CDARVPROD, '1' IDTIPOITEMCOLE,
                 MAX(ITEMCOLE.VRPRECUNIITM) VRPRECUNIITM, MAX(ITEMCOLE.CDFILIAL) CDFILIAL, MAX(ITEMCOLE.NRCOLEPRECO) NRCOLEPRECO,
                 MAX(ITEMCOLE.CDMARCA) CDMARCA, ITEMCOLE.CDREGIAO, MAX(ITEMCOLE.CDFORNECED) CDFORNECED, ITEMCOLE.CDPRODUTO,
                 ITEMCOLE.DTFINVALITM
            FROM PRODUTO PRODUTOOL, RELACPRODOL,
                 ITEMCOLE, PRODUTO
           WHERE ITEMCOLE.CDPRODUTO      = PRODUTO.CDPRODUTO
             AND ITEMCOLE.CDPRODUTO      = RELACPRODOL.CDPRARVORIG
             AND RELACPRODOL.CDPRARVORIG = PRODUTO.CDPRODUTO
             AND RELACPRODOL.CDPRODARVOL = PRODUTOOL.CDPRODUTO
             AND ITEMCOLE.CDREGIAO       = C_FILIALOL.CDREGIAO
             AND NVL(ITEMCOLE.USR_NGD_INTEGRADO, 'N')  = 'N'
             AND NVL(ITEMCOLE.VRPRECUNIITM, 0)     > 0
             AND ITEMCOLE.DTFINVALITM   = (SELECT MAX(DTFINVALITM)
                                             FROM ITEMCOLE I
                                            WHERE I.CDFILIAL   = ITEMCOLE.CDFILIAL
                                              AND I.CDREGIAO   = C_FILIALOL.CDREGIAO
                                              AND I.CDPRODUTO  = ITEMCOLE.CDPRODUTO
                                              AND NVL(I.VRPRECUNIITM, 0)     > 0
                                              AND I.DTFINVALITM BETWEEN SYSDATE-999 AND SYSDATE+732
                                          )
           GROUP BY PRODUTOOL.CDARVPROD, ITEMCOLE.CDREGIAO, ITEMCOLE.CDPRODUTO, ITEMCOLE.DTFINVALITM
         )
      LOOP
         V_CONTADOR := V_CONTADOR + 1;
         IF V_CONTADOR >= 500 THEN
            V_CONTADOR := 0;
            COMMIT;
         END IF;
         BEGIN
            UPDATE USR_ITEMCOLE_NGD
               SET VRPRECUNIITM       = C_PRODUTOS.VRPRECUNIITM,
                   TPINTERFACE        = 'A',
                   DTINTERFACEORI     = SYSDATE,
                   DTINTERFACEDEST    = NULL,
                   STATUS             = '1'
             WHERE USR_ITEMCOLE_NGD.CDFILIOPELOG   = C_FILIALOL.CDFILIOPELOG
               AND USR_ITEMCOLE_NGD.CDARVPROD      = C_PRODUTOS.CDARVPROD;
            IF SQL%NOTFOUND THEN
               INSERT
                 INTO USR_ITEMCOLE_NGD(CDFILIOPELOG, CDARVPROD, IDTIPOITEMCOLE, VRPRECUNIITM,
                                       IDSTATUSITMCOL, TPINTERFACE, DTINTERFACEORI,	DTINTERFACEDEST,	STATUS)
               VALUES (C_FILIALOL.CDFILIOPELOG, C_PRODUTOS.CDARVPROD, C_PRODUTOS.IDTIPOITEMCOLE, C_PRODUTOS.VRPRECUNIITM,
                         'ATIVO', 'I', 	SYSDATE,	NULL,	'1');
            END IF;
            UPDATE ITEMCOLE
               SET ITEMCOLE.USR_NGD_INTEGRADO = 'S'
             WHERE ITEMCOLE.CDREGIAO     = C_FILIALOL.CDREGIAO
               AND ITEMCOLE.CDPRODUTO    = C_PRODUTOS.CDPRODUTO
               AND ITEMCOLE.DTFINVALITM  = C_PRODUTOS.DTFINVALITM;
            UPDATE USR_LOG_NGD
               SET DTLOG     = SYSDATE,
                   STATUS    = '0',
                   OBSSTATUS = NULL
             WHERE IDPROCESSO = 'USR_ITEMCOLE_NGD'
               AND IDPESQITEM = C_FILIALOL.CDFILIOPELOG||'-'||C_PRODUTOS.CDARVPROD;
            IF SQL%NOTFOUND THEN
               INSERT
                 INTO USR_LOG_NGD(IDPROCESSO, DTLOG, STATUS, OBSSTATUS, IDPESQITEM)
               VALUES ('USR_ITEMCOLE_NGD', SYSDATE, '0', NULL, C_FILIALOL.CDFILIOPELOG||'-'||C_PRODUTOS.CDARVPROD);
            END IF;
         EXCEPTION
            WHEN OTHERS THEN BEGIN
               V_ERRO := SUBSTR(SQLERRM(SQLCODE), 1, 300);
               UPDATE USR_LOG_NGD
                  SET DTLOG      = SYSDATE,
                      STATUS     = '1',
                      OBSSTATUS  = V_ERRO
                WHERE IDPROCESSO = 'USR_ITEMCOLE_NGD'
                  AND IDPESQITEM = C_FILIALOL.CDFILIOPELOG||'-'||C_PRODUTOS.CDARVPROD;
               IF SQL%NOTFOUND THEN
                  INSERT
                    INTO USR_LOG_NGD(IDPROCESSO, DTLOG, STATUS, OBSSTATUS, IDPESQITEM)
                  VALUES ('USR_ITEMCOLE_NGD', SYSDATE, '1', V_ERRO, C_FILIALOL.CDFILIOPELOG||'-'||C_PRODUTOS.CDARVPROD);
               END IF;
            END;
         END;
      END LOOP;
   END LOOP;
   COMMIT;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('EXP_ITEMCOLE_NGD','6.37.015'); END;
/
