CREATE OR ALTER trigger ttbnfs_item_bu4 for tbnfs_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('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, 2);
              -- DESFAZER BAIXA DE PEDIDO
              EXECUTE PROCEDURE SPD_NFS_PEDIDO(NEW.NFS_CONTROLE, NEW.CONTROLE);

              -- DESFAZER BAIXA DE ROMANEIO
              IF(COALESCE(OLD.TECELAGEM, 0) > 0) THEN
              BEGIN
                EXECUTE PROCEDURE SPU_SALDO_ROMANEIO(OLD.ESTABELECIMENTO_CODIGO, OLD.SEQUENCIA, OLD.TECELAGEM, OLD.QUANTIDADE, 2);
              END

       END ELSE

       IF(OLD.NF_NATUREZA = 2 AND NEW.NF_NATUREZA = 2) THEN
       BEGIN
           IF(OLD.ESTABELECIMENTO_CODIGO <> NEW.ESTABELECIMENTO_CODIGO OR
              OLD.DATA_EMISSAO           <> NEW.DATA_EMISSAO 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
                  -- DELETAR ESTOQUE
                  EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, 2);
                  -- DESFAZER BAIXA DE PEDIDO
                  EXECUTE PROCEDURE SPD_NFS_PEDIDO(NEW.NFS_CONTROLE, NEW.CONTROLE);

                  -- DESFAZER BAIXA DE ROMANEIO
                  IF(COALESCE(OLD.TECELAGEM, 0) > 0) THEN
                  BEGIN
                    EXECUTE PROCEDURE SPU_SALDO_ROMANEIO(OLD.ESTABELECIMENTO_CODIGO, OLD.SEQUENCIA, OLD.TECELAGEM, OLD.QUANTIDADE, 2);
                  END

              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 PEDIDO PARA NATUREZA EMISSÃO, CONCLUÍDA
                EXECUTE PROCEDURE SPU_NFS_PEDIDO(NEW.NFS_CONTROLE, NEW.CONTROLE);
                -- INCLUIR ESTOQUE
                EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, 1);

                -- REALIZAR BAIXA DE ROMANEIO
                IF(COALESCE(NEW.TECELAGEM, 0) > 0) THEN
                BEGIN
                    EXECUTE PROCEDURE SPU_SALDO_ROMANEIO(NEW.ESTABELECIMENTO_CODIGO, NEW.SEQUENCIA, NEW.TECELAGEM, NEW.QUANTIDADE, 1);
                END

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

                -- DELETAR ESTOQUE
                EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, 2);
                -- DESFAZER BAIXA DE PEDIDO
                EXECUTE PROCEDURE SPD_NFS_PEDIDO(NEW.NFS_CONTROLE, NEW.CONTROLE);

                -- DESFAZER BAIXA DE ROMANEIO
                IF(COALESCE(OLD.TECELAGEM, 0) > 0) THEN
                BEGIN
                    EXECUTE PROCEDURE SPU_SALDO_ROMANEIO(OLD.ESTABELECIMENTO_CODIGO, OLD.SEQUENCIA, OLD.TECELAGEM, OLD.QUANTIDADE, 2);
                END

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

                -- DELETAR ESTOQUE
                EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, 2);
                -- DESFAZER BAIXA DE PEDIDO
                EXECUTE PROCEDURE SPD_NFS_PEDIDO(NEW.NFS_CONTROLE, NEW.CONTROLE);

                -- DESFAZER BAIXA DE ROMANEIO
                IF(COALESCE(NEW.TECELAGEM, 0) > 0) THEN
                BEGIN
                    EXECUTE PROCEDURE SPU_SALDO_ROMANEIO(NEW.ESTABELECIMENTO_CODIGO, NEW.SEQUENCIA, NEW.TECELAGEM, NEW.QUANTIDADE, 2);
                END

            END
       END
  END
END