ALTER TABLE TBPCM_SETOR
    ADD REQUER_MSG_OP CHAR(1) CHARACTER SET UTF8 COLLATE UTF8;

COMMENT ON COLUMN TBPCM_SETOR.REQUER_MSG_OP IS
'Requer Mensagem do Operador para Concluír o Atendimento;

0 - NÃO;
1 - SIM;';

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbpcm_setor_b01u for tbpcm_setor
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_CCUSTO VARCHAR(500);   
DECLARE VARIABLE NEW_CCUSTO VARCHAR(500);
BEGIN

    HISTORICO = '';
    OLD_CCUSTO = COALESCE((SELECT FIRST 1 FN_MASK_V2(A.CODIGO, 'CC')||' - '||A.DESCRICAO FROM TBCENTRO_DE_CUSTO A WHERE A.CODIGO = OLD.CCUSTO), '');
    NEW_CCUSTO = COALESCE((SELECT FIRST 1 FN_MASK_V2(A.CODIGO, 'CC')||' - '||A.DESCRICAO FROM TBCENTRO_DE_CUSTO A WHERE A.CODIGO = NEW.CCUSTO), '');

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

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

    IF (OLD.HORA_INICIO_EXP <> NEW.HORA_INICIO_EXP) THEN
    BEGIN
        HISTORICO = HISTORICO||' INI.EXP:'||FORMATTIME(OLD.HORA_INICIO_EXP)||'->'||FORMATTIME(NEW.HORA_INICIO_EXP);
    END

    IF (OLD.HORA_FIM_EXP <> NEW.HORA_FIM_EXP) THEN
    BEGIN
        HISTORICO = HISTORICO||' FIN.EXP:'||FORMATTIME(OLD.HORA_FIM_EXP)||'->'||FORMATTIME(NEW.HORA_FIM_EXP);
    END

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

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

SET TERM ; ^

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

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);
DECLARE VARIABLE OLD_USER_SOLICIT VARCHAR(500);
DECLARE VARIABLE NEW_USER_SOLICIT VARCHAR(500);
DECLARE VARIABLE OLD_STATUS VARCHAR(500);
DECLARE VARIABLE NEW_STATUS VARCHAR(500);

DECLARE VARIABLE USER_OP INTEGER;
DECLARE VARIABLE OLD_TIPO_STATUS VARCHAR(500);
DECLARE VARIABLE NEW_TIPO_STATUS 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_ATENDIMENTO), '');
    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_ATENDIMENTO), '');
    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), '');
    OLD_USER_SOLICIT = COALESCE((SELECT FIRST 1 FN_LPAD(K.CODIGO, 4, '0')||' - '||K.USUARIO FROM TBUSUARIO K WHERE K.CODIGO = OLD.USUARIO_SOLICITANTE_ID), '');
    NEW_USER_SOLICIT = COALESCE((SELECT FIRST 1 FN_LPAD(K.CODIGO, 4, '0')||' - '||K.USUARIO FROM TBUSUARIO K WHERE K.CODIGO = NEW.USUARIO_SOLICITANTE_ID), '');
    OLD_STATUS = COALESCE((SELECT FIRST 1 FN_LPAD(L.ID, 4, '0')||' - '||L.DESCRICAO FROM TBPCM_SETOR_STATUS L WHERE L.ID = OLD.STATUS), '');
    NEW_STATUS = COALESCE((SELECT FIRST 1 FN_LPAD(L.ID, 4, '0')||' - '||L.DESCRICAO FROM TBPCM_SETOR_STATUS L WHERE L.ID = NEW.STATUS), '');

    USER_OP = COALESCE((SELECT FIRST 1 T.ID FROM TBPCM_SETOR_OPERADOR T WHERE T.USUARIO_ID = FN_CURRENT_USER_ID() AND T.SETOR_ID = OLD.SETOR_ID), 0);
    OLD_TIPO_STATUS = COALESCE((SELECT FIRST 1 U.TIPO FROM TBPCM_SETOR_STATUS U WHERE U.ID = OLD.STATUS), '');
    NEW_TIPO_STATUS = COALESCE((SELECT FIRST 1 U.TIPO FROM TBPCM_SETOR_STATUS U WHERE U.ID = NEW.STATUS), '');

    IF (OLD_TIPO_STATUS <> 0 AND USER_OP = 0) THEN
    BEGIN
        IF (OLD_TIPO_STATUS = 3) THEN
        BEGIN
            EXCEPTION "..." 'CHAMADO COM SITUAÇÃO:'||OLD_STATUS||'. ALTERAÇÃO NÃO AUTORIZADA!';
        END
    
        IF ( (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, 6, '0')||' APRESENTA SITUAÇÃO:'||OLD_STATUS||'. ALTERAÇÃO NÃO AUTORIZADA!';
        END
    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.USUARIO_SOLICITANTE_ID <> NEW.USUARIO_SOLICITANTE_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' SOLICIT.USUARIO:'||OLD_USER_SOLICIT||'->'||NEW_USER_SOLICIT;
    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;

        IF (OLD_TIPO_STATUS = 1) THEN
        BEGIN
            
            INSERT INTO TBPCM_REGISTRO_CHAMADO_ITEM (REGISTRO_CHAMADO_ID, STATUS, DATAHORA_INI, DATAHORA_FIN, SETOR_OPERADOR_ID, OBSERVACAO, OPERACAO, USUARIO_ID, DATAHORA_REG, OPERADOR_ATENDIMENTO)
                VALUES (OLD.ID, '1', NULL, NULL, OLD.SETOR_ID, 'OPERADOR RESPONSÁVEL ALTERADO PARA '||:NEW_OPERADOR_AT||'', '1', FN_CURRENT_USER_ID(), CURRENT_TIMESTAMP, NULL);
        END
    END

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

    IF (OLD.EQUIPAMENTO_SEM_CADASTRO <> NEW.EQUIPAMENTO_SEM_CADASTRO) THEN
    BEGIN
        HISTORICO = HISTORICO||' EQUIP.SEM CAD.:'||OLD.EQUIPAMENTO_SEM_CADASTRO||'->'||NEW.EQUIPAMENTO_SEM_CADASTRO;
    END
    
    IF (OLD.ORIGEM <> NEW.ORIGEM) THEN
    BEGIN
        HISTORICO = HISTORICO||' ORIGEM DO CHAMADO ALTERADA!';
    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 ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbpcm_registro_chamado_b04u for tbpcm_registro_chamado
active before update position 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OP_SETOR INTEGER;
DECLARE VARIABLE MENSAGEM VARCHAR(5000);
DECLARE VARIABLE OLD_TIPO_STATUS VARCHAR(500);
DECLARE VARIABLE NEW_TIPO_STATUS VARCHAR(500);

DECLARE VARIABLE OLD_SETOR VARCHAR(500);
DECLARE VARIABLE NEW_SETOR VARCHAR(500);
DECLARE VARIABLE OLD_USER_SOLICIT VARCHAR(500);
DECLARE VARIABLE NEW_USER_SOLICIT 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 = '';

    IF (OLD.SETOR_ID <> NEW.SETOR_ID) THEN
    BEGIN
        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), '');

        HISTORICO = HISTORICO||'<br> <strong>Área Responsável: </strong>'||OLD_SETOR||'->'||NEW_SETOR;
    END

    IF (OLD.USUARIO_SOLICITANTE_ID <> NEW.USUARIO_SOLICITANTE_ID) THEN
    BEGIN
        OLD_USER_SOLICIT = COALESCE((SELECT FIRST 1 FN_LPAD(K.CODIGO, 4, '0')||' - '||K.USUARIO FROM TBUSUARIO K WHERE K.CODIGO = OLD.USUARIO_SOLICITANTE_ID), '');
        NEW_USER_SOLICIT = COALESCE((SELECT FIRST 1 FN_LPAD(K.CODIGO, 4, '0')||' - '||K.USUARIO FROM TBUSUARIO K WHERE K.CODIGO = NEW.USUARIO_SOLICITANTE_ID), '');

        HISTORICO = HISTORICO||'<br> <strong>Usuário Solicitante: </strong>'||OLD_USER_SOLICIT||'->'||NEW_USER_SOLICIT;
    END

    IF (OLD.SOLICITANTE_NOME <> NEW.SOLICITANTE_NOME) THEN
    BEGIN
        HISTORICO = HISTORICO||'<br> <strong>Nome: </strong>'||OLD.SOLICITANTE_NOME||'->'||NEW.SOLICITANTE_NOME;
    END

    IF (OLD.SOLICITANTE_SETOR <> NEW.SOLICITANTE_SETOR) THEN
    BEGIN
        HISTORICO = HISTORICO||'<br> <strong>Setor: </strong>'||OLD.SOLICITANTE_SETOR||'->'||NEW.SOLICITANTE_SETOR;
    END

    IF (OLD.SOLICITANTE_CARGO <> NEW.SOLICITANTE_CARGO) THEN
    BEGIN
        HISTORICO = HISTORICO||'<br> <strong>Cargo: </strong>'||OLD.SOLICITANTE_CARGO||'->'||NEW.SOLICITANTE_CARGO;
    END

    IF (OLD.CHAMADO_TIPO_ID <> NEW.CHAMADO_TIPO_ID) THEN
    BEGIN
        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), '');
    
        HISTORICO = HISTORICO||'<br> <strong>Tipo de Chamado: </strong>'||OLD_CHAMADO_TIPO||'->'||NEW_CHAMADO_TIPO;
    END

    IF (OLD.CHAMADO_CATEGORIA_ID <> NEW.CHAMADO_CATEGORIA_ID) THEN
    BEGIN
        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), '');
    
        HISTORICO = HISTORICO||'<br> <strong>Categoria: </strong>'||OLD_CHAMADO_CATEGORIA||'->'||NEW_CHAMADO_CATEGORIA;
    END

    IF (OLD.CHAMADO_SUBCATEGORIA_ID <> NEW.CHAMADO_SUBCATEGORIA_ID) THEN
    BEGIN
        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), '');
    
        HISTORICO = HISTORICO||'<br> <strong>Subcategoria: </strong>'||OLD_CHAMADO_SUBCATEGORIA||'->'||NEW_CHAMADO_SUBCATEGORIA;
    END

    IF (OLD.PRIORIDADE <> NEW.PRIORIDADE) THEN
    BEGIN
        HISTORICO = HISTORICO||'<br> <strong>Prioridade: </strong>'||IIF(OLD.PRIORIDADE = 1, 'Normal', IIF(OLD.PRIORIDADE = 2, 'Alta', IIF(OLD.PRIORIDADE = 3, 'Crítica', '')))||'->'||IIF(NEW.PRIORIDADE = 1, 'Normal', IIF(NEW.PRIORIDADE = 2, 'Alta', IIF(NEW.PRIORIDADE = 3, 'Crítica', '')));
    END

    IF (OLD.URGENCIA <> NEW.URGENCIA) THEN
    BEGIN
        HISTORICO = HISTORICO||'<br> <strong>Urgência: </strong>'||IIF(OLD.URGENCIA = '0', 'Desmarcado', 'Marcado')||'->'||IIF(NEW.URGENCIA = '0', 'Desmarcado', 'Marcado');
    END

    IF (OLD.EQUIPAMENTO_ID <> NEW.EQUIPAMENTO_ID) THEN
    BEGIN
        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), '');
    
        HISTORICO = HISTORICO||'<br> <strong>Equipamento: </strong>'||OLD_EQUIPAMENTO||'->'||NEW_EQUIPAMENTO;
    END

    IF (OLD.EQUIPAMENTO_SEM_CADASTRO <> NEW.EQUIPAMENTO_SEM_CADASTRO) THEN
    BEGIN
        HISTORICO = HISTORICO||'<br> <strong>Equipamento sem Cadastro: </strong>'||IIF(OLD.EQUIPAMENTO_SEM_CADASTRO = '0', 'Desmarcado', 'Marcado')||'->'||IIF(NEW.EQUIPAMENTO_SEM_CADASTRO = '0', 'Desmarcado', 'Marcado');
    END

    IF (OLD.SOLICITANTE_CONTATO <> NEW.SOLICITANTE_CONTATO) THEN
    BEGIN
        HISTORICO = HISTORICO||'<br><br> As informações de <strong>contato </strong>foram alteradas!';
    END

    IF (OLD.DESCRICAO <> NEW.DESCRICAO) THEN
    BEGIN
        HISTORICO = HISTORICO||'<br> <strong>Descrição </strong>do problema foi alterada!';
    END
    
    IF (HISTORICO <> '') THEN
    BEGIN
        
        OLD_TIPO_STATUS = COALESCE((SELECT FIRST 1 U.TIPO FROM TBPCM_SETOR_STATUS U WHERE U.ID = OLD.STATUS), '');
        NEW_TIPO_STATUS = COALESCE((SELECT FIRST 1 U.TIPO FROM TBPCM_SETOR_STATUS U WHERE U.ID = NEW.STATUS), '');


        OP_SETOR = COALESCE((SELECT FIRST 1 T.ID FROM TBPCM_SETOR_OPERADOR T WHERE T.USUARIO_ID = FN_CURRENT_USER_ID() AND T.SETOR_ID = OLD.SETOR_ID), 0);
        MENSAGEM = 'Informações do Chamado Alteradas: <br> '||FN_ELIPSES(HISTORICO, 500);
    
        IF (OLD_TIPO_STATUS <> 0 AND OP_SETOR > 0) THEN
        BEGIN
    
            INSERT INTO TBPCM_REGISTRO_CHAMADO_MSG (REGISTRO_CHAMADO_ID, MENSAGEM, DATAHORA_ENV, USUARIO_ID, REMETENTE, STATUS_CHAMADO, TIPO_MENSAGEM)
                VALUES (NEW.ID, :MENSAGEM, CURRENT_TIMESTAMP, FN_CURRENT_USER_ID(), '2', OLD.STATUS, '2');
    
        END
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbpcm_registro_chamado_b01d for tbpcm_registro_chamado
active before delete position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE OLD_STATUS VARCHAR(500);

DECLARE VARIABLE OLD_TIPO_STATUS VARCHAR(500);
BEGIN
    
    HISTORICO = '';
    OLD_STATUS = COALESCE((SELECT FIRST 1 FN_LPAD(L.ID, 4, '0')||' - '||L.DESCRICAO FROM TBPCM_SETOR_STATUS L WHERE L.ID = OLD.STATUS), '');

    OLD_TIPO_STATUS = COALESCE((SELECT FIRST 1 U.TIPO FROM TBPCM_SETOR_STATUS U WHERE U.ID = OLD.STATUS), '');

    IF (OLD_TIPO_STATUS <> 0) THEN
    BEGIN
        IF (OLD_TIPO_STATUS = 3) THEN
        BEGIN
            EXCEPTION "..." 'CHAMADO COM SITUAÇÃO:'||OLD_STATUS||'. EXCLUSÃO NÃO AUTORIZADA!';
        END

        EXCEPTION "..." 'O CHAMADO:'||FN_LPAD(OLD.ID, 4, '0')||' APRESENTA SITUAÇÃO:'||OLD_STATUS||'. EXCLUSÃO NÃO AUTORIZADA!';
    END

    IF (OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'REGISTRO EXCLUIDO';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBPCM_REGISTRO_CHAMADO', OLD.ID, HISTORICO);
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbpcm_registro_cha_item_b03i for tbpcm_registro_chamado_item
inactive before insert position 2
AS
DECLARE VARIABLE MENSAGEM VARCHAR(5000);
DECLARE VARIABLE STATUS_CHAMADO INTEGER;
BEGIN
    
    MENSAGEM = 'Situação do chamado:'||FN_LPAD(NEW.REGISTRO_CHAMADO_ID, 6, '0')||' alterada pelo operador. <br><br> <strong>Observação:</strong> '||FN_ELIPSES(NEW.OBSERVACAO, 500);
    STATUS_CHAMADO = COALESCE((SELECT FIRST 1 A.STATUS FROM TBPCM_REGISTRO_CHAMADO A WHERE A.ID = NEW.REGISTRO_CHAMADO_ID), 0);

    IF ( (NEW.OPERACAO = 1) OR (NEW.OPERACAO = 3) ) THEN
    BEGIN

        MENSAGEM = ''||MENSAGEM;
        
        INSERT INTO TBPCM_REGISTRO_CHAMADO_MSG (REGISTRO_CHAMADO_ID, MENSAGEM, DATAHORA_ENV, USUARIO_ID, REMETENTE, STATUS_CHAMADO, TIPO_MENSAGEM)
            VALUES (NEW.REGISTRO_CHAMADO_ID, :MENSAGEM, CURRENT_TIMESTAMP, FN_CURRENT_USER_ID(), '0', :STATUS_CHAMADO, '0');

    END
END
^

SET TERM ; ^

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


UPDATE OR INSERT INTO TBPCM_SETOR_STATUS (ID, SETOR_ID, DESCRICAO, COR, TIPO, DESCRICAO_ABREV) 
	VALUES (-1, NULL, 'TODOS', NULL, NULL, 'TODOS') 
	MATCHING (ID);

UPDATE OR INSERT INTO TBPCM_SETOR_STATUS (ID, SETOR_ID, DESCRICAO, COR, TIPO, DESCRICAO_ABREV) 
	VALUES (-2, NULL, 'NÃO CONCLUÍDO', NULL, NULL, 'NÃO CONCLUIDO') 
	MATCHING (ID);

UPDATE OR INSERT INTO TBPCM_SETOR_STATUS (ID, SETOR_ID, DESCRICAO, COR, TIPO, DESCRICAO_ABREV) 
	VALUES (-3, NULL, 'CONCLUÍDO', NULL, NULL, 'CONCLUÍDO') 
	MATCHING (ID);
	
/***********************************************************************************/
/***********************************************************************************/

SET TERM ^ ;

CREATE OR ALTER trigger ttbpcm_setor_status_b01u for tbpcm_setor_status
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (OLD.ID <= 0) THEN
    BEGIN
        EXCEPTION "..." 'Este registro não pode ser alterado!';
    END

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

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

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

    IF (OLD.DESCRICAO_ABREV <> NEW.DESCRICAO_ABREV) THEN
    BEGIN
        HISTORICO = HISTORICO||' DESC.ABREV:'||OLD.DESCRICAO_ABREV||'->'||NEW.DESCRICAO_ABREV;
    END
    
    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'STATUS: '||FN_LPAD(OLD.ID, 4, '0')||' - '||NEW.DESCRICAO||' ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBPCM_SETOR', OLD.SETOR_ID, HISTORICO);
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbpcm_setor_status_b02d for tbpcm_setor_status
active before delete position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';
    
    IF (OLD.ID <= 0) THEN
    BEGIN
        EXCEPTION "..." 'Este registro não pode ser excluído!';
    END

    IF (OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'STATUS: '||FN_LPAD(OLD.ID, 4, '0')||' - '||OLD.DESCRICAO||' EXCLUIDO';
    END
    
    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBPCM_SETOR', OLD.SETOR_ID, HISTORICO);
    END
END
^

SET TERM ; ^

