CREATE GENERATOR GTBREFEICAO_AVULSA;

CREATE TABLE TBREFEICAO_AVULSA (
    ID          INTEGER NOT NULL,
    DATA        DATE,
    DATAHORA    TIMESTAMP DEFAULT 'NOW',
    PRATO_ID    INTEGER,
    VALOR       NUMERIC(15,4),
    STATUS      INTEGER DEFAULT 1,
    QUANTIDADE  INTEGER,
    OBSERVACAO  BLOB SUB_TYPE 1 SEGMENT SIZE 80
);

ALTER TABLE TBREFEICAO_AVULSA ADD CONSTRAINT PK_TBREFEICAO_AVULSA PRIMARY KEY (ID);


CREATE OR ALTER TRIGGER TTBREFEICAO_AVULSA_B01D FOR TBREFEICAO_AVULSA
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = 'Registro excluido.';

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

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

CREATE OR ALTER TRIGGER TTBREFEICAO_AVULSA_B01U FOR TBREFEICAO_AVULSA
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';

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

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

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

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

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

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

CREATE OR ALTER TRIGGER TTBREFEICAO_AVULSA_B02I FOR TBREFEICAO_AVULSA
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = 'Registro Incluído';

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


CREATE INDEX ITBREFEICAO_AVULSA_03
ON TBREFEICAO_AVULSA (DATA,PRATO_ID);

CREATE INDEX ITBREFEICAO_AVULSA_02
ON TBREFEICAO_AVULSA (PRATO_ID);

CREATE INDEX ITBREFEICAO_AVULSA_01
ON TBREFEICAO_AVULSA (DATA);

