SET TERM ^ ;

CREATE OR ALTER trigger ttbestoque_det_alocacao_b02u for tbestoque_detalhe_alocacao
active before update position 2
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE COMANDA_ID INTEGER;
DECLARE VARIABLE COMANDA VARCHAR(500);
BEGIN

    :HISTORICO = '';

    IF (OLD.ESTOQUE_DETALHE_ID IS DISTINCT FROM NEW.ESTOQUE_DETALHE_ID) THEN
    BEGIN

        IF (COALESCE(NEW.ESTOQUE_DETALHE_ID, 0) > 0) THEN
        BEGIN

            :COMANDA_ID = COALESCE(NEW.ESTOQUE_DETALHE_ID, 0);
            :COMANDA    = COALESCE((SELECT FIRST 1 FN_LPAD(A.PEDIDO, 8, '0')||'-'||FN_LPAD(A.SEQUENCIA, 3, '0') FROM TBESTOQUE_DETALHE A WHERE A.ID = :COMANDA_ID), '');

            :HISTORICO  = ' REGISTRO ADICIONADO A COMANDA DE ALOCACAO '||:COMANDA||'! PED./ITEM: '||NEW.TABELA_ID||'/'||NEW.TAB_ITEM_ID||' QTD/TAM/LOC.: '||TRUNC(NEW.SALDO)||'/'||NEW.TAMANHO||'/'||NEW.LOCALIZACAO_ID||'';

        END ELSE
        IF (COALESCE(NEW.ESTOQUE_DETALHE_ID, 0) = 0) THEN
        BEGIN

            :COMANDA_ID = COALESCE(OLD.ESTOQUE_DETALHE_ID, 0);
            :COMANDA    = COALESCE((SELECT FIRST 1 FN_LPAD(A.PEDIDO, 8, '0')||'-'||FN_LPAD(A.SEQUENCIA, 3, '0') FROM TBESTOQUE_DETALHE A WHERE A.ID = :COMANDA_ID), '');

            :HISTORICO  = ' REGISTRO REMOVIDO DA COMANDA DE ALOCACAO '||:COMANDA||'! PED./ITEM: '||NEW.TABELA_ID||'/'||NEW.TAB_ITEM_ID||' QTD/TAM/LOC.: '||TRUNC(NEW.SALDO)||'/'||NEW.TAMANHO||'/'||NEW.LOCALIZACAO_ID||'';

        END
        
    END

    IF (:HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBESTOQUE_DETALHE', :COMANDA_ID, FN_ELIPSE(:HISTORICO, 500));
    END
END
^

SET TERM ; ^

