SET TERM ^ ;

CREATE OR ALTER trigger ttbpedido_cupom_b01u for tbpedido_cupom
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE PEDIDO INTEGER;
BEGIN
    
    HISTORICO = '';

    PEDIDO  = COALESCE((SELECT FIRST 1 A.PEDIDO FROM TBPEDIDO A WHERE A.CUPOM_CODIGO = OLD.CUPOM_CODIGO), 0);

    IF (OLD.STATUS = 0 AND NEW.STATUS = 1 AND PEDIDO > 0) THEN
    BEGIN
        EXCEPTION "..." 'CUPOM JÁ UTILIZADO NO PEDIDO '||PEDIDO||'. OPERAÇÃO CANCELADA.';
    END

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

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

    IF (OLD.DATA_REGISTRO <> NEW.DATA_REGISTRO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.REG:'||FORMATDATE(OLD.DATA_REGISTRO)||'->'||FORMATDATE(NEW.DATA_REGISTRO);
    END

    IF (OLD.DATA_VALIDADE <> NEW.DATA_VALIDADE) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.VALID:'||FORMATDATE(OLD.DATA_VALIDADE)||'->'||FORMATDATE(NEW.DATA_VALIDADE);
    END

    IF (OLD.CUPOM_CODIGO <> NEW.CUPOM_CODIGO) THEN
    BEGIN
        HISTORICO = HISTORICO||' COD.CUPOM:'||FORMATDATE(OLD.CUPOM_CODIGO)||'->'||FORMATDATE(NEW.CUPOM_CODIGO);
    END

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

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

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'REGISTRO ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBPEDIDO_CUPOM', OLD.ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^

SET TERM ; ^