_login_id bigint, _user_id integer, _office_id integer, transaction_book text, _value_date date
Owner
postgres
Result Type
boolean
Description
Implementation: policy.can_post_transaction
CREATE OR REPLACE FUNCTION policy.can_post_transaction(_login_id bigint, _user_id integer, _office_id integer, transaction_book text, _value_date date)
RETURNS boolean
LANGUAGE plpgsql
AS $function$
BEGIN
IF(audit.is_valid_login_id(_login_id) = false) THEN
RAISE EXCEPTION 'Invalid LoginId.';
END IF;
IF(office.is_valid_office_id(_office_id) = false) THEN
RAISE EXCEPTION 'Invalid OfficeId.';
END IF;
IF(policy.is_transaction_restricted(_office_id)) THEN
RAISE EXCEPTION 'This establishment does not allow transaction posting.';
END IF;
IF(policy.is_restricted_mode()) THEN
RAISE EXCEPTION 'Cannot post transaction during restricted transaction mode.';
END IF;
IF(_value_date < transactions.get_value_date(_office_id)) THEN
RAISE EXCEPTION 'Past dated transactions are not allowed';
END IF;
IF NOT EXISTS
(
SELECT *
FROM office.users
INNER JOIN office.roles
ON office.users.role_id = office.roles.role_id
WHERE is_system=false
AND user_id = $2
) THEN
RAISE EXCEPTION 'Access is denied. You are not authorized to post this transaction.';
END IF;
RETURN true;
END
$function$