SET TERM ^ ;

CREATE OR ALTER trigger ttbnfe_item_b10u for tbnfe_item
active before update position 1
AS

BEGIN

  IF(NEW.GC_WEB = 1) THEN
  BEGIN

       IF (OLD.NF_NATUREZA = 2 AND NEW.NF_NATUREZA = 1)  THEN
       BEGIN
          -- DELETAR ESTOQUE PARA NATUREZA EMISSAO
          EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE, 2);
          -- DESFAZER BAIXA DE OC
          EXECUTE PROCEDURE SPD_NFE_OC(NEW.NFE_CONTROLE, NEW.CONTROLE);

       END ELSE

       IF(OLD.NF_NATUREZA = 2 AND NEW.NF_NATUREZA = 2) THEN
       BEGIN
           IF(OLD.ESTABELECIMENTO_CODIGO <> NEW.ESTABELECIMENTO_CODIGO OR
              OLD.DATA_ENTRADA           <> NEW.DATA_ENTRADA OR
              OLD.LOCALIZACAO_CODIGO     <> NEW.LOCALIZACAO_CODIGO OR
              OLD.EMPRESA_CODIGO         <> NEW.EMPRESA_CODIGO OR
              OLD.NUMERO_NOTAFISCAL      <> NEW.NUMERO_NOTAFISCAL OR
              OLD.OPERACAO_CODIGO        <> NEW.OPERACAO_CODIGO OR
              OLD.PRODUTO_CODIGO         <> NEW.PRODUTO_CODIGO OR
              OLD.QUANTIDADE             <> NEW.QUANTIDADE OR
              OLD.T01 <> NEW.T01 OR   OLD.T02 <> NEW.T02 OR   OLD.T03 <> NEW.T03 OR
              OLD.T04 <> NEW.T04 OR   OLD.T05 <> NEW.T05 OR   OLD.T06 <> NEW.T06 OR
              OLD.T07 <> NEW.T07 OR   OLD.T08 <> NEW.T08 OR   OLD.T09 <> NEW.T09 OR
              OLD.T10 <> NEW.T10 OR   OLD.T11 <> NEW.T11 OR   OLD.T12 <> NEW.T12 OR
              OLD.T13 <> NEW.T13 OR   OLD.T14 <> NEW.T14 OR   OLD.T15 <> NEW.T15 OR
              OLD.T16 <> NEW.T16 OR   OLD.T17 <> NEW.T17 OR   OLD.T18 <> NEW.T18 OR
              OLD.T19 <> NEW.T19 OR   OLD.T20 <> NEW.T20)  THEN
              BEGIN
              -- EXCEPTION "..." 'TESTE1 ' || NEW.CONTROLE || ' - '|| NEW.NFE_CONTROLE;
                  -- DELETAR ESTOQUE
                  EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE, 2);
                  -- DESFAZER BAIXA DE OC
                  EXECUTE PROCEDURE SPD_NFE_OC(NEW.NFE_CONTROLE, NEW.CONTROLE);
              END
       END ELSE

       IF(OLD.NF_NATUREZA = 1 AND NEW.NF_NATUREZA = 1) THEN
       BEGIN
            IF(OLD.NF_SITUACAO = 1 AND NEW.NF_SITUACAO = 2) THEN
            BEGIN

                -- REALIZAR BAIXA DE OC PARA NATUREZA EMISSÃO, CONCLUÍDA
                EXECUTE PROCEDURE SPU_NFE_OC(NEW.NFE_CONTROLE, NEW.CONTROLE);
                -- INCLUIR ESTOQUE
                EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE, 1);

            END ELSE
            IF(OLD.NF_SITUACAO = 2 AND NEW.NF_SITUACAO = 1) THEN
            BEGIN

                -- DELETAR ESTOQUE
                EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE, 2);
                -- DESFAZER BAIXA DE OC
                EXECUTE PROCEDURE SPD_NFE_OC(NEW.NFE_CONTROLE, NEW.CONTROLE);

            END ELSE
            IF(OLD.NF_SITUACAO = 2 AND NEW.NF_SITUACAO = 3) THEN
            BEGIN
               -- DELETAR ESTOQUE
               EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE, 2);
               -- DESFAZER BAIXA DE OC
               EXECUTE PROCEDURE SPD_NFE_OC(NEW.NFE_CONTROLE, NEW.CONTROLE);
            END ELSE
            IF(OLD.NF_SITUACAO = 2 AND NEW.NF_SITUACAO = 2) THEN  -- Nova Condicao (21/08/2023) - Ajustar saldo de nota concluída quando alterada a localizacao
            BEGIN

                IF(OLD.LOCALIZACAO_CODIGO <> NEW.LOCALIZACAO_CODIGO) THEN
                BEGIN

                    -- DELETAR ESTOQUE
                    EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE, 2);
                    -- DESFAZER BAIXA DE OC
                    EXECUTE PROCEDURE SPD_NFE_OC(NEW.NFE_CONTROLE, NEW.CONTROLE);

                END

            END
        END
  END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbnfe_item_au1 for tbnfe_item
active after update position 1
AS

BEGIN

  IF(NEW.GC_WEB = 1) THEN
  BEGIN

       IF (OLD.NF_NATUREZA = 1 AND NEW.NF_NATUREZA = 2)  THEN
       BEGIN

          -- REALIZAR BAIXA DE OC PARA NATUREZA LANÇAMENTO
          EXECUTE PROCEDURE SPU_NFE_OC(NEW.NFE_CONTROLE, NEW.CONTROLE);
          -- INCLUIR ESTOQUE PARA NATUREZA LANÇAMENTO
          EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE, 1);

       END ELSE

       IF(OLD.NF_NATUREZA = 2 AND NEW.NF_NATUREZA = 2) THEN
       BEGIN
           IF(OLD.ESTABELECIMENTO_CODIGO <> NEW.ESTABELECIMENTO_CODIGO OR
              OLD.DATA_ENTRADA           <> NEW.DATA_ENTRADA OR
              OLD.NUMERO_NOTAFISCAL      <> NEW.NUMERO_NOTAFISCAL OR
              OLD.EMPRESA_CODIGO         <> NEW.EMPRESA_CODIGO OR
              OLD.OPERACAO_CODIGO        <> NEW.OPERACAO_CODIGO OR
              OLD.PRODUTO_CODIGO         <> NEW.PRODUTO_CODIGO OR
              OLD.LOCALIZACAO_CODIGO     <> NEW.LOCALIZACAO_CODIGO OR
              OLD.QUANTIDADE             <> NEW.QUANTIDADE OR
              OLD.T01 <> NEW.T01 OR   OLD.T02 <> NEW.T02 OR   OLD.T03 <> NEW.T03 OR
              OLD.T04 <> NEW.T04 OR   OLD.T05 <> NEW.T05 OR   OLD.T06 <> NEW.T06 OR
              OLD.T07 <> NEW.T07 OR   OLD.T08 <> NEW.T08 OR   OLD.T09 <> NEW.T09 OR
              OLD.T10 <> NEW.T10 OR   OLD.T11 <> NEW.T11 OR   OLD.T12 <> NEW.T12 OR
              OLD.T13 <> NEW.T13 OR   OLD.T14 <> NEW.T14 OR   OLD.T15 <> NEW.T15 OR
              OLD.T16 <> NEW.T16 OR   OLD.T17 <> NEW.T17 OR   OLD.T18 <> NEW.T18 OR
              OLD.T19 <> NEW.T19 OR   OLD.T20 <> NEW.T20)  THEN
              BEGIN

                  -- REALIZAR BAIXA DE PEDIDO PARA NATUREZA LANÇAMENTO
                  EXECUTE PROCEDURE SPU_NFE_OC(NEW.NFE_CONTROLE, NEW.CONTROLE);
                  -- INCLUIR ESTOQUE
                  EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE, 1);

              END
       END

       IF(OLD.NF_NATUREZA = 1 AND NEW.NF_NATUREZA = 1) THEN
       BEGIN
            IF(OLD.NF_SITUACAO = 2 AND NEW.NF_SITUACAO = 2) THEN  -- Nova Condicao (21/08/2023) - Ajustar saldo de nota concluída quando alterada a localizacao
            BEGIN

                IF(OLD.LOCALIZACAO_CODIGO <> NEW.LOCALIZACAO_CODIGO) THEN
                BEGIN

                    -- REALIZAR BAIXA DE OC PARA NATUREZA EMISSÃO, CONCLUÍDA
                    EXECUTE PROCEDURE SPU_NFE_OC(NEW.NFE_CONTROLE, NEW.CONTROLE);
                    -- INCLUIR ESTOQUE
                    EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFE', NEW.CONTROLE, NEW.NFE_CONTROLE, 1);

                END

            END
       END

  END
END
^

SET TERM ; ^

