ALTER TABLE TBUNIDADEMEDIDA_REGRA
    ADD REGRA_CONVERSAO INTEGER;

COMMENT ON COLUMN TBUNIDADEMEDIDA_REGRA.REGRA_CONVERSAO IS
'0 - Dez casas decimais; Sem alteração do Valor Total;
1 - Duas Casas Decimais; Com alteração do Valor Total;';

SET TERM ^ ;

CREATE OR ALTER trigger ttbunidademedida_regra_b01u for tbunidademedida_regra
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);

DECLARE VARIABLE OLD_UNIDADEMEDIDA_1 VARCHAR(500);
DECLARE VARIABLE NEW_UNIDADEMEDIDA_1 VARCHAR(500);
DECLARE VARIABLE OLD_UNIDADEMEDIDA_2 VARCHAR(500);
DECLARE VARIABLE NEW_UNIDADEMEDIDA_2 VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    OLD_UNIDADEMEDIDA_1 = COALESCE((SELECT FIRST 1 A.SIGLA||' - '||A.DESCRICAO FROM TBUNIDADEMEDIDA A WHERE A.ID = OLD.UNIDADEMEDIDA_ORIGEM), '');
    NEW_UNIDADEMEDIDA_1 = COALESCE((SELECT FIRST 1 A.SIGLA||' - '||A.DESCRICAO FROM TBUNIDADEMEDIDA A WHERE A.ID = NEW.UNIDADEMEDIDA_ORIGEM), '');
    OLD_UNIDADEMEDIDA_2 = COALESCE((SELECT FIRST 1 B.SIGLA||' - '||B.DESCRICAO FROM TBUNIDADEMEDIDA B WHERE B.ID = OLD.UNIDADEMEDIDA_DESTINO), '');
    NEW_UNIDADEMEDIDA_2 = COALESCE((SELECT FIRST 1 B.SIGLA||' - '||B.DESCRICAO FROM TBUNIDADEMEDIDA B WHERE B.ID = NEW.UNIDADEMEDIDA_DESTINO), '');

    IF (OLD.UNIDADEMEDIDA_ORIGEM <> NEW.UNIDADEMEDIDA_ORIGEM) THEN
    BEGIN
        HISTORICO = HISTORICO||' UM.ORIGEM:'||OLD_UNIDADEMEDIDA_1||'->'||NEW_UNIDADEMEDIDA_1;
    END

    IF (OLD.UNIDADEMEDIDA_DESTINO <> NEW.UNIDADEMEDIDA_DESTINO) THEN
    BEGIN
        HISTORICO = HISTORICO||' UM.DESTINO:'||OLD_UNIDADEMEDIDA_2||'->'||NEW_UNIDADEMEDIDA_2;
    END

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

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

    IF (OLD.DECIMAIS_QTD_CONVERSAO IS DISTINCT FROM NEW.DECIMAIS_QTD_CONVERSAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DEC.QTD.CONVER:'||OLD.DECIMAIS_QTD_CONVERSAO||'->'||NEW.DECIMAIS_QTD_CONVERSAO;
    END

    IF (OLD.DECIMAIS_VALOR_CONVERSAO IS DISTINCT FROM NEW.DECIMAIS_VALOR_CONVERSAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DEC.VR.CONVER:'||OLD.DECIMAIS_VALOR_CONVERSAO||'->'||NEW.DECIMAIS_VALOR_CONVERSAO;
    END

    IF (OLD.REGRA_CONVERSAO IS DISTINCT FROM NEW.REGRA_CONVERSAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' REGRA CONVERSAO:'||OLD.REGRA_CONVERSAO||'->'||NEW.REGRA_CONVERSAO;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'UNIDADE ALTERNATIVA: '||NEW_UNIDADEMEDIDA_2||' ALTERADA:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBUNIDADEMEDIDA', OLD.UNIDADEMEDIDA_ORIGEM, FN_ELIPSE(HISTORICO, 500));
    END
END
^

SET TERM ; ^



