Executes a three-part UNION query returning: (1) secured items where the user's security group matches, (2) unsecured items with no security record, and (3) the user's active favorites. Applies case-insensitive group matching per BR-MNU-04 and active-favorite filtering per BR-MNU-05.
-- Part 1: secured items for the user
SELECT DISTINCT
ITM.MENU_ITEM_SEQ_NUM AS MenuItemSeqNum, USR.MENU_USER AS MenuUser,
ITM.PAGE_ORDER_NUM AS MenuOrder, 'N' AS FavoriteFlag,
USR.MENU_USER_EMPLID AS MenuUserEmplid,
ITM.MENU_CATEGORY_CODE AS MenuCategoryCode, CAT.CODE_DESCR AS Category,
ITM.TOOL_TIP_TXT AS ToolTip, ITM.VISIBLE_FLAG AS VisibleFlag,
PAG.MENU_PAGE_SEQ_NUM AS MenuPageSeqNum, PAG.PAGE_NAME AS PageName,
PAG.PAGE_LINK_TXT AS PageLink, PAG.APPLICATION_CODE AS ApplicationCode,
APP.CODE_DESCR AS ApplicationPath, PAG.FAVORITE_NAME AS FavoriteName,
PAG.SAVE_PREFERENCES_FLAG AS SavePreferencesFlag, PAG.PRINT_FLAG AS PrintFlag,
PAG.DOWNLOAD_FLAG AS DownloadFlag, PAG.HELP_FLAG AS HelpFlag,
PAG.SAVE_FLAG AS SaveFlag, PAG.INSERT_FLAG AS InsertFlag,
PAG.DELETE_FLAG AS DeleteFlag, PAG.PRINT_TIP_TXT AS PrintTip,
PAG.DOWNLOAD_TIP_TXT AS DownloadTip, PAG.SAVE_TOOLTIP_TXT AS SaveTip,
PAG.DELETE_TOOLTIP_TXT AS DeleteTip, PAG.INSERT_TOOLTIP_TXT AS InsertTip,
'N' as UnsecuredFlag
FROM menu_item itm, menu_security sec, menu_security_user usr,
MENU_PAGE PAG, BUSONLINE_APPS_CODE app, MENU_CATEGORY_CODE cat
WHERE SEC.MENU_ITEM_SEQ_NUM = ITM.MENU_ITEM_SEQ_NUM
AND PAG.MENU_PAGE_SEQ_NUM = ITM.MENU_PAGE_SEQ_NUM
AND APP.CODE = PAG.APPLICATION_CODE
AND CAT.CODE = ITM.MENU_CATEGORY_CODE
AND upper(USR.SECURITY_GROUP_TXT) = upper(SEC.SECURITY_GROUP_TXT)
AND USR.MENU_USER = :MenuUser
UNION
-- Part 2: unsecured items (no security record)
SELECT
ITM.MENU_ITEM_SEQ_NUM AS MenuItemSeqNum, :MenuUser AS MenuUser,
ITM.PAGE_ORDER_NUM AS MenuOrder, 'N' AS FavoriteFlag, NULL AS MenuUserEmplid,
ITM.MENU_CATEGORY_CODE AS MenuCategoryCode, CAT.CODE_DESCR AS Category,
ITM.TOOL_TIP_TXT AS ToolTip, ITM.VISIBLE_FLAG AS VisibleFlag,
PAG.MENU_PAGE_SEQ_NUM AS MenuPageSeqNum, PAG.PAGE_NAME AS PageName,
PAG.PAGE_LINK_TXT AS PageLink, PAG.APPLICATION_CODE AS ApplicationCode,
APP.CODE_DESCR AS ApplicationPath, PAG.FAVORITE_NAME AS FavoriteName,
PAG.SAVE_PREFERENCES_FLAG AS SavePreferencesFlag, PAG.PRINT_FLAG AS PrintFlag,
PAG.DOWNLOAD_FLAG AS DownloadFlag, PAG.HELP_FLAG AS HelpFlag,
PAG.SAVE_FLAG AS SaveFlag, PAG.INSERT_FLAG AS InsertFlag,
PAG.DELETE_FLAG AS DeleteFlag, PAG.PRINT_TIP_TXT AS PrintTip,
PAG.DOWNLOAD_TIP_TXT AS DownloadTip, PAG.SAVE_TOOLTIP_TXT AS SaveTip,
PAG.DELETE_TOOLTIP_TXT AS DeleteTip, PAG.INSERT_TOOLTIP_TXT AS InsertTip,
'Y' as UnsecuredFlag
FROM menu_item itm, MENU_PAGE PAG, BUSONLINE_APPS_CODE app, MENU_CATEGORY_CODE cat
WHERE PAG.MENU_PAGE_SEQ_NUM = ITM.MENU_PAGE_SEQ_NUM
AND APP.CODE = PAG.APPLICATION_CODE
AND CAT.CODE = ITM.MENU_CATEGORY_CODE
AND NOT EXISTS (
SELECT 1 FROM menu_security SEC
WHERE SEC.MENU_ITEM_SEQ_NUM = ITM.MENU_ITEM_SEQ_NUM
)
UNION
-- Part 3: user's active favorites
SELECT
ITM.MENU_ITEM_SEQ_NUM AS MenuItemSeqNum, :MenuUser AS MenuUser,
fav.menu_order_num AS MenuOrder, 'Y' AS FavoriteFlag,
FAV.MENU_USER_EMPLID AS MenuUserEmplid,
ITM.MENU_CATEGORY_CODE AS MenuCategoryCode, CAT.CODE_DESCR AS Category,
ITM.TOOL_TIP_TXT AS ToolTip, ITM.VISIBLE_FLAG AS VisibleFlag,
PAG.MENU_PAGE_SEQ_NUM AS MenuPageSeqNum, PAG.PAGE_NAME AS PageName,
PAG.PAGE_LINK_TXT AS PageLink, PAG.APPLICATION_CODE AS ApplicationCode,
APP.CODE_DESCR AS ApplicationPath, PAG.FAVORITE_NAME AS FavoriteName,
PAG.SAVE_PREFERENCES_FLAG AS SavePreferencesFlag, PAG.PRINT_FLAG AS PrintFlag,
PAG.DOWNLOAD_FLAG AS DownloadFlag, PAG.HELP_FLAG AS HelpFlag,
PAG.SAVE_FLAG AS SaveFlag, PAG.INSERT_FLAG AS InsertFlag,
PAG.DELETE_FLAG AS DeleteFlag, PAG.PRINT_TIP_TXT AS PrintTip,
PAG.DOWNLOAD_TIP_TXT AS DownloadTip, PAG.SAVE_TOOLTIP_TXT AS SaveTip,
PAG.DELETE_TOOLTIP_TXT AS DeleteTip, PAG.INSERT_TOOLTIP_TXT AS InsertTip,
'N' as UnsecuredFlag
FROM menu_item itm, menu_favorite fav, MENU_PAGE PAG,
BUSONLINE_APPS_CODE app, MENU_CATEGORY_CODE cat
WHERE ITM.MENU_ITEM_SEQ_NUM = FAV.MENU_ITEM_SEQ_NUM
AND PAG.MENU_PAGE_SEQ_NUM = ITM.MENU_PAGE_SEQ_NUM
AND APP.CODE = PAG.APPLICATION_CODE
AND CAT.CODE = ITM.MENU_CATEGORY_CODE
AND FAV.MENU_USER = :MenuUser
AND FAV.ITEM_INACTIVE_DATE IS NULL