CREATE TABLE TBREFEICAO_REGISTRO (
    ID INTEGER NOT NULL,
    DATAHORA TIMESTAMP,
    HORA INTEGER,
    STATUS INTEGER,
    CRACHA VARCHAR(50),
    REFEICAO INTEGER,
    RESERVA INTEGER,
    DATA_REFEICAO DATE,
    DATA_RESERVA DATE,
    COLADORADOR_ID INTEGER);

ALTER TABLE TBREFEICAO_REGISTRO
ADD CONSTRAINT PK_TBREFEICAO_REGISTRO
PRIMARY KEY (ID);

CREATE SEQUENCE GTBREFEICAO_REGISTRO;

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

ALTER TABLE TBREFEICAO_REGISTRO
    ADD REFEICAO_ID INTEGER;

CREATE INDEX ITBREFEICAO_REGISTRO_03
ON TBREFEICAO_REGISTRO (STATUS);

CREATE INDEX ITBREFEICAO_REGISTRO_02
ON TBREFEICAO_REGISTRO (COLADORADOR_ID);

CREATE INDEX ITBREFEICAO_REGISTRO_01
ON TBREFEICAO_REGISTRO (REFEICAO_ID);

CREATE TABLE TBREFEICAO_TIPO (
    ID INTEGER NOT NULL,
    DESCRICAO VARCHAR(100),
    STATUS INTEGER);

ALTER TABLE TBREFEICAO_TIPO
ADD CONSTRAINT PK_TBREFEICAO_TIPO
PRIMARY KEY (ID);

CREATE SEQUENCE GTBREFEICAO_TIPO;

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

CREATE TABLE TBREFEICAO_DADOS (
    ID INTEGER NOT NULL,
    DATA_REFEICAO DATE,
    DATA_RESERVA DATE,
    REFEICAO1 VARCHAR(100),
    REFEICAO2 VARCHAR(100),
    RESERVA1 VARCHAR(100),
    RESERVA2 VARCHAR(100),
    TIPO_ID INTEGER);

ALTER TABLE TBREFEICAO_DADOS
ADD CONSTRAINT PK_TBREFEICAO_DADOS
PRIMARY KEY (ID);

CREATE SEQUENCE GTBREFEICAO_DADOS;

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


CREATE trigger ttbrefeicao_tipo_b02i for tbrefeicao_tipo
active before insert position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = 'Registro incluido';

   if (HISTORICO <> '') Then
   Begin
      execute procedure SPI_HISTORICO('TBREFEICAO_TIPO', new.id, :HISTORICO);
   End
end;

CREATE trigger ttbrefeicao_dados_b02i for tbrefeicao_dados
active before insert position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = 'Registro incluido';

   if (HISTORICO <> '') Then
   Begin
      execute procedure SPI_HISTORICO('TBREFEICAO_DADOS', new.id, :HISTORICO);
   End
end;

CREATE trigger ttbrefeicao_dados_b01u for tbrefeicao_dados
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';

   if(new.data_reserva <> old.data_reserva)then
   begin
        HISTORICO = HISTORICO || ', Data Reserva' || formatdate(old.data_reserva) || ' -> ' || formatdate(new.data_reserva);
   end

   if(new.refeicao1 <> old.refeicao1)then
   begin
        HISTORICO = HISTORICO || ', Refeição 1:' || old.refeicao1 || ' -> ' || new.refeicao1;
   end

   if(new.refeicao2 <> old.refeicao2)then
   begin
        HISTORICO = HISTORICO || ', Refeição 2:' || old.refeicao2 || ' -> ' || new.refeicao2;
   end

   if(new.reserva1 <> old.reserva1)then
   begin
        HISTORICO = HISTORICO || ', Reserva 1:' || old.reserva1 || ' -> ' || new.reserva1;
   end

   if(new.reserva2 <> old.reserva2)then
   begin
        HISTORICO = HISTORICO || ', Reserva 2:' || old.reserva2 || ' -> ' || new.reserva2;
   end

   if (HISTORICO <> '') Then
   Begin
      execute procedure SPI_HISTORICO('TBREFEICAO_DADOS', new.id, :HISTORICO);
   End
end;

CREATE trigger ttbrefeicao_tipo_b01u for tbrefeicao_tipo
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';


   if(new.status <> old.status)then
   begin
        HISTORICO = HISTORICO || ', Status:' || old.status || ' -> ' || new.status;
   end

   if(new.descricao <> old.descricao)then
   begin
        HISTORICO = HISTORICO || ', Descrição:' || old.descricao || ' -> ' || new.descricao;
   end

   if (HISTORICO <> '') Then
   Begin
      execute procedure SPI_HISTORICO('TBREFEICAO_DADOS', new.id, :HISTORICO);
   End
end;

CREATE TABLE TBREFEITORIO_REFEICAO (
    ID INTEGER NOT NULL,
    DATA_REFEICAO DATE,
    DATA_RESERVA DATE,
    TIPO_ID INTEGER,
    REFEICAO1_ID INTEGER,
    REFEICAO2_ID INTEGER,
    RESERVA1_ID INTEGER,
    RESERVA2_ID INTEGER);

ALTER TABLE TBREFEITORIO_REFEICAO
ADD CONSTRAINT PK_TBREFEITORIO_REFEICAO
PRIMARY KEY (ID);

CREATE SEQUENCE GTBREFEITORIO_REFEICAO;

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

CREATE TABLE TBREFEITORIO_CARDAPIO (
    ID INTEGER NOT NULL,
    DESCRICAO VARCHAR(100),
    STATUS INTEGER,
    OBSERVACAO BLOB SUB_TYPE 1 SEGMENT SIZE 80);

ALTER TABLE TBREFEITORIO_CARDAPIO
ADD CONSTRAINT PK_TBREFEITORIO_CARDAPIO
PRIMARY KEY (ID);

CREATE SEQUENCE GTBREFEITORIO_CARDAPIO;

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


ALTER TABLE TBREFEICAO_TIPO
    ADD HORA_INICIO INTEGER,
    ADD HORA_FIM INTEGER,
    ADD DATA INTEGER;

CREATE OR ALTER trigger ttbrefeitorio_refeicao_b01u for tbrefeitorio_refeicao
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';

   if(new.tipo_id <> old.tipo_id)then
   begin
        HISTORICO = HISTORICO || ', Tipo: ' || old.tipo_id || ' -> ' || new.tipo_id;
   end

   if(new.data_reserva <> old.data_reserva)then
   begin
        HISTORICO = HISTORICO || ', Data Reserva: ' || formatdate(old.data_reserva) || ' -> ' || formatdate(new.data_reserva);
   end

   if(new.data_refeicao <> old.data_refeicao)then
   begin
        HISTORICO = HISTORICO || ', Data Refeição: ' || formatdate(old.data_refeicao) || ' -> ' || formatdate(new.data_refeicao);
   end

   if(new.refeicao1_id <> old.refeicao1_id)then
   begin
        HISTORICO = HISTORICO || ', Refeição 1: ' || old.refeicao1_id || ' -> ' || new.refeicao1_id;
   end

   if(new.refeicao2_id <> old.refeicao2_id)then
   begin
        HISTORICO = HISTORICO || ', Refeição 2: ' || old.refeicao2_id || ' -> ' || new.refeicao2_id;
   end

   if(new.reserva1_id <> old.reserva1_id)then
   begin
        HISTORICO = HISTORICO || ', Reserva 1: ' || old.reserva1_id || ' -> ' || new.reserva1_id;
   end

   if(new.reserva2_id <> old.reserva2_id)then
   begin
        HISTORICO = HISTORICO || ', Reserva 2: ' || old.reserva2_id || ' -> ' || new.reserva2_id;
   end

   if (HISTORICO <> '') Then
   Begin
      execute procedure SPI_HISTORICO('TBREFEITORIO_REFEICAO', new.id, :HISTORICO);
   End
end;

CREATE trigger ttbrefeitorio_refeicao_b02i for tbrefeitorio_refeicao
active before insert position 1
AS
begin
  execute procedure SPI_HISTORICO('TBREFEITORIO_REFEICAO', new.id, 'Registro incluido.');
end;

ALTER TABLE TBREFEITORIO_REFEICAO
    ADD LIVRE INTEGER;


CREATE TABLE TBREFEICAO_CRACHA_MESTRE (
    ID INTEGER NOT NULL,
    CRACHA VARCHAR(50),
    STATUS INTEGER DEFAULT 0);

ALTER TABLE TBREFEICAO_CRACHA_MESTRE
ADD CONSTRAINT PK_TBREFEICAO_CRACHA_MESTRE
PRIMARY KEY (ID);

CREATE SEQUENCE GTBREFEICAO_CRACHA_MESTRE_ID;

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


CREATE INDEX ITBREFEICAO_DADOS_04
ON TBREFEICAO_DADOS (DATA_REFEICAO);

CREATE INDEX ITBREFEICAO_DADOS_03
ON TBREFEICAO_DADOS (DATA_RESERVA);

CREATE INDEX ITBREFEICAO_DADOS_02
ON TBREFEICAO_DADOS (TIPO_ID);

CREATE INDEX ITBREFEICAO_DADOS_01
ON TBREFEICAO_DADOS (REFEICAO_ID);

CREATE TABLE TBREFEICAO_HISTORICO (
    ID INTEGER NOT NULL,
    DESCRICAO VARCHAR(300),
    REFEICAO_ID INTEGER,
    CRACHA VARCHAR(50),
    COLABORADOR_ID INTEGER,
    DATAHORA INTEGER,
    REFEICAO INTEGER,
    RESERVA INTEGER);

ALTER TABLE TBREFEICAO_HISTORICO
ADD CONSTRAINT PK_TBREFEICAO_HISTORICO
PRIMARY KEY (ID);

CREATE SEQUENCE GTBREFEICAO_HISTORICO;

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

ALTER TABLE TBREFEICAO_HISTORICO
    ADD STATUS INTEGER;

CREATE INDEX ITBREFEICAO_HISTORICO_03
ON TBREFEICAO_HISTORICO (CRACHA);

CREATE INDEX ITBREFEICAO_HISTORICO_02
ON TBREFEICAO_HISTORICO (STATUS);

CREATE INDEX ITBREFEICAO_HISTORICO_01
ON TBREFEICAO_HISTORICO (REFEICAO_ID);

ALTER TABLE TBREFEICAO_HISTORICO
    ALTER DATAHORA TYPE TIMESTAMP;

ALTER TABLE TBCOLABORADOR
    ADD REFEICAO_TIPO_ID INTEGER;
	
	
CREATE TABLE TBFATURAMENTO_FAMILIA_DRE (
    ID INTEGER NOT NULL,
    ANO INTEGER,
    MES INTEGER,
    FAMILIA_ID INTEGER,
    VALOR NUMERIC(18,6));

ALTER TABLE TBFATURAMENTO_FAMILIA_DRE
ADD CONSTRAINT PK_TBFATURAMENTO_FAMILIA_DRE
PRIMARY KEY (ID);

CREATE SEQUENCE GTBFATURAMENTO_FAMILIA_DRE;

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


CREATE INDEX ITBFATURAMENTO_FAMILIA_DRE_03
ON TBFATURAMENTO_FAMILIA_DRE (FAMILIA_ID);

CREATE INDEX ITBFATURAMENTO_FAMILIA_DRE_02
ON TBFATURAMENTO_FAMILIA_DRE (ANO,MES);

CREATE INDEX ITBFATURAMENTO_FAMILIA_DRE_01
ON TBFATURAMENTO_FAMILIA_DRE (ANO,MES,FAMILIA_ID);

