
CREATE GENERATOR GTBDRE_GER_APRE_AJUSTE;

CREATE TABLE TBDRE_GER_APRE_AJUSTE (
    ID           INTEGER NOT NULL,
    DRE_ID       INTEGER,
    CONTA        VARCHAR(20),
    ANO          INTEGER,
    MES          INTEGER,
    VALOR        NUMERIC(15,2),
    TIPO         VARCHAR(10),
    COMERCIAL    INTEGER,
    SERVICOS     INTEGER,
    OBSERVACAO   BLOB SUB_TYPE 1 SEGMENT SIZE 80,
    TIPO_CONTA   INTEGER DEFAULT 1,
    CONSOLIDADO  INTEGER DEFAULT 0,
    CCUSTO       VARCHAR(20)
);

ALTER TABLE TBDRE_GER_APRE_AJUSTE ADD CONSTRAINT PK_TBDRE_GER_APRE_AJUSTE PRIMARY KEY (ID);

CREATE INDEX ITBDRE_GER_APRE_AJUSTE_01 ON TBDRE_GER_APRE_AJUSTE (DRE_ID);
CREATE INDEX ITBDRE_GER_APRE_AJUSTE_02 ON TBDRE_GER_APRE_AJUSTE (CONTA);
CREATE INDEX ITBDRE_GER_APRE_AJUSTE_03 ON TBDRE_GER_APRE_AJUSTE (ANO, MES);

CREATE OR ALTER TRIGGER TTBDRE_GER_APRE_AJUSTE_B01D FOR TBDRE_GER_APRE_AJUSTE
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF ( old.id > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||' Registro Excluido';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBDRE_GER_APRE_AJUSTE',old.id, HISTORICO);
    END

END;

CREATE OR ALTER TRIGGER TTBDRE_GER_APRE_AJUSTE_B01I FOR TBDRE_GER_APRE_AJUSTE
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gTBDRE_GER_APRE_AJUSTE,1);
end;

CREATE OR ALTER TRIGGER TTBDRE_GER_APRE_AJUSTE_B01U FOR TBDRE_GER_APRE_AJUSTE
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF ( old.conta <> new.conta) THEN
    BEGIN
        HISTORICO = HISTORICO||' CONTA:'|| old.conta||'->'||new.conta;
    END

    IF ( old.valor <> new.valor) THEN
    BEGIN
        HISTORICO = HISTORICO||' VALOR:'|| old.valor||'->'||new.valor;
    END

    IF ( old.tipo <> new.tipo) THEN
    BEGIN
        HISTORICO = HISTORICO||' TIPO.: '|| IIF(old.tipo = 'C', 'CREDITO', 'DEBITO')||'->'||IIF(new.tipo = 'C', 'CREDITO', 'DEBITO');
    END

--    IF ( old.tipo <> new.tipo) THEN
--    BEGIN
--        HISTORICO = HISTORICO||' TIPO: '|| old.tipo||'->'||new.tipo;
--    END

    IF ( old.ccusto <> new.ccusto) THEN
    BEGIN
        HISTORICO = HISTORICO||' CCUSTO: '|| old.ccusto||'->'||new.ccusto;
    END

    IF ( old.observacao <> new.observacao) THEN
    BEGIN
        HISTORICO = HISTORICO||' OBSERVACAO ALTERADA';
    END

    IF ( old.comercial <> new.comercial) THEN
    BEGIN
        HISTORICO = HISTORICO||' COMERC.: '|| IIF(old.comercial = '1', 'SIM', 'NAO')||'->'||IIF(new.comercial = '1', 'SIM', 'NAO');
    END

    IF ( old.servicos <> new.servicos) THEN
    BEGIN
        HISTORICO = HISTORICO||' SERV.: '|| IIF(old.servicos = '1', 'SIM', 'NAO')||'->'||IIF(new.servicos = '1', 'SIM', 'NAO');
    END

    IF ( old.consolidado <> new.consolidado) THEN
    BEGIN
        HISTORICO = HISTORICO||' CONSOL.: '|| IIF(old.consolidado = '1', 'SIM', 'NAO')||'->'||IIF(new.consolidado = '1', 'SIM', 'NAO');
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBDRE_GER_APRE_AJUSTE',new.id, HISTORICO);
    END

END;

CREATE OR ALTER TRIGGER TTBDRE_GER_APRE_AJUSTE_B02I FOR TBDRE_GER_APRE_AJUSTE
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF ( NEW.id > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||' REGISTRO INCLUIDO';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBDRE_GER_APRE_AJUSTE',NEW.id, HISTORICO);
    END

END;

COMMENT ON TABLE TBDRE_GER_APRE_AJUSTE IS 'tabela de ajustes da dre, um lancamento para que o valor da dre fique igual a do luis(planilha)';

COMMENT ON COLUMN TBDRE_GER_APRE_AJUSTE.TIPO IS 'D e C';

COMMENT ON COLUMN TBDRE_GER_APRE_AJUSTE.TIPO_CONTA IS '1 - conta, 2 - avulso';

UPDATE OR INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, URL, DESCRICAO, DATAHORA)
                      VALUES (22660, 'PCP', 'PCP', '1   ', '', 'REGRAS DE CÁLCULOS PARA PLACAS EXTRAS', '2021-03-18 15:49:22')
                    MATCHING (CONTROLE);