
CREATE TABLE TBDISPOSITIVO_CONT_ACESSO (
    CODIGO              VARCHAR(20) NOT NULL,
    DESCRICAO           VARCHAR(50),
    CONSULTA            CHAR(1),
    SEQ                 BIGINT DEFAULT 0,
    ID                  INTEGER,
    STATUS              INTEGER,
    INDICADOR_MARCACAO  VARCHAR(1) DEFAULT 0,
    TIPO                INTEGER,
    USUARIO             VARCHAR(50),
    SENHA               VARCHAR(50),
    SERVIDOR            VARCHAR(100),
    ACCESS_TOKEN        VARCHAR(300),
    REFRESH_TOKEN       VARCHAR(300),
    PORTARIA_671        SMALLINT DEFAULT 0,
    FLAG                INTEGER DEFAULT 0
);

ALTER TABLE TBDISPOSITIVO_CONT_ACESSO ADD PRIMARY KEY (CODIGO);


SET TERM ^ ;


/* Trigger: TTBDISPOSITIVO_CONT_ACESSO_B01D */
CREATE OR ALTER TRIGGER TTBDISPOSITIVO_CONT_ACESSO_B01D FOR TBDISPOSITIVO_CONT_ACESSO
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('TBDISPOSITIVO_CONT_ACESSO',old.id, HISTORICO);
    END
end
^


/* Trigger: TTBDISPOSITIVO_CONT_ACESSO_B01I */
CREATE OR ALTER TRIGGER TTBDISPOSITIVO_CONT_ACESSO_B01I FOR TBDISPOSITIVO_CONT_ACESSO
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('TBDISPOSITIVO_CONT_ACESSO',NEW.id, HISTORICO);
    END
end
^


/* Trigger: TTBDISPOSITIVO_CONT_ACESSO_B01U */
CREATE OR ALTER TRIGGER TTBDISPOSITIVO_CONT_ACESSO_B01U FOR TBDISPOSITIVO_CONT_ACESSO
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF ( OLD.CODIGO <> NEW.CODIGO) THEN
    BEGIN
        HISTORICO = HISTORICO||'CODIGO: '|| OLD.CODIGO||'->'||NEW.CODIGO;
    END
    
    IF ( OLD.DESCRICAO <> NEW.DESCRICAO) THEN
    BEGIN
        HISTORICO = HISTORICO||', DESC. '|| OLD.DESCRICAO||'->'||NEW.DESCRICAO;
    END
    
    IF ( OLD.CONSULTA <> NEW.CONSULTA) THEN
    BEGIN
        HISTORICO = HISTORICO||', CONSULTA: '|| OLD.CONSULTA||'->'||NEW.CONSULTA;
    END

    IF ( OLD.STATUS <> NEW.STATUS) THEN
    BEGIN
        HISTORICO = HISTORICO||', STATUS: '|| OLD.STATUS||'->'||NEW.STATUS;
    END
    
    IF ( OLD.SEQ <> NEW.SEQ AND new.FLAG = 1) THEN
    BEGIN
        HISTORICO = HISTORICO||', SEQ.: '|| OLD.SEQ||'->'||NEW.SEQ;
    END 
    new.FLAG = 0;
    
    IF ( OLD.servidor <> NEW.servidor) THEN
    BEGIN
        HISTORICO = HISTORICO||', Serv.: '|| OLD.servidor||'->'||NEW.servidor;
    END 
    
    IF ( OLD.usuario <> NEW.usuario) THEN
    BEGIN
        HISTORICO = HISTORICO||', Usuario: '|| OLD.usuario||'->'||NEW.usuario;
    END 
    
    IF ( OLD.senha <> NEW.senha) THEN
    BEGIN
        HISTORICO = HISTORICO||', Senha Alterada';
    END 
    
    IF ( COALESCE(OLD.PORTARIA_671,0) <> COALESCE(NEW.PORTARIA_671,0)) THEN
    BEGIN
        HISTORICO = HISTORICO||', PORT.671 '|| COALESCE(OLD.PORTARIA_671,0)||'->'||COALESCE(NEW.PORTARIA_671,0);
    END
    
    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBDISPOSITIVO_CONT_ACESSO',NEW.ID, HISTORICO);
    END
END
^

SET TERM ; ^

COMMENT ON COLUMN TBDISPOSITIVO_CONT_ACESSO.PORTARIA_671 IS 
'INDICA SE OS REGISTROS DE PONTO IMPORTADOS DEVEM SEGUIR A NORMA DA PORTARIA 671';

INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, URL, DESCRICAO, DATAHORA, SUB_GRUPO, DESCRICAO_RESUMIDA)
            VALUES (23085, 'RH', 'RH', '1', '', 'CADASTRO DE DISPOSITIVOS PARA CONTROLE DE ACESSO', NULL, '4', 'CONTROLE DE ACESSO');

COMMIT WORK;

CREATE SEQUENCE GTBDISPOSITIVO_CONT_ACESSO;

SET GENERATOR GTBDISPOSITIVO_CONT_ACESSO TO 1;

ALTER TABLE TBDISPOSITIVO_CONT_ACESSO
    ADD URL_MONITOR VARCHAR(50) DEFAULT '',
    ADD PORTA_MONITOR INTEGER DEFAULT '',
    ADD PATH_MONITOR VARCHAR(50) DEFAULT '';

SET TERM ^ ;

CREATE OR ALTER trigger ttbrefeicoes_cardapio_b01d for tbrefeicoes_cardapio
active before delete position 1
AS
declare variable DATA_INICIO timestamp;
declare variable RESTANTE integer;
declare variable prazo_exclusao integer;
declare variable prazo_alteracao integer;
declare variable DATA_excluir timestamp;
declare variable DATA_ALTERAR timestamp;
begin
    for
        select
            cast(OLD.data_refeicao as date)+t.hora_inicio as DATA_INICIO,
            dateadd(hour, t.prazo_exclusao * -1 ,cast(OLD.data_refeicao as date)+t.hora_inicio) as DATA_excluir,
            dateadd(hour, t.prazo_alteracao * -1 ,cast(OLD.data_refeicao as date)+t.hora_inicio) as DATA_ALTERAR,
            datediff(hour, current_timestamp, cast(OLD.data_refeicao as date)+t.hora_inicio) as RESTANTE,
            t.prazo_exclusao,
            t.prazo_alteracao
        from tbrefeicoes_tipo t
        where t.id = old.tipo_id
    into
        DATA_INICIO,
        DATA_excluir,
        DATA_ALTERAR,
        RESTANTE,
        prazo_exclusao,
        prazo_alteracao
    do begin
        if(RESTANTE < prazo_exclusao)then
        begin
            exception "..." 'TEMPO PARA EXCLUIR REGISTRO FOI ESGOTADO EM '||formatdatetime(DATA_excluir);
        end
    end
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbrefeicoes_cardapio_b01d for tbrefeicoes_cardapio
active before delete position 1
AS
declare variable DATA_INICIO timestamp;
declare variable RESTANTE integer;
declare variable prazo_exclusao integer;
declare variable prazo_alteracao integer;
declare variable DATA_excluir timestamp;
declare variable DATA_ALTERAR timestamp;
declare variable ID integer;
begin
    for
        select
            cast(OLD.data_refeicao as date)+t.hora_inicio as DATA_INICIO,
            dateadd(hour, t.prazo_exclusao * -1 ,cast(OLD.data_refeicao as date)+t.hora_inicio) as DATA_excluir,
            dateadd(hour, t.prazo_alteracao * -1 ,cast(OLD.data_refeicao as date)+t.hora_inicio) as DATA_ALTERAR,
            datediff(hour, current_timestamp, cast(OLD.data_refeicao as date)+t.hora_inicio) as RESTANTE,
            t.prazo_exclusao,
            t.prazo_alteracao
        from tbrefeicoes_tipo t
        where t.id = old.tipo_id
    into
        DATA_INICIO,
        DATA_excluir,
        DATA_ALTERAR,
        RESTANTE,
        prazo_exclusao,
        prazo_alteracao
    do begin
        if(RESTANTE < prazo_exclusao)then
        begin
            exception "..." 'TEMPO PARA EXCLUIR REGISTRO FOI ESGOTADO EM '||formatdatetime(DATA_excluir);
        end
    end

    FOR
        select first 1 R.id
        FROM tbrefeicoes_registro R
        WHERE R.cardapio_id = OLD.id
    INTO
        ID
    DO BEGIN
        exception "..." 'REFEICOES JA REGISTRADA, OPERACAO CANCELADA!';
    END
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbrefeicoes_cardapio_b02u for tbrefeicoes_cardapio
active before update position 2
AS
declare variable DATA_INICIO timestamp;
declare variable RESTANTE integer;
declare variable prazo_exclusao integer;
declare variable prazo_alteracao integer;
declare variable DATA_excluir timestamp;
declare variable DATA_ALTERAR timestamp;
declare variable ID integer;
begin
    for
        select
            cast(NEW.data_refeicao as date)+t.hora_inicio as DATA_INICIO,
            dateadd(hour, t.prazo_exclusao * -1 ,cast(NEW.data_refeicao as date)+t.hora_inicio) as DATA_excluir,
            dateadd(hour, t.prazo_alteracao * -1 ,cast(NEW.data_refeicao as date)+t.hora_inicio) as DATA_ALTERAR,
            datediff(hour, current_timestamp, cast(NEW.data_refeicao as date)+t.hora_inicio) as RESTANTE,
            t.prazo_exclusao,
            t.prazo_alteracao
        from tbrefeicoes_tipo t
        where t.id = NEW.tipo_id
    into
        DATA_INICIO,
        DATA_excluir,
        DATA_ALTERAR,
        RESTANTE,
        prazo_exclusao,
        prazo_alteracao
    do begin
        if(RESTANTE < prazo_alteracao)then
        begin
            exception "..." 'TEMPO PARA ALTERAR REGISTRO FOI ESGOTADO EM '||formatdatetime(DATA_ALTERAR);
        end
    end

    FOR
        select first 1 R.id
        FROM tbrefeicoes_registro R
        WHERE R.cardapio_id = NEW.id
    INTO
        ID
    DO BEGIN
        exception "..." 'REFEICOES JA REGISTRADA, OPERACAO CANCELADA!';
    END
end
^

SET TERM ; ^


CREATE GENERATOR GTBNOTIFICACAO_COLABORADOR;

CREATE TABLE TBNOTIFICACAO_COLABORADOR (
    ID           INTEGER NOT NULL,
    TIPO         INTEGER DEFAULT 0,
    USUARIO_ID   INTEGER DEFAULT 0,
    TODOS        INTEGER DEFAULT 0,
    MENU_ID      INTEGER DEFAULT 0,
    TITULO       VARCHAR(100) DEFAULT '',
    MENSAGEM     BLOB SUB_TYPE 0 SEGMENT SIZE 80,
    LEITURA      INTEGER DEFAULT 0,
    ENVIO        INTEGER DEFAULT 0,
    DATA_HORA    TIMESTAMP DEFAULT LOCALTIMESTAMP,
    EMITENTE     INTEGER DEFAULT 0,
    AGENDAMENTO  TIMESTAMP,
    EXECUTADO    INTEGER DEFAULT 0,
    TABELA       VARCHAR(50) DEFAULT '',
    TABELA_ID    INTEGER DEFAULT 0,
    VISUALIZADO  INTEGER DEFAULT 0,
    CHAMADO      SMALLINT DEFAULT 0
);




/******************************************************************************/
/****                             Primary keys                             ****/
/******************************************************************************/

ALTER TABLE TBNOTIFICACAO_COLABORADOR ADD CONSTRAINT PK_TBNOTIFICACAO_COLABORADOR PRIMARY KEY (ID);


/******************************************************************************/
/****                               Indices                                ****/
/******************************************************************************/

CREATE INDEX ITBNOTIFICACAO_COLABORADOR_01 ON TBNOTIFICACAO_COLABORADOR (USUARIO_ID);
CREATE INDEX ITBNOTIFICACAO_COLABORADOR_02 ON TBNOTIFICACAO_COLABORADOR (TIPO);
CREATE INDEX ITBNOTIFICACAO_COLABORADOR_03 ON TBNOTIFICACAO_COLABORADOR (AGENDAMENTO);
CREATE INDEX ITBNOTIFICACAO_COLABORADOR_04 ON TBNOTIFICACAO_COLABORADOR (EXECUTADO);
CREATE INDEX ITBNOTIFICACAO_COLABORADOR_05 ON TBNOTIFICACAO_COLABORADOR (AGENDAMENTO);
CREATE INDEX ITBNOTIFICACAO_COLABORADOR_06 ON TBNOTIFICACAO_COLABORADOR (EXECUTADO);
CREATE INDEX ITBNOTIFICACAO_COLABORADOR_07 ON TBNOTIFICACAO_COLABORADOR (TABELA_ID);
CREATE INDEX ITBNOTIFICACAO_COLABORADOR_08 ON TBNOTIFICACAO_COLABORADOR (TABELA);
CREATE INDEX ITBNOTIFICACAO_COLABORADOR_09 ON TBNOTIFICACAO_COLABORADOR (VISUALIZADO);


/******************************************************************************/
/****                               Triggers                               ****/
/******************************************************************************/



SET TERM ^ ;



/******************************************************************************/
/****                         Triggers for tables                          ****/
/******************************************************************************/



/* Trigger: TTBNOTIFICACAO_COLABORADOR_B1I */
CREATE OR ALTER TRIGGER TTBNOTIFICACAO_COLABORADOR_B1I FOR TBNOTIFICACAO_COLABORADOR
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gTBNOTIFICACAO_COLABORADOR,1);
end
^

SET TERM ; ^



/******************************************************************************/
/****                             Descriptions                             ****/
/******************************************************************************/

COMMENT ON TABLE TBNOTIFICACAO_COLABORADOR IS 
'tabela de notificacoes, contem mensagem que serao enviadas ao usuarios do sistema, e podem disparar eventos';



/******************************************************************************/
/****                         Fields descriptions                          ****/
/******************************************************************************/

COMMENT ON COLUMN TBNOTIFICACAO_COLABORADOR.TIPO IS 
'1-mensagem
2-erro
3-evento
4-funcao
5-agendamento,
6-notificacao de feed
7-notificacao producao
8-Alertas e Noificacoes';

COMMENT ON COLUMN TBNOTIFICACAO_COLABORADOR.USUARIO_ID IS 
'id do usuario';

COMMENT ON COLUMN TBNOTIFICACAO_COLABORADOR.TODOS IS 
'1-envia para todos sos usuarios';

COMMENT ON COLUMN TBNOTIFICACAO_COLABORADOR.MENU_ID IS 
'id do menu';

COMMENT ON COLUMN TBNOTIFICACAO_COLABORADOR.TITULO IS 
'titulo da notificacao';

COMMENT ON COLUMN TBNOTIFICACAO_COLABORADOR.MENSAGEM IS 
'mensagem, pode conter html';

COMMENT ON COLUMN TBNOTIFICACAO_COLABORADOR.LEITURA IS 
'0-nao lido
1-lido';

COMMENT ON COLUMN TBNOTIFICACAO_COLABORADOR.ENVIO IS 
'quantidade de envios';

COMMENT ON COLUMN TBNOTIFICACAO_COLABORADOR.DATA_HORA IS 
'data hora do registro';

COMMENT ON COLUMN TBNOTIFICACAO_COLABORADOR.EMITENTE IS 
'id do usuario que enviou a mensagem';

COMMENT ON COLUMN TBNOTIFICACAO_COLABORADOR.AGENDAMENTO IS 
'data e hora do agendamento';

COMMENT ON COLUMN TBNOTIFICACAO_COLABORADOR.EXECUTADO IS 
'1-agendamento foi executado
0-agendamento nao foi executado';

COMMENT ON COLUMN TBNOTIFICACAO_COLABORADOR.TABELA IS 
'nome da tabela a quem a notificacao esta ligada';

COMMENT ON COLUMN TBNOTIFICACAO_COLABORADOR.TABELA_ID IS 
'id da tabela a quem a notificacao esta ligada';

ALTER TABLE TBNOTIFICACAO_COLABORADOR ALTER USUARIO_ID TO COLABORADOR_ID;

ALTER TABLE TBNOTIFICACAO_COLABORADOR
    ADD TOPO_PESSOA_ID INTEGER DEFAULT 0;

ALTER TABLE TBNOTIFICACAO_COLABORADOR
    ALTER COLABORADOR_ID TO PESSOA_ID;

SET TERM ^ ;

CREATE OR ALTER trigger ttbrefeicoes_cardapio_b03u for tbrefeicoes_cardapio
active before update position 3
AS
declare variable PESSOA_ID integer;
declare variable TOPO_PESSOA_ID integer;
declare variable reserva_prato_id integer;
declare variable cardapio_prato_id integer;
declare variable TIPO_REFEICAO varchar(100);
declare variable tipo_desc varchar(100);
declare variable prato_desc varchar(100);
declare variable pratos varchar(500);
begin
  if(new.data_refeicao is distinct from old.data_refeicao)then
  begin
     for
        select
            r.tipo_registro as TOPO_PESSOA_ID,
            r.pessoa_id,
            coalesce(t.descricao,'') as TIPO_REFEICAO,
            r.cardapio_prato_id
        from tbrefeicoes_reserva r
        left join tbrefeicoes_tipo t on t.id = new.tipo_id
        where r.cardapio_id = new.id
     into
        TOPO_PESSOA_ID,
        PESSOA_ID,
        TIPO_REFEICAO,
        cardapio_prato_id
     do begin

        pratos = '';

        for
            select
                p.id,
                coalesce(t.descricao,'') as tipo_desc,
                coalesce(s.descricao,'') as prato_desc
            from tbrefeicoes_card_pratos p
            left join tbrefeicoes_tipo_prato t on t.id = p.tipo_prato_id
            left join tbrefeicoes_prato s on s.id = p.prato_id
            where p.cardapio_id = new.id
        into
            reserva_prato_id,
            tipo_desc,
            prato_desc
        do begin
            pratos = pratos || '<br><strong>' || tipo_desc || ':</strong> ' || prato_desc || ''||iif(reserva_prato_id = cardapio_prato_id, ' <label style="color: red">(RESERVADO)</label>', '');
        end

        INSERT INTO TBNOTIFICACAO_COLABORADOR (TIPO, PESSOA_ID, TOPO_PESSOA_ID, TODOS, MENU_ID, TITULO, LEITURA, ENVIO, DATA_HORA, EMITENTE, AGENDAMENTO, EXECUTADO, TABELA, TABELA_ID, MENSAGEM)
                   VALUES (
                    1,
                    :PESSOA_ID,
                    :TOPO_PESSOA_ID,
                    0,
                    0,
                    'REFEIÇÃO "'||:TIPO_REFEICAO||'" FOI REPROGRAMADA DE '||formatdate(OLD.data_refeicao)||' PARA '||formatdate(new.data_refeicao)||'',
                    0,
                    0,
                    current_timestamp,
                    0,
                    current_timestamp,
                    0,
                    '',
                    0,
                    '<h2>'||:TIPO_REFEICAO||' ('||formatdate(new.data_refeicao)||')</h2>'||coalesce(:pratos,'')||'');
            
     end
  end
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbrefeicoes_cardapio_b02u for tbrefeicoes_cardapio
active before update position 2
AS
declare variable DATA_INICIO timestamp;
declare variable RESTANTE integer;
declare variable prazo_exclusao integer;
declare variable prazo_alteracao integer;
declare variable DATA_excluir timestamp;
declare variable DATA_ALTERAR timestamp;
declare variable ID integer;
begin

    if(new.data_refeicao < current_date)then
    begin
        exception "..." 'REFEICAO NAO PODE SER REGISTRADA PARA ANTES DE '||formatdate(current_date);
    end


    for
        select
            cast(NEW.data_refeicao as date)+t.hora_inicio as DATA_INICIO,
            dateadd(hour, t.prazo_exclusao * -1 ,cast(NEW.data_refeicao as date)+t.hora_inicio) as DATA_excluir,
            dateadd(hour, t.prazo_alteracao * -1 ,cast(NEW.data_refeicao as date)+t.hora_inicio) as DATA_ALTERAR,
            datediff(hour, current_timestamp, cast(NEW.data_refeicao as date)+t.hora_inicio) as RESTANTE,
            t.prazo_exclusao,
            t.prazo_alteracao
        from tbrefeicoes_tipo t
        where t.id = NEW.tipo_id
    into
        DATA_INICIO,
        DATA_excluir,
        DATA_ALTERAR,
        RESTANTE,
        prazo_exclusao,
        prazo_alteracao
    do begin
        if(RESTANTE < prazo_alteracao)then
        begin
            exception "..." 'TEMPO PARA ALTERAR REGISTRO FOI ESGOTADO EM '||formatdatetime(DATA_ALTERAR);
        end
    end

    FOR
        select first 1 R.id
        FROM tbrefeicoes_registro R
        WHERE R.cardapio_id = NEW.id
    INTO
        ID
    DO BEGIN
        exception "..." 'REFEICOES JA REGISTRADA, OPERACAO CANCELADA!';
    END
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbrefeicoes_cardapio_b01iu for tbrefeicoes_cardapio
active before insert or update position 1
AS
declare variable ID INTEGER;
declare variable descricao VARCHAR(100);
begin

    if(new.data_refeicao < current_date)then
    begin
        exception "..." 'REFEICAO NAO PODE SER REGISTRADA PARA ANTES DE '||formatdate(current_date);
    end

    FOR
        select
            A.id,
            T.descricao
        from TBREFEICOES_CARDAPIO a, TBREFEICOES_TIPO T
        where a.tipo_id = new.tipo_id
        AND A.data_refeicao = NEW.data_refeicao
        AND T.id = A.tipo_id
        and a.id <> NEW.id
    INTO
        :ID,
        :descricao
    DO BEGIN
        exception "..." 'JA EXITE "'||descricao||'" PARA '||formatdate(NEW.data_refeicao);
    END
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbrefeicoes_cardapio_b01d for tbrefeicoes_cardapio
active before delete position 1
AS
declare variable DATA_INICIO timestamp;
declare variable RESTANTE integer;
declare variable prazo_exclusao integer;
declare variable prazo_alteracao integer;
declare variable DATA_excluir timestamp;
declare variable DATA_ALTERAR timestamp;
declare variable ID integer;
begin
    for
        select
            cast(OLD.data_refeicao as date)+t.hora_inicio as DATA_INICIO,
            dateadd(hour, t.prazo_exclusao * -1 ,cast(OLD.data_refeicao as date)+t.hora_inicio) as DATA_excluir,
            dateadd(hour, t.prazo_alteracao * -1 ,cast(OLD.data_refeicao as date)+t.hora_inicio) as DATA_ALTERAR,
            datediff(hour, current_timestamp, cast(OLD.data_refeicao as date)+t.hora_inicio) as RESTANTE,
            t.prazo_exclusao,
            t.prazo_alteracao
        from tbrefeicoes_tipo t
        where t.id = old.tipo_id
    into
        DATA_INICIO,
        DATA_excluir,
        DATA_ALTERAR,
        RESTANTE,
        prazo_exclusao,
        prazo_alteracao
    do begin
        if(RESTANTE < prazo_exclusao)then
        begin
            exception "..." 'TEMPO PARA EXCLUIR REGISTRO FOI ESGOTADO EM '||formatdatetime(DATA_excluir);
        end
    end

    FOR
        select first 1 R.id
        FROM tbrefeicoes_registro R
        WHERE R.cardapio_id = OLD.id
    INTO
        ID
    DO BEGIN
        exception "..." 'REFEICOES JA REGISTRADAS, OPERACAO CANCELADA!';
    END
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbrefeicoes_cardapio_b03u for tbrefeicoes_cardapio
active before update position 3
AS
declare variable PESSOA_ID integer;
declare variable TOPO_PESSOA_ID integer;
declare variable reserva_prato_id integer;
declare variable cardapio_prato_id integer;
declare variable TIPO_REFEICAO varchar(100);
declare variable tipo_desc varchar(100);
declare variable prato_desc varchar(100);
declare variable pratos varchar(500);
begin
  if(new.data_refeicao is distinct from old.data_refeicao)then
  begin
     for
        select
            r.tipo_registro as TOPO_PESSOA_ID,
            r.pessoa_id,
            coalesce(t.descricao,'') as TIPO_REFEICAO,
            r.cardapio_prato_id
        from tbrefeicoes_reserva r
        left join tbrefeicoes_tipo t on t.id = new.tipo_id
        where r.cardapio_id = new.id
     into
        TOPO_PESSOA_ID,
        PESSOA_ID,
        TIPO_REFEICAO,
        cardapio_prato_id
     do begin

        pratos = '';

        for
            select
                p.id,
                coalesce(t.descricao,'') as tipo_desc,
                coalesce(s.descricao,'') as prato_desc
            from tbrefeicoes_card_pratos p
            left join tbrefeicoes_tipo_prato t on t.id = p.tipo_prato_id
            left join tbrefeicoes_prato s on s.id = p.prato_id
            where p.cardapio_id = new.id
        into
            reserva_prato_id,
            tipo_desc,
            prato_desc
        do begin
            pratos = pratos || '<br><strong>' || tipo_desc || ':</strong> ' || prato_desc || ''||iif(reserva_prato_id = cardapio_prato_id, ' <label style="color: red">(RESERVADO)</label>', '');
        end

        INSERT INTO TBNOTIFICACAO_COLABORADOR (TIPO, PESSOA_ID, TOPO_PESSOA_ID, TODOS, MENU_ID, TITULO, LEITURA, ENVIO, DATA_HORA, EMITENTE, AGENDAMENTO, EXECUTADO, TABELA, TABELA_ID, MENSAGEM)
                   VALUES (
                    1,
                    :PESSOA_ID,
                    :TOPO_PESSOA_ID,
                    0,
                    0,
                    'REFEIÇÃO "'||:TIPO_REFEICAO||'" FOI REPROGRAMADA DE '||formatdate(OLD.data_refeicao)||' PARA '||formatdate(new.data_refeicao)||'',
                    0,
                    0,
                    current_timestamp,
                    0,
                    current_timestamp,
                    0,
                    '',
                    0,
                    '<h2>'||:TIPO_REFEICAO||' ('||formatdate(new.data_refeicao)||')</h2>'||coalesce(:pratos,'')||'<br><strong>Livre:</strong> '||iif(new.livre = 1, 'Sim', 'Não')||'');
            
     end
  end
end
^

SET TERM ; ^

ALTER TABLE TBREFEICOES_CARD_PRATOS
    ADD OLD_PRATO_ID INTEGER;

SET TERM ^ ;

CREATE trigger ttbrefeicoes_card_pratos_b01u for tbrefeicoes_card_pratos
active before update position 1
AS
begin
  IF(NEW.prato_id IS distinct FROM OLD.prato_id)THEN
  BEGIN
    NEW.old_prato_id = OLD.prato_id;
  END
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger tbrefeicoes_card_pratos_bu0 for tbrefeicoes_card_pratos
inactive before update position 0
AS
declare variable PESSOA_ID integer;
declare variable TOPO_PESSOA_ID integer;
declare variable reserva_prato_id integer;
declare variable cardapio_prato_id integer;
declare variable livre integer;
declare variable TIPO_REFEICAO varchar(100);
declare variable tipo_desc varchar(100);
declare variable prato_desc varchar(100);
declare variable pratos varchar(500);
declare variable data_refeicao DATE;
begin
  if(new.prato_id is distinct from old.prato_id)then
  begin
     for
        select
            r.tipo_registro as TOPO_PESSOA_ID,
            r.pessoa_id,
            coalesce(t.descricao,'') as TIPO_REFEICAO,
            r.cardapio_prato_id,
            C.data_refeicao,
            C.livre
        from tbrefeicoes_reserva r
        left JOIN tbrefeicoes_cardapio C ON C.id = new.cardapio_id
        left join tbrefeicoes_tipo t on t.id = C.tipo_id
        where r.cardapio_id = new.cardapio_id
     into
        TOPO_PESSOA_ID,
        PESSOA_ID,
        TIPO_REFEICAO,
        cardapio_prato_id,
        data_refeicao,
        livre
     do begin

        pratos = '';

        for
            select
                p.id,
                coalesce(t.descricao,'') as tipo_desc,
                coalesce(s.descricao,'') as prato_desc
            from tbrefeicoes_card_pratos p
            left join tbrefeicoes_tipo_prato t on t.id = p.tipo_prato_id
            left join tbrefeicoes_prato s on s.id = p.prato_id
            where p.cardapio_id = new.cardapio_id
        into
            reserva_prato_id,
            tipo_desc,
            prato_desc
        do begin
            pratos = pratos || '<br><strong>' || tipo_desc || ':</strong> ' || prato_desc || ''||iif(reserva_prato_id = cardapio_prato_id, ' <label style="color: red">(RESERVADO)</label>', '');
        end

        INSERT INTO TBNOTIFICACAO_COLABORADOR (TIPO, PESSOA_ID, TOPO_PESSOA_ID, TODOS, MENU_ID, TITULO, LEITURA, ENVIO, DATA_HORA, EMITENTE, AGENDAMENTO, EXECUTADO, TABELA, TABELA_ID, MENSAGEM)
                   VALUES (
                    1,
                    :PESSOA_ID,
                    :TOPO_PESSOA_ID,
                    0,
                    0,
                    'REFEIÇÃO "'||:TIPO_REFEICAO||'" DE '||formatdate(:data_refeicao)||' FOI ALTERADA',
                    0,
                    0,
                    current_timestamp,
                    0,
                    current_timestamp,
                    0,
                    '',
                    0,
                    '<h2>'||:TIPO_REFEICAO||' ('||formatdate(:data_refeicao)||')</h2>'||coalesce(:pratos,'')||'<br><strong>Livre:</strong> '||iif(:livre = 1, 'Sim', 'Não')||'');
            
     end
  end
end
^

SET TERM ; ^

ALTER TABLE TBREFEICOES_CARDAPIO
    ADD OLD_DATA_REFEICAO DATE;

SET TERM ^ ;

CREATE OR ALTER trigger ttbrefeicoes_cardapio_b01iu for tbrefeicoes_cardapio
active before insert or update position 1
AS
declare variable ID INTEGER;
declare variable descricao VARCHAR(100);
begin

    if(new.data_refeicao IS distinct FROM OLD.data_refeicao)then
    begin
        NEW.old_data_refeicao = OLD.data_refeicao;
    end

    if(new.data_refeicao < current_date)then
    begin
        exception "..." 'REFEICAO NAO PODE SER REGISTRADA PARA ANTES DE '||formatdate(current_date);
    end

    FOR
        select
            A.id,
            T.descricao
        from TBREFEICOES_CARDAPIO a, TBREFEICOES_TIPO T
        where a.tipo_id = new.tipo_id
        AND A.data_refeicao = NEW.data_refeicao
        AND T.id = A.tipo_id
        and a.id <> NEW.id
    INTO
        :ID,
        :descricao
    DO BEGIN
        exception "..." 'JA EXITE "'||descricao||'" PARA '||formatdate(NEW.data_refeicao);
    END
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbrefeicoes_cardapio_b03u for tbrefeicoes_cardapio
inactive before update position 3
AS
declare variable PESSOA_ID integer;
declare variable TOPO_PESSOA_ID integer;
declare variable reserva_prato_id integer;
declare variable cardapio_prato_id integer;
declare variable TIPO_REFEICAO varchar(100);
declare variable tipo_desc varchar(100);
declare variable prato_desc varchar(100);
declare variable pratos varchar(500);
begin
  if(new.data_refeicao is distinct from old.data_refeicao)then
  begin
     for
        select
            r.tipo_registro as TOPO_PESSOA_ID,
            r.pessoa_id,
            coalesce(t.descricao,'') as TIPO_REFEICAO,
            r.cardapio_prato_id
        from tbrefeicoes_reserva r
        left join tbrefeicoes_tipo t on t.id = new.tipo_id
        where r.cardapio_id = new.id
     into
        TOPO_PESSOA_ID,
        PESSOA_ID,
        TIPO_REFEICAO,
        cardapio_prato_id
     do begin

        pratos = '';

        for
            select
                p.id,
                coalesce(t.descricao,'') as tipo_desc,
                coalesce(s.descricao,'') as prato_desc
            from tbrefeicoes_card_pratos p
            left join tbrefeicoes_tipo_prato t on t.id = p.tipo_prato_id
            left join tbrefeicoes_prato s on s.id = p.prato_id
            where p.cardapio_id = new.id
        into
            reserva_prato_id,
            tipo_desc,
            prato_desc
        do begin
            pratos = pratos || '<br><strong>' || tipo_desc || ':</strong> ' || prato_desc || ''||iif(reserva_prato_id = cardapio_prato_id, ' <label style="color: red">(RESERVADO)</label>', '');
        end

        INSERT INTO TBNOTIFICACAO_COLABORADOR (TIPO, PESSOA_ID, TOPO_PESSOA_ID, TODOS, MENU_ID, TITULO, LEITURA, ENVIO, DATA_HORA, EMITENTE, AGENDAMENTO, EXECUTADO, TABELA, TABELA_ID, MENSAGEM)
                   VALUES (
                    1,
                    :PESSOA_ID,
                    :TOPO_PESSOA_ID,
                    0,
                    0,
                    'REFEIÇÃO "'||:TIPO_REFEICAO||'" FOI REPROGRAMADA DE '||formatdate(OLD.data_refeicao)||' PARA '||formatdate(new.data_refeicao)||'',
                    0,
                    0,
                    current_timestamp,
                    0,
                    current_timestamp,
                    0,
                    '',
                    0,
                    '<h2>'||:TIPO_REFEICAO||' ('||formatdate(new.data_refeicao)||')</h2>'||coalesce(:pratos,'')||'<br><strong>Livre:</strong> '||iif(new.livre = 1, 'Sim', 'Não')||'');
            
     end
  end
end
^

SET TERM ; ^

ALTER TABLE TBNOTIFICACAO_COLABORADOR
    ADD REFEICAO_ID INTEGER DEFAULT 0;

CREATE INDEX ITBNOTIFICACAO_COLABORADOR_10
ON TBNOTIFICACAO_COLABORADOR (REFEICAO_ID);

ALTER TABLE TBNOTIFICACAO_COLABORADOR
    ALTER REFEICAO_ID TO CARDAPIO_ID;

DROP INDEX ITBNOTIFICACAO_COLABORADOR_10;

CREATE INDEX ITBNOTIFICACAO_COLABORADOR_10
ON TBNOTIFICACAO_COLABORADOR (CARDAPIO_ID,TAG);

ALTER TABLE TBNOTIFICACAO_COLABORADOR
    ADD TAG VARCHAR(50);



SET TERM ^ ;

CREATE OR ALTER procedure SP_NOTIFICAR_ALTERACAO_CARDAPIO (
    CARDAPIO_ID integer,
    TAG integer)
as
declare variable PESSOA_ID integer;
declare variable TOPO_PESSOA_ID integer;
declare variable RESERVA_PRATO_ID integer;
declare variable CARDAPIO_PRATO_ID integer;
declare variable LIVRE integer;
declare variable TIPO_REFEICAO varchar(100);
declare variable TIPO_DESC varchar(100);
declare variable PRATO_DESC varchar(100);
declare variable PRATOS varchar(500);
declare variable DATA_REFEICAO date;
declare variable OLD_DATA_REFEICAO date;
declare variable OLD_PRATO_DESC varchar(100);
declare variable PRATO_ID integer;
declare variable OLD_PRATO_ID integer;
declare variable COM_ALTERACAO integer;
begin

    COM_ALTERACAO = 0;
    TAG = coalesce(TAG,CARDAPIO_ID);
    for
        select
            r.tipo_registro as TOPO_PESSOA_ID,
            r.pessoa_id,
            coalesce(t.descricao,'') as TIPO_REFEICAO,
            r.cardapio_prato_id,
            C.data_refeicao,
            coalesce(c.old_data_refeicao, C.data_refeicao) as old_data_refeicao,
            C.livre
        from tbrefeicoes_reserva r
        left JOIN tbrefeicoes_cardapio C ON C.id = :CARDAPIO_ID
        left join tbrefeicoes_tipo t on t.id = C.tipo_id
        where r.cardapio_id = :CARDAPIO_ID
     into
        TOPO_PESSOA_ID,
        PESSOA_ID,
        TIPO_REFEICAO,
        cardapio_prato_id,
        data_refeicao,
        old_data_refeicao,
        livre
     do begin

        pratos = '';

        for
            select
                p.id,
                prato_id,
                old_prato_id as old_prato_id,
                coalesce(t.descricao,'Não Definido') as tipo_desc,
                coalesce(s1.descricao,'(VAZIO)') as prato_desc,
                coalesce(s2.descricao,'(VAZIO)') as old_prato_desc
            from tbrefeicoes_card_pratos p
            left join tbrefeicoes_tipo_prato t on t.id = p.tipo_prato_id
            left join tbrefeicoes_prato s1 on s1.id = p.prato_id
            left join tbrefeicoes_prato s2 on s2.id = p.old_prato_id
            where p.cardapio_id = :CARDAPIO_ID
        into
            reserva_prato_id,
            prato_id,
            old_prato_id,
            tipo_desc,
            prato_desc,
            old_prato_desc
        do begin
            if(old_prato_id is null)then
            begin
                pratos = pratos || '<br><strong>' || tipo_desc || ':</strong> ' || prato_desc     || ''||iif(reserva_prato_id = cardapio_prato_id, ' <label style="color: red">(RESERVADO)</label>', '');
            end else
            begin
                COM_ALTERACAO = 1;
                pratos = pratos || '<br><strong>' || tipo_desc || ':</strong>'  || old_prato_desc ||' <label style="color: red">alterado para</label> '|| prato_desc || ''||iif(reserva_prato_id = cardapio_prato_id, ' <label style="color: red">(RESERVADO)</label>', '');
            end
        end

        if(:data_refeicao is distinct from :old_data_refeicao)then
        begin
            COM_ALTERACAO = 1;
        end

        INSERT INTO TBNOTIFICACAO_COLABORADOR (TIPO, CARDAPIO_ID, TAG, PESSOA_ID, TOPO_PESSOA_ID, TODOS, MENU_ID, TITULO, LEITURA, ENVIO, DATA_HORA, EMITENTE, AGENDAMENTO, EXECUTADO, TABELA, TABELA_ID, MENSAGEM)
                   VALUES (
                    1,
                    :CARDAPIO_ID,
                    :TAG,
                    :PESSOA_ID,
                    :TOPO_PESSOA_ID,
                    0,
                    0,
                    'REFEIÇÃO "'||:TIPO_REFEICAO||'" DE '||formatdate(:data_refeicao)||' FOI ALTERADA',
                    0,
                    0,
                    current_timestamp,
                    0,
                    current_timestamp,
                    0,
                    '',
                    0,
                    '<h2>'||:TIPO_REFEICAO||' ('||formatdate(:data_refeicao)||')</h2>'||
                    iif(:data_refeicao is distinct from :old_data_refeicao, 'REFEIÇÃO FOI REPROGRAMADA DE '||formatdate(:old_data_refeicao)||' PARA '||formatdate(:data_refeicao)||'<br>','')||
                    coalesce(:pratos,'')||'<br><strong>Livre:</strong> '||iif(:livre = 1, 'Sim', 'Não')||'');
            
     end

     update tbrefeicoes_cardapio c set c.old_data_refeicao = null where c.id = :CARDAPIO_ID;
     update tbrefeicoes_card_pratos s set s.old_prato_id = null where s.cardapio_id = :CARDAPIO_ID;

     if(COM_ALTERACAO = 0)then
     begin
        delete from TBNOTIFICACAO_COLABORADOR h where h.cardapio_id = :CARDAPIO_ID and h.tag = :TAG;
     end
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbrefeicoes_cardapio_b03i for tbrefeicoes_cardapio
active before insert position 3
AS
    DECLARE VARIABLE HISTORICO VARCHAR(8000);
BEGIN
    HISTORICO = '';
    
    IF(NEW.ID > 0)THEN
    BEGIN
        HISTORICO = HISTORICO || ' REGISTRO INCLUIDO';
    END
    
    IF(HISTORICO <> '')THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBREFEICOES_CARDAPIO', NEW.ID, HISTORICO);
    END
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbrefeicoes_cardapio_b02d for tbrefeicoes_cardapio
active before delete position 2
AS
    DECLARE VARIABLE HISTORICO VARCHAR(8000);
BEGIN
    HISTORICO = '';

    IF(OLD.ID > 0)THEN
    BEGIN
        HISTORICO = HISTORICO || ' REGISTRO: ' || OLD.ID || ' EXCLUIDO';
    END

    IF(HISTORICO <> '')THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBREFEICOES_CARDAPIO', OLD.ID, HISTORICO);
    END
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbrefeicoes_cardapio_b04u for tbrefeicoes_cardapio
active before update position 4
AS
    DECLARE VARIABLE HISTORICO VARCHAR(8000);
BEGIN
    HISTORICO = '';
    
    IF(OLD.livre <> NEW.livre)THEN
    BEGIN
        HISTORICO = HISTORICO || ' LIVRE:' || OLD.livre || ' -> ' || NEW.livre || ' | ';
    END
    
    IF(OLD.tipo_id <> NEW.tipo_id)THEN
    BEGIN
        HISTORICO = HISTORICO || ' TIPO:' || OLD.tipo_id || ' -> ' || NEW.tipo_id || ' | ';
    END
    
    IF(OLD.data_refeicao <> NEW.data_refeicao)THEN
    BEGIN
        HISTORICO = HISTORICO || ' DATA:' || formatdate(OLD.data_refeicao) || ' -> ' || formatdate(NEW.data_refeicao) || ' | ';
    END
    
    IF(OLD.STATUS <> NEW.STATUS)THEN
    BEGIN
        HISTORICO = HISTORICO || ' STATUS:' || OLD.STATUS || ' -> ' || NEW.STATUS || ' | ';
    END

    IF(HISTORICO <> '')THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBREFEICOES_CARDAPIO', NEW.ID, HISTORICO);
    END
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbrefeicoes_card_pratos_b03u for tbrefeicoes_card_pratos
active before update position 3
AS
    DECLARE VARIABLE HISTORICO VARCHAR(8000);
BEGIN
    HISTORICO = '';
    
    IF(OLD.prato_id <> NEW.prato_id)THEN
    BEGIN
        HISTORICO = HISTORICO || ' Prato:' || OLD.prato_id || ' -> ' || NEW.prato_id || ' | ';
    END
    
    IF(OLD.tipo_prato_id <> NEW.tipo_prato_id)THEN
    BEGIN
        HISTORICO = HISTORICO || ' TIPO:' || OLD.tipo_prato_id || ' -> ' || NEW.tipo_prato_id || ' | ';
    END

    IF(HISTORICO <> '')THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBREFEICOES_CARDAPIO', NEW.cardapio_id, HISTORICO);
    END
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbrefeicoes_reserva_b01u for tbrefeicoes_reserva
active before update position 1
AS
    DECLARE VARIABLE HISTORICO VARCHAR(8000);
BEGIN
    HISTORICO = '';
    
    IF(OLD.cardapio_prato_id <> NEW.cardapio_prato_id)THEN
    BEGIN
        HISTORICO = HISTORICO || ' Reserva:' || OLD.cardapio_prato_id || ' -> ' || NEW.cardapio_prato_id || ' | ';
    END
    
    IF(OLD.cardapio_id <> NEW.cardapio_id)THEN
    BEGIN
        HISTORICO = HISTORICO || ' Cardapio:' || OLD.cardapio_id || ' -> ' || NEW.cardapio_id || ' | ';
    END
    
    IF(OLD.tipo_registro <> NEW.tipo_registro)THEN
    BEGIN
        HISTORICO = HISTORICO || ' Tipo:' || OLD.tipo_registro || ' -> ' || NEW.tipo_registro || ' | ';
    END
    
    IF(OLD.pessoa_id <> NEW.pessoa_id)THEN
    BEGIN
        HISTORICO = HISTORICO || ' Pessoa:' || OLD.pessoa_id || ' -> ' || NEW.pessoa_id || ' | ';
    END
    
    IF(OLD.data <> NEW.data)THEN
    BEGIN
        HISTORICO = HISTORICO || ' Data:' || OLD.data || ' -> ' || NEW.data || ' | ';
    END
    
    IF(OLD.data_hora <> NEW.data_hora)THEN
    BEGIN
        HISTORICO = HISTORICO || ' Data Hora:' || OLD.data_hora || ' -> ' || NEW.data_hora || ' | ';
    END

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

SET TERM ; ^

ALTER TABLE TBREFEICOES_REGISTRO
    ADD EVENTO_REP INTEGER;

ALTER TABLE TBREFEICOES_REGISTRO
    ALTER NSU TYPE VARCHAR(100);

UPDATE OR INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, URL, DESCRICAO, DATAHORA, SUB_GRUPO, DESCRICAO_RESUMIDA)
                      VALUES (33510, 'RH', 'REF', '1   ', '', 'CADASTRO DE TIPOS DE REFEIÇÕES', '2025-01-17 14:38:31', '5', 'CADASTRO DE TIPOS DE REFEIÇÕES')
                    MATCHING (CONTROLE);
UPDATE OR INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, URL, DESCRICAO, DATAHORA, SUB_GRUPO, DESCRICAO_RESUMIDA)
                      VALUES (33520, 'RH', 'REF', '1   ', '', 'CADASTRO DE PREÇO DE REFEIÇÕES', '2025-01-17 14:54:23', '5', 'CADASTRO DE PREÇO DE REFEIÇÕES')
                    MATCHING (CONTROLE);
UPDATE OR INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, URL, DESCRICAO, DATAHORA, SUB_GRUPO, DESCRICAO_RESUMIDA)
                      VALUES (33530, 'RH', 'REF', '1   ', '', 'CADASTRO DE TIPOS PRATOS PARA REFEIÇÕES', '2025-01-17 15:04:01', '5', 'CADASTRO DE TIPOS PRATOS PARA REFEIÇÕES')
                    MATCHING (CONTROLE);
UPDATE OR INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, URL, DESCRICAO, DATAHORA, SUB_GRUPO, DESCRICAO_RESUMIDA)
                      VALUES (33540, 'RH', 'REF', '1   ', '', 'CADASTRO DE PRATOS PARA REFEIÇÕES', '2025-01-17 15:12:27', '5', 'Cadastro de Pratos Para Refeições')
                    MATCHING (CONTROLE);
UPDATE OR INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, URL, DESCRICAO, DATAHORA, SUB_GRUPO, DESCRICAO_RESUMIDA)
                      VALUES (33550, 'RH', 'REF', '1   ', '', 'CADASTRO DE GRUPO DE REFEIÇÕES', '2025-01-17 15:24:04', '5', 'CADASTRO DE GRUPO DE REFEIÇÕES')
                    MATCHING (CONTROLE);
UPDATE OR INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, URL, DESCRICAO, DATAHORA, SUB_GRUPO, DESCRICAO_RESUMIDA)
                      VALUES (33560, 'RH', 'REF', '1   ', '', 'CADASTRO DE TERCEIROS\VISITANTES PARA REFEIÇÕES', '2025-01-17 15:31:38', '5', 'CADASTRO DE TERCEIROS\VISITANTES PARA REFEIÇÕES')
                    MATCHING (CONTROLE);
UPDATE OR INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, URL, DESCRICAO, DATAHORA, SUB_GRUPO, DESCRICAO_RESUMIDA)
                      VALUES (33570, 'RH', 'REF', '1   ', '', 'CADASTRO DE CARDÁPIO PARA REFEIÇÕES', '2025-01-27 09:03:58', '5', 'CADASTRO DE CARDÁPIO PARA REFEIÇÕES')
                    MATCHING (CONTROLE);
UPDATE OR INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, URL, DESCRICAO, DATAHORA, SUB_GRUPO, DESCRICAO_RESUMIDA)
                      VALUES (33580, 'RH', 'REF', '1   ', '', 'RESERVA DE REFEIÇÕES (TOTEM)', '2025-01-30 15:46:56', '5', 'RESERVA DE REFEIÇÕES (TOTEM)')
                    MATCHING (CONTROLE);

COMMIT WORK;

CREATE TABLE TBTOKEN_PASSPORT (
    ID INTEGER NOT NULL,
    TIPO VARCHAR(30),
    TOKEN VARCHAR(100),
    DATA TIMESTAMP,
    DATA_VALIDADE TIMESTAMP,
    USUARIO_ID INTEGER,
    COLABORADOR_ID INTEGER,
    CLIENTE_ID INTEGER,
    PESSOA_ID INTEGER,
    TIPO_PESSOA_ID INTEGER);

ALTER TABLE TBTOKEN_PASSPORT
ADD CONSTRAINT PK_TBTOKEN_PASSPORT
PRIMARY KEY (ID);

COMMENT ON COLUMN TBTOKEN_PASSPORT.TIPO IS
'USUARIOS, COLABORADORES, CLIENTES, PESSOAS';

COMMENT ON TABLE TBTOKEN_PASSPORT IS 'tabela de TOKEN de acesso';

CREATE SEQUENCE GTBTOKEN_PASSPORT;

SET TERM ^ ;

create trigger ttbtoken_passport_b01i for tbtoken_passport
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbtoken_passport,1);
end
^

SET TERM ; ^

ALTER TABLE TBTOKEN_PASSPORT
    ADD REVOGADO INTEGER;

CREATE INDEX ITBTOKEN_PASSPORT_04
ON TBTOKEN_PASSPORT (TOKEN);

CREATE INDEX ITBTOKEN_PASSPORT_03
ON TBTOKEN_PASSPORT (TIPO);

CREATE INDEX ITBTOKEN_PASSPORT_02
ON TBTOKEN_PASSPORT (DATA_VALIDADE);

CREATE INDEX TTBTOKEN_PASSPORT_01
ON TBTOKEN_PASSPORT (REVOGADO);

ALTER TABLE TBCOLABORADOR
    ADD BIOMETRIA_FACIAL BLOB SUB_TYPE 1 SEGMENT SIZE 80;

ALTER TABLE TBREFEICOES_PESSOAS
    ADD BIOMETRIA_FACIAL BLOB SUB_TYPE 1 SEGMENT SIZE 80;

ALTER TABLE TBREFEICOES_TIPO
    ADD RESERVAR INTEGER DEFAULT 0;

