CREATE OR REPLACE TRIGGER APE_USR_DTEXPORTA
AFTER UPDATE OR INSERT ON ITEMPRODUTO FOR EACH ROW
BEGIN
   IF UPDATING THEN
      IF (:NEW.QTITEMPROD <> :OLD.QTITEMPROD) OR
         (:NEW.VRUNITITEM <> :OLD.VRUNITITEM) OR
         (:NEW.VRTOTAITEM <> :OLD.VRTOTAITEM) OR
         (:NEW.VRDESCITEM <> :OLD.VRDESCITEM) THEN
         UPDATE NOTAFISCAL
            SET USR_DTEXPORTACAO = NULL
          WHERE CDFILIAL = :NEW.CDFILIAL
            AND NRLANCTONF = :NEW.NRLANCTONF;
      END IF;
   ELSE
      UPDATE NOTAFISCAL
         SET USR_DTEXPORTACAO = NULL
       WHERE CDFILIAL = :NEW.CDFILIAL
         AND NRLANCTONF = :NEW.NRLANCTONF;
   END IF;
END;
/

CREATE OR REPLACE TRIGGER USR_EXCLUSAO_NOTAFISCAL
AFTER DELETE ON NOTAFISCAL FOR EACH ROW
DECLARE
   V_CDUNICO VARCHAR2(14);
   V_NFEXIST INTEGER;
   V_NOVOCODIGO INTEGER;
BEGIN
   V_CDUNICO := :OLD.CDFILIAL||:OLD.NRLANCTONF;

   SELECT COUNT(1)
     INTO V_NFEXIST
     FROM USR_PROT_NOTAFISCAL
    WHERE CDUNICO = V_CDUNICO;

   IF (V_NFEXIST > 0) THEN
      FOR C_PROT_NOTAFISCAL IN
        (SELECT CDUNICO, IDENTRSAID, CDEMPRESA, CDFILIAL, CDINSCRICAO, CDSERIE, NRNUMERO,
                CDMODELO, DTEMISSAO, DTENTRADA, NRACESSONFE, VRTOTALNF, CNPJ_EMP_MAE,
                NF_ORIGINAL, SERIE_ORIGINAL, DT_VENCIMENTO1, VR_VENCIMENTO1,
                DT_VENCIMENTO2, VR_VENCIMENTO2, DT_VENCIMENTO3, VR_VENCIMENTO3,
                DT_VENCIMENTO4, VR_VENCIMENTO4, DT_VENCIMENTO5, VR_VENCIMENTO5,
                DT_VENCIMENTO6, VR_VENCIMENTO6, IDOPERACAO, STATUS, LOG_ERRO,
                DTGRAVACAO, HRGRAVACAO, DTIMPORTACAO, HRIMPORTACAO
           FROM USR_PROT_NOTAFISCAL
          WHERE CDUNICO = V_CDUNICO)
      LOOP
         BEGIN
            SELECT USR_IDNOTAFISCAL.NEXTVAL
              INTO V_NOVOCODIGO
              FROM DUAL;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_NOVOCODIGO := 1;
         END;

         INSERT INTO USR_PROT_NOTAFISCAL(USR_IDNOTAFISCAL, CDUNICO, IDENTRSAID, CDEMPRESA, CDFILIAL, CDINSCRICAO, CDSERIE, NRNUMERO,
                                         CDMODELO, DTEMISSAO, DTENTRADA, NRACESSONFE, VRTOTALNF, CNPJ_EMP_MAE,
                                         NF_ORIGINAL, SERIE_ORIGINAL, DT_VENCIMENTO1, VR_VENCIMENTO1,
                                         DT_VENCIMENTO2, VR_VENCIMENTO2, DT_VENCIMENTO3, VR_VENCIMENTO3,
                                         DT_VENCIMENTO4, VR_VENCIMENTO4, DT_VENCIMENTO5, VR_VENCIMENTO5,
                                         DT_VENCIMENTO6, VR_VENCIMENTO6, IDOPERACAO, IDINTERFACE, STATUS, LOG_ERRO,
                                         DTGRAVACAO, HRGRAVACAO, DTIMPORTACAO, HRIMPORTACAO)
         VALUES(V_NOVOCODIGO, C_PROT_NOTAFISCAL.CDUNICO, C_PROT_NOTAFISCAL.IDENTRSAID, C_PROT_NOTAFISCAL.CDEMPRESA, C_PROT_NOTAFISCAL.CDFILIAL, C_PROT_NOTAFISCAL.CDINSCRICAO, C_PROT_NOTAFISCAL.CDSERIE, C_PROT_NOTAFISCAL.NRNUMERO,
                C_PROT_NOTAFISCAL.CDMODELO, C_PROT_NOTAFISCAL.DTEMISSAO, C_PROT_NOTAFISCAL.DTENTRADA, C_PROT_NOTAFISCAL.NRACESSONFE, C_PROT_NOTAFISCAL.VRTOTALNF, C_PROT_NOTAFISCAL.CNPJ_EMP_MAE,
                C_PROT_NOTAFISCAL.NF_ORIGINAL, C_PROT_NOTAFISCAL.SERIE_ORIGINAL, C_PROT_NOTAFISCAL.DT_VENCIMENTO1, C_PROT_NOTAFISCAL.VR_VENCIMENTO1,
                C_PROT_NOTAFISCAL.DT_VENCIMENTO2, C_PROT_NOTAFISCAL.VR_VENCIMENTO2, C_PROT_NOTAFISCAL.DT_VENCIMENTO3, C_PROT_NOTAFISCAL.VR_VENCIMENTO3,
                C_PROT_NOTAFISCAL.DT_VENCIMENTO4, C_PROT_NOTAFISCAL.VR_VENCIMENTO4, C_PROT_NOTAFISCAL.DT_VENCIMENTO5, C_PROT_NOTAFISCAL.VR_VENCIMENTO5,
                C_PROT_NOTAFISCAL.DT_VENCIMENTO6, C_PROT_NOTAFISCAL.VR_VENCIMENTO6, C_PROT_NOTAFISCAL.IDOPERACAO, '2', 'A', NULL,
                SYSDATE, TO_CHAR(SYSDATE, 'HH24:MI'), NULL, NULL);
      END LOOP;

      FOR C_PROT_ITEMPRODUTO IN
        (SELECT CDUNICO, NRSEQITEM, CDPRODUTO, VRQUANTIDADE, VRUNITARIO, VRDESCITEM,
                VRTOTAITEM, CFO_ITEM, VRBASECALCICMS, VRALIQICMS, VRIMPOSTOICMS,
                VRBASECALCPIS, VRALIQPIS, VRIMPOSTOPIS, VRBASECALCCOFINS, VRALIQCOFINS,
                VRIMPOSTOCOFINS, VRBASECALCIPI, VRALIQIPI, VRIMPOSTOIPI, VRBASECALCICMSST,
                VRALIQICMSST, VRIMPOSTOICMSST, STATUS, LOG_ERRO, DTGRAVACAO,
                HRGRAVACAO, DTIMPORTACAO, HRIMPORTACAO
           FROM USR_PROT_ITEMPRODUTO
          WHERE CDUNICO = V_CDUNICO)
      LOOP
         INSERT INTO USR_PROT_ITEMPRODUTO(USR_IDNOTAFISCAL, CDUNICO, NRSEQITEM, CDPRODUTO, VRQUANTIDADE, VRUNITARIO, VRDESCITEM,
                                          VRTOTAITEM, CFO_ITEM, VRBASECALCICMS, VRALIQICMS, VRIMPOSTOICMS,
                                          VRBASECALCPIS, VRALIQPIS, VRIMPOSTOPIS, VRBASECALCCOFINS, VRALIQCOFINS,
                                          VRIMPOSTOCOFINS, VRBASECALCIPI, VRALIQIPI, VRIMPOSTOIPI, VRBASECALCICMSST,
                                          VRALIQICMSST, VRIMPOSTOICMSST, STATUS, LOG_ERRO, IDINTERFACE, DTGRAVACAO,
                                          HRGRAVACAO, DTIMPORTACAO, HRIMPORTACAO)
         VALUES(V_NOVOCODIGO, C_PROT_ITEMPRODUTO.CDUNICO, C_PROT_ITEMPRODUTO.NRSEQITEM, C_PROT_ITEMPRODUTO.CDPRODUTO, C_PROT_ITEMPRODUTO.VRQUANTIDADE, C_PROT_ITEMPRODUTO.VRUNITARIO, C_PROT_ITEMPRODUTO.VRDESCITEM,
                C_PROT_ITEMPRODUTO.VRTOTAITEM, C_PROT_ITEMPRODUTO.CFO_ITEM, C_PROT_ITEMPRODUTO.VRBASECALCICMS, C_PROT_ITEMPRODUTO.VRALIQICMS, C_PROT_ITEMPRODUTO.VRIMPOSTOICMS,
                C_PROT_ITEMPRODUTO.VRBASECALCPIS, C_PROT_ITEMPRODUTO.VRALIQPIS, C_PROT_ITEMPRODUTO.VRIMPOSTOPIS, C_PROT_ITEMPRODUTO.VRBASECALCCOFINS, C_PROT_ITEMPRODUTO.VRALIQCOFINS,
                C_PROT_ITEMPRODUTO.VRIMPOSTOCOFINS, C_PROT_ITEMPRODUTO.VRBASECALCIPI, C_PROT_ITEMPRODUTO.VRALIQIPI, C_PROT_ITEMPRODUTO.VRIMPOSTOIPI, C_PROT_ITEMPRODUTO.VRBASECALCICMSST,
                C_PROT_ITEMPRODUTO.VRALIQICMSST, C_PROT_ITEMPRODUTO.VRIMPOSTOICMSST, 'A', NULL, '2', SYSDATE,
                TO_CHAR(SYSDATE, 'HH24:MI'), NULL, NULL);
      END LOOP;
   END IF;
END;
/

CREATE OR REPLACE TRIGGER DTEXPPROD_PROT_PROD
BEFORE UPDATE ON PRODUTO FOR EACH ROW
BEGIN
   IF (NVL(:OLD.NMPRODUTO   ,0) <> NVL(:NEW.NMPRODUTO   ,0)) OR
      (NVL(:OLD.SGUNIDADE   ,0) <> NVL(:NEW.SGUNIDADE   ,0)) OR
      (NVL(:OLD.CDPRODESTO  ,0) <> NVL(:NEW.CDPRODESTO  ,0)) OR
      (NVL(:OLD.VRFATOCONV  ,0) <> NVL(:NEW.VRFATOCONV  ,0)) OR
      (NVL(:OLD.IDPRODATIVPR,0) <> NVL(:NEW.IDPRODATIVPR,0)) OR
      (NVL(:OLD.CDPRODINTE  ,0) <> NVL(:NEW.CDPRODINTE  ,0))
   THEN
      :NEW.USR_DTEXPPROD := NULL;
   END IF;
END;
/

DROP TRIGGER DTEXPPROD_PROT_PROD
/

create or replace
TRIGGER USR_ALTERACAO_MOV_ESTOQUE
BEFORE DELETE OR UPDATE OF CDALMOXARIFE, QTLANCTOEST, VRTOTLANCTO ON ITLANCTOEST FOR EACH ROW
DECLARE
   PRAGMA AUTONOMOUS_TRANSACTION;
   V_SEQUENCI INTEGER;
   V_CDUNICO  VARCHAR2(22);
   V_DTLANCES DATE;
   V_IDTPLANC VARCHAR2(1);
   V_QTLANCTO FLOAT;
   V_VRTOTLAN FLOAT;
   V_QTLANCTOATU FLOAT;
   V_VRTOTLANATU FLOAT;
   V_IDINTERFACE VARCHAR2(1);
BEGIN
   IF (:OLD.USR_DTEXPORTA IS NOT NULL) THEN
      BEGIN
         SELECT DTLANCESTQ, IDTPLANCTO
           INTO V_DTLANCES, V_IDTPLANC
           FROM LANCTOESTOQ
          WHERE CDFILIAL   = :NEW.CDFILIAL
            AND NRLANCESTQ = :NEW.NRLANCESTQ;
      EXCEPTION
         WHEN OTHERS THEN
            V_DTLANCES := NULL;
            V_IDTPLANC := NULL;
      END;
      
      IF ((V_IDTPLANC = '1') OR (V_IDTPLANC = '3')) THEN
         IF (UPDATING) THEN
            :NEW.USR_DTEXPORTA := NULL;
         END IF;   
         
         V_QTLANCTO := :OLD.QTLANCTOEST;
         V_VRTOTLAN := :OLD.VRTOTLANCTO;
         V_CDUNICO  := :NEW.CDFILIMOVI||:NEW.CDPRODMOVI||TO_CHAR(V_DTLANCES, 'YYYYMMDD');
         
         BEGIN
            SELECT QTLANCTOEST, VRLANCTOEST, IDINTERFACE
              INTO V_QTLANCTOATU, V_VRTOTLANATU, V_IDINTERFACE
              FROM USR_PROT_MOVIESTOQ
             WHERE CDUNICO = V_CDUNICO
               AND SEQUENCIAL = (SELECT MAX(SEQUENCIAL)
                                         FROM USR_PROT_MOVIESTOQ
                                        WHERE CDUNICO = V_CDUNICO);
         EXCEPTION
            WHEN OTHERS THEN
               V_QTLANCTOATU := NULL;
               V_VRTOTLANATU := NULL;
               V_IDINTERFACE := NULL;
         END;
         
         IF (V_QTLANCTOATU IS NOT NULL) THEN
            IF (V_IDINTERFACE = '1') THEN
               SELECT USR_PROT_MOVIEST.NEXTVAL
                 INTO V_SEQUENCI
                 FROM DUAL;
               
               INSERT INTO USR_PROT_MOVIESTOQ(SEQUENCIAL, CDFILIAL, CDEMPRESA, CDPRODUTO, IDOPERACAO, CDALMOXARIFADO,
                                              DTLANCESTQ, QTLANCTOEST, VRLANCTOEST, IDCREDDEB, GRUPO_PROT, CNPJ_EMP_MAE,
                                              STATUS, IDINTERFACE, DTGRAVACAO, HRGRAVACAO, CDUNICO)
               SELECT V_SEQUENCI, CDFILIAL, CDEMPRESA, CDPRODUTO, IDOPERACAO, CDALMOXARIFADO,
                      DTLANCESTQ, QTLANCTOEST, VRLANCTOEST, IDCREDDEB, GRUPO_PROT, CNPJ_EMP_MAE,
                      'A', '2', SYSDATE, TO_CHAR(SYSDATE, 'HH24:MI'), V_CDUNICO
                 FROM USR_PROT_MOVIESTOQ
                WHERE CDUNICO = V_CDUNICO;
               
               V_QTLANCTO := V_QTLANCTOATU - V_QTLANCTO;
               V_VRTOTLAN := V_VRTOTLANATU - V_VRTOTLAN;
               
               IF (V_QTLANCTO > 0) THEN
                  INSERT INTO USR_PROT_MOVIESTOQ(SEQUENCIAL, CDFILIAL, CDEMPRESA, CDPRODUTO, IDOPERACAO, CDALMOXARIFADO,
                                                 DTLANCESTQ, QTLANCTOEST, VRLANCTOEST, IDCREDDEB, GRUPO_PROT, CNPJ_EMP_MAE,
                                                 STATUS, IDINTERFACE, DTGRAVACAO, HRGRAVACAO, CDUNICO)
                  SELECT USR_PROT_MOVIEST.NEXTVAL, CDFILIAL, CDEMPRESA, CDPRODUTO, IDOPERACAO, CDALMOXARIFADO,
                         DTLANCESTQ, V_QTLANCTO, V_VRTOTLAN, IDCREDDEB, GRUPO_PROT, CNPJ_EMP_MAE,
                         'A', '1', SYSDATE, TO_CHAR(SYSDATE, 'HH24:MI'), V_CDUNICO
                    FROM USR_PROT_MOVIESTOQ
                   WHERE CDUNICO = V_CDUNICO
                     AND IDINTERFACE = '1'
                     AND SEQUENCIAL <> V_SEQUENCI
                     AND SEQUENCIAL = (SELECT MAX(SEQUENCIAL)
                                         FROM USR_PROT_MOVIESTOQ
                                        WHERE CDUNICO = V_CDUNICO
                                          AND IDINTERFACE = '1');
               END IF;
            END IF;
            
            COMMIT;
         END IF;
      END IF;
   END IF;
END;  
/

create or replace
TRIGGER USR_REMOVE_LANCTOESTOQ
BEFORE DELETE ON LANCTOESTOQ FOR EACH ROW
DECLARE
   V_CDUNICO VARCHAR2(22);
   V_CDALMOXA VARCHAR2(6);
   V_QTLANCTO FLOAT;
   V_VRLANCTO FLOAT;
   V_QTLANCTOATU FLOAT;
   V_VRLANCTOATU FLOAT;
   
   CURSOR C_ITLANCTOEST(C_CDFILIAL IN VARCHAR2, C_NRLANCESTQ IN VARCHAR2, C_DTLANCESTQ IN VARCHAR2) IS
      SELECT I.CDFILIMOVI||I.CDPRODMOVI||C_DTLANCESTQ, SUM(I.QTLANCTOEST), SUM(I.VRTOTLANCTO), I.CDALMOXARIFE
        FROM ITLANCTOEST I
       WHERE I.CDFILIAL   = C_CDFILIAL
         AND I.NRLANCESTQ = C_NRLANCESTQ
         AND I.USR_DTEXPORTA IS NOT NULL
       GROUP BY I.CDFILIMOVI||I.CDPRODMOVI||C_DTLANCESTQ, I.CDALMOXARIFE;
BEGIN
   IF (:OLD.IDTPLANCTO = '1') OR (:OLD.IDTPLANCTO = '3') THEN
      OPEN C_ITLANCTOEST(:OLD.CDFILIAL, :OLD.NRLANCESTQ, TO_CHAR(:OLD.DTLANCESTQ, 'YYYYMMDD'));
      LOOP
         FETCH C_ITLANCTOEST INTO V_CDUNICO, V_QTLANCTO, V_VRLANCTO, V_CDALMOXA;
         EXIT WHEN C_ITLANCTOEST%NOTFOUND;
         
         INSERT INTO USR_PROT_MOVIESTOQ(SEQUENCIAL, CDFILIAL, CDEMPRESA, CDPRODUTO, IDOPERACAO, CDALMOXARIFADO,
                                        DTLANCESTQ, QTLANCTOEST, VRLANCTOEST, IDCREDDEB, GRUPO_PROT, CNPJ_EMP_MAE,
                                        STATUS, IDINTERFACE, DTGRAVACAO, HRGRAVACAO, CDUNICO)
         SELECT USR_PROT_MOVIEST.NEXTVAL, CDFILIAL, CDEMPRESA, CDPRODUTO, IDOPERACAO, CDALMOXARIFADO,
                DTLANCESTQ, QTLANCTOEST, VRLANCTOEST, IDCREDDEB, GRUPO_PROT, CNPJ_EMP_MAE,
                'A', '2', SYSDATE, TO_CHAR(SYSDATE, 'HH24:MI'), V_CDUNICO
           FROM USR_PROT_MOVIESTOQ
          WHERE CDUNICO = V_CDUNICO;
         
         SELECT QTLANCTOEST, VRLANCTOEST
           INTO V_QTLANCTOATU, V_VRLANCTOATU
           FROM USR_PROT_MOVIESTOQ
          WHERE CDUNICO = V_CDUNICO;
          
         V_QTLANCTOATU := V_QTLANCTOATU - V_QTLANCTO;
         V_VRLANCTOATU := V_VRLANCTOATU - V_VRLANCTO;
         
         IF (V_QTLANCTOATU > 0) THEN
            INSERT INTO USR_PROT_MOVIESTOQ(SEQUENCIAL, CDFILIAL, CDEMPRESA, CDPRODUTO, IDOPERACAO, CDALMOXARIFADO,
                                           DTLANCESTQ, QTLANCTOEST, VRLANCTOEST, IDCREDDEB, GRUPO_PROT, CNPJ_EMP_MAE,
                                           STATUS, IDINTERFACE, DTGRAVACAO, HRGRAVACAO, CDUNICO)
            SELECT USR_PROT_MOVIEST.NEXTVAL, CDFILIAL, CDEMPRESA, CDPRODUTO, IDOPERACAO, CDALMOXARIFADO,
                   DTLANCESTQ, V_QTLANCTOATU, V_VRLANCTOATU, IDCREDDEB, GRUPO_PROT, CNPJ_EMP_MAE,
                   'A', '1', SYSDATE, TO_CHAR(SYSDATE, 'HH24:MI'), V_CDUNICO
              FROM USR_PROT_MOVIESTOQ
             WHERE CDUNICO = V_CDUNICO;
         END IF;
      END LOOP;
   END IF;
END;
/

DROP TRIGGER USR_REMOVE_LANCTOESTOQ
/

-- VERSAO --
BEGIN ATUVEROBJ('APE_USR_DTEXPORTA','5.85.XXX'); END;
/