SET TERM ^ ;

CREATE OR ALTER trigger ttbestoque_detalhe_aloc_b01iud for tbestoque_detalhe_alocacao
active before insert or update or delete position 0
AS
DECLARE VARIABLE CONFERENCIA VARCHAR(500);
DECLARE VARIABLE CONFERENCIA_STATUS INTEGER;
BEGIN

    IF (INSERTING) THEN
    BEGIN

        IF (COALESCE(OLD.IGNORAR_BLOQUEIO, 0) <> 1) THEN
        BEGIN

            IF (NEW.ESTOQUE_DETALHE_ID > 0) THEN
            BEGIN
    
                EXCEPTION "..." 'ESTOQUE VINCULADO A UMA COMANDA DE PEDIDO. INCLUSAO NAO AUTORIZADA!';
    
            END

        END

    END

    IF (UPDATING) THEN
    BEGIN
        
        IF (COALESCE(OLD.IGNORAR_BLOQUEIO, 0) <> 1) THEN
        BEGIN

            IF (OLD.ESTOQUE_DETALHE_ID <> NEW.ESTOQUE_DETALHE_ID AND OLD.ESTOQUE_DETALHE_ID > 0 AND NEW.ESTOQUE_DETALHE_ID > 0) THEN
            BEGIN
                IF ((OLD.SALDO <> NEW.SALDO) OR (OLD.ESTOQUE_DETALHE_ID <> NEW.ESTOQUE_DETALHE_ID)) THEN
                BEGIN
    
                END ELSE
                BEGIN
                    EXCEPTION "..." 'ESTOQUE VINCULADO A UMA COMANDA DE PEDIDO. ALTERACAO NAO AUTORIZADA!';
                END
            END
    
            CONFERENCIA             = COALESCE((SELECT FIRST 1 FN_LPAD(C.TABELA_ID, 8, '0')||'-'||FN_IS_EMPTY(B.SEQUENCIA) FROM TBCONFERENCIA_ITEM A INNER JOIN TBCONFERENCIA B ON B.ID = A.CONFERENCIA_ID AND B.TABELA = 'COM' INNER JOIN TBESTOQUE_DETALHE_ALOCACAO C ON C.TAB_ITEM_ID = A.TABELA_ITEM_ID AND C.ESTOQUE_DETALHE_ID = B.TABELA_ID INNER JOIN TBESTOQUE_DETALHE D ON D.ID = C.ESTOQUE_DETALHE_ID WHERE C.TAB_ITEM_ID = OLD.TAB_ITEM_ID AND C.TABELA_ID = OLD.TABELA_ID AND C.ESTOQUE_DETALHE_ID = OLD.ESTOQUE_DETALHE_ID), '');
            CONFERENCIA_STATUS      = COALESCE((SELECT FIRST 1 B.STATUS                                                    FROM TBCONFERENCIA_ITEM A INNER JOIN TBCONFERENCIA B ON B.ID = A.CONFERENCIA_ID AND B.TABELA = 'COM' INNER JOIN TBESTOQUE_DETALHE_ALOCACAO C ON C.TAB_ITEM_ID = A.TABELA_ITEM_ID AND C.ESTOQUE_DETALHE_ID = B.TABELA_ID INNER JOIN TBESTOQUE_DETALHE D ON D.ID = C.ESTOQUE_DETALHE_ID WHERE C.TAB_ITEM_ID = OLD.TAB_ITEM_ID AND C.TABELA_ID = OLD.TABELA_ID AND C.ESTOQUE_DETALHE_ID = OLD.ESTOQUE_DETALHE_ID), 0);
    
            IF (CONFERENCIA <> '') THEN
            BEGIN
    
                IF (CONFERENCIA_STATUS > 1) THEN
                BEGIN
                    IF (OLD.SALDO <> NEW.SALDO) THEN
                    BEGIN
        
                    END ELSE
                    BEGIN
                        EXCEPTION "..." 'CONFERENCIA '||CONFERENCIA||' FINALIZADA OU JA FATURADA. ALTERACAO NAO AUTORIZADA!';
                    END
                END
    
            END

        END

    END

    IF (DELETING) THEN
    BEGIN

        IF (COALESCE(OLD.IGNORAR_BLOQUEIO, 0) <> 1) THEN
        BEGIN

            IF (OLD.ESTOQUE_DETALHE_ID > 0) THEN
            BEGIN
    
--                EXCEPTION "..." 'ESTOQUE VINCULADO A UMA COMANDA DE PEDIDO. EXCLUSAO NAO AUTORIZADA!';
    
            END
    
            CONFERENCIA             = COALESCE((SELECT FIRST 1 FN_LPAD(C.TABELA_ID, 8, '0')||'-'||FN_IS_EMPTY(B.SEQUENCIA) FROM TBCONFERENCIA_ITEM A INNER JOIN TBCONFERENCIA B ON B.ID = A.CONFERENCIA_ID AND B.TABELA = 'COM' INNER JOIN TBESTOQUE_DETALHE_ALOCACAO C ON C.TAB_ITEM_ID = A.TABELA_ITEM_ID AND C.ESTOQUE_DETALHE_ID = B.TABELA_ID INNER JOIN TBESTOQUE_DETALHE D ON D.ID = C.ESTOQUE_DETALHE_ID WHERE C.TAB_ITEM_ID = OLD.TAB_ITEM_ID AND C.TABELA_ID = OLD.TABELA_ID AND C.ESTOQUE_DETALHE_ID = OLD.ESTOQUE_DETALHE_ID), '');
            CONFERENCIA_STATUS      = COALESCE((SELECT FIRST 1 B.STATUS                                                    FROM TBCONFERENCIA_ITEM A INNER JOIN TBCONFERENCIA B ON B.ID = A.CONFERENCIA_ID AND B.TABELA = 'COM' INNER JOIN TBESTOQUE_DETALHE_ALOCACAO C ON C.TAB_ITEM_ID = A.TABELA_ITEM_ID AND C.ESTOQUE_DETALHE_ID = B.TABELA_ID INNER JOIN TBESTOQUE_DETALHE D ON D.ID = C.ESTOQUE_DETALHE_ID WHERE C.TAB_ITEM_ID = OLD.TAB_ITEM_ID AND C.TABELA_ID = OLD.TABELA_ID AND C.ESTOQUE_DETALHE_ID = OLD.ESTOQUE_DETALHE_ID), 0);

            IF (CONFERENCIA <> '') THEN
            BEGIN
                EXCEPTION "..." 'ITEM VINCULADO A CONFERENCIA '||CONFERENCIA||'. EXCLUSAO NAO AUTORIZADA!';
            END

        END

    END
END
^

SET TERM ; ^

