ALTER TABLE TBFOLPAG_VERBA
    ADD PAGAMENTO_FORMA_ID INTEGER;

CREATE INDEX ITBFOLPAG_VERBA_04
ON TBFOLPAG_VERBA (PAGAMENTO_FORMA_ID);

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

UPDATE TBFOLPAG_VERBA
	SET PAGAMENTO_FORMA_ID = 0
	WHERE PAGAMENTO_FORMA_ID IS NULL;

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbfolpag_verba_b01u for tbfolpag_verba
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE CODIGO INTEGER;
BEGIN
    HISTORICO = '';
    IF(OLD.CONTACONTABIL <> NEW.CONTACONTABIL) THEN
    BEGIN
        HISTORICO = HISTORICO||' C.Contabil: '||OLD.CONTACONTABIL||'->'||NEW.CONTACONTABIL;
    END

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

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

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

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

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

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

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

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

    if(OLD.CODIGO <> NEW.CODIGO) THEN
    BEGIN
        HISTORICO = HISTORICO||' Codigo: '||OLD.CODIGO||'->'||NEW.CODIGO;
        CODIGO = COALESCE((SELECT FIRST 1 A.CODIGO FROM TBFOLPAG_VERBA A WHERE A.CODIGO = NEW.CODIGO AND A.ID <> NEW.ID),0);
    END
    IF(CODIGO > 0)THEN
        BEGIN
           EXCEPTION "..." 'VERBA CODIGO: '||CODIGO||' JÁ CADASTRADA! ';
        END
    
    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBFOLPAG_VERBA',NEW.ID,HISTORICO);
    END
END
^

SET TERM ; ^

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

/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/


CREATE GENERATOR GTBFOLHAPAGAMENTO_FORMAS;

CREATE TABLE TBFOLHAPAGAMENTO_FORMAS (
    ID                               BIGINT NOT NULL,
    TBFOLHAPAGAMENTO_COLABORADOR_ID  INTEGER,
    PAGAMENTO_FORMA_ID               INTEGER,
    VALOR                            NUMERIC(15,2),
    INC_PADRAO                       CHAR(1) DEFAULT '0'
);




/******************************************************************************/
/****                             Primary keys                             ****/
/******************************************************************************/

ALTER TABLE TBFOLHAPAGAMENTO_FORMAS ADD CONSTRAINT PK_TBFOLHAPAGAMENTO_FORMAS PRIMARY KEY (ID);


/******************************************************************************/
/****                               Indices                                ****/
/******************************************************************************/

CREATE INDEX ITBFOLHAPAGAMENTO_FORMAS_01 ON TBFOLHAPAGAMENTO_FORMAS (TBFOLHAPAGAMENTO_COLABORADOR_ID);
CREATE INDEX ITBFOLHAPAGAMENTO_FORMAS_02 ON TBFOLHAPAGAMENTO_FORMAS (PAGAMENTO_FORMA_ID);
CREATE INDEX ITBFOLHAPAGAMENTO_FORMAS_03 ON TBFOLHAPAGAMENTO_FORMAS (INC_PADRAO);


/******************************************************************************/
/****                               Triggers                               ****/
/******************************************************************************/



SET TERM ^ ;



/******************************************************************************/
/****                         Triggers for tables                          ****/
/******************************************************************************/



/* Trigger: TTBFOLHAPAGAMENTO_FORMAS_B01D */
CREATE OR ALTER TRIGGER TTBFOLHAPAGAMENTO_FORMAS_B01D FOR TBFOLHAPAGAMENTO_FORMAS
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE TBFOLHAPAGAMENTO_ID INTEGER;
DECLARE VARIABLE COLABORADOR varchar(500);

DECLARE VARIABLE OLD_PAGAMENTO_FORMA VARCHAR(500);
BEGIN

    HISTORICO = '';
    TBFOLHAPAGAMENTO_ID = COALESCE((SELECT FIRST 1 A.TBFOLHAPAGAMENTO_ID FROM TBFOLHAPAGAMENTO_COLABORADOR A WHERE A.ID = OLD.TBFOLHAPAGAMENTO_COLABORADOR_ID), 0);
    COLABORADOR = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 5, '0')||' - '||B.PESSOAL_NOME FROM TBFOLHAPAGAMENTO_COLABORADOR A INNER JOIN TBCOLABORADOR B ON B.CODIGO = A.COLABORADOR_ID WHERE A.ID = OLD.TBFOLHAPAGAMENTO_COLABORADOR_ID), 0);

    IF (OLD.INC_PADRAO = 0) THEN
    BEGIN

        OLD_PAGAMENTO_FORMA = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 6, '0')||' - '||C.DESCRICAO FROM TBPAGAMENTO_FORMA C WHERE C.CODIGO = OLD.PAGAMENTO_FORMA_ID), '');

        IF (OLD.ID > 0) THEN
        BEGIN
            HISTORICO = HISTORICO||'FORMA DE PAGAMENTO:'||OLD_PAGAMENTO_FORMA||' EXCLUIDA NO COLABORADOR:'||COLABORADOR;
        END

    END

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


/* Trigger: TTBFOLHAPAGAMENTO_FORMAS_B01I */
CREATE OR ALTER TRIGGER TTBFOLHAPAGAMENTO_FORMAS_B01I FOR TBFOLHAPAGAMENTO_FORMAS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
    IF (NEW.ID IS NULL) THEN
        NEW.ID = GEN_ID(GTBFOLHAPAGAMENTO_FORMAS, 1);
END
^


/* Trigger: TTBFOLHAPAGAMENTO_FORMAS_B01U */
CREATE OR ALTER TRIGGER TTBFOLHAPAGAMENTO_FORMAS_B01U FOR TBFOLHAPAGAMENTO_FORMAS
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE TBFOLHAPAGAMENTO_ID INTEGER;
DECLARE VARIABLE COLABORADOR varchar(500);

DECLARE VARIABLE OLD_PAGAMENTO_FORMA VARCHAR(500);
DECLARE VARIABLE NEW_PAGAMENTO_FORMA VARCHAR(500);
BEGIN

    HISTORICO = '';
    TBFOLHAPAGAMENTO_ID = COALESCE((SELECT FIRST 1 A.TBFOLHAPAGAMENTO_ID FROM TBFOLHAPAGAMENTO_COLABORADOR A WHERE A.ID = OLD.TBFOLHAPAGAMENTO_COLABORADOR_ID), 0);
    COLABORADOR = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 5, '0')||' - '||B.PESSOAL_NOME FROM TBFOLHAPAGAMENTO_COLABORADOR A INNER JOIN TBCOLABORADOR B ON B.CODIGO = A.COLABORADOR_ID WHERE A.ID = OLD.TBFOLHAPAGAMENTO_COLABORADOR_ID), 0);

    IF (OLD.INC_PADRAO = 0) THEN
    BEGIN

        OLD_PAGAMENTO_FORMA = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 6, '0')||' - '||C.DESCRICAO FROM TBPAGAMENTO_FORMA C WHERE C.CODIGO = OLD.PAGAMENTO_FORMA_ID), '');
        NEW_PAGAMENTO_FORMA = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 6, '0')||' - '||C.DESCRICAO FROM TBPAGAMENTO_FORMA C WHERE C.CODIGO = NEW.PAGAMENTO_FORMA_ID), '');

        IF (OLD.PAGAMENTO_FORMA_ID <> NEW.PAGAMENTO_FORMA_ID) THEN
        BEGIN
            HISTORICO = HISTORICO||' VERBA:'||OLD_PAGAMENTO_FORMA||'->'||NEW_PAGAMENTO_FORMA;
        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

    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'FORMA DE PAGAMENTO:'||NEW_PAGAMENTO_FORMA||' DO COLABORADOR:'||COLABORADOR||' ALTERADA:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBFOLHAPAGAMENTO', TBFOLHAPAGAMENTO_ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^


/* Trigger: TTBFOLHAPAGAMENTO_FORMAS_B01UD */
CREATE OR ALTER TRIGGER TTBFOLHAPAGAMENTO_FORMAS_B01UD FOR TBFOLHAPAGAMENTO_FORMAS
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
^


/* Trigger: TTBFOLHAPAGAMENTO_FORMAS_B02I */
CREATE OR ALTER TRIGGER TTBFOLHAPAGAMENTO_FORMAS_B02I FOR TBFOLHAPAGAMENTO_FORMAS
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE TBFOLHAPAGAMENTO_ID INTEGER;
DECLARE VARIABLE COLABORADOR varchar(500);

DECLARE VARIABLE NEW_PAGAMENTO_FORMA VARCHAR(500);
BEGIN

    HISTORICO = '';
    TBFOLHAPAGAMENTO_ID = COALESCE((SELECT FIRST 1 A.TBFOLHAPAGAMENTO_ID FROM TBFOLHAPAGAMENTO_COLABORADOR A WHERE A.ID = NEW.TBFOLHAPAGAMENTO_COLABORADOR_ID), 0);
    COLABORADOR = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 5, '0')||' - '||B.PESSOAL_NOME FROM TBFOLHAPAGAMENTO_COLABORADOR A INNER JOIN TBCOLABORADOR B ON B.CODIGO = A.COLABORADOR_ID WHERE A.ID = NEW.TBFOLHAPAGAMENTO_COLABORADOR_ID), 0);

    IF (NEW.INC_PADRAO = 0) THEN
    BEGIN

        NEW_PAGAMENTO_FORMA = COALESCE((SELECT FIRST 1 FN_LPAD(C.CODIGO, 6, '0')||' - '||C.DESCRICAO FROM TBPAGAMENTO_FORMA C WHERE C.CODIGO = NEW.PAGAMENTO_FORMA_ID), '');

        IF (NEW.ID > 0) THEN
        BEGIN
            HISTORICO = HISTORICO||'FORMA DE PAGAMENTO:'||NEW_PAGAMENTO_FORMA||' INCLUIDA NO COLABORADOR:'||COLABORADOR;
        END

    END

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

SET TERM ; ^



/******************************************************************************/
/****                         Fields descriptions                          ****/
/******************************************************************************/

COMMENT ON COLUMN TBFOLHAPAGAMENTO_FORMAS.INC_PADRAO IS 
'0 - Incluído Manualmente;
1 - Incluído via geração;';

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

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 */
    DELETE FROM TBFOLHAPAGAMENTO_FORMAS B WHERE B.TBFOLHAPAGAMENTO_COLABORADOR_ID = OLD.ID; /* Exclui os registros filhos do colaborador da folha - formas de pagamento */
END
^

SET TERM ; ^

