ALTER TABLE TBPCM_ORIGEM
    ADD PADRAO_SISTEMA CHAR(1),
    ADD PADRAO_OPERADOR CHAR(1);

COMMENT ON COLUMN TBPCM_ORIGEM.PADRAO_SISTEMA IS
'0 - NÃO É O PADRÃO DOS CHAMADOS;
1 - É O PADRÃO DOS CHAMADOS;';

COMMENT ON COLUMN TBPCM_ORIGEM.PADRAO_OPERADOR IS
'0 - NÃO É O PADRÃO DOS CHAMADOS PARA O OPERADOR;
1 - É O PADRÃO DOS CHAMADOS PARA O OPERADOR;';

/************************************************************/

SET TERM ^ ;

CREATE OR ALTER trigger ttbpcm_origem_b01i for tbpcm_origem
active before insert position 0
AS
DECLARE VARIABLE ORIGEM INTEGER;
BEGIN

    IF (NEW.PADRAO_SISTEMA = 1) THEN
    BEGIN
        ORIGEM = COALESCE((SELECT FIRST 1 X.ID FROM TBPCM_ORIGEM X WHERE X.PADRAO_SISTEMA = NEW.PADRAO_SISTEMA), -1);

        IF (ORIGEM > -1) THEN
        BEGIN
            EXCEPTION "..." 'A ORIGEM:'||FN_LPAD(ORIGEM, 4, '0')||' JÁ ESTÁ REGISTRADA COMO O PADRÃO DO SISTEMA';
        END
    END

    IF (NEW.PADRAO_OPERADOR = 1) THEN
    BEGIN
        ORIGEM = COALESCE((SELECT FIRST 1 X.ID FROM TBPCM_ORIGEM X WHERE X.PADRAO_OPERADOR = NEW.PADRAO_OPERADOR), -1);

        IF (ORIGEM > -1) THEN
        BEGIN
            EXCEPTION "..." 'A ORIGEM:'||FN_LPAD(ORIGEM, 4, '0')||' JÁ ESTÁ REGISTRADA COMO O PADRÃO DO OPERADOR';
        END
    END

    IF (NEW.ID IS NULL) THEN
        NEW.ID = GEN_ID(GTBPCM_ORIGEM, 1);
END
^

SET TERM ; ^

SET TERM ^ ;

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

DECLARE VARIABLE ORIGEM INTEGER;

DECLARE VARIABLE OLD_SETOR VARCHAR(500);
DECLARE VARIABLE NEW_SETOR VARCHAR(500);
BEGIN

    IF (OLD.PADRAO_SISTEMA = 0 AND NEW.PADRAO_SISTEMA = 1) THEN
    BEGIN
        ORIGEM = COALESCE((SELECT FIRST 1 X.ID FROM TBPCM_ORIGEM X WHERE X.PADRAO_SISTEMA = NEW.PADRAO_SISTEMA), -1);

        IF (ORIGEM > -1) THEN
        BEGIN
            EXCEPTION "..." 'A ORIGEM:'||FN_LPAD(ORIGEM, 4, '0')||' JÁ ESTÁ REGISTRADA COMO O PADRÃO DO SISTEMA';
        END
    END

    IF (OLD.PADRAO_OPERADOR = 0 AND NEW.PADRAO_OPERADOR = 1) THEN
    BEGIN
        ORIGEM = COALESCE((SELECT FIRST 1 X.ID FROM TBPCM_ORIGEM X WHERE X.PADRAO_OPERADOR = NEW.PADRAO_OPERADOR), -1);

        IF (ORIGEM > -1) THEN
        BEGIN
            EXCEPTION "..." 'A ORIGEM:'||FN_LPAD(ORIGEM, 4, '0')||' JÁ ESTÁ REGISTRADA COMO O PADRÃO DO OPERADOR';
        END
    END

    HISTORICO = '';

    IF (OLD.ID < 1) THEN
    BEGIN
        EXCEPTION "..." 'ESTE REGISTRO NAO PODE SER ALTERADO!';
    END

    OLD_SETOR = COALESCE((SELECT FIRST 1 FN_LPAD(A.ID, 4, '0')||' - '||A.DESCRICAO FROM TBPCM_SETOR A WHERE A.ID = OLD.SETOR_ID), '');
    NEW_SETOR = COALESCE((SELECT FIRST 1 FN_LPAD(A.ID, 4, '0')||' - '||A.DESCRICAO FROM TBPCM_SETOR A WHERE A.ID = NEW.SETOR_ID), '');

    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.SETOR_ID <> NEW.SETOR_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' SETOR:'||OLD_SETOR||'->'||NEW_SETOR;
    END

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

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

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

SET TERM ; ^

