CREATE TABLE TBREFEICAO_GRUPO_FATURAMENTO (
    ID INTEGER NOT NULL,
    DESCRICAO VARCHAR(50),
    STATUS INTEGER);

ALTER TABLE TBREFEICAO_GRUPO_FATURAMENTO
ADD CONSTRAINT PK_TBREFEICAO_GRUPO_FATURAMENTO
PRIMARY KEY (ID);

CREATE SEQUENCE GTBREFEICAO_GRUPO_FAT;

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

ALTER TABLE TBREFEICAO_GRUPOS
    ADD GRUPO_FATURAMENTO_ID INTEGER;

CREATE SEQUENCE GTBREFEICAO_GRUPOS;

ALTER SEQUENCE GTBREFEICAO_GRUPOS RESTART WITH 14;

CREATE trigger ttbrefeicao_grupos_b01i for tbrefeicao_grupos
active before insert position 0
AS
declare variable ID integer;
begin
  ID = gen_id(gTBREFEICAO_GRUPOS,1);

  if(new.codigo is null)then
  begin
    new.codigo = :ID;
  end
end;

ALTER TABLE TBREFEICAO_GRUPOS
    ADD STATUS INTEGER;

ALTER TABLE TBREFEICAO_GRUPOS DROP GRUPO_FATURAMENTO_ID;

CREATE OR ALTER trigger ttbrefeicao_grupo_fat_b01i for tbrefeicao_grupo_faturamento
active before insert position 0
as
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   if (new.id is null) then
   new.id = gen_id(gtbrefeicao_grupo_fat,1);

   HISTORICO = 'Registro incluido';

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

end;

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

   HISTORICO = '';

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

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

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

end;

CREATE trigger ttbrefeicao_grupo_fat_b01d for tbrefeicao_grupo_faturamento
active before delete position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = 'Registro excluído';

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

CREATE OR ALTER trigger ttbrefeicao_grupos_b01i for tbrefeicao_grupos
active before insert position 0
AS
declare variable ID integer;
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin
  ID = gen_id(gTBREFEICAO_GRUPOS,1);

  if(new.codigo is null)then
  begin
    new.codigo = :ID;
  end

   HISTORICO = 'Grupo "'||new.codigo||' - '||new.descricao||'" incluido';

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

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

   HISTORICO = 'Registro "'||new.codigo||'" incluido no grupo '||new.grupo_codigo;

   if (HISTORICO <> '') Then
   Begin
      execute procedure SPI_HISTORICO('TBREFEICAO_GRUPO_FATURAMENTO', (select first 1 g.faturamento from tbrefeicao_grupos g where g.codigo = new.grupo_codigo), :HISTORICO);
   End
end;

CREATE trigger tbrefeicao_grupos_bd0 for tbrefeicao_grupos
active before delete position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = 'Grupo "'||old.codigo||' - '||old.descricao||'" excluído';

   if (HISTORICO <> '') Then
   Begin
      execute procedure SPI_HISTORICO('TBREFEICAO_GRUPO_FATURAMENTO', old.faturamento, :HISTORICO);
   End
end;

CREATE TABLE TBREFEICAO_CONFIGURACAO (
    ID INTEGER NOT NULL,
    DESCRICAO VARCHAR(100),
    VALOR VARCHAR(50));

ALTER TABLE TBREFEICAO_CONFIGURACAO
ADD CONSTRAINT PK_TBREFEICAO_CONFIGURACAO
PRIMARY KEY (ID);

CREATE SEQUENCE GTBREFEICAO_CONFIGURACAO;

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

ALTER TABLE TBREFEICAO_CONFIGURACAO
    ADD STATUS INTEGER;

CREATE INDEX ITBREFEICAO_REGISTRO_07
ON TBREFEICAO_REGISTRO (REFEICAO);

CREATE INDEX ITBREFEICAO_REGISTRO_06
ON TBREFEICAO_REGISTRO (JUSTIFICATIVA_ID);

CREATE INDEX ITBREFEICAO_REGISTRO_05
ON TBREFEICAO_REGISTRO (RESERVA);

CREATE INDEX ITBREFEICAO_REGISTRO_04
ON TBREFEICAO_REGISTRO (CRACHA);

CREATE INDEX ITBREFEITORIO_REFEICAO_03
ON TBREFEITORIO_REFEICAO (TIPO_ID);

CREATE INDEX ITBREFEITORIO_REFEICAO_02
ON TBREFEITORIO_REFEICAO (DATA_RESERVA);

CREATE INDEX ITBREFEITORIO_REFEICAO_01
ON TBREFEITORIO_REFEICAO (DATA_REFEICAO);

create view vwrefeicao (
ID,
DATA_REFEICAO,
DATA_RESERVA,
CRACHA,
REFEICAO,
RESERVA,
RESERVA2,
COLABORADOR_ID,
JUSTIFICATIVA_ID,
GRUPO_ID,
FATURAMENTO
)
as
    select

    r.id,
    r.data_refeicao,
    r.data_reserva,

    g.CRACHA,
    g.REFEICAO,

    g.RESERVA,

    (select first 1
            (select first 1
                y.reserva
             from tbrefeicao_registro y where y.refeicao_id = e.id and y.cracha = g.cracha)
     from TBREFEITORIO_REFEICAO e where e.data_refeicao = r.data_reserva and e.tipo_id = r.tipo_id) RESERVA2,

    g.COLABORADOR_ID,
    coalesce(g.JUSTIFICATIVA_ID,0) as JUSTIFICATIVA_ID,
    coalesce(t.grupo_codigo,0) as grupo_id,
    coalesce(t.faturamento,1) as faturamento


    from TBREFEITORIO_REFEICAO r, tbrefeicao_registro g


    left join (
        select w.*, g2.faturamento from
        tbrefeicao_terceiros w, tbrefeicao_grupos g2 where g2.codigo = w.grupo_codigo
    ) t on t.codigo = g.cracha

    where g.refeicao_id = r.id
    --and r.data_refeicao between :DATA1 and :DATA2



;

