CREATE OR REPLACE FUNCTION transactions.initialize_eod_operation(_user_id integer, _office_id integer, _value_date date)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE this RECORD;
BEGIN
IF(_value_date IS NULL) THEN
RAISE EXCEPTION 'Value date error.';
END IF;
IF(NOT policy.is_elevated_user(_user_id)) THEN
RAISE EXCEPTION 'Access is denied.';
END IF;
IF(_value_date != transactions.get_value_date(_office_id)) THEN
RAISE EXCEPTION 'Invalid value date.';
END IF;
SELECT * FROM transactions.day_operation
WHERE value_date=_value_date
AND office_id = _office_id INTO this;
IF(this IS NULL) THEN
INSERT INTO transactions.day_operation(office_id, value_date, started_on, started_by)
SELECT _office_id, _value_date, NOW(), _user_id;
ELSE
RAISE EXCEPTION 'EOD operation was already initialized.';
END IF;
RETURN;
END
$function$