DROP TRIGGER TTBPCM_REGISTRO_CHAMADO_B04U;
DROP TRIGGER TTBPCM_REGISTRO_CHA_MSG_B01I;
DROP TRIGGER TTBPCM_REGISTRO_CHA_MSG_B01U;

ALTER TABLE TBPCM_REGISTRO_CHAMADO_MSG ADD STATUS_CHAMADO2 INTEGER;
UPDATE TBPCM_REGISTRO_CHAMADO_MSG SET STATUS_CHAMADO2 = STATUS_CHAMADO;
ALTER TABLE TBPCM_REGISTRO_CHAMADO_MSG DROP STATUS_CHAMADO;
ALTER TABLE TBPCM_REGISTRO_CHAMADO_MSG ADD STATUS_CHAMADO INTEGER;
UPDATE TBPCM_REGISTRO_CHAMADO_MSG SET STATUS_CHAMADO = STATUS_CHAMADO2;
ALTER TABLE TBPCM_REGISTRO_CHAMADO_MSG DROP STATUS_CHAMADO2;

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_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

        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.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_cha_msg_b01i for tbpcm_registro_chamado_msg
active before insert position 0
AS
BEGIN
    
    IF (NEW.REMETENTE = 1 AND NEW.STATUS_CHAMADO > 4) THEN
    BEGIN
        EXCEPTION "..." 'CHAMADO JÁ FINALIZADO. INCLUSÃO NÃO AUTORIZADA!';
    END

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

SET TERM ; ^

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 (OLD.STATUS_CHAMADO <> NEW.STATUS_CHAMADO) THEN
    BEGIN
        HISTORICO = HISTORICO||' STATUS CHAMADO:'||OLD.STATUS_CHAMADO||'->'||NEW.STATUS_CHAMADO;
    END

    IF (OLD.TIPO_MENSAGEM <> NEW.TIPO_MENSAGEM) THEN
    BEGIN
        HISTORICO = HISTORICO||' TIPO MENSAGEM:'||OLD.TIPO_MENSAGEM||'->'||NEW.TIPO_MENSAGEM;
    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 ; ^

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

COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO_MSG.STATUS_CHAMADO IS
'Status do Chamado no Momento da Mensagem.

0 - ABERTO;
1 - EM ATENDIMENTO;
2 - AGUARDANDO TERCEIROS;
3 - AGUARDANDO O SOLICITANTE;
4 - ATENDIMENTO PAUSADO;
5 - ATENDIDO;
6 - CANCELADO;
7 - AGUARDANDO APROVAÇÃO DE COTAÇÃO;
8 - EM ANÁLISE DE VIABILIDADE;
9 - CORRIGINDO BUG;
10 - EM DESENVOLVIMENTO;
11 - ENCAMINHADO PARA ANÁLISE;
12 - AGUARDANDO VERIFICAÇÃO DA MANUTENÇÃO;
13 - ENVIADO PARA ASSISTÊNCIA TÉCNICA;';

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

ALTER TABLE TBPCM_REGISTRO_CHAMADO_MSG
ALTER ID POSITION 1;

ALTER TABLE TBPCM_REGISTRO_CHAMADO_MSG
ALTER REGISTRO_CHAMADO_ID POSITION 2;

ALTER TABLE TBPCM_REGISTRO_CHAMADO_MSG
ALTER MENSAGEM POSITION 3;

ALTER TABLE TBPCM_REGISTRO_CHAMADO_MSG
ALTER DATAHORA_ENV POSITION 4;

ALTER TABLE TBPCM_REGISTRO_CHAMADO_MSG
ALTER USUARIO_ID POSITION 5;

ALTER TABLE TBPCM_REGISTRO_CHAMADO_MSG
ALTER REMETENTE POSITION 6;

ALTER TABLE TBPCM_REGISTRO_CHAMADO_MSG
ALTER STATUS_CHAMADO POSITION 7;

ALTER TABLE TBPCM_REGISTRO_CHAMADO_MSG
ALTER TIPO_MENSAGEM POSITION 8;
