CREATE OR REPLACE TRIGGER USR_ATU_NOTAFISCAL_NGD
BEFORE DELETE OR UPDATE OF IDSTATUSNFE
ON NOTAFISCAL  FOR EACH ROW
DECLARE
  V_ERRO        VARCHAR2(300);
  V_CONTADOR    NUMERIC := 0;
  V_CHAVE_NF    VARCHAR2(2000);
  V_CDFILIAL    NOTAFISCAL.CDFILIAL%TYPE;
  V_NRLANCTONF  NOTAFISCAL.NRLANCTONF%TYPE;
BEGIN
   IF ((DELETING) OR
       (UPDATING AND (:NEW.IDSTATUSNFE <> 'A')))THEN
      UPDATE USR_ITEMPRODUTO_NGD
         SET IDSTATUSITMNF      = 'INATIVO',
             TPINTERFACE        = 'E',
             DTINTERFACEORI     = SYSDATE,
             DTINTERFACEDEST    = NULL,
             STATUS             = '1'
       WHERE USR_ITEMPRODUTO_NGD.CDFILIEMIT = NVL(:NEW.CDFILIEMIT, :OLD.CDFILIEMIT)
         AND USR_ITEMPRODUTO_NGD.CDFILIRECE = NVL(:NEW.CDFILIRECE, :OLD.CDFILIRECE)
         AND USR_ITEMPRODUTO_NGD.DTENTRSAID = NVL(:NEW.DTENTRSAID, :OLD.DTENTRSAID)
         AND INSTR(USR_ITEMPRODUTO_NGD.CHAVE_NF, NVL(:NEW.CDFILIAL, :OLD.CDFILIAL)||NVL(:NEW.NRLANCTONF, :OLD.NRLANCTONF)) > 0;

      FOR C_USR_ITEMPRODUTO_NGD IN (SELECT CHAVE_NF, CDARVPROD||'-'||CDFILIEMIT||'-'||CDFILIRECE||'-'||DTENTRSAID IDPESQITEM
                                      FROM USR_ITEMPRODUTO_NGD
                                     WHERE INSTR(USR_ITEMPRODUTO_NGD.CHAVE_NF, NVL(:NEW.CDFILIAL, :OLD.CDFILIAL)||NVL(:NEW.NRLANCTONF, :OLD.NRLANCTONF)) > 0)
      LOOP
         V_CONTADOR := V_CONTADOR + 1;
         BEGIN
            IF V_CONTADOR = 1 THEN
               V_CHAVE_NF := C_USR_ITEMPRODUTO_NGD.CHAVE_NF;
               WHILE LENGTH(V_CHAVE_NF) >= 11 LOOP
                  V_CDFILIAL   := SUBSTR(V_CHAVE_NF, 1, 4);
                  V_NRLANCTONF := SUBSTR(V_CHAVE_NF, 5, 10);
                  V_CHAVE_NF   := SUBSTR(V_CHAVE_NF, 16, LENGTH(V_CHAVE_NF));
                  UPDATE ITEMPRODUTO
                     SET USR_NGD_INTEGRADO = 'N'
                   WHERE CDFILIAL   = V_CDFILIAL
                     AND NRLANCTONF = V_NRLANCTONF
                     AND NVL(USR_NGD_INTEGRADO, 'N') =  'S';
              END LOOP;
            END IF;
            UPDATE USR_LOG_NGD
               SET DTLOG      = SYSDATE,
                   STATUS     = '0',
                   OBSSTATUS  = NULL
             WHERE IDPROCESSO = 'USR_ITEMPRODUTO_NGD'
               AND IDPESQITEM = C_USR_ITEMPRODUTO_NGD.IDPESQITEM;
            IF SQL%NOTFOUND THEN
               INSERT
                 INTO USR_LOG_NGD(IDPROCESSO, DTLOG, STATUS, OBSSTATUS, IDPESQITEM)
               VALUES ('USR_ITEMPRODUTO_NGD', SYSDATE, '0', NULL, C_USR_ITEMPRODUTO_NGD.IDPESQITEM);
            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_ITEMPRODUTO_NGD'
                  AND IDPESQITEM = C_USR_ITEMPRODUTO_NGD.IDPESQITEM;
               IF SQL%NOTFOUND THEN
                  INSERT
                    INTO USR_LOG_NGD(IDPROCESSO, DTLOG, STATUS, OBSSTATUS, IDPESQITEM)
                  VALUES ('USR_ITEMPRODUTO_NGD', SYSDATE, '1', V_ERRO, C_USR_ITEMPRODUTO_NGD.IDPESQITEM);
               END IF;
            END;
         END;
      END LOOP;
   ELSIF :NEW.IDSTATUSNFE = 'A' THEN
      UPDATE ITEMPRODUTO
         SET USR_NGD_INTEGRADO = 'N'
       WHERE ITEMPRODUTO.CDFILIAL        = NVL(:NEW.CDFILIAL, :OLD.CDFILIAL)
         AND ITEMPRODUTO.NRLANCTONF      = NVL(:NEW.NRLANCTONF, :OLD.NRLANCTONF) 
         AND NVL(USR_NGD_INTEGRADO, 'N') =  'S';
   END IF;
END;
/

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