-- Achar Parâmetros dos Menus nos Usuários --
SELECT
    T.*
FROM TBMENU_DETALHE T
WHERE T.MENU_ID = :MENU_ID

-- TBUSUARIO_PERFIL_MENU --
---- 
---- Perfis de Usuários e suas permissões nas telas
---- 
========================================================================================================================================================================================
-- Inserir/Alterar os Parâmetros do Usúario --
UPDATE OR INSERT INTO TBMENU_DETALHE (MENU_ID, USUARIO_ID, INCLUIR, ALTERAR, EXCLUIR, IMPRIMIR, NEGAR) VALUES() MATCHING(MENU_ID, USUARIO_ID);

========================================================================================================================================================================================
-- Update dos Menus para Remoção dos Menus Antigos --
UPDATE TBMENU SET TIPO = '0', URL = '_"ID do Novo Menu"' WHERE (CONTROLE = \Controle do Menu Antigo\);

========================================================================================================================================================================================
-- Incluir/Alterar permissões dos Perfis de Usuário --
UPDATE OR INSERT INTO TBUSUARIO_PERFIL_MENU (PERFIL_ID, MENU_CONTROLE, INCLUIR, ALTERAR, EXCLUIR, IMPRIMIR, NEGAR) VALUES () MATCHING(PERFIL_ID, MENU_CONTROLE);

========================================================================================================================================================================================

========================================================================================================================================================================================
========================================================================================================================================================================================
/*********************************************************/
/* Criação do Novo Menu e Atualização do Menu Antigo */

INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, URL, DESCRICAO, DATAHORA)
	VALUES (/* #MENU_NOVO# */, '#Grupo do Menu#', '#Subgrupo do Menu#', '1', '', '#Descrição do Menu#', CURRENT_TIMESTAMP);
	
UPDATE TBMENU 
	SET TIPO = '0',
		URL = '_'||/* #MENU_NOVO# */
	WHERE CONTROLE = /* #MENU_ANTIGO# */;

========================================================================================================================================================================================
/*********************************************************/
/*********************************************************/
/* Permissões do Menu para o Usuário */
INSERT INTO TBMENU_DETALHE (MENU_ID, USUARIO_ID, INCLUIR, ALTERAR, EXCLUIR, IMPRIMIR, NEGAR)
SELECT
    /* #MENU_NOVO# */,
    T.USUARIO_ID,
    T.INCLUIR,
    T.ALTERAR,
    T.EXCLUIR,
    T.IMPRIMIR,
    T.NEGAR

FROM TBMENU_DETALHE T
WHERE T.MENU_ID = /* #MENU_ANTIGO# */
AND T.USUARIO_ID NOT IN (
    SELECT
        T.USUARIO_ID
    FROM TBMENU_DETALHE T
    WHERE T.MENU_ID = /* #MENU_NOVO# */
);

========================================================================================================================================================================================
/*********************************************************/
/* Permissões do Menu para o Perfil de Usuário */
INSERT INTO TBUSUARIO_PERFIL_MENU (PERFIL_ID, MENU_CONTROLE, INCLUIR, ALTERAR, EXCLUIR, IMPRIMIR, DATAHORA_INSERT, DATAHORA_UPDATE, DATAHORA_DELETE, NEGAR)
SELECT                                                       
    T.PERFIL_ID,                                             
    /* #MENU_NOVO# */,                                                   
    T.INCLUIR,
    T.ALTERAR,
    T.EXCLUIR,
    T.IMPRIMIR,
    CURRENT_TIMESTAMP,
    NULL,
    NULL,
    T.NEGAR

FROM TBUSUARIO_PERFIL_MENU T
WHERE T.MENU_CONTROLE = /* #MENU_ANTIGO# */
AND T.PERFIL_ID NOT IN (
    SELECT
        T.PERFIL_ID
    FROM TBUSUARIO_PERFIL_MENU T
    WHERE T.MENU_CONTROLE = /* #MENU_NOVO# */
);

========================================================================================================================================================================================
/*********************************************************/
/* Atualização do Menu nos Favoritos dos Usuários */
INSERT INTO TBMENU_FAVORITO (USUARIO_ID, MENU_ID, TIPO)
SELECT
    T.USUARIO_ID,
    /* #MENU_NOVO# */,
    T.TIPO

FROM TBMENU_FAVORITO T
WHERE T.MENU_ID = /* #MENU_ANTIGO# */
AND T.USUARIO_ID NOT IN (
    SELECT
        T.USUARIO_ID
    FROM TBMENU_FAVORITO T
    WHERE T.MENU_ID = /* #MENU_NOVO# */
);

DELETE FROM TBMENU_FAVORITO WHERE MENU_ID = /* #MENU_ANTIGO# */;