Annotation: public.add_office

CREATE OR REPLACE FUNCTION public.add_office(_office_code character varying, _office_name character varying, _nick_name character varying, _registration_date date, _currency_code character varying, _currency_symbol character varying, _currency_name character varying, _hundredth_name character varying, _admin_name character varying, _user_name character varying, _password character varying)
RETURNS void

Information: public.add_office

Schema public
Function Name add_office
Arguments _office_code character varying, _office_name character varying, _nick_name character varying, _registration_date date, _currency_code character varying, _currency_symbol character varying, _currency_name character varying, _hundredth_name character varying, _admin_name character varying, _user_name character varying, _password character varying
Owner postgres
Result Type void
Description

Implementation: public.add_office

CREATE OR REPLACE FUNCTION public.add_office(_office_code character varying, _office_name character varying, _nick_name character varying, _registration_date date, _currency_code character varying, _currency_symbol character varying, _currency_name character varying, _hundredth_name character varying, _admin_name character varying, _user_name character varying, _password character varying)
 RETURNS void
 LANGUAGE plpgsql
AS $function$
    DECLARE _office_id      integer;
    DECLARE _user_id		integer;
BEGIN
    IF NOT EXISTS
    (
        SELECT 0 
        FROM core.currencies
        WHERE currency_code=_currency_code
    ) THEN
        INSERT INTO core.currencies(currency_code, currency_symbol, currency_name, hundredth_name)
        SELECT _currency_code, _currency_symbol, _currency_name, _hundredth_name;
    END IF;


    INSERT INTO office.offices(office_code, office_name, nick_name, registration_date, currency_code)
    SELECT _office_code, _office_name, _nick_name, _registration_date, _currency_code
    RETURNING office_id INTO _office_id;

    INSERT INTO office.users(role_id, office_id, user_name, password, full_name)
    SELECT office.get_role_id_by_role_code('SYST'), _office_id, 'sys', '', 'System';
    
    INSERT INTO office.users(role_id,office_id,user_name,password, full_name, elevated)
    SELECT office.get_role_id_by_role_code('ADMN'), _office_id, _user_name, _password, _admin_name, true
    RETURNING user_id INTO _user_id;

    INSERT INTO policy.menu_access(office_id, menu_id, user_id)
    SELECT _office_id, core.menus.menu_id, _user_id
    FROM core.menus;

    RETURN;
END;
$function$