Annotation: policy.get_menu

CREATE OR REPLACE FUNCTION policy.get_menu(user_id_ integer, office_id_ integer, culture_ text)
RETURNS TABLE(menu_id integer, menu_text character varying, url character varying, menu_code character varying, level smallint, parent_menu_id integer)

Information: policy.get_menu

Schema policy
Function Name get_menu
Arguments user_id_ integer, office_id_ integer, culture_ text
Owner postgres
Result Type TABLE(menu_id integer, menu_text character varying, url character varying, menu_code character varying, level smallint, parent_menu_id integer)
Description

Implementation: policy.get_menu

CREATE OR REPLACE FUNCTION policy.get_menu(user_id_ integer, office_id_ integer, culture_ text)
 RETURNS TABLE(menu_id integer, menu_text character varying, url character varying, menu_code character varying, level smallint, parent_menu_id integer)
 LANGUAGE plpgsql
AS $function$
    DECLARE culture_exists boolean = false;
BEGIN
    IF EXISTS(SELECT * FROM core.menu_locale WHERE culture=$3) THEN
        culture_exists := true;
    END IF;

    IF culture_exists THEN
        RETURN QUERY 
        SELECT
            core.menus.menu_id,
            core.menu_locale.menu_text,
            core.menus.url,
            core.menus.menu_code,
            core.menus.level,
            core.menus.parent_menu_id   
        FROM core.menus
        INNER JOIN policy.menu_access
        ON core.menus.menu_id = policy.menu_access.menu_id
        INNER JOIN core.menu_locale
        ON core.menus.menu_id = core.menu_locale.menu_id
        WHERE policy.menu_access.user_id=$1
        AND policy.menu_access.office_id=$2
        AND core.menu_locale.culture=$3;
    ELSE
        RETURN QUERY 
        SELECT
            core.menus.menu_id,
            core.menus.menu_text,
            core.menus.url,
            core.menus.menu_code,
            core.menus.level,
            core.menus.parent_menu_id   
        FROM core.menus
        INNER JOIN policy.menu_access
        ON core.menus.menu_id = policy.menu_access.menu_id
        WHERE policy.menu_access.user_id=$1
        AND policy.menu_access.office_id=$2;
    END IF;

END
$function$