CREATE TABLE TBDRE_GERENCIAL (
    ID INTEGER NOT NULL,
    DESCRICAO VARCHAR(50),
    ESTABELECIMENTO INTEGER);

ALTER TABLE TBDRE_GERENCIAL
ADD CONSTRAINT PK_TBDRE_GERENCIAL
PRIMARY KEY (ID);

CREATE SEQUENCE GTBDRE_GERENCIAL;

create trigger ttbdre_gerencial_b01i for tbdre_gerencial
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbdre_gerencial,1);
end;

COMMENT ON TABLE TBDRE_GERENCIAL IS 'tabela da DRE, regras de calculo e destritivos';

CREATE TABLE TBDRE_GERENCIAL_GRUPOS (
    ID INTEGER,
    DESCRICAO VARCHAR(50),
    ORDEM INTEGER,
    DRE_ID INTEGER);

CREATE SEQUENCE GTBDRE_GERENCIAL_GRUPOS;

create trigger ttbdre_gerencial_grupos_b01i for tbdre_gerencial_grupos
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbdre_gerencial_grupos,1);
end;

COMMENT ON TABLE TBDRE_GERENCIAL_GRUPOS IS 'tabela de grupos da DRE';

ALTER TABLE TBDRE_GERENCIAL_GRUPOS
    ADD STATUS INTEGER;

ALTER TABLE TBDRE_GERENCIAL
    ADD STATUS INTEGER;

ALTER TABLE TBDRE_GERENCIAL_GRUPOS
    ADD COMERCIAL INTEGER,
    ADD SERVICO INTEGER;

COMMENT ON COLUMN TBDRE_GERENCIAL_GRUPOS.COMERCIAL IS
'0 - Nao
1 - Sim';

COMMENT ON COLUMN TBDRE_GERENCIAL_GRUPOS.SERVICO IS
'0 - Nao
1 - Sim';

CREATE TABLE TBDRE_GERENCIAL_SUBGRUPOS (
    ID INTEGER NOT NULL,
    CONTA VARCHAR(20));

ALTER TABLE TBDRE_GERENCIAL_SUBGRUPOS
ADD CONSTRAINT PK_TBDRE_GERENCIAL_SUBGRUPOS
PRIMARY KEY (ID);

CREATE SEQUENCE GTBDRE_GERENCIAL_SUBGRUPOS;

create trigger ttbdre_gerencial_subgrupos_b01i for tbdre_gerencial_subgrupos
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbdre_gerencial_subgrupos,1);
end;

ALTER TABLE TBDRE_GERENCIAL_SUBGRUPOS
    ADD DRE_GRUPO_ID INTEGER;

ALTER TABLE TBDRE_GERENCIAL_SUBGRUPOS
    ADD STATUS INTEGER;

ALTER TABLE TBDRE_GERENCIAL_SUBGRUPOS DROP CONTA;

ALTER TABLE TBDRE_GERENCIAL_SUBGRUPOS
    ADD DESCRICAO VARCHAR(50);
	
ALTER TABLE TBDRE_GERENCIAL_SUBGRUPOS
    ADD ORDEM INTEGER;

CREATE TABLE TBDRE_GERENCIAL_CONTAS (
    ID INTEGER NOT NULL,
    CONTA VARCHAR(20),
    DRE_SUBGRUPO_ID INTEGER);

ALTER TABLE TBDRE_GERENCIAL_CONTAS
ADD CONSTRAINT PK_TBDRE_GERENCIAL_CONTAS
PRIMARY KEY (ID);

CREATE SEQUENCE GTBDRE_GERENCIAL_CONTAS;

create trigger ttbdre_gerencial_contas_b01i for tbdre_gerencial_contas
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbdre_gerencial_contas,1);
end;

ALTER TABLE TBDRE_GERENCIAL_CONTAS
    ADD STATUS INTEGER;

ALTER TABLE TBDRE_GERENCIAL_GRUPOS
    ALTER DESCRICAO TYPE VARCHAR(200) CHARACTER SET UTF8;

ALTER TABLE TBDRE_GERENCIAL_SUBGRUPOS
    ALTER DESCRICAO TYPE VARCHAR(100) CHARACTER SET UTF8;

	ALTER TABLE TBDRE_GERENCIAL_GRUPOS
    ADD OPERACIONAL INTEGER,
    ADD FINANCEIRO INTEGER;

COMMENT ON COLUMN TBDRE_GERENCIAL_GRUPOS.OPERACIONAL IS
'0 - Nao
1 - Sim';

COMMENT ON COLUMN TBDRE_GERENCIAL_GRUPOS.FINANCEIRO IS
'0 - Nao
1 - Sim';

ALTER TABLE TBFICHA_PRODUTO_CUSTO_MOEDA
    ADD DOLAR_VENDA NUMERIC(18,8);


CREATE TABLE TBDRE_GERENCIAL_AJUSTE (
    ID INTEGER NOT NULL,
    DRE_ID INTEGER,
    CONTA VARCHAR(20),
    ANO INTEGER,
    MES INTEGER,
    VALOR NUMERIC(15,2),
    TIPO VARCHAR(10));

ALTER TABLE TBDRE_GERENCIAL_AJUSTE
ADD CONSTRAINT PK_TBDRE_GERENCIAL_AJUSTE
PRIMARY KEY (ID);

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

CREATE SEQUENCE GTBDRE_GERENCIAL_AJUSTE;

create trigger ttbdre_gerencial_ajuste_b01i for tbdre_gerencial_ajuste
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbdre_gerencial_ajuste,1);
end;

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

CREATE INDEX ITBDRE_GERENCIAL_AJUSTE_03
ON TBDRE_GERENCIAL_AJUSTE (ANO,MES);

CREATE INDEX ITBDRE_GERENCIAL_AJUSTE_02
ON TBDRE_GERENCIAL_AJUSTE (CONTA);

CREATE INDEX ITBDRE_GERENCIAL_AJUSTE_01
ON TBDRE_GERENCIAL_AJUSTE (DRE_ID);

DROP TRIGGER TBDRE_GERENCIAL_AJUSTE_BI0;

CREATE OR ALTER trigger ttbdre_gerencial_ajuste_b02i for tbdre_gerencial_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_GERENCIAL_AJUSTE',NEW.id, HISTORICO);
    END

END;

CREATE OR ALTER trigger ttbdre_gerencial_ajuste_b01u for tbdre_gerencial_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: '|| old.tipo||' -> '||new.tipo;
    END

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

END;

CREATE SEQUENCE GTBBI_PAINEIS;

create trigger ttbbi_paineis_b01i for tbbi_paineis
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbbi_paineis,1);
end;


ALTER TABLE TBBI_PAINEIS
    ADD STATUS INTEGER;

CREATE OR ALTER trigger ttbbi_paineis_b01d for tbbi_paineis
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('TBBI_PAINEIS',old.id, HISTORICO);
    END

END;

CREATE OR ALTER trigger ttbbi_paineis_b01u for tbbi_paineis
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF ( old.descricao <> new.descricao) THEN
    BEGIN
        HISTORICO = HISTORICO||' Descrição: '|| old.descricao||' -> '||new.descricao;
    END

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

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

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

END;

CREATE OR ALTER trigger ttbbi_paineis_b02i for tbbi_paineis
active before insert position 2
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('TBBI_PAINEIS',NEW.id, HISTORICO);
    END

END;

CREATE OR ALTER trigger ttbcontacontabil_b03i for tbcontacontabil
active before insert position 3
AS
declare variable email varchar(300);
declare variable USUARIO_ID integer;
declare variable ASSUNTO varchar(300);
declare variable CORPO varchar(300);
declare variable STATUS integer;
begin
  email = coalesce((select n.valor_ext from tbcontrole_n n where n.id = 266),'');

  if(email <> '')then
  begin
     STATUS     = 0;
     USUARIO_ID = 0;
     ASSUNTO    = 'NOVA CONTA CONTABIL CADASTRADA';
     CORPO      = 'FOI CADASTRADA UMA NOVA CONTA CONTABIL ('||NEW.conta||') POR '||CURRENT_USER||' EM '||formatdatetime(current_timestamp);

     INSERT INTO TBEMAIL (EMAIL, USUARIO_ID, ASSUNTO, CORPO, STATUS) VALUES (:EMAIL, :USUARIO_ID, :ASSUNTO, :CORPO, :STATUS);
  end

end;

COMMENT ON TRIGGER TTBCONTACONTABIL_B03I IS 'notifica a criacao de novas contas do grupo 3 ou 4';

CREATE OR ALTER trigger ttbcontacontabil_b03i for tbcontacontabil
active before insert position 3
AS
declare variable email varchar(300);
declare variable USUARIO_ID integer;
declare variable ASSUNTO varchar(300);
declare variable CORPO varchar(300);
declare variable STATUS integer;
begin

    if(substring(new.conta from 1 for 1) = 3 or substring(new.conta from 1 for 1) = 4)then
    begin
      email = coalesce((select n.valor_ext from tbcontrole_n n where n.id = 266),'');
    
      if(email <> '')then
      begin
         STATUS     = 0;
         USUARIO_ID = 0;
         ASSUNTO    = 'NOVA CONTA CONTÁBIL CADASTRADA';
         CORPO      = 'FOI CADASTRADA UMA NOVA CONTA CONTÁBIL ('||coalesce(NEW.conta,'')||' - '||coalesce(new.descricao,'')||') POR '||CURRENT_USER||' EM '||formatdatetime(current_timestamp);
    
         INSERT INTO TBEMAIL (EMAIL, USUARIO_ID, ASSUNTO, CORPO, STATUS) VALUES (:EMAIL, :USUARIO_ID, :ASSUNTO, :CORPO, :STATUS);
      end
    end
end;



