ALTER TABLE TBINVENTARIO_MATERIA_PRIMA
    ADD BLOQUEIA_ESTOQUE INTEGER;

SET TERM ^ ;

CREATE OR ALTER trigger ttbinventario_mat_prima_b01u for tbinventario_materia_prima
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    HISTORICO = '';

    IF ( NEW.DESCRICAO <> OLD.DESCRICAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DESC:'||OLD.DESCRICAO||'->'||NEW.DESCRICAO;
    END

    IF ( NEW.BLOQUEIA_ESTOQUE IS DISTINCT FROM OLD.BLOQUEIA_ESTOQUE) THEN
    BEGIN
        HISTORICO = HISTORICO||' BLQ.ESTOQUE:'||COALESCE(OLD.BLOQUEIA_ESTOQUE, 0)||'->'||COALESCE(NEW.BLOQUEIA_ESTOQUE, 0);
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = ' REGISTRO ALTERADO: '||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBINVENTARIO_MATERIA_PRIMA',NEW.ID, HISTORICO);
    END
END
^

SET TERM ; ^


--SET TERM ^ ;
--
--CREATE OR ALTER trigger ttbestoque_transacao_item_b1iue for tbestoque_transacao_item
--active before insert or update or delete position 0
--AS
--DECLARE VARIABLE INVENTARIO_ID INTEGER;
--DECLARE VARIABLE PRODUTO_ID INTEGER;
--BEGIN
--    IF(INSERTING OR (UPDATING)) THEN
--        BEGIN
--            FOR
--                SELECT
--                    T.ID
--                FROM TBINVENTARIO_MATERIA_PRIMA T
--                WHERE T.FLAG_AJUSTE = 0
--                AND T.LOCALIZACAO_ID = NEW.LOCALIZACAO_CODIGO
--                AND T.ESTABELECIMENTO_ID = NEW.ESTABELECIMENTO_CODIGO
--                AND T.BLOQUEIA_ESTOQUE  = 1
--                INTO :INVENTARIO_ID
--            DO
--            BEGIN
--               FOR
--                   SELECT
--                        I.PRODUTO_ID
--                   FROM TBINVENTARIO_MAT_PRIMA_DETALHE I
--                   LEFT JOIN TBPRODUTO P ON P.CODIGO = I.PRODUTO_ID
--                   WHERE I.PRODUTO_ID = NEW.PRODUTO_CODIGO
--                   AND I.INVENTARIO_ID = :INVENTARIO_ID
--                   INTO :PRODUTO_ID
--               DO
--               BEGIN
--                    EXCEPTION "..." '<h4>ATENÇÃO</h4>PRODUTO:<br> <strong>'||:PRODUTO_ID||' - '||(SELECT FIRST 1 P.DESCRICAO FROM TBPRODUTO P WHERE P.CODIGO = :PRODUTO_ID) ||' </strong>ESTÁ EM PROCESSO DE INVENTÁRIO, ESSA TRANSAÇÃO NÃO PODE SER GRAVADA. ENTRE EM CONTATO COM O SETOR RESPONSÁVEL!';
--
--               END
--    
--            END
--        END
--
--        IF(DELETING) THEN
--        BEGIN
--           FOR
--                SELECT
--                    T.ID
--                FROM TBINVENTARIO_MATERIA_PRIMA T
--                WHERE T.FLAG_AJUSTE = 0
--                AND T.LOCALIZACAO_ID = OLD.LOCALIZACAO_CODIGO
--                AND T.ESTABELECIMENTO_ID = OLD.ESTABELECIMENTO_CODIGO
--                AND T.BLOQUEIA_ESTOQUE  = 1
--                INTO :INVENTARIO_ID
--            DO
--            BEGIN
--               FOR
--                   SELECT
--                        I.PRODUTO_ID
--                   FROM TBINVENTARIO_MAT_PRIMA_DETALHE I
--                   LEFT JOIN TBPRODUTO P ON P.CODIGO = I.PRODUTO_ID
--                   WHERE I.PRODUTO_ID = OLD.PRODUTO_CODIGO
--                   AND I.INVENTARIO_ID = :INVENTARIO_ID
--                   INTO :PRODUTO_ID
--               DO
--               BEGIN
--                     EXCEPTION "..." '<h4>ATENÇÃO</h4>PRODUTO:<br> <strong>'||:PRODUTO_ID||' - '||(SELECT FIRST 1 P.DESCRICAO FROM TBPRODUTO P WHERE P.CODIGO = :PRODUTO_ID) ||' </strong>ESTÁ EM PROCESSO DE INVENTÁRIO, ESSA TRANSAÇÃO NÃO PODE SER GRAVADA. ENTRE EM CONTATO COM O SETOR RESPONSÁVEL!';
--               END
--    
--            END 
--        END
--
--
--
--END
--^
--
--SET TERM ; ^



SET TERM ^ ;

CREATE OR ALTER trigger ttbestoque_transacao_item_bud0 for tbestoque_transacao_item
active before insert or update or delete position 0
AS
DECLARE VARIABLE INVENTARIO_ID INTEGER;
DECLARE VARIABLE PRODUTO_ID INTEGER;
BEGIN
    IF(INSERTING OR (UPDATING)) THEN
        BEGIN
            FOR
                SELECT FIRST 1 T.ID
                FROM TBINVENTARIO_MATERIA_PRIMA T, TBINVENTARIO_MAT_PRIMA_DETALHE I
                WHERE T.ID = I.INVENTARIO_ID
                AND T.LOCALIZACAO_ID = NEW.LOCALIZACAO_CODIGO
                AND T.ESTABELECIMENTO_ID = NEW.ESTABELECIMENTO_CODIGO
                AND I.PRODUTO_ID = NEW.PRODUTO_CODIGO
                AND T.FLAG_AJUSTE = 0
                AND T.BLOQUEIA_ESTOQUE  = 1
                INTO :INVENTARIO_ID
              DO
                BEGIN
                    EXCEPTION "..." '<h4>ATENCAO</h4>PRODUTO: <br> <strong>'||(SELECT FIRST 1 FN_LPAD(P.CODIGO,6,'0')||'-'||P.DESCRICAO FROM TBPRODUTO P WHERE P.CODIGO = NEW.PRODUTO_CODIGO)||' </strong>ESTA EM PROCESSO DE INVENTARIO, TRANSAÇÃO CANCELADA. ENTRE EM CONTATO COM O SETOR RESPONSAVEL!';
                END
        END

        IF(DELETING) THEN
        BEGIN
            FOR
                SELECT FIRST 1 T.ID
                FROM TBINVENTARIO_MATERIA_PRIMA T, TBINVENTARIO_MAT_PRIMA_DETALHE I
                WHERE T.ID = I.INVENTARIO_ID
                AND T.LOCALIZACAO_ID = NEW.LOCALIZACAO_CODIGO
                AND T.ESTABELECIMENTO_ID = NEW.ESTABELECIMENTO_CODIGO
                AND I.PRODUTO_ID = NEW.PRODUTO_CODIGO
                AND T.FLAG_AJUSTE = 0
                AND T.BLOQUEIA_ESTOQUE  = 1
                INTO :INVENTARIO_ID
              DO
                BEGIN
                    EXCEPTION "..." '<h4>ATENCAO</h4>PRODUTO: <br> <strong>'||(SELECT FIRST 1 FN_LPAD(P.CODIGO,6,'0')||'-'||P.DESCRICAO FROM TBPRODUTO P WHERE P.CODIGO = OLD.PRODUTO_CODIGO)||' </strong>ESTA EM PROCESSO DE INVENTARIO, TRANSAÇÃO CANCELADA. ENTRE EM CONTATO COM O SETOR RESPONSAVEL!';
                END
        END

END
^

SET TERM ; ^













