ALTER TABLE TBPCM_REGISTRO_CHAMADO_ITEM
    ADD OPERACAO CHAR(1),
    ADD USUARIO_ID INTEGER,
    ADD DATAHORA_REG TIMESTAMP;

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

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbpcm_registro_cha_item_b01u for tbpcm_registro_chamado_item
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_SETOR_OPERADOR VARCHAR(500);
DECLARE VARIABLE NEW_SETOR_OPERADOR VARCHAR(500);
DECLARE VARIABLE OLD_USUARIO VARCHAR(500);
DECLARE VARIABLE NEW_USUARIO VARCHAR(500);
BEGIN
    
    HISTORICO = '';
    OLD_SETOR_OPERADOR = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 4, '0')||' - '||B.USUARIO FROM TBPCM_SETOR_OPERADOR A LEFT JOIN TBUSUARIO B ON B.CODIGO = A.USUARIO_ID WHERE A.ID = OLD.SETOR_OPERADOR_ID), '');
    NEW_SETOR_OPERADOR = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 4, '0')||' - '||B.USUARIO FROM TBPCM_SETOR_OPERADOR A LEFT JOIN TBUSUARIO B ON B.CODIGO = A.USUARIO_ID WHERE A.ID = NEW.SETOR_OPERADOR_ID), '');
    OLD_USUARIO = COALESCE((SELECT FIRST 1 FN_LPAD(U.CODIGO, 4, '0')||' - '||U.USUARIO FROM TBUSUARIO U WHERE U.CODIGO = OLD.USUARIO_ID), '');
    NEW_USUARIO = COALESCE((SELECT FIRST 1 FN_LPAD(U.CODIGO, 4, '0')||' - '||U.USUARIO FROM TBUSUARIO U WHERE U.CODIGO = NEW.USUARIO_ID), '');

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

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

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

    IF (OLD.SETOR_OPERADOR_ID <> NEW.SETOR_OPERADOR_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' OPERADOR:'||OLD_SETOR_OPERADOR||'->'||NEW_SETOR_OPERADOR;
    END

    IF (OLD.OBSERVACAO <> NEW.OBSERVACAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' OBSERVACOES ALTERADAS';
    END

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

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

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

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'SITUACAO:'||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 ; ^
