UPDATE OR INSERT INTO TBPCM_ORIGEM (ID, DESCRICAO, STATUS, SETOR_ID) 
	VALUES (0, 'HELP DESK', '1', 0) 
	MATCHING (ID);
	
/*****************************************************************/
/*****************************************************************/

ALTER TABLE TBPCM_REGISTRO_CHAMADO
    ADD SISTEMA CHAR(1) CHARACTER SET UTF8 COLLATE UTF8;

COMMENT ON COLUMN TBPCM_REGISTRO_CHAMADO.SISTEMA IS
'Sistema da Criação do Chamado.

1 - GC;
2 - WHATSAPP;
3 - TELEGRAM;
4 - APLICATIVO;

(Obs.: Será utilizado para diferenciar o local de criação do chamado - plataforma utilizada)';

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

ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B01D INACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B01I INACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B01U INACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B02D INACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B02I INACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B02U INACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B03U INACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B04U INACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B05U INACTIVE;

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbpcm_registro_chamado_b01u for tbpcm_registro_chamado
inactive 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 OLD_ORIGEM VARCHAR(500);
DECLARE VARIABLE NEW_ORIGEM 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), '');
    OLD_ORIGEM = COALESCE((SELECT FIRST 1 FN_LPAD(M.ID, 4, '0')||' - '||M.DESCRICAO FROM TBPCM_ORIGEM M WHERE M.ID = OLD.ORIGEM_ID), '');
    NEW_ORIGEM = COALESCE((SELECT FIRST 1 FN_LPAD(M.ID, 4, '0')||' - '||M.DESCRICAO FROM TBPCM_ORIGEM M WHERE M.ID = NEW.ORIGEM_ID), '');

    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.SISTEMA <> NEW.SISTEMA) THEN
    BEGIN
        HISTORICO = HISTORICO||' SISTEMA ALTERADO!';
    END

    IF (OLD.ORIGEM_ID <> NEW.ORIGEM_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' ORIGEM:'||OLD_ORIGEM||'->'||NEW_ORIGEM;
    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_b05u for tbpcm_registro_chamado
inactive before update position 4
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
BEGIN

    HISTORICO = '';
    
    IF (OLD.SISTEMA <> NEW.SISTEMA) THEN
    BEGIN
        HISTORICO = HISTORICO||FN_LPAD(OLD.SISTEMA, 2, '0')||' - '||IIF(OLD.SISTEMA = 1, 'GC', IIF(OLD.SISTEMA = 2, 'WHATSAPP', IIF(OLD.SISTEMA = 3, 'TELEGRAM', IIF(OLD.SISTEMA = 4, 'APLICATIVO', ''))))||'->'||FN_LPAD(NEW.SISTEMA, 2, '0')||' - '||IIF(NEW.SISTEMA = 1, 'GC', IIF(NEW.SISTEMA = 2, 'WHATSAPP', IIF(NEW.SISTEMA = 3, 'TELEGRAM', IIF(NEW.SISTEMA = 4, 'APLICATIVO', ''))));
    END
    
    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'SISTEMA ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBPCM_REGISTRO_CHAMADO', OLD.ID, FN_ELIPSES(HISTORICO, 500));
    END
END
^

SET TERM ; ^

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

UPDATE TBPCM_REGISTRO_CHAMADO SET SISTEMA = ORIGEM;

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

ALTER TABLE TBPCM_REGISTRO_CHAMADO DROP ORIGEM;

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

ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B01D ACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B01I ACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B01U ACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B02D ACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B02I ACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B02U ACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B03U ACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B04U ACTIVE;
ALTER TRIGGER TTBPCM_REGISTRO_CHAMADO_B05U ACTIVE;