ALTER TABLE TBFOLPAG_CONTABIL
    ADD CAIXABANCO_ID INTEGER DEFAULT 0,
    ADD CLASSIFICACAO_CODIGO VARCHAR(10) CHARACTER SET UTF8 DEFAULT '' COLLATE UTF8,
    ADD CCUSTO_CODIGO VARCHAR(10) CHARACTER SET UTF8 DEFAULT '' COLLATE UTF8,
    ADD FORMA_PAGAMENTO_ID INTEGER DEFAULT 0;

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

UPDATE TBFOLPAG_CONTABIL
	SET CAIXABANCO_ID = 0,
		CLASSIFICACAO_CODIGO = '',
		CCUSTO_CODIGO = '',
		FORMA_PAGAMENTO_ID = 0;

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

CREATE INDEX ITBFOLPAG_CONTABIL_04
ON TBFOLPAG_CONTABIL (FORMA_PAGAMENTO_ID);

CREATE INDEX ITBFOLPAG_CONTABIL_03
ON TBFOLPAG_CONTABIL (CCUSTO_CODIGO);

CREATE INDEX ITBFOLPAG_CONTABIL_02
ON TBFOLPAG_CONTABIL (CLASSIFICACAO_CODIGO);

CREATE INDEX ITBFOLPAG_CONTABIL_01
ON TBFOLPAG_CONTABIL (CAIXABANCO_ID);

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbfolpag_contabil_b01u for tbfolpag_contabil
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
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(NEW.CAIXABANCO_ID <> OLD.CAIXABANCO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' CAIXA/BANCO:'||OLD.CAIXABANCO_ID||'->'||NEW.CAIXABANCO_ID;
    END

    IF(NEW.CLASSIFICACAO_CODIGO <> OLD.CLASSIFICACAO_CODIGO) THEN
    BEGIN
        HISTORICO = HISTORICO||' CLASSIF:'||FN_MASK_V2(OLD.CLASSIFICACAO_CODIGO, 'CLASS')||'->'||FN_MASK_V2(NEW.CLASSIFICACAO_CODIGO, 'CLASS');
    END

    IF(NEW.CCUSTO_CODIGO <> OLD.CCUSTO_CODIGO) THEN
    BEGIN
        HISTORICO = HISTORICO||' C.CUSTO:'||FN_MASK_V2(OLD.CCUSTO_CODIGO, 'CC')||'->'||FN_MASK_V2(NEW.CCUSTO_CODIGO, 'CC');
    END

    IF(NEW.FORMA_PAGAMENTO_ID <> OLD.FORMA_PAGAMENTO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' FORM.PAG:'||OLD.FORMA_PAGAMENTO_ID||'->'||NEW.FORMA_PAGAMENTO_ID;
    END
    
    IF(HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'REGISTRO ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBFOLPAG_CONTABIL', OLD.ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^

SET TERM ; ^

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbfolhapagamento_colab_b01u for tbfolhapagamento_colaborador
active before update position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);

DECLARE VARIABLE OLD_COLABORADOR VARCHAR(500);
DECLARE VARIABLE NEW_COLABORADOR VARCHAR(500);
DECLARE VARIABLE OLD_CARGO VARCHAR(500);
DECLARE VARIABLE NEW_CARGO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (NEW.INC_PADRAO = 0) THEN
    BEGIN

        OLD_COLABORADOR = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 5, '0')||' - '||A.PESSOAL_NOME FROM TBCOLABORADOR A WHERE A.CODIGO = OLD.COLABORADOR_ID), '');
        NEW_COLABORADOR = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 5, '0')||' - '||A.PESSOAL_NOME FROM TBCOLABORADOR A WHERE A.CODIGO = NEW.COLABORADOR_ID), '');
        OLD_CARGO = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 4, '0')||' - '||B.DESCRICAO FROM TBCARGO B WHERE B.CODIGO = OLD.CARGO_ID), '');
        NEW_CARGO = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 4, '0')||' - '||B.DESCRICAO FROM TBCARGO B WHERE B.CODIGO = NEW.CARGO_ID), '');

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

        IF (OLD.CARGO_ID <> NEW.CARGO_ID) THEN
        BEGIN
            HISTORICO = HISTORICO||' CARGO:'||OLD_CARGO||'->'||NEW_CARGO;
        END

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

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

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

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

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

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

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

    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'COLABORADOR:'||NEW_COLABORADOR||' ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBFOLHAPAGAMENTO', OLD.TBFOLHAPAGAMENTO_ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbfolhapagamento_colab_b02d for tbfolhapagamento_colaborador
active before delete position 2
AS
BEGIN
    DELETE FROM TBFOLHAPAGAMENTO_VERBAS A WHERE A.TBFOLHAPAGAMENTO_COLABORADOR_ID = OLD.ID; /* Exclui os registros filhos do colaborador da folha - verbas */
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbfolhapagamento_colab_b01d for tbfolhapagamento_colaborador
active before delete position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);

DECLARE VARIABLE OLD_COLABORADOR VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (OLD.INC_PADRAO = 0) THEN
    BEGIN

        OLD_COLABORADOR = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 5, '0')||' - '||A.PESSOAL_NOME FROM TBCOLABORADOR A WHERE A.CODIGO = OLD.COLABORADOR_ID), '');

        IF (OLD.ID > 0) THEN
        BEGIN
            HISTORICO = HISTORICO||'COLABORADOR:'||OLD_COLABORADOR||' EXCLUIDO';
        END

    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBFOLHAPAGAMENTO', OLD.TBFOLHAPAGAMENTO_ID, HISTORICO);
    END
END
^

SET TERM ; ^

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

SET TERM ^ ;

CREATE trigger ttbfolhapagamento_colab_b01ud for tbfolhapagamento_colaborador
active before update or delete position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE PROVISAO_ID INTEGER;
DECLARE VARIABLE PROVISAO_ITEM_ID INTEGER;
BEGIN

    :HISTORICO = '';

    :PROVISAO_ID = COALESCE((SELECT FIRST 1 X.AGRUPAMENTO_ID FROM TBCAIXABANCO_PREVISAO X WHERE X.COLABORADOR_ID = NEW.COLABORADOR_ID AND X.FOLHA_PAGAMENTO_ID = NEW.TBFOLHAPAGAMENTO_ID AND COALESCE(X.ORIGEM, '0') = '1'), 0);

    IF (UPDATING) THEN
    BEGIN

        :PROVISAO_ITEM_ID = COALESCE((SELECT FIRST 1 X.CONTROLE FROM TBCAIXABANCO_PREVISAO X WHERE X.COLABORADOR_ID = NEW.COLABORADOR_ID AND X.FOLHA_PAGAMENTO_ID = NEW.TBFOLHAPAGAMENTO_ID AND COALESCE(X.ORIGEM, '0') = '1'), 0);

        IF (COALESCE(:PROVISAO_ITEM_ID, 0) > 0) THEN
        BEGIN

            UPDATE TBCAIXABANCO_PREVISAO
                SET VALOR_TOTAL = NEW.VALOR_LIQUIDO
                WHERE CONTROLE = :PROVISAO_ITEM_ID
                AND FOLHA_PAGAMENTO_ID = NEW.TBFOLHAPAGAMENTO_ID
                AND COLABORADOR_ID = NEW.COLABORADOR_ID
                AND ORIGEM = '1';

            :HISTORICO = 'COLABORADOR: '||NEW.COLABORADOR_ID||' ALTERADO:'||HISTORICO||' VALOR:'||FN_FORMAT_NUMBER2(OLD.VALOR_LIQUIDO, 2)||'->'||FN_FORMAT_NUMBER2(NEW.VALOR_LIQUIDO, 2);
                
        END

    END

    IF (DELETING) THEN
    BEGIN

        :PROVISAO_ITEM_ID = COALESCE((SELECT FIRST 1 X.CONTROLE FROM TBCAIXABANCO_PREVISAO X WHERE X.COLABORADOR_ID = OLD.COLABORADOR_ID AND X.FOLHA_PAGAMENTO_ID = OLD.TBFOLHAPAGAMENTO_ID AND COALESCE(X.ORIGEM, '0') = '1'), 0);

        IF (COALESCE(:PROVISAO_ITEM_ID, 0) > 0) THEN
        BEGIN

            DELETE FROM TBCAIXABANCO_PREVISAO WHERE CONTROLE = :PROVISAO_ITEM_ID AND FOLHA_PAGAMENTO_ID = OLD.TBFOLHAPAGAMENTO_ID AND COLABORADOR_ID = OLD.COLABORADOR_ID AND ORIGEM = '1';

            :HISTORICO = 'COLABORADOR: '||OLD.COLABORADOR_ID||' EXCLUIDO';
                
        END

    END

    IF (:HISTORICO <> '' AND :PROVISAO_ID > 0) THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBCAIXABANCO_PREVISAO', :PROVISAO_ID, FN_ELIPSE(:HISTORICO, 500));
    END
END
^

SET TERM ; ^

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbcaixabanco_previsao_b04u for tbcaixabanco_previsao
active before update position 0
AS
DECLARE VARIABLE CLASSIFICACAO_ID INTEGER;
BEGIN
   CLASSIFICACAO_ID = 0;
   IF(NEW.VALOR_TOTAL            <> OLD.VALOR_TOTAL
   OR NEW.ESTABELECIMENTO_CODIGO <> OLD.ESTABELECIMENTO_CODIGO
   OR NEW.CAIXABANCO_CODIGO      <> OLD.CAIXABANCO_CODIGO
   OR NEW.CCUSTO                 <> OLD.CCUSTO
   OR NEW.EMPRESA_ID             <> OLD.EMPRESA_ID
   OR NEW.DATA_PREVISAO          <> OLD.DATA_PREVISAO)THEN
   BEGIN
       :CLASSIFICACAO_ID = COALESCE((SELECT FIRST 1 A.CONTROLE FROM TBCAIXABANCO_LANCAMENTO_CLASS A WHERE A.PREVISAO_ID = NEW.CONTROLE),0);
       IF(:CLASSIFICACAO_ID > 0)THEN
       BEGIN
          EXCEPTION "..." 'PREVISAO DOC.'||OLD.DOCUMENTO||', DT.'||FN_DATE(OLD.DATA_PREVISAO,'DD/MM/YYYY')||', R$'||OLD.VALOR_TOTAL||' JA UTILIZADA EM LANCAMENTOS DO CAIXA/BANCO. OPERACAO CANCELADA!';
       END
   END

   IF(NEW.ORIGEM = '1')THEN
   BEGIN

       IF(NEW.ESTABELECIMENTO_CODIGO <> OLD.ESTABELECIMENTO_CODIGO
       OR NEW.EMPRESA_ID             <> OLD.EMPRESA_ID
       OR NEW.TIPO                   <> OLD.TIPO
       OR NEW.SALDO_REUTILIZADO      <> OLD.SALDO_REUTILIZADO)THEN
       BEGIN
           EXCEPTION "..." 'REGISTRO GERADO VIA FOLHA DE PAGAMENTO. ALTERACAO NAO AUTORIZADA!';
       END

   END
END
^

SET TERM ; ^

