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 - ATENDIDO;
5 - FECHADO;';

ALTER TABLE TBPCM_REGISTRO_CHAMADO
    ADD SOLICITANTE_SETOR VARCHAR(50) CHARACTER SET UTF8 COLLATE UTF8;

alter table TBPCM_REGISTRO_CHAMADO
alter ID position 1;

alter table TBPCM_REGISTRO_CHAMADO
alter STATUS position 2;

alter table TBPCM_REGISTRO_CHAMADO
alter USUARIO_ID position 3;

alter table TBPCM_REGISTRO_CHAMADO
alter SETOR_ID position 4;

alter table TBPCM_REGISTRO_CHAMADO
alter SOLICITANTE_NOME position 5;

alter table TBPCM_REGISTRO_CHAMADO
alter SOLICITANTE_SETOR position 6;

alter table TBPCM_REGISTRO_CHAMADO
alter SOLICITATNE_SETOR position 7;

alter table TBPCM_REGISTRO_CHAMADO
alter SOLICITANTE_CARGO position 8;

alter table TBPCM_REGISTRO_CHAMADO
alter SOLICITANTE_CONTATO position 9;

alter table TBPCM_REGISTRO_CHAMADO
alter CHAMADO_TIPO_ID position 10;

alter table TBPCM_REGISTRO_CHAMADO
alter CHAMADO_CATEGORIA_ID position 11;

alter table TBPCM_REGISTRO_CHAMADO
alter CHAMADO_SUBCATEGORIA_ID position 12;

alter table TBPCM_REGISTRO_CHAMADO
alter PRIORIDADE position 13;

alter table TBPCM_REGISTRO_CHAMADO
alter URGENCIA position 14;

alter table TBPCM_REGISTRO_CHAMADO
alter DESCRICAO position 15;

alter table TBPCM_REGISTRO_CHAMADO
alter EQUIPAMENTO_ID position 16;

alter table TBPCM_REGISTRO_CHAMADO
alter DATAHORA_REG position 17;

alter table TBPCM_REGISTRO_CHAMADO
alter DATAHORA_PREVISAO position 18;

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 (OLD.DATAHORA_PREVISAO <> NEW.DATAHORA_PREVISAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' PREVISAO:'||FORMATDATETIME_S(OLD.DATAHORA_PREVISAO)||'->'||FORMATDATETIME_S(NEW.DATAHORA_PREVISAO);
    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 DROP SOLICITATNE_SETOR;

SET TERM ^ ;

CREATE OR ALTER function FORMATDATETIME_S (
    CAMPO timestamp)
returns varchar(20)
AS
BEGIN
 RETURN (
            lpad(EXTRACT(DAY    FROM Campo), 2, '0') ||'/'||
            lpad(EXTRACT(MONTH  FROM Campo), 2, '0') ||'/'||
            lpad(EXTRACT(YEAR   FROM Campo), 4, '0') ||' '||
            lpad(EXTRACT(hour   FROM Campo), 2, '0') ||':'||
            lpad(EXTRACT(minute FROM Campo), 2, '0') ||':'||
            lpad(REPLACE(EXTRACT(second FROM Campo), '.', ''), 2, '0')
        );
END
^

SET TERM ; ^

