Annotation: transactions.initialize_eod_operation

CREATE OR REPLACE FUNCTION transactions.initialize_eod_operation(_user_id integer, _office_id integer, _value_date date)
RETURNS void

Information: transactions.initialize_eod_operation

Schema transactions
Function Name initialize_eod_operation
Arguments _user_id integer, _office_id integer, _value_date date
Owner postgres
Result Type void
Description

Implementation: transactions.initialize_eod_operation

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$