ALTER TABLE TBFOLPAG_VERBA_COLABORADOR
    ADD TIPO CHAR(1) CHARACTER SET UTF8 DEFAULT '0' COLLATE UTF8;

COMMENT ON COLUMN TBFOLPAG_VERBA_COLABORADOR.TIPO IS
'0 - VALOR FIXO (R$);
1 - PERCENTUAL (%);
2 - QUANTIDADE (DIAS);';

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbfolpag_verba_colab_b01u for tbfolpag_verba_colaborador
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);

DECLARE VARIABLE OLD_COLABORADOR VARCHAR(500);
DECLARE VARIABLE NEW_COLABORADOR VARCHAR(500);
DECLARE VARIABLE OLD_VERBA VARCHAR(500);
DECLARE VARIABLE NEW_VERBA VARCHAR(500);
DECLARE VARIABLE OLD_FOLHA_PAGAMENTO VARCHAR(500);
DECLARE VARIABLE NEW_FOLHA_PAGAMENTO VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    OLD_COLABORADOR = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 6, '0')||' - '||C.PESSOAL_NOME FROM TBCOLABORADOR C WHERE C.CODIGO = OLD.COLABORADOR_ID), '');
    NEW_COLABORADOR = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 6, '0')||' - '||C.PESSOAL_NOME FROM TBCOLABORADOR C WHERE C.CODIGO = NEW.COLABORADOR_ID), '');
    OLD_VERBA = COALESCE((SELECT FIRST 1 FN_LPAD(V.ID, 6, '0')||' - '||V.DESCRICAO_ABREVIADA FROM TBFOLPAG_VERBA V WHERE V.ID = OLD.VERBA_ID), '');
    NEW_VERBA = COALESCE((SELECT FIRST 1 FN_LPAD(V.ID, 6, '0')||' - '||V.DESCRICAO_ABREVIADA FROM TBFOLPAG_VERBA V WHERE V.ID = NEW.VERBA_ID), '');
    OLD_FOLHA_PAGAMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(F.ID, 4, '0')||' - '||F.DESCRICAO FROM TBFOLPAG_CONTABIL F WHERE F.ID = OLD.FOLHA_PAGAMENTO_ID), '');
    NEW_FOLHA_PAGAMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(F.ID, 4, '0')||' - '||F.DESCRICAO FROM TBFOLPAG_CONTABIL F WHERE F.ID = NEW.FOLHA_PAGAMENTO_ID), '');

    IF (OLD.COLABORADOR_ID <> NEW.COLABORADOR_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' COLAB:'||OLD_COLABORADOR||'->'||NEW_COLABORADOR;
    END

    IF (OLD.VERBA_ID <> NEW.VERBA_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' VERBA:'||OLD_VERBA||'->'||NEW_VERBA;
    END

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

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

    IF (OLD.VALOR <> NEW.VALOR) THEN
    BEGIN
        HISTORICO = HISTORICO||' VALOR:R$'||FN_FORMAT_NUMBER2(OLD.VALOR, 2)||'->R$'||FN_FORMAT_NUMBER2(NEW.VALOR, 2);
    END

    IF (OLD.FOLHA_PAGAMENTO_ID <> NEW.FOLHA_PAGAMENTO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' FOLHA PAG:'||OLD_FOLHA_PAGAMENTO||'->'||NEW_FOLHA_PAGAMENTO;
    END

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

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

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

SET TERM ; ^

---------------------------------------------------------------------------------------------------------

SET TERM ^ ;

CREATE OR ALTER trigger ttbfolpag_verba_colab_b01i for tbfolpag_verba_colaborador
active before insert position 0
AS
DECLARE VARIABLE VERBA INTEGER;

DECLARE VARIABLE NEW_COLABORADOR VARCHAR(500);
DECLARE VARIABLE NEW_VERBA VARCHAR(500);
BEGIN
    
    VERBA = COALESCE((SELECT FIRST 1 A.ID FROM TBFOLPAG_VERBA_COLABORADOR A WHERE A.COLABORADOR_ID = NEW.COLABORADOR_ID AND A.VERBA_ID = NEW.VERBA_ID), 0);

    NEW_COLABORADOR = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 5, '0')||' - '||B.PESSOAL_NOME FROM TBCOLABORADOR B WHERE B.CODIGO = NEW.COLABORADOR_ID), '');
    NEW_VERBA = COALESCE((SELECT FIRST 1 FN_LPAD(C.ID, 4, '0')||' - '||C.DESCRICAO_ABREVIADA FROM TBFOLPAG_VERBA C WHERE C.ID = NEW.VERBA_ID), '');

    IF (VERBA > 0) THEN
    BEGIN
        EXCEPTION "..." 'O COLABORADOR:'||NEW_COLABORADOR||' JA FOI REGISTRADO COM A VERBA:'||NEW_VERBA||'. OPERACAO ABORTADA!';
    END

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

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbfolpag_verba_colab_b01u for tbfolpag_verba_colaborador
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE VERBA INTEGER;

DECLARE VARIABLE OLD_COLABORADOR VARCHAR(500);
DECLARE VARIABLE NEW_COLABORADOR VARCHAR(500);
DECLARE VARIABLE OLD_VERBA VARCHAR(500);
DECLARE VARIABLE NEW_VERBA VARCHAR(500);
DECLARE VARIABLE OLD_FOLHA_PAGAMENTO VARCHAR(500);
DECLARE VARIABLE NEW_FOLHA_PAGAMENTO VARCHAR(500);
BEGIN
    
    HISTORICO = '';
    VERBA = COALESCE((SELECT FIRST 1 A.ID FROM TBFOLPAG_VERBA_COLABORADOR A WHERE A.COLABORADOR_ID = NEW.COLABORADOR_ID AND A.VERBA_ID = NEW.VERBA_ID), 0);

    OLD_COLABORADOR = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 6, '0')||' - '||C.PESSOAL_NOME FROM TBCOLABORADOR C WHERE C.CODIGO = OLD.COLABORADOR_ID), '');
    NEW_COLABORADOR = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 6, '0')||' - '||C.PESSOAL_NOME FROM TBCOLABORADOR C WHERE C.CODIGO = NEW.COLABORADOR_ID), '');
    OLD_VERBA = COALESCE((SELECT FIRST 1 FN_LPAD(V.ID, 6, '0')||' - '||V.DESCRICAO_ABREVIADA FROM TBFOLPAG_VERBA V WHERE V.ID = OLD.VERBA_ID), '');
    NEW_VERBA = COALESCE((SELECT FIRST 1 FN_LPAD(V.ID, 6, '0')||' - '||V.DESCRICAO_ABREVIADA FROM TBFOLPAG_VERBA V WHERE V.ID = NEW.VERBA_ID), '');
    OLD_FOLHA_PAGAMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(F.ID, 4, '0')||' - '||F.DESCRICAO FROM TBFOLPAG_CONTABIL F WHERE F.ID = OLD.FOLHA_PAGAMENTO_ID), '');
    NEW_FOLHA_PAGAMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(F.ID, 4, '0')||' - '||F.DESCRICAO FROM TBFOLPAG_CONTABIL F WHERE F.ID = NEW.FOLHA_PAGAMENTO_ID), '');

    IF (OLD.COLABORADOR_ID <> NEW.COLABORADOR_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' COLAB:'||OLD_COLABORADOR||'->'||NEW_COLABORADOR;

        IF (VERBA > 0) THEN
        BEGIN
            EXCEPTION "..." 'O COLABORADOR:'||NEW_COLABORADOR||' JA FOI REGISTRADO COM A VERBA:'||NEW_VERBA||'. OPERACAO ABORTADA!';
        END
    END

    IF (OLD.VERBA_ID <> NEW.VERBA_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' VERBA:'||OLD_VERBA||'->'||NEW_VERBA;

        IF (VERBA > 0) THEN
        BEGIN
            EXCEPTION "..." 'O COLABORADOR:'||NEW_COLABORADOR||' JA FOI REGISTRADO COM A VERBA:'||NEW_VERBA||'. OPERACAO ABORTADA!';
        END
    END

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

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

    IF (OLD.VALOR <> NEW.VALOR) THEN
    BEGIN
        HISTORICO = HISTORICO||' VALOR:R$'||FN_FORMAT_NUMBER2(OLD.VALOR, 2)||'->R$'||FN_FORMAT_NUMBER2(NEW.VALOR, 2);
    END

    IF (OLD.FOLHA_PAGAMENTO_ID <> NEW.FOLHA_PAGAMENTO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' FOLHA PAG:'||OLD_FOLHA_PAGAMENTO||'->'||NEW_FOLHA_PAGAMENTO;
    END

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

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

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

SET TERM ; ^

---------------------------------------------------------------------------------------------------------

ALTER TABLE TBFOLPAG_CONTABIL
    ADD PERMITIR_VALORES_ZERADOS CHAR(1) CHARACTER SET UTF8 DEFAULT '1' COLLATE UTF8;

COMMENT ON COLUMN TBFOLPAG_CONTABIL.PERMITIR_VALORES_ZERADOS IS
'0 - NÃO;
1 - SIM;';

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbfolpag_contabil_b01u for tbfolpag_contabil
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    HISTORICO = '';
    IF(NEW.DESCRICAO <> OLD.DESCRICAO) THEN
    BEGIN
         HISTORICO = HISTORICO||'DESC:'||OLD.DESCRICAO||' -> '||NEW.DESCRICAO;
    END            

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

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

    IF(NEW.PERMITIR_VALORES_ZERADOS <> OLD.PERMITIR_VALORES_ZERADOS) THEN
    BEGIN
        HISTORICO = HISTORICO||'PERMT.VAL.ZERADOS:'||OLD.PERMITIR_VALORES_ZERADOS||' -> '||NEW.PERMITIR_VALORES_ZERADOS;
    END 
    
    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBFOLPAG_CONTABIL',NEW.ID,HISTORICO);
    END
END
^

SET TERM ; ^

---------------------------------------------------------------------------------------------------------

ALTER TABLE TBCOLABORADOR_DESCONTOS
    ADD TIPO CHAR(1) CHARACTER SET UTF8 COLLATE UTF8;

COMMENT ON COLUMN TBCOLABORADOR_DESCONTOS.TIPO IS
'0 - VALOR FIXO (R$);
1 - PERCENTUAL (%);
2 - QUANTIDADE (DIAS);';

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbcolaborador_descontos_b01u for tbcolaborador_descontos
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);

DECLARE VARIABLE OLD_FOLHA_PAGAMENTO VARCHAR(500);
DECLARE VARIABLE NEW_FOLHA_PAGAMENTO VARCHAR(500);
BEGIN

    HISTORICO = '';

    OLD_FOLHA_PAGAMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(F.ID, 4, '0')||' - '||F.DESCRICAO FROM TBFOLPAG_CONTABIL F WHERE F.ID = OLD.FOLHA_PAGAMENTO_ID), '');
    NEW_FOLHA_PAGAMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(F.ID, 4, '0')||' - '||F.DESCRICAO FROM TBFOLPAG_CONTABIL F WHERE F.ID = NEW.FOLHA_PAGAMENTO_ID), '');

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

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

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

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

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

    IF(NEW.VALOR <> OLD.VALOR) THEN
    BEGIN
        HISTORICO = HISTORICO||' VALOR:'||'R$'||CAST(OLD.VALOR AS NUMERIC(15,2))||'->'||'R$'||CAST(NEW.VALOR AS NUMERIC(15,2));
    END

    IF (OLD.FOLHA_PAGAMENTO_ID <> NEW.FOLHA_PAGAMENTO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' FOLHA PAG:'||OLD_FOLHA_PAGAMENTO||'->'||NEW_FOLHA_PAGAMENTO;
    END 

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

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

SET TERM ; ^

UPDATE TBFOLPAG_CONTABIL SET PERMITIR_VALORES_ZERADOS = '1';

---------------------------------------------------------------------------------------------------------

CREATE INDEX ITBFOLHAPAGAMENTO_COLABORAD_04
ON TBFOLHAPAGAMENTO_COLABORADOR (INC_PADRAO);

CREATE INDEX ITBFOLHAPAGAMENTO_VERBAS_03
ON TBFOLHAPAGAMENTO_VERBAS (INC_PADRAO);

