ALTER TABLE TBFOLHAPAGAMENTO
    ADD BLOQUEADO INTEGER DEFAULT 0;


COMMENT ON COLUMN TBFOLHAPAGAMENTO.BLOQUEADO IS
'0 - DESBLOQUEADO;
1 - BLOQUEADO;';


UPDATE TBFOLHAPAGAMENTO
	SET BLOQUEADO = 0
	WHERE BLOQUEADO IS NULL;

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

SET TERM ^ ;

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

DECLARE VARIABLE OLD_ESTABELECIMENTO VARCHAR(500);
DECLARE VARIABLE NEW_ESTABELECIMENTO VARCHAR(500);
DECLARE VARIABLE OLD_FOLPAG_CONTABIL VARCHAR(500);  
DECLARE VARIABLE NEW_FOLPAG_CONTABIL VARCHAR(500);
BEGIN
    
    HISTORICO = '';

    OLD_ESTABELECIMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.NOMEFANTASIA FROM TBESTABELECIMENTO A WHERE A.CODIGO = OLD.ESTABELECIMENTO_ID), '');
    NEW_ESTABELECIMENTO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.NOMEFANTASIA FROM TBESTABELECIMENTO A WHERE A.CODIGO = NEW.ESTABELECIMENTO_ID), '');
    OLD_FOLPAG_CONTABIL = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 6, '0')||' - '||B.DESCRICAO_ABREVIADA FROM TBFOLPAG_VERBA B WHERE B.ID = OLD.FOLPAG_CONTABIL_ID), '');
    NEW_FOLPAG_CONTABIL = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 6, '0')||' - '||B.DESCRICAO_ABREVIADA FROM TBFOLPAG_VERBA B WHERE B.ID = NEW.FOLPAG_CONTABIL_ID), '');

    IF (OLD.ESTABELECIMENTO_ID <> NEW.ESTABELECIMENTO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' ESTAB:'||OLD_ESTABELECIMENTO||'->'||NEW_ESTABELECIMENTO;
    END

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

    IF (OLD.FOLPAG_CONTABIL_ID <> NEW.FOLPAG_CONTABIL_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' FOLHA PAG:'||OLD_FOLPAG_CONTABIL||'->'||NEW_FOLPAG_CONTABIL;
    END

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

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

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

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

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

SET TERM ; ^

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbfolhapagamento_b01ud for tbfolhapagamento
active before update or delete position 0
AS
BEGIN

    IF (OLD.BLOQUEADO = 1 AND NEW.BLOQUEADO = 1) THEN
    BEGIN
        EXCEPTION "..." 'FOLHA DE PAGAMENTO BLOQUEADA PARA ALTERACAO. OPERACAO ABORTADA!';
    END

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER 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;
DECLARE VARIABLE BLOQUEADO 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

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

    :BLOQUEADO = COALESCE((SELECT FIRST 1 A.BLOQUEADO FROM TBFOLHAPAGAMENTO A WHERE A.ID = OLD.TBFOLHAPAGAMENTO_ID), 0);

    IF (:BLOQUEADO = 1) THEN
    BEGIN
        EXCEPTION "..." 'FOLHA DE PAGAMENTO BLOQUEADA PARA ALTERACAO. OPERACAO ABORTADA!';
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbfolhapagamento_verbas_b01ud for tbfolhapagamento_verbas
active before update or delete position 0
AS
DECLARE VARIABLE BLOQUEADO INTEGER;
BEGIN

    :BLOQUEADO = COALESCE((SELECT FIRST 1 A.BLOQUEADO FROM TBFOLHAPAGAMENTO A, TBFOLHAPAGAMENTO_COLABORADOR B WHERE A.ID = B.TBFOLHAPAGAMENTO_ID AND B.ID = OLD.TBFOLHAPAGAMENTO_COLABORADOR_ID), 0);

    IF (:BLOQUEADO = 1) THEN
    BEGIN
        EXCEPTION "..." 'FOLHA DE PAGAMENTO BLOQUEADA PARA ALTERACAO. OPERACAO ABORTADA!';
    END

END
^

SET TERM ; ^

