COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO.STATUS IS 
'0 - ABERTO;
1 - EM ATENDIMENTO;
2 - AGUARDANDO INFORMAÇÕES DE TERCEIROS;
3 - AGUARDANDO INFORMAÇÕES DO USUÁRIO;
4 - ATENDIMENTO PAUSADO;
5 - ATENDIDO;
6 - FECHADO;';

COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO_ITEM.STATUS IS 
'0 - EM ATENDIMENTO;
1 - ATENDIMENTO PAUSADO;
2 - ATENDIMENTO RETOMADO;
3 - ENCERRADO;';

COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO_ITEM.OPERACAO IS 
'0 - INICIO;
1 - PARADA;
2 - RETOMADA;
3 - FIM;';

SET TERM ^ ;

CREATE OR ALTER trigger ttbpcm_registro_chamado_b01u for tbpcm_registro_chamado
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_USUARIO VARCHAR(500);
DECLARE VARIABLE NEW_USUARIO VARCHAR(500);
DECLARE VARIABLE OLD_SETOR VARCHAR(500);
DECLARE VARIABLE NEW_SETOR VARCHAR(500); 
DECLARE VARIABLE OLD_CHAMADO_TIPO VARCHAR(500);
DECLARE VARIABLE NEW_CHAMADO_TIPO VARCHAR(500);
DECLARE VARIABLE OLD_CHAMADO_CATEGORIA VARCHAR(500);
DECLARE VARIABLE NEW_CHAMADO_CATEGORIA VARCHAR(500);
DECLARE VARIABLE OLD_CHAMADO_SUBCATEGORIA VARCHAR(500);
DECLARE VARIABLE NEW_CHAMADO_SUBCATEGORIA VARCHAR(500);
DECLARE VARIABLE OLD_EQUIPAMENTO VARCHAR(500);
DECLARE VARIABLE NEW_EQUIPAMENTO VARCHAR(500);
BEGIN

    HISTORICO = '';
    OLD_USUARIO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.USUARIO FROM TBUSUARIO A WHERE A.CODIGO = OLD.USUARIO_ID), '');
    NEW_USUARIO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.USUARIO FROM TBUSUARIO A WHERE A.CODIGO = NEW.USUARIO_ID), '');
    OLD_SETOR = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO FROM TBPCM_SETOR B WHERE B.ID = OLD.SETOR_ID), '');
    NEW_SETOR = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO FROM TBPCM_SETOR B WHERE B.ID = NEW.SETOR_ID), '');
    OLD_CHAMADO_TIPO = COALESCE((SELECT FIRST 1 FN_LPAD(C.ID, 4, '0')||' - '||C.DESCRICAO FROM TBPCM_CHAMADO_TIPO C WHERE C.ID = OLD.CHAMADO_TIPO_ID), '');
    NEW_CHAMADO_TIPO = COALESCE((SELECT FIRST 1 FN_LPAD(C.ID, 4, '0')||' - '||C.DESCRICAO FROM TBPCM_CHAMADO_TIPO C WHERE C.ID = NEW.CHAMADO_TIPO_ID), '');
    OLD_CHAMADO_CATEGORIA = COALESCE((SELECT FIRST 1 FN_LPAD(D.ID, 4, '0')||' - '||D.DESCRICAO FROM TBPCM_CHAMADO_CATEGORIA D WHERE D.ID = OLD.CHAMADO_CATEGORIA_ID), '');
    NEW_CHAMADO_CATEGORIA = COALESCE((SELECT FIRST 1 FN_LPAD(D.ID, 4, '0')||' - '||D.DESCRICAO FROM TBPCM_CHAMADO_CATEGORIA D WHERE D.ID = NEW.CHAMADO_CATEGORIA_ID), '');
    OLD_CHAMADO_SUBCATEGORIA = COALESCE((SELECT FIRST 1 FN_LPAD(E.ID, 4, '0')||' - '||E.DESCRICAO FROM TBPCM_CHAMADO_SUBCATEGORIA E WHERE E.ID = OLD.CHAMADO_SUBCATEGORIA_ID), '');
    NEW_CHAMADO_SUBCATEGORIA = COALESCE((SELECT FIRST 1 FN_LPAD(E.ID, 4, '0')||' - '||E.DESCRICAO FROM TBPCM_CHAMADO_SUBCATEGORIA E WHERE E.ID = NEW.CHAMADO_SUBCATEGORIA_ID), '');
    OLD_EQUIPAMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(F.ID, 7, '0')||' - '||F.DESCRICAO FROM TBPATRIMONIO F WHERE F.ID = OLD.EQUIPAMENTO_ID), '');
    NEW_EQUIPAMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(F.ID, 7, '0')||' - '||F.DESCRICAO FROM TBPATRIMONIO F WHERE F.ID = NEW.EQUIPAMENTO_ID), '');

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

    IF (OLD.USUARIO_ID <> NEW.USUARIO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' USUARIO:'||OLD_USUARIO||'->'||NEW_USUARIO;
    END

    IF (OLD.SETOR_ID <> NEW.SETOR_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' SETOR:'||OLD_SETOR||'->'||NEW_SETOR;
    END

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

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

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

    IF (OLD.SOLICITANTE_CONTATO <> NEW.SOLICITANTE_CONTATO) THEN
    BEGIN
        HISTORICO = HISTORICO||' INFORMACOES DE CONTATO DO SOLICITANTE ALTERADAS';
    END

    IF (OLD.CHAMADO_TIPO_ID <> NEW.CHAMADO_TIPO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' OCORR.TIPO:'||OLD_CHAMADO_TIPO||'->'||NEW_CHAMADO_TIPO;
    END

    IF (OLD.CHAMADO_CATEGORIA_ID <> NEW.CHAMADO_CATEGORIA_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' OCORR.CAT.:'||OLD_CHAMADO_CATEGORIA||'->'||NEW_CHAMADO_CATEGORIA;
    END

    IF (OLD.CHAMADO_SUBCATEGORIA_ID <> NEW.CHAMADO_SUBCATEGORIA_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' OCORR.SUBCAT.:'||OLD_CHAMADO_SUBCATEGORIA||'->'||NEW_CHAMADO_SUBCATEGORIA;
    END

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

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

    IF (OLD.DESCRICAO <> NEW.DESCRICAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DESCRICAO DO PROBLEMA ALTERADA';
    END

    IF (OLD.EQUIPAMENTO_ID <> NEW.EQUIPAMENTO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' EQUIPAMENTO:'||OLD_EQUIPAMENTO||'->'||NEW_EQUIPAMENTO;
    END

    IF (OLD.DATAHORA_REG <> NEW.DATAHORA_REG) THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA/HORA:'||FORMATDATETIME_S(OLD.DATAHORA_REG)||'->'||FORMATDATETIME_S(NEW.DATAHORA_REG);
    END

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

SET TERM ; ^

ALTER TABLE TBPCM_REGISTRO_CHAMADO
    ADD DATAHORA_PREVISAO_SOLU TIMESTAMP,
    ADD DATAHORA_CHAMADO TIMESTAMP,
    ADD DATAHORA_FINALIZADO TIMESTAMP,
    ADD DATAHORA_ATENDIMENTO TIMESTAMP,
    ADD DATAHORA_SOLUCAO TIMESTAMP,
    ADD OPERADOR_ATENDIMENTO INTEGER,
    ADD OPERADOR_FINALIZACAO INTEGER;

ALTER TABLE TBPCM_REGISTRO_CHAMADO
    ALTER DATAHORA_PREVISAO TO DATAHORA_PREVISAO_RESP;

COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO.USUARIO_ID IS
'Usuário que Registrou o Chamado';

COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO.DATAHORA_REG IS
'Data e Hora que foi registrado o chamado';

COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO.DATAHORA_PREVISAO_RESP IS
'Previsão de Resposta com base na Categoria do Chamado';

COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO.DATAHORA_PREVISAO_SOLU IS
'Previsão de Solução com base na Categoria do Chamado';

COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO.DATAHORA_CHAMADO IS
'Data e Hora que ocorreu o chamado';

COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO.DATAHORA_FINALIZADO IS
'Data e Hora que foi finalizado o chamado';

COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO.DATAHORA_ATENDIMENTO IS
'Data e Hora que o Chamado foi Atendido';

COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO.DATAHORA_SOLUCAO IS
'Data e Hora que o Chamado foi Solucionado';

COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO.OPERADOR_ATENDIMENTO IS
'Operador que Atendeu o Chamado';

COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO.OPERADOR_FINALIZACAO IS
'Operador que Finalizou o Chamado';

SET TERM ^ ;

CREATE OR ALTER trigger ttbpcm_registro_chamado_b01u for tbpcm_registro_chamado
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_USUARIO VARCHAR(500);
DECLARE VARIABLE NEW_USUARIO VARCHAR(500);
DECLARE VARIABLE OLD_SETOR VARCHAR(500);
DECLARE VARIABLE NEW_SETOR VARCHAR(500); 
DECLARE VARIABLE OLD_CHAMADO_TIPO VARCHAR(500);
DECLARE VARIABLE NEW_CHAMADO_TIPO VARCHAR(500);
DECLARE VARIABLE OLD_CHAMADO_CATEGORIA VARCHAR(500);
DECLARE VARIABLE NEW_CHAMADO_CATEGORIA VARCHAR(500);
DECLARE VARIABLE OLD_CHAMADO_SUBCATEGORIA VARCHAR(500);
DECLARE VARIABLE NEW_CHAMADO_SUBCATEGORIA VARCHAR(500);
DECLARE VARIABLE OLD_EQUIPAMENTO VARCHAR(500);
DECLARE VARIABLE NEW_EQUIPAMENTO VARCHAR(500);
DECLARE VARIABLE OLD_OPERADOR_AT VARCHAR(500);
DECLARE VARIABLE NEW_OPERADOR_AT VARCHAR(500);
DECLARE VARIABLE OLD_OPERADOR_FI VARCHAR(500);
DECLARE VARIABLE NEW_OPERADOR_FI VARCHAR(500);
BEGIN

    HISTORICO = '';
    OLD_USUARIO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.USUARIO FROM TBUSUARIO A WHERE A.CODIGO = OLD.USUARIO_ID), '');
    NEW_USUARIO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.USUARIO FROM TBUSUARIO A WHERE A.CODIGO = NEW.USUARIO_ID), '');
    OLD_SETOR = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO FROM TBPCM_SETOR B WHERE B.ID = OLD.SETOR_ID), '');
    NEW_SETOR = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO FROM TBPCM_SETOR B WHERE B.ID = NEW.SETOR_ID), '');
    OLD_CHAMADO_TIPO = COALESCE((SELECT FIRST 1 FN_LPAD(C.ID, 4, '0')||' - '||C.DESCRICAO FROM TBPCM_CHAMADO_TIPO C WHERE C.ID = OLD.CHAMADO_TIPO_ID), '');
    NEW_CHAMADO_TIPO = COALESCE((SELECT FIRST 1 FN_LPAD(C.ID, 4, '0')||' - '||C.DESCRICAO FROM TBPCM_CHAMADO_TIPO C WHERE C.ID = NEW.CHAMADO_TIPO_ID), '');
    OLD_CHAMADO_CATEGORIA = COALESCE((SELECT FIRST 1 FN_LPAD(D.ID, 4, '0')||' - '||D.DESCRICAO FROM TBPCM_CHAMADO_CATEGORIA D WHERE D.ID = OLD.CHAMADO_CATEGORIA_ID), '');
    NEW_CHAMADO_CATEGORIA = COALESCE((SELECT FIRST 1 FN_LPAD(D.ID, 4, '0')||' - '||D.DESCRICAO FROM TBPCM_CHAMADO_CATEGORIA D WHERE D.ID = NEW.CHAMADO_CATEGORIA_ID), '');
    OLD_CHAMADO_SUBCATEGORIA = COALESCE((SELECT FIRST 1 FN_LPAD(E.ID, 4, '0')||' - '||E.DESCRICAO FROM TBPCM_CHAMADO_SUBCATEGORIA E WHERE E.ID = OLD.CHAMADO_SUBCATEGORIA_ID), '');
    NEW_CHAMADO_SUBCATEGORIA = COALESCE((SELECT FIRST 1 FN_LPAD(E.ID, 4, '0')||' - '||E.DESCRICAO FROM TBPCM_CHAMADO_SUBCATEGORIA E WHERE E.ID = NEW.CHAMADO_SUBCATEGORIA_ID), '');
    OLD_EQUIPAMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(F.ID, 7, '0')||' - '||F.DESCRICAO FROM TBPATRIMONIO F WHERE F.ID = OLD.EQUIPAMENTO_ID), '');
    NEW_EQUIPAMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(F.ID, 7, '0')||' - '||F.DESCRICAO FROM TBPATRIMONIO F WHERE F.ID = NEW.EQUIPAMENTO_ID), '');
    OLD_OPERADOR_AT = COALESCE((SELECT FIRST 1 FN_LPAD(I.CODIGO, 4, '0')||' - '||I.USUARIO FROM TBPCM_SETOR_OPERADOR G LEFT JOIN TBUSUARIO I ON I.CODIGO = G.USUARIO_ID WHERE G.ID = OLD.OPERADOR_FINALIZACAO), '');
    NEW_OPERADOR_AT = COALESCE((SELECT FIRST 1 FN_LPAD(I.CODIGO, 4, '0')||' - '||I.USUARIO FROM TBPCM_SETOR_OPERADOR G LEFT JOIN TBUSUARIO I ON I.CODIGO = G.USUARIO_ID WHERE G.ID = NEW.OPERADOR_FINALIZACAO), '');
    OLD_OPERADOR_FI = COALESCE((SELECT FIRST 1 FN_LPAD(J.CODIGO, 4, '0')||' - '||J.USUARIO FROM TBPCM_SETOR_OPERADOR H LEFT JOIN TBUSUARIO J ON J.CODIGO = H.USUARIO_ID WHERE H.ID = OLD.OPERADOR_FINALIZACAO), '');
    NEW_OPERADOR_FI = COALESCE((SELECT FIRST 1 FN_LPAD(J.CODIGO, 4, '0')||' - '||J.USUARIO FROM TBPCM_SETOR_OPERADOR H LEFT JOIN TBUSUARIO J ON J.CODIGO = H.USUARIO_ID WHERE H.ID = NEW.OPERADOR_FINALIZACAO), '');

    IF (OLD.STATUS > 0 AND ((OLD.SETOR_ID <> NEW.SETOR_ID) OR (OLD.URGENCIA <> NEW.URGENCIA) OR (OLD.SOLICITANTE_NOME <> NEW.SOLICITANTE_NOME) OR (OLD.SOLICITANTE_SETOR <> NEW.SOLICITANTE_SETOR) OR (OLD.SOLICITANTE_CARGO <> NEW.SOLICITANTE_CARGO) OR (OLD.CHAMADO_TIPO_ID <> NEW.CHAMADO_TIPO_ID) OR (OLD.CHAMADO_CATEGORIA_ID <> NEW.CHAMADO_CATEGORIA_ID) OR (OLD.CHAMADO_SUBCATEGORIA_ID <> NEW.CHAMADO_SUBCATEGORIA_ID) OR (OLD.EQUIPAMENTO_ID <> NEW.EQUIPAMENTO_ID) OR (OLD.DESCRICAO <> NEW.DESCRICAO))) THEN
    BEGIN
        exception "..." 'O CHAMADO:'||FN_LPAD(OLD.ID, 4, '0')||' APRESENTA SITUAÇÃO:'||IIF(OLD.STATUS = 0, 'ABERTO', IIF(OLD.STATUS = 1, 'EM ATENDIMENTO', IIF(OLD.STATUS = 2, 'AGUARDANDO INFORMAÇÕES DE TERCEIROS', IIF(OLD.STATUS = 3, 'AGUARDANDO INFORMAÇÕES DO SOLICITANTE', IIF(OLD.STATUS = 4, 'ATENDIMENTO PAUSADO', IIF(OLD.STATUS = 5, 'ATENDIDO', IIF(OLD.STATUS = 6, 'FECHADO', '')))))))||'. ALTERAÇÃO NÃO AUTORIZADA!';
    END

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

    IF (OLD.USUARIO_ID <> NEW.USUARIO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' USUARIO:'||OLD_USUARIO||'->'||NEW_USUARIO;
    END

    IF (OLD.SETOR_ID <> NEW.SETOR_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' SETOR:'||OLD_SETOR||'->'||NEW_SETOR;
    END

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

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

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

    IF (OLD.SOLICITANTE_CONTATO <> NEW.SOLICITANTE_CONTATO) THEN
    BEGIN
        HISTORICO = HISTORICO||' INFORMACOES DE CONTATO DO SOLICITANTE ALTERADAS';
    END

    IF (OLD.CHAMADO_TIPO_ID <> NEW.CHAMADO_TIPO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' OCORR.TIPO:'||OLD_CHAMADO_TIPO||'->'||NEW_CHAMADO_TIPO;
    END

    IF (OLD.CHAMADO_CATEGORIA_ID <> NEW.CHAMADO_CATEGORIA_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' OCORR.CAT.:'||OLD_CHAMADO_CATEGORIA||'->'||NEW_CHAMADO_CATEGORIA;
    END

    IF (OLD.CHAMADO_SUBCATEGORIA_ID <> NEW.CHAMADO_SUBCATEGORIA_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' OCORR.SUBCAT.:'||OLD_CHAMADO_SUBCATEGORIA||'->'||NEW_CHAMADO_SUBCATEGORIA;
    END

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

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

    IF (OLD.DESCRICAO <> NEW.DESCRICAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DESCRICAO DO PROBLEMA ALTERADA';
    END

    IF (OLD.EQUIPAMENTO_ID <> NEW.EQUIPAMENTO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' EQUIPAMENTO:'||OLD_EQUIPAMENTO||'->'||NEW_EQUIPAMENTO;
    END

    IF (OLD.DATAHORA_REG <> NEW.DATAHORA_REG) THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA/HORA REG:'||FORMATDATETIME_S(OLD.DATAHORA_REG)||'->'||FORMATDATETIME_S(NEW.DATAHORA_REG);
    END

    IF (OLD.DATAHORA_PREVISAO_RESP <> NEW.DATAHORA_PREVISAO_RESP) THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA/HORA PREV.RESP:'||FORMATDATETIME_S(OLD.DATAHORA_PREVISAO_RESP)||'->'||FORMATDATETIME_S(NEW.DATAHORA_PREVISAO_RESP);
    END

    IF (OLD.DATAHORA_PREVISAO_SOLU <> NEW.DATAHORA_PREVISAO_SOLU) THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA/HORA PREV.SOLU:'||FORMATDATETIME_S(OLD.DATAHORA_PREVISAO_SOLU)||'->'||FORMATDATETIME_S(NEW.DATAHORA_PREVISAO_SOLU);
    END

    IF (OLD.DATAHORA_CHAMADO <> NEW.DATAHORA_CHAMADO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA/HORA CHAMADO:'||FORMATDATETIME_S(OLD.DATAHORA_CHAMADO)||'->'||FORMATDATETIME_S(NEW.DATAHORA_CHAMADO);
    END

    IF (OLD.DATAHORA_FINALIZADO <> NEW.DATAHORA_FINALIZADO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA/HORA FINALIZADO:'||FORMATDATETIME_S(OLD.DATAHORA_FINALIZADO)||'->'||FORMATDATETIME_S(NEW.DATAHORA_FINALIZADO);
    END

    IF (OLD.DATAHORA_ATENDIMENTO <> NEW.DATAHORA_ATENDIMENTO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA/HORA ATENDIMENTO:'||FORMATDATETIME_S(OLD.DATAHORA_ATENDIMENTO)||'->'||FORMATDATETIME_S(NEW.DATAHORA_ATENDIMENTO);
    END

    IF (OLD.DATAHORA_SOLUCAO <> NEW.DATAHORA_SOLUCAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA/HORA SOLUCAO:'||FORMATDATETIME_S(OLD.DATAHORA_SOLUCAO)||'->'||FORMATDATETIME_S(NEW.DATAHORA_SOLUCAO);
    END

    IF (OLD.OPERADOR_ATENDIMENTO <> NEW.OPERADOR_ATENDIMENTO) THEN
    BEGIN
        HISTORICO = HISTORICO||' OPERADOR ATEND:'||OLD_OPERADOR_AT||'->'||NEW_OPERADOR_AT;
    END

    IF (OLD.OPERADOR_FINALIZACAO <> NEW.OPERADOR_FINALIZACAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' OPERADOR FINAL:'||OLD_OPERADOR_FI||'->'||NEW_OPERADOR_FI;
    END

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

SET TERM ; ^

ALTER TABLE TBPCM_REGISTRO_CHAMADO_MSG
    ADD REMETENTE CHAR(1) CHARACTER SET UTF8 COLLATE UTF8;

COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO_MSG.REMETENTE IS
'0 - OPERADOR;
1 - SOLICITANTE;';

SET TERM ^ ;

CREATE OR ALTER trigger ttbpcm_registro_cha_msg_b01u for tbpcm_registro_chamado_msg
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_USUARIO VARCHAR(500);
DECLARE VARIABLE NEW_USUARIO VARCHAR(500);
BEGIN

    HISTORICO = '';
    OLD_USUARIO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||A.USUARIO FROM TBUSUARIO A WHERE A.CODIGO = OLD.USUARIO_ID), '');
    NEW_USUARIO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||A.USUARIO FROM TBUSUARIO A WHERE A.CODIGO = NEW.USUARIO_ID), '');

    IF (OLD.MENSAGEM <> NEW.MENSAGEM) THEN
    BEGIN
        HISTORICO = HISTORICO||' CORPO DA MENSAGEM ALTERADA';
    END

    IF (OLD.DATAHORA_ENV <> NEW.DATAHORA_ENV) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.ENVIO:'||FORMATDATETIME_S(OLD.DATAHORA_ENV)||'->'||FORMATDATETIME_S(NEW.DATAHORA_ENV);
    END

    IF (OLD.USUARIO_ID <> NEW.USUARIO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' USUARIO:'||OLD_USUARIO||'->'||NEW_USUARIO;
    END

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

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'MENSAGEM:'||FN_LPAD(OLD.ID, 4, '0')||' ALTERADA:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBPCM_REGISTRO_CHAMADO', OLD.REGISTRO_CHAMADO_ID, FN_ELIPSES(HISTORICO, 500));
    END
END
^

SET TERM ; ^

